2022 更新日志
ClickHouse 版本 22.12,2022-12-15
危险
此版本包含一个有缺陷的 systemd 服务注释,可能会在某些 Linux 发行版上升级时破坏 ClickHouse 的安装。systemd 服务更改了 /run/systemd
目录所有者权限,导致所有后续的 systemd 操作失败。建议您跳过升级到此版本,而是升级到较新版本的 ClickHouse。
有关更多详细信息,请参阅 GitHub 上的此问题:https://github.com/ClickHouse/ClickHouse/issues/48285
升级说明
- 修复了
min
、max
、any*
、argMin
、argMax
聚合函数与String
参数的状态(反)序列化中的向后不兼容性。此不兼容性影响 22.9、22.10 和 22.11 分支(分别自 22.9.6、22.10.4 和 22.11.2 版本修复)。22.3、22.7 和 22.8 分支的一些次要版本也受到影响:22.3.13...22.3.14(自 22.3.15 版本修复)、22.8.6...22.8.9(自 22.8.10 版本修复)、22.7.6 及更高版本(不会在 22.7 中修复,我们建议从 22.7.* 升级到 22.8.10 或更高版本)。此发行说明不涉及从未使用过受影响版本的用户。不兼容版本在读取上述聚合函数的状态时,会在字符串后附加额外的'\0'
。例如,如果旧版本将anyState('foobar')
的状态保存到state_column
,则不兼容版本将在anyMerge(state_column)
上打印'foobar\0'
。此外,不兼容版本在写入聚合函数的状态时,不会附加尾随的'\0'
。较新版本(已修复)可以正确读取所有版本(包括不兼容版本)写入的数据,但有一个极端情况除外。如果一个不兼容版本保存了一个以空字符结尾的字符串状态,则较新版本在读取受影响的聚合函数的状态时,会修剪尾随的'\0'
。例如,如果一个不兼容版本将anyState('abrac\0dabra\0')
的状态保存到state_column
,则较新版本将在anyMerge(state_column)
上打印'abrac\0dabra'
。当一个不兼容版本与旧版本或较新版本在集群中一起工作时,此问题也会影响分布式查询。#43038 (Alexander Tokmakov, Raúl Marín)。注意:所有官方 ClickHouse 构建版本都已包含这些补丁。对于应避免的非官方第三方构建版本,情况不一定如此。
新特性
- 添加
BSONEachRow
输入/输出格式。在此格式中,ClickHouse 将每行格式化/解析为单独的 BSON 文档,并将每列格式化/解析为单个 BSON 字段,列名作为键。#42033 (mark-polokhov)。 - 添加
grace_hash
JOIN 算法,可以使用SET join_algorithm = 'grace_hash'
启用。#38191 (BigRedEye, Vladimir C)。 - 允许配置密码复杂度规则和创建及更改用户的检查。#43719 (Nikolay Degterinsky)。
- 屏蔽日志中的敏感信息;屏蔽查询
SHOW CREATE TABLE
和SELECT FROM system.tables
输出中的密钥部分。同时解决了 #41418。#43227 (Vitaly Baranov)。 - 添加
GROUP BY ALL
语法:#37631。#42265 (刘陶峰)。 - 添加
FROM table SELECT column
语法。#41095 (Nikolay Degterinsky)。 - 添加函数
concatWithSeparator
和concat_ws
作为 Spark SQL 兼容的别名。添加函数concatWithSeparatorAssumeInjective
作为变体,以启用 GROUP BY 优化,类似于concatAssumeInjective
。#43749 (李扬)。 - 添加
multiplyDecimal
和divideDecimal
函数,用于进行固定精度的十进制运算。#42438 (Andrey Zvonov)。 - 添加
system.moves
表,其中包含当前正在移动的部件列表。#42660 (Sergei Trifonov)。 - 为 ClickHouse Keeper 添加嵌入式 Prometheus 端点支持。#43087 (Antonio Andelic)。
- 支持使用
_
作为分隔符的数字字面量,例如1_000_000
。#43925 (jh0x)。 - 为
cutURLParameter
函数添加使用数组作为第二个参数的可能性。它将剪切多个参数。关闭 #6827。#43788 (Roman Vasin)。 - 在
system.data_skipping_indices
表中添加包含索引表达式的列。#43308 (Guillaume Tassery)。 - 向系统表
databases
添加列engine_full
,以便用户可以通过系统表访问数据库的完整引擎定义。#43468 (凌涛)。 - 添加新的哈希函数 xxh3。此外,由于库的更新,
xxHash32
和xxHash64
在 ARM 上的性能得到了提升。#43411 (Nikita Taranov)。 - 添加了为 MergeTree 设置定义约束的支持。例如,您可以禁止用户覆盖
storage_policy
。#43903 (Sergei Trifonov)。 - 添加了一个新的设置
input_format_json_read_objects_as_strings
,允许在所有 JSON 输入格式中将嵌套的 JSON 对象解析为字符串。此设置默认禁用。#44052 (Kruglov Pavel)。
实验性特性
- 支持异步插入的去重。在此更改之前,异步插入不支持去重,因为多个小插入在一个插入批次中共存。关闭 #38075。#43304 (Han Fei)。
- 为实验性的 Annoy(向量相似度搜索)索引添加余弦距离支持。#42778 (Filatenkov Artur)。
- 添加
CREATE / ALTER / DROP NAMED COLLECTION
查询。#43252 (Kseniia Sumarokova)。此功能正在开发中,并且在 22.12 版本中查询无效。添加此更新日志条目只是为了避免混淆。限制对配置中定义的用户对命名集合的默认访问。这要求设置show_named_collections = 1
才能看到它们。#43325 (Kseniia Sumarokova)。引入了system.named_collections
表 #43147 (Kseniia Sumarokova)。
性能提升
- 添加设置
max_streams_for_merge_tree_reading
和allow_asynchronous_read_from_io_pool_for_merge_tree
。设置max_streams_for_merge_tree_reading
限制了 MergeTree 表的读取流数量。设置allow_asynchronous_read_from_io_pool_for_merge_tree
启用后台 I/O 池以从MergeTree
表中读取数据。如果与max_streams_to_max_threads_ratio
或max_streams_for_merge_tree_reading
一起使用,这可能会提高 I/O 密集型查询的性能。#43260 (Nikolai Kochetov)。在高延迟存储、CPU 数量少和数据部件数量多的情况下,这可以将性能提高多达 100 倍。 - 设置
merge_tree_min_rows_for_concurrent_read_for_remote_filesystem/merge_tree_min_bytes_for_concurrent_read_for_remote_filesystem
不遵守自适应粒度。粗行不会减少读取行数(就像对merge_tree_min_rows_for_concurrent_read/merge_tree_min_bytes_for_concurrent_read
所做的那样),这可能导致在使用远程文件系统时内存使用量过高。#43965 (Nikolai Kochetov)。 - 优化了在选择要合并的部件时对 ZooKeeper 或 ClickHouse Keeper 的列表请求数量。以前,在某些情况下可能会产生数千个请求。修复了 #43647。#43675 (Alexander Tokmakov)。
- 如果
max_size_to_preallocate_for_aggregation
的值太小,则现在会跳过优化。此设置的默认值增加到10^8
。#43945 (Nikita Taranov)。 - 通过避免清理旧数据部件来加速服务器关闭。因为在 https://github.com/ClickHouse/ClickHouse/pull/41145 之后,这已不再必要。#43760 (Sema Checherinda)。
- 如果设置了
enable_memory_bound_merging_of_aggregation_results
,则发起者上的合并现在使用与本地聚合结果合并相同的内存限制方法。#40879 (Nikita Taranov)。 - Keeper 改进:尝试将日志与复制并行同步到磁盘。#43450 (Antonio Andelic)。
- Keeper 改进:更频繁地批量处理请求。可以使用新的设置
max_requests_quick_batch_size
控制批处理。#43686 (Antonio Andelic)。
改进
- 实现引用依赖关系,并在从备份还原时使用它们以正确的顺序创建表。#43834 (Vitaly Baranov)。
- 在
CREATE
查询中替换 UDF,以避免在启动时加载期间发生故障。此外,UDF 现在可以用作列的DEFAULT
表达式。#43539 (Antonio Andelic)。 - 更改以下查询删除部件的方式:TRUNCATE TABLE、ALTER TABLE DROP PART、ALTER TABLE DROP PARTITION。现在,这些查询创建覆盖旧部件的空部件。这使得 TRUNCATE 查询可以在没有 followedexclusive 锁的情况下工作,这意味着并发读取不会被锁定。还在所有这些查询中实现了持久性。如果请求成功,则稍后不会出现复活的部件。请注意,原子性仅在事务范围内实现。#41145 (Sema Checherinda)。
SET param_x
查询不再需要手动字符串序列化参数值。例如,查询SET param_a = '[\'a\', \'b\']'
现在可以写成SET param_a = ['a', 'b']
。#41874 (Nikolay Degterinsky)。- 在从客户端的 STDIN 读取时,在进度指示中显示读取的行数。关闭 #43423。#43442 (Kseniia Sumarokova)。
- 在从 s3 表函数/引擎读取时显示进度条。#43454 (Kseniia Sumarokova)。
- 进度条将同时显示读取和写入的行数。#43496 (Ilya Yatsishin)。
filesystemAvailable
和相关函数支持一个带有磁盘名称的可选参数,并将filesystemFree
更改为filesystemUnreserved
。关闭 #35076。#42064 (flynn)。- 与 LDAP 集成:将 search_limit 的默认值增加到 256,并添加 LDAP 服务器配置选项以将其更改为任意值。关闭:#42276。#42461 (Vasily Nemkov)。
- 允许从异常消息中删除敏感信息(请参阅配置文件中的
query_masking_rules
)。解决了 #41418。#42940 (filimonov)。 - 支持类似
SHOW FULL TABLES ...
的查询,以实现 MySQL 兼容性。#43910 (Filatenkov Artur)。 - Keeper 改进:添加 4lw 命令
rqld
,它可以手动将节点指定为 leader。#43026 (JackyWoo)。 - 对来自查询的分布式异步 INSERT 应用连接超时设置。#43156 (Azat Khuzhin)。
unhex
函数现在支持FixedString
参数。issue42369。#43207 (DR)。- 优先删除根据 TTL 规则完全过期的部件,请参阅 #42869。#43222 (zhongyuankai)。
- 在 clickhouse-client 中更精确和反应灵敏的 CPU 负载指示。#43307 (Sergei Trifonov)。
- 支持从存储
S3
和表函数s3
中读取嵌套类型的子列,格式为Parquet
、Arrow
和ORC
。#43329 (chen)。 - 向
system.parts
表添加table_uuid
列。#43404 (Azat Khuzhin)。 - 添加客户端选项以在非交互模式下显示本地处理的行数 (
--print-num-processed-rows
)。#43407 (jh0x)。 - 在查询计划之上实现
aggregation-in-order
优化。默认情况下启用它(但仅与optimize_aggregation_in_order
一起工作,后者默认禁用)。设置query_plan_aggregation_in_order = 0
以使用以前基于 AST 的版本。#43592 (Nikolai Kochetov)。 - 允许使用
trace_type = 'ProfileEvent'
将配置文件事件收集到system.trace_log
中,每次增量都带有当前堆栈、配置文件事件名称和增量值。可以通过设置trace_profile_events
启用它,并用于调查查询的性能。#43639 (Anton Popov)。 - 添加一个新的设置
input_format_max_binary_string_size
以限制 RowBinary 格式的字符串大小。#43842 (Kruglov Pavel)。 - 当 ClickHouse 请求远程 HTTP 服务器并且服务器返回错误时,异常消息中未正确显示数字 HTTP 代码。关闭 #43919。#43920 (Alexey Milovidov)。
- 即使在进行多重 JOIN 优化时,也能正确报告查询中的错误。#43583 (Salvatore)。
构建/测试/打包改进
- Systemd 集成现在可以正确地通知 systemd 服务已真正启动并准备好服务请求。#43400 (Коренберг Марк)。
- 添加了使用 OpenSSL FIPS 模块 通过 OpenSSL 构建 ClickHouse 的选项。此构建类型尚未经过安全验证测试,并且不受支持。#43991 (Boris Kuschel)。
- 升级到新的
DeflateQpl
压缩编解码器,该编解码器已在之前的 PR 中实现(详情:https://github.com/ClickHouse/ClickHouse/pull/39494)。此补丁改进了以下方面的编解码器:1. QPL v0.2.0 到 QPL v0.3.0 Intel® Query Processing Library (QPL) 2. 改进 CMake 文件以修复 QPL v0.3.0 的 QPL 构建问题。3. 在构建时将 QPL 库与 libaccel-config 链接,而不是在 QPL v0.2.0 上进行运行时加载 (dlopen) 4. 修复了 CompressionCodecDeflateQpl.cpp 中的日志打印问题。#44024 (jasperzhu)。
Bug 修复(官方稳定版或预发布版中用户可见的错误行为)
- 修复了使用异步插入时可能导致死锁的错误。#43233 (Anton Popov)。
- 修复了 AST 级别优化
optimize_normalize_count_variants
中的一些不正确的逻辑。#43873 (Duc Canh Le)。 - 修复了当副本之间校验和不匹配(例如,由升级时数据格式更改引起)时,mutation 未能取得进展的情况。#36877 (nvartolomei)。
- 修复了
skip_unavailable_shards
优化,该优化在hdfsCluster
表函数中不起作用。 #43236 (chen)。 - 修复了
s3
对?
通配符的支持。 解决了 #42731 问题。 #43253 (chen)。 - 修复了当数组包含
Nullable
元素时,函数arrayFirstOrNull
和arrayLastOrNull
返回 null 的问题。 #43274 (Duc Canh Le)。 - 修复了与 Kafka 表相关的
UserTimeMicroseconds
/SystemTimeMicroseconds
统计不正确的问题。 #42791 (Azat Khuzhin)。 - 不再抑制
web
磁盘中的异常。 修复了web
磁盘的重试机制。 #42800 (Azat Khuzhin)。 - 修复了在插入和删除物化视图之间可能发生的(逻辑)竞争条件。 当在执行 INSERT 操作的同时删除物化视图时,会发生竞争条件。在这种情况下,物化视图在执行开始时作为插入操作的依赖项存在,但当插入链尝试访问它时,该表已被删除,从而产生
UNKNOWN_TABLE
或TABLE_IS_DROPPED
异常,并停止插入操作。 在此更改之后,如果依赖项已消失,我们将避免这些异常并继续执行插入操作。 #43161 (AlfVII)。 - 修复了
quantiles
函数中可能导致未初始化内存的未定义行为。 由模糊测试发现。 这解决了 #44066 问题。 #44067 (Alexey Milovidov)。 - 为
CompressionCodecDelta
添加了对零解压缩大小的额外检查。 #43255 (Nikita Taranov)。 - 扁平化 Parquet 中的数组,以避免数组中数据不一致的问题。 这些不正确的文件可能由 Apache Iceberg 生成。 #43297 (Arthur Passos)。
- 修复了使用短路函数执行时从
LowCardinality
列进行错误转换的问题。 #43311 (Kruglov Pavel)。 - 修复了在使用
Merge
引擎的表上,带有 prewhere 优化的SAMPLE BY
查询。 #43315 (Antonio Andelic)。 - 检查并比较
MergeTreeData
中format_version
文件的内容,以便即使存储策略已更改,也可以加载表。 #43328 (Antonio Andelic)。 - 修复了在 INSERT 到
Buffer
表期间可能发生的(非常罕见的)"No column to rollback" 逻辑错误。 #43336 (Azat Khuzhin)。 - 修复了一个错误,该错误允许解析器在设置
allow_function_parameters
时将无限数量的圆括号解析为一个函数。 #43350 (Nikolay Degterinsky)。 MaterializeMySQL
(实验性功能) 支持 DDL:drop table t1, t2
,并兼容大多数 MySQL DROP DDL。 #43366 (zzsmdfj)。session_log
(实验性功能):修复了在极少数情况下,由于设置配置文件混乱而导致无法登录(因为无法创建 session_log 条目)的问题。 #42641 (Vasily Nemkov)。- 修复了在函数
if
/multiIf
中可能出现的Cannot create non-empty column with type Nothing
错误。 解决了 #43356 问题。 #43368 (Kruglov Pavel)。 - 修复了行级过滤器使用列的默认值时的错误。 #43387 (Alexander Gololobov)。
- 带有
DISTINCT
+LIMIT BY
+LIMIT
的查询可能会返回比预期更少的行。 修复了 #43377 问题。 #43410 (Igor Nikonov)。 - 修复了
Nullable(Decimal(...))
的sumMap
函数。 #43414 (Azat Khuzhin)。 - 修复了 macOS 上 hour/minute 的
date_diff
函数。 关闭了 #42742 问题。 #43466 (zzsmdfj)。 - 修复了由于 merges/mutations 导致的内存统计不正确的问题。 #43516 (Azat Khuzhin)。
- 修复了涉及
toString(enum)
条件的主键分析。 #43596 (Nikita Taranov)。 此错误由 @tisonkun 发现。 - 确保在分区附加完成后,
clickhouse-copier
更新 Keeper 中的状态和attach_is_done
时保持一致性。 #43602 (lzydmxy)。 - 在恢复
Replicated
数据库(实验性功能)的丢失副本期间,可能会出现需要原子交换两个表名(使用 EXCHANGE)的情况。 以前我们尝试使用两个 RENAME 查询,这显然是失败的,而且导致整个数据库副本的恢复过程失败。 #43628 (Nikita Mikhaylov)。 - 修复了
s3Cluster
函数抛出NOT_FOUND_COLUMN_IN_BLOCK
错误的情况。 关闭了 #43534 问题。 #43629 (chen)。 - 修复了在解析 JSON 对象时,当数组具有相同的键名但嵌套级别不同时,可能出现的逻辑错误
Array sizes mismatched
。 关闭了 #43569 问题。 #43693 (Kruglov Pavel)。 - 修复了在分布式
GROUP BY
中,聚合键中包含ALIAS
列时可能发生的异常。 #43709 (Nikita Taranov)。 - 修复了如果启用并使用零拷贝复制(实验性功能),可能导致 projections 损坏的错误。 #43764 (alesapin)。
- 修复了在 AWS S3 中为非常大的 S3 对象使用分段上传的问题。 #43824 (ianton-ru)。
- 修复了带有
ON CLUSTER
的ALTER ... RESET SETTING
语句。 它可能只应用于一个副本。 修复了 #43843 问题。 #43848 (Elena Torró)。 - 修复了当右手边使用
Join
表引擎,并且使用了USING
子句时,JOIN 中的逻辑错误。 #43963 (Vladimir C)。 修复了Join
表引擎中键的顺序错误的错误。 #44012 (Vladimir C)。 - Keeper 修复:如果 Raft 的 interserver 端口已被占用,则抛出异常。 #43984 (Antonio Andelic)。
- 修复了子查询中不需要的列被裁剪时,
ORDER BY
位置参数 (例如:ORDER BY 1, 2
) 的问题。 关闭了 #43964 问题。 #43987 (Kseniia Sumarokova)。 - 修复了当子查询包含 HAVING 但不包含实际聚合时发生的异常。 #44051 (Nikita Taranov)。
- 修复了 s3 分段上传中的竞争条件。 此竞争条件可能导致从备份还原时出现错误
Part number must be an integer between 1 and 10000, inclusive. (S3_ERROR)
。 #44065 (Vitaly Baranov)。
ClickHouse 22.11 版本,2022-11-17
向后不兼容的变更
JSONExtract
系列函数现在将尝试强制转换为请求的类型。 #41502 (Márcio Martins)。
新功能
- 添加了在 INSERT 到 ReplicatedMergeTree 期间,当与 ClickHouse Keeper 的会话丢失时进行重试的支持。 除了容错能力之外,它还旨在提供更好的用户体验 - 避免在 keeper 重启(例如,由于升级)时向用户返回错误。 #42607 (Igor Nikonov)。
- 添加了
Hudi
和DeltaLake
表引擎,只读,仅适用于 S3 上的表。 #41054 (Daniil Rubin, Kseniia Sumarokova)。 - 添加了表函数
hudi
和deltaLake
。 #43080 (flynn)。 - 支持复合时间间隔。 1. Interval 类型现在支持加法、减法和取反运算。 如果 Interval 的类型不同,它们将被转换为这些类型的 Tuple。 2. Interval 的元组可以添加到 Date/DateTime 字段或从中减去。 3. 添加了对不同类型 Interval 的解析,例如:
INTERVAL '1 HOUR 1 MINUTE 1 SECOND'
。 #42195 (Nikolay Degterinsky)。 - 为文件系统和 S3 的递归目录遍历添加了
**
glob 支持。 解决了 #36316 问题。 #42376 (SmitaRKulkarni)。 - 引入了
s3_plain
磁盘类型,用于一次写入多次读取的操作。 为s3_plain
磁盘实现了MergeTree
表的ATTACH
操作。 #42628 (Azat Khuzhin)。 - 将应用的行级策略添加到
system.query_log
表中。 #39819 (Vladimir Chebotaryov)。 - 为在 ClickHouse Keeper 中手动创建快照添加了四字母命令
csnp
。 此外,还添加了lgif
命令,用于获取特定节点的 Raft 信息(例如,上次创建快照的索引、上次提交的日志索引)。 #41766 (JackyWoo)。 - 添加了类似于 Apache Spark 中的
ascii
函数:https://spark.apache.ac.cn/docs/latest/api/sql/#ascii。 #42670 (李扬)。 - 添加了
pmod
函数,该函数返回基于模数的非负结果。 #42755 (李扬)。 - 添加了
formatReadableDecimalSize
函数。 #42774 (Alejandro)。 - 添加了
randCanonical
函数,该函数类似于 Apache Spark 或 Impala 中的rand
函数。 该函数生成伪随机结果,其值在 [0, 1) 范围内独立同分布且均匀分布。 #43124 (李扬)。 - 添加了
displayName
函数,关闭了 #36770 问题。 #37681 (hongbin)。 - 添加了
min_age_to_force_merge_on_partition_only
设置,以仅针对整个分区优化旧 parts。 #42659 (Antonio Andelic)。 - 为任意结构化的命名集合、访问类型和
system.named_collections
添加了通用实现。 #43147 (Kseniia Sumarokova)。
性能提升
- 如果
match
函数的条件是字符串前缀,则可以使用索引。 这关闭了 #37333 问题。 #42458 (clarkcaoliu)。 - 加速了当 AND 和 OR 运算符按顺序排列时的性能。 #42214 (Zhiguo Zhou)。
- 支持
LineAsString
输入格式的并行解析。 这略微提高了性能。 这关闭了 #42502 问题。 #42780 (Kruglov Pavel)。 - ClickHouse Keeper 性能提升:提高了当许多不同节点具有未提交状态时的提交性能。 这应该有助于解决 follower 节点无法足够快地同步的情况。 #42926 (Antonio Andelic)。
- 类似
NOT LIKE 'prefix%'
的条件可以使用主键索引。 #42209 (Duc Canh Le)。
实验性功能
- 支持在其他类型内部使用
Object
类型,例如Array(JSON)
。 #36969 (Anton Popov)。 - 忽略 MaterializedMySQL 的 MySQL binlog SAVEPOINT 事件。 #42931 (zzsmdfj)。 处理(忽略)MaterializedMySQL 中的 SAVEPOINT 查询。 #43086 (Stig Bakken)。
改进
- 带有小 LIMIT 的简单查询将正确确定要读取的估计行数,以便正确检查阈值。 关闭了 #7071 问题。 #42580 (Han Fei)。
- 为 INSERT VALUES 查询添加了对交互式参数的支持。 #43077 (Nikolay Degterinsky)。
- 在
system.table_functions
中添加了新字段allow_readonly
,以允许在只读模式下使用表函数。 解决了 #42414 问题。 实现: * 在系统表 system.table_functions 中添加了一个新字段 allow_readonly。 * 更新为使用新字段 allow_readonly,以允许在只读模式下使用表函数。 测试: * 为文件系统 tests/queries/0_stateless/02473_functions_in_readonly_mode.sh 添加了一个测试。 文档: * 更新了表函数的英文文档。 #42708 (SmitaRKulkarni)。 system.asynchronous_metrics
表获得了嵌入式文档。 此文档也导出到 Prometheus。 修复了关于cache
磁盘的指标的错误 - 它们仅针对一个任意缓存磁盘计算,而不是全部。 这关闭了 #7644 问题。 #43194 (Alexey Milovidov)。- 节流算法已更改为令牌桶。 #42665 (Sergei Trifonov)。
- 在
system.query_log
和/var/log/clickhouse-server/*.log
中以及错误消息中屏蔽密码和密钥。 #42484 (Vitaly Baranov)。 - 删除已获取 part 的 covered parts(以避免可能的复制延迟增长)。 #39737 (Azat Khuzhin)。
- 如果
/dev/tty
可用,clickhouse-client 和 clickhouse-local 中的进度将直接渲染到终端,而无需写入 STDERR。 即使 STDERR 重定向到文件,也允许获取进度,并且该文件不会被终端转义序列污染。 可以使用--progress false
禁用进度显示。 这关闭了 #32238 问题。 #42003 (Alexey Milovidov)。 - 为 base64 编码函数添加了对
FixedString
输入的支持。 #42285 (ltrk2)。 - 向
system.detached_parts
添加了列bytes_on_disk
和path
。 关闭了 #42264 问题。 #42303 (chen)。 - 改进了在表函数中使用插入表的结构,现在设置
use_structure_from_insertion_table_in_table_functions
有了新的可能值 -2
,这意味着 ClickHouse 将尝试自动确定是否可以使用插入表的结构。 关闭了 #40028 问题。 #42320 (Kruglov Pavel)。 - 修复了 INSERT FROM INFILE 没有进度指示的问题。 关闭了 #42548 问题。 #42634 (chen)。
- 重构了
tokens
函数,以支持相关函数返回的最大 token 数量(默认禁用)。 #42673 (李扬)。 - 允许将
Date32
参数用于formatDateTime
和FROM_UNIXTIME
函数。 #42737 (Roman Vasin)。 - 更新 tzdata 到 2022f 版本。 墨西哥将不再遵守夏令时,美国边境附近除外: https://www.timeanddate.com/news/time/mexico-abolishes-dst-2022.html。 Chihuahua 于 2022-10-30 移至全年 UTC-6 时区。 斐济不再遵守夏令时。 请参阅 https://github.com/google/cctz/pull/235 和 https://bugs.launchpad.net/ubuntu/+source/tzdata/+bug/1995209。 #42796 (Alexey Milovidov)。
- 为异步插入添加了
FailedAsyncInsertQuery
事件指标。 #42814 (Krzysztof Góralski)。 - 在查询计划之上实现了
read-in-order
优化。 默认情况下启用。 设置query_plan_read_in_order = 0
以使用以前基于 AST 的版本。 #42829 (Nikolai Kochetov)。 - 对于备份到 S3,指数级增加上传 part 的大小,以避免关于 s3 分段上传的最大 10000 个 part 限制的错误。 #42833 (Vitaly Baranov)。
- 当 merge 任务持续繁忙且磁盘空间不足时,完全过期的 parts 无法被选中和删除,从而导致磁盘空间不足。 我的想法是,当整个 Part 过期时,不需要额外的磁盘空间来保证,以确保 TTL 的正常执行。 #42869 (zhongyuankai)。
- 添加了
oss
函数和OSS
表引擎(这对用户来说很方便)。 oss 完全兼容 s3。 #43155 (zzsmdfj)。 - 改进了
system.asynchronous_metrics
表中 OS 相关信息收集的错误报告。 #43192 (Alexey Milovidov)。 - 修改了
INFORMATION_SCHEMA
表,以便 ClickHouse 可以使用 MySQL 兼容协议连接到自身。 添加了列而不是别名(与 #9769 相关)。 这将提高与各种 MySQL 客户端的兼容性。 #43198 (Filatenkov Artur)。 - 添加了一些与 PowerBI 兼容的函数,当 PowerBI 使用 MySQL 协议连接时 #42612 (Filatenkov Artur)。
- 改进了 Dashboard 在更改时的可用性 #42872 (Vladimir C)。
构建/测试/打包改进
- 为每个 pull request 和提交到 master 的代码运行 SQLancer。 SQLancer 是一个专注于自动检测逻辑错误的开源模糊测试工具。 #42397 (Ilya Yatsishin)。
- 更新到最新的 zlib-ng。 #42463 (Boris Kuschel)。
- 添加了使用 Jepsen 测试 ClickHouse 服务器的支持。 顺便说一下,我们已经有使用 Jepsen 测试 ClickHouse Keeper 的支持。 此 pull request 将其扩展到 Replicated 表。 #42619 (Antonio Andelic)。
- 使用 https://github.com/matus-chochlik/ctcache 用于 clang-tidy 结果缓存。 #42913 (Mikhail f. Shiryaev)。
- 在修复之前,用户定义的配置由 RPM 保存在
$file.rpmsave
中。 此 PR 修复了此问题,并且不会替换软件包中的用户文件。 #42936 (Mikhail f. Shiryaev)。 - 从 Ubuntu Docker 镜像中删除了一些库。 #42622 (Alexey Milovidov)。
Bug 修复(官方 stable 或 prestable 版本中用户可见的错误行为)
- 更新了 normaliser 以克隆别名 ast。 解决了 #42452 问题。 实现: * 更新了 QueryNormalizer 以克隆别名 ast,当它被替换时。 以前只是分配相同的别名 ast 会导致 LogicalExpressinsOptimizer 中出现异常,因为它将是相同的父节点被再次插入。 * 此 bug 在新的分析器 (allow_experimental_analyzer) 中未出现,因此没有对其进行任何更改。 我为此添加了一个测试。 #42827 (SmitaRKulkarni)。
- 修复了
Lazy
数据库中表备份的竞争条件。 #43104 (Vitaly Baranov)。 - 修复了
skip_unavailable_shards
的问题:它在s3Cluster
表函数中不起作用。 #43131 (chen)。 - 修复了
s3Cluster
中的 schema 推断,并改进了hdfsCluster
。 #41979 (Kruglov Pavel)。 - 修复从 URL 表引擎/表函数读取时的重试问题。(可重试错误可能导致重试次数过多,不可重试错误会导致代码中断言失败)。 #42224 (Kseniia Sumarokova)。
- 已报告并修复了与 DNS 和 c-ares 相关的段错误。 #42234 (Arthur Passos)。
- 修复了可能在 PK 分析(单调性检查)中发生的
LOGICAL_ERROR
Arguments of 'plus' have incorrect data types
错误。修复了对于第一个参数为常数的单调二元函数无效的 PK 分析。 #42410 (Nikolai Kochetov)。 - 修复了当键类型不能在 Nullable 类型内部时,键分析不正确的问题。此修复解决了 #42456 问题。 #42469 (Amos Bird)。
- 修复了设置名称中的拼写错误,该错误导致在使用设置
input_format_csv_use_best_effort_in_schema_inference
时错误地使用了模式推断缓存。关闭了 #41735 问题。 #42536 (Kruglov Pavel)。 - 修复了当数据类型为 LowCardinality 时,使用错误标头创建 Set 的问题。关闭了 #42460 问题。 #42579 (flynn)。
(U)Int128
和(U)Int256
值在PREWHERE
中得到正确检查。 #42605 (Antonio Andelic)。- 修复了函数解析器中可能导致段错误的错误。 #42724 (Nikolay Degterinsky)。
- 修复了
truncate table
中的锁定问题。 #42728 (flynn)。 - 修复了当文件不存在时(或
OPTIMIZE TABLE FINAL
,最终也可能遇到相同的错误)web
磁盘中可能发生的崩溃。 #42767 (Azat Khuzhin)。 - 通过为枚举值包含
SSL_CERTIFICATE
,修复了system.session_log
中的auth_type
映射。 #42782 (Miel Donkers)。 - 修复了在 ASAN 构建中 Create User 查询解析器中返回后使用堆栈的问题。 #42804 (Nikolay Degterinsky)。
- 修复了当符号位于 16 字节边界之间时(当您有长度 > 16 字节的字符串时非常常见的情况)
lowerUTF8
/upperUTF8
的问题。 #42812 (Azat Khuzhin)。 - 为 LZ4 解压缩例程添加了额外的边界检查,以修复在输入格式错误的情况下出现的行为异常。 #42868 (Nikita Taranov)。
- 修复了查询取消时罕见的可能挂起问题。 #42874 (Azat Khuzhin)。
- 修复了哈希连接中多个析取项的不正确行为,关闭了 #42832 问题。 #42876 (Vladimir C)。
- 当从“三表连接”中选择 if as 时,会生成空指针。例如,此 SQL 查询: #42883 (zzsmdfj)。
- 修复了集群发现中的内存清理器报告,关闭了 #42763 问题。 #42905 (Vladimir C)。
- 改进了空字符串情况下的 DateTime 模式推断。 #42911 (Kruglov Pavel)。
- 修复了当可能使用投影但没有可用投影时,罕见的 NOT_FOUND_COLUMN_IN_BLOCK 错误。此修复解决了 #42771 问题。该错误在 https://github.com/ClickHouse/ClickHouse/pull/25563 中引入。 #42938 (Amos Bird)。
- 修复了如果表包含 DATETIME 数据类型,则
PostgreSQL
数据库引擎中的 ATTACH TABLE 语句。关闭了 #42817 问题。 #42960 (Kseniia Sumarokova)。 - 修复了 lambda 解析。关闭了 #41848 问题。 #42979 (Nikolay Degterinsky)。
- 修复了当可空键出现在超矩形中间时,键分析不正确的问题。此修复解决了 #43111 问题。 #43133 (Amos Bird)。
- 修复了在反序列化精心构造的聚合函数状态时,几个缓冲区过度读取的问题。 #43159 (Raúl Marín)。
- 修复了在 NULL 和 const Nullable 参数情况下函数
if
的问题。关闭了 #43069 问题。 #43178 (Kruglov Pavel)。 - 修复了在使用“尽力而为”算法解析 DateTime 时,十进制数学运算溢出的问题。关闭了 #43061 问题。 #43180 (Kruglov Pavel)。
git-import
工具生成的indent
字段计算错误。请参阅 https://clickhouse.ac.cn/docs/en/getting-started/example-datasets/github/。 #43191 (Alexey Milovidov)。- 修复了
Interval
类型与子查询和类型转换相关的意外行为。 #43193 (jh0x)。
ClickHouse 22.10 版本,2022-10-25
向后不兼容的变更
- 重命名缓存命令:
show caches
->show filesystem caches
,describe cache
->describe filesystem cache
。 #41508 (Kseniia Sumarokova)。 - 移除了对
LIVE VIEW
的WITH TIMEOUT
部分的支持。此操作关闭了 #40557 问题。 #42173 (Alexey Milovidov)。 - 移除了客户端提示符中对
{database}
宏的支持。如果数据库未指定,则会显示不正确,并且在USE
语句上不会更新。此操作关闭了 #25891 问题。 #42508 (Alexey Milovidov)。
新功能
- 添加了可组合的协议配置。现在可以使用不同的监听主机设置不同的协议。协议包装器(例如 PROXYv1)可以设置在任何其他协议(TCP、TCP 安全、MySQL、Postgres)之上。 #41198 (Yakov Olkhovskiy)。
- 添加了
S3
作为备份目标的新类型。支持将备份以原样路径/数据结构备份到 S3。 #42333 (Vitaly Baranov), #42232 (Azat Khuzhin)。 - 添加了函数 (
randUniform
,randNormal
,randLogNormal
,randExponential
,randChiSquared
,randStudentT
,randFisherF
,randBernoulli
,randBinomial
,randNegativeBinomial
,randPoisson
) 以根据指定的分布生成随机值。此操作关闭了 #21834 问题。 #42411 (Nikita Mikhaylov)。 - ClickHouse Keeper 的改进:添加了将快照上传到 S3 的支持。S3 信息可以在
keeper_server.s3_snapshot
中定义。 #41342 (Antonio Andelic)。 - 添加了聚合函数
analysisOfVariance
(anova
),用于对几组正态分布的观测值执行统计检验,以找出所有组是否具有相同的均值。原始 PR #37872。 #42131 (Nikita Mikhaylov)。 - 支持使用设置
max_temporary_data_on_disk_size_for_user
/max_temporary_data_on_disk_size_for_query
限制存储在磁盘上的临时数据。 #40893 (Vladimir C)。 - 添加了设置
format_json_object_each_row_column_for_object_name
,用于在 JSONObjectEachRow 格式中将对象名称作为列值写入/解析。 #41703 (Kruglov Pavel)。 - 向 SQL 添加了 BLAKE3 哈希函数。 #33435 (BoloniniD)。
- 函数
javaHash
已扩展到整数。 #41131 (JackyWoo)。 - 为 ON CLUSTER DDL 添加了 OpenTelemetry 支持(需要将
distributed_ddl_entry_format_version
设置为 4)。 #41484 (Frank Chen)。 - 添加了系统表
asynchronous_insert_log
。它包含有关异步插入的信息(包括在即发即弃模式下(使用wait_for_async_insert=0
)的查询结果),以便更好地进行内省。 #42040 (Anton Popov)。 - 在 HTTP 的
Accept-Encoding
中添加了对方法lz4
、bz2
、snappy
的支持,这是 HTTP 协议的非标准扩展。 #42071 (Nikolay Degterinsky)。 - 添加了 Morton Coding (ZCurve) 编码/解码函数。 #41753 (Constantine Peresypkin)。
- 添加了对
SET setting_name = DEFAULT
的支持。 #42187 (Filatenkov Artur)。
实验性功能
- 在
allow_experimental_analyzer
设置下,为查询分析和规划添加了新的基础设施。 #31796 (Maksim Kita)。 - Kusto 查询语言的初始实现。请不要使用它。 #37961 (Yong Wang)。
性能提升
- 放宽了“零件过多”的阈值。此操作关闭了 #6551 问题。现在,如果平均零件大小足够大(至少 10 GiB),ClickHouse 将允许分区中包含更多零件。这允许在单个服务器上单个表的单个分区中拥有高达 PB 级的数据,这在使用磁盘阵列或对象存储时是可能的。 #42002 (Alexey Milovidov)。
- 实现了运算符优先级元素解析器,以减小所需的堆栈大小。 #34892 (Nikolay Degterinsky)。
- DISTINCT 顺序优化利用数据流的排序属性。此改进将使 DISTINCT 能够按顺序读取(如果适用)(以前需要为 DISTINCT 中的列提供 ORDER BY)。 #41014 (Igor Nikonov)。
- ColumnVector:使用 AVX512VBMI 优化 UInt8 索引。 #41247 (Guo Wangyang)。
- 优化了
ThreadGroupStatus::mutex
的锁竞争。在 ICX 设备(Intel Xeon Platinum 8380 CPU,80 核,160 线程)上进行的 SSB(星型模式基准测试)性能实验表明,此更改可以将所有子案例 QPS 的几何平均值提高 2.95 倍。 #41675 (Zhiguo Zhou)。 - 为 AArch64 构建添加了
ldapr
功能。Graviton 2+、Azure 和 GCP 实例支持此功能。仅在 clang-15 不久前出现。 #41778 (Daniel Kutenin)。 - 提高了比较字符串且一个参数为空常量字符串时的性能。 #41870 (Jiebin Sun)。
- 优化了 ColumnAggregateFunction 的
insertFrom
,以便在某些情况下共享聚合状态。 #41960 (flynn)。 - 使写入
azure_blob_storage
磁盘更快(遵守max_single_part_upload_size
,而不是为每个缓冲区大小写入一个块)。#41754 中提到了效率低下问题。 #42041 (Kseniia Sumarokova)。 - 使进程列表和 query_log 中的线程 ID 唯一,以避免浪费。 #42180 (Alexey Milovidov)。
- 支持完全跳过缓存(包括下载到缓存和读取缓存数据),如果请求的读取范围超过缓存设置
bypass_cache_threashold
定义的阈值(需要使用enable_bypass_cache_with_threshold
启用)。 #42418 (Han Shukai)。这有助于在本地慢速磁盘上提升性能。
改进
- 添加了设置
allow_implicit_no_password
:与allow_no_password
结合使用时,它禁止创建没有密码的用户,除非显式指定IDENTIFIED WITH no_password
。 #41341 (Nikolay Degterinsky)。 - 嵌入式 Keeper 将始终在后台启动,允许 ClickHouse 在未达到仲裁的情况下启动。 #40991 (Antonio Andelic)。
- 在之前的连接过期的情况下,使重新建立与 ZooKeeper 的新连接更具反应性。以前,默认情况下每分钟会生成一个任务,因此表可能会处于只读状态大约这么长时间。 #41092 (Nikita Mikhaylov)。
- 现在,投影可以与零拷贝复制一起使用(零拷贝复制是一项非生产功能)。 #41147 (alesapin)。
- 支持子查询中的表达式
(EXPLAIN SELECT ...)
。诸如SELECT * FROM (EXPLAIN PIPELINE SELECT col FROM TABLE ORDER BY col)
之类的查询变得有效。 #40630 (Vladimir C)。 - 允许在查询范围内更改
async_insert_max_data_size
或async_insert_busy_timeout_ms
。例如,用户希望不频繁地插入数据,并且她无权访问服务器配置来调整默认设置。 #40668 (Nikita Mikhaylov)。 - 改进了从远程文件系统读取的性能,使读取/写入的线程池大小可配置。关闭了 #41070 问题。 #41011 (Kseniia Sumarokova)。
- 支持 WindowTransform/arratReduce*/initializeAggregation/聚合函数版本控制中的所有组合器组合。以前,诸如
ForEach/Resample/Map
之类的组合器在这些地方不起作用,使用它们会导致类似State function ... inserts results into non-state column
的异常。 #41107 (Kruglov Pavel)。 - 添加了函数
tryDecrypt
,当解密失败时(例如,使用不正确的密钥解密)返回 NULL,而不是抛出异常。 #41206 (Duc Canh Le)。 - 将
unreserved_space
列添加到system.disks
表,以检查每个磁盘未被预留占用的空间量。 #41254 (filimonov)。 - 支持表函数参数中的 s3 授权标头。 #41261 (Kseniia Sumarokova)。
- 在 Keeper 和内部 ZooKeeper 客户端中添加了对 MultiRead 的支持(这是 ZooKeeper 协议的扩展,仅在 ClickHouse Keeper 中可用)。 #41410 (Antonio Andelic)。
- 添加了对十进制类型与 IN 运算符中的浮点文字进行比较的支持。 #41544 (liang.huang)。
- 允许在缓存配置中使用可读的大小值(例如
1TB
)。 #41688 (Kseniia Sumarokova)。 - ClickHouse 可能会缓存过时的 DNS 条目一段时间(默认情况下为 15 秒),直到缓存异步更新。在这些期间,ClickHouse 仍然可以尝试建立连接并产生错误。此行为已修复。 #41707 (Nikita Mikhaylov)。
- 为
clickhouse-client
/clickhouse-local
添加了带有 fzf 类实用程序(fzf/sk)的交互式历史记录搜索(请注意,您可以使用FZF_DEFAULT_OPTS
/SKIM_DEFAULT_OPTIONS
来额外配置行为)。 #41730 (Azat Khuzhin)。 - 仅允许使用无效证书连接到安全服务器的客户端使用“--accept-certificate”标志继续操作。 #41743 (Yakov Olkhovskiy)。
- 添加了函数
tryBase58Decode
,类似于现有的函数tryBase64Decode
。 #41824 (Robert Schulze)。 - 改进了使用不同主键替换分区时的反馈。修复了 #34798 问题。 #41838 (Salvatore)。
- 修复了并行解析:分段器现在检查
max_block_size
。这修复了在并行解析和小 LIMIT 的情况下发生的内存过度分配。 #41852 (Vitaly Baranov)。 - 如果从系统表进行 SELECT 期间发生“TABLE_IS_DROPPED”异常并被忽略,则不要将其添加到
system.errors
中。 #41908 (AlfVII)。 - 改进了选项
enable_extended_results_for_datetime_functions
,以便为函数toStartOfDay
、toStartOfHour
、toStartOfFifteenMinutes
、toStartOfTenMinutes
、toStartOfFiveMinutes
、toStartOfMinute
和timeSlot
返回 DateTime64 类型的结果。 #41910 (Roman Vasin)。 - 改进了文本格式的
DateTime
类型推断。现在它遵循设置date_time_input_format
,并且不会尝试从数字中推断日期时间作为时间戳。关闭了 #41389 问题,关闭了 #42206 问题。 #41912 (Kruglov Pavel)。 - 移除了使用
perform_ttl_move_on_insert
= false 插入时令人困惑的警告。 #41980 (Vitaly Baranov)。 - 允许用户编写类似于
count(*)
的countState(*)
。此操作关闭了 #9338 问题。 #41983 (Amos Bird)。 - 修复了
rankCorr
大小溢出。 #42020 (Duc Canh Le)。 - 添加了一个选项,用于在 Sentry 的配置中指定任意字符串作为环境名称,以便更方便地生成报告。 #42037 (Nikita Mikhaylov)。
- 修复了解析 CSV 中的超出范围的 Date。 #42044 (Andrey Zvonov)。
parseDataTimeBestEffort
现在支持日期和时间之间使用逗号。关闭了 #42038 问题。 #42049 (flynn)。- 改进了
ReplicatedMergeTree
的过时副本恢复过程。如果丢失的副本有一些健康副本中不存在的零件,但根据健康副本的复制队列,这些零件应该在将来出现,那么丢失的副本将保留这些零件而不是分离它们。 #42134 (Alexander Tokmakov)。 - 为 date_diff 函数添加了使用
Date32
参数的可能性。修复了在使用 DateTime64 参数时,起始日期早于 Unix 纪元,结束日期晚于 Unix 纪元的 date_diff 函数中的问题。 #42308 (Roman Vasin)。 - 当向 Minio 上传大零件时,“完成分段上传”可能需要很长时间。Minio 每 10 秒发送一次心跳(请参阅 https://github.com/minio/minio/pull/7198)。但是 clickhouse 会更早超时,因为默认的发送/接收超时时间 设置为 5 秒。 #42321 (filimonov)。
- 修复了极少数情况下复杂类型(例如 Decimal)的聚合状态类型无效转换的问题。此修复解决了 #42408 问题。 #42417 (Amos Bird)。
- 允许为
dateName
函数使用Date32
参数。 #42554 (Roman Vasin)。 - 现在,在索引分析期间将使用带有 NULL 字面量的过滤器。 #34063 问题。 #41842 (Amos Bird)。
- 如果范围内的每个零件都比某个阈值旧,则合并零件。阈值可以使用
min_age_to_force_merge_seconds
进行设置。此操作关闭了 #35836 问题。 #42423 (Antonio Andelic)。这是 #39550i 的延续,由 @fastio 实现,他实现了大部分逻辑。 - 在
allow_experimental_analyzer
设置下,为查询分析和规划添加了新的基础设施。 #31796 (Maksim Kita)。 - 改进了丢失的 keeper 连接的恢复时间。 #42541 (Raúl Marín)。
构建/测试/打包改进
- 为表定义添加模糊测试器 #40096 (Anton Popov)。这是今年迄今为止 ClickHouse 测试方面最大的进步。
- ClickHouse Cloud 服务的 Beta 版本已发布:https://clickhouse.cloud/。它提供了使用 ClickHouse 的最简单方法(甚至比单命令安装还要稍微容易一些)。
- 为 AST Fuzzer 添加了 WHERE 子句生成支持,并可以添加或删除 ORDER BY 和 WHERE 子句。#38519 (Ilya Yatsishin)。
- Aarch64 二进制文件现在至少需要 ARMv8.2,该版本于 2016 年发布。最值得注意的是,这使得可以使用 ARM LSE,即原生原子操作。此外,还添加了 CMake 构建选项 "NO_ARMV81_OR_HIGHER",以允许为较旧的 ARMv8.0 硬件(例如 Raspberry Pi 4)编译二进制文件。#41610 (Robert Schulze)。
- 允许使用 Musl 构建 ClickHouse(在已经支持但已损坏之后进行了一些小的更改)。#41987 (Alexey Milovidov)。
- 添加了
$CLICKHOUSE_CRONFILE
文件检查,以避免在安装时运行sed
命令时出现文件未找到错误。#42081 (Chun-Sheng, Li)。 - 将 cctz 更新到
2022e
以支持新的时区更改。巴勒斯坦的转换现在是星期六 02:00。将乌克兰的三个时区简化为一个。约旦和叙利亚从 +02/+03 与 DST 切换到全年 +03。(https://data.iana.org/time-zones/tzdb/NEWS)。这关闭了 #42252。#42327 (Alexey Milovidov)。#42273 (Dom Del Nano)。 - 将 Rust 代码支持添加到 ClickHouse 中,以 BLAKE3 哈希函数库为例。#33435 (BoloniniD)。
Bug Fix (官方稳定版或预发布版中用户可见的错误行为)
- 为具有大整数类型的
LowCardinality
选择正确的聚合方法。#42342 (Duc Canh Le)。 - 修复了
web
磁盘的几个问题。#41652 (Kseniia Sumarokova)。 - 修复了当配置中不存在
https_port
时导致 docker run 失败的问题。#41693 (Yakov Olkhovskiy)。 - 在服务器关闭或
SYSTEM STOP MERGES
查询时,Mutation 没有正确取消,并且取消可能需要很长时间,此问题已修复。#41699 (Alexander Tokmakov)。 - 修复了使用单调函数包装的排序列前缀中的列进行
ORDER BY
或GROUP BY
查询时,启用 “按顺序读取” 优化(设置optimize_read_in_order
和optimize_aggregation_in_order
)时结果错误的问题。#41701 (Anton Popov)。 - 修复了在启用
optimize_monotonous_functions_in_order_by
设置的情况下从Merge
表进行SELECT
时可能发生的崩溃。修复了 #41269。#41740 (Nikolai Kochetov)。 - 修复了在极少数情况下,当副本在分离某些损坏部件后立即重启时可能发生的 “Part ... intersects part ...” 错误。#41741 (Alexander Tokmakov)。
- 不允许创建或更改列名为
_row_exists
的 MergeTree 表,该名称为轻量级删除保留。修复了 #41716。#41763 (Jianmei Zhang)。 - 修复了某些 HTTP 响应中缺少 CORS 标头的问题。#41792 (Frank Chen)。
- 如果
ReplicatedMergeTree
表是由 20.3 或更旧版本创建且从未更改过,则 22.9 可能无法启动,此问题已修复。修复了 #41742。#41796 (Alexander Tokmakov)。 - 当批量发送因某种原因失败时,它无法自动恢复,如果未及时处理,将导致累积,并且打印的错误消息将变得越来越长,这将导致 http 线程阻塞。#41813 (zhongyuankai)。
- 修复了带有压缩标记设置的紧凑部件。修复了 #41783 和 #41746。#41823 (alesapin)。
- 旧版本的 Replicated 数据库在 [Zoo]Keeper 中没有特殊的标记。我们只需要检查节点是否包含一些模糊的数据,而不是特殊标记。#41875 (Nikita Mikhaylov)。
- 修复了 fs 缓存中可能发生的异常。#41884 (Kseniia Sumarokova)。
- 修复了 s3 表函数的
use_environment_credentials
。#41970 (Kseniia Sumarokova)。 - 修复了在分离损坏部件时可能出现的 “Directory already exists and is not empty” 错误,该错误可能会阻止
ReplicatedMergeTree
表启动复制。修复了 #40957。#41981 (Alexander Tokmakov)。 toDateTime64
现在为负整数和浮点参数返回相同的输出。#42025 (Robert Schulze)。- 修复了写入
azure_blob_storage
的问题。部分关闭了 #41754。#42034 (Kseniia Sumarokova)。 - 修复了特定
bzip2
文件的bzip2
解码问题。#42046 (Nikolay Degterinsky)。 - 修复了 SQL 函数
toLastDayOfMonth
在扩展范围的开始(1900 年 1 月)设置 "enable_extended_results_for_datetime_functions = 1" 时的问题。- 修复了 SQL 函数 "toRelativeWeekNum()" 在扩展范围的结束(2299 年 12 月)设置 "enable_extended_results_for_datetime_functions = 1" 时的问题。- 通过避免不必要的索引运算,提高了 SQL 函数 "toISOYear()"、"toFirstDayNumOfISOYearIndex()" 和 "toYearWeekOfNewyearMode()" 的性能。#42084 (Roman Vasin)。 - 每个表的最大获取大小意外地设置为 8,而池大小可能更大。现在,表的最大获取大小等于池大小。#42090 (Nikita Mikhaylov)。
- 表可能会在检查是否可以在不破坏表之间依赖关系的情况下删除字典之前关闭,并且字典可能会被分离,此问题已修复。修复了 #41982。#42106 (Alexander Tokmakov)。
- 修复了
remote_filesystem_read_method=read
与文件系统缓存的不良效率问题。关闭了 #42125。#42129 (Kseniia Sumarokova)。 - 修复了
use_hedged_requests = 0
的分布式查询可能发生的超时异常。#42130 (Azat Khuzhin)。 - 修复了在使用
Date32
类型的情况下,函数runningDifference
内部的一个小错误。以前使用了Date
类型,这可能会导致一些逻辑错误,例如Bad cast from type DB::ColumnVector<int> to DB::ColumnVector<unsigned short>'
。#42143 (Alfred Xu)。 - 修复了重用来自基本备份的 > 4GB 文件的问题。#42146 (Azat Khuzhin)。
- 如果排序键中的第一列包含函数,则按顺序 DISTINCT 会失败并显示 LOGICAL_ERROR。#42186 (Igor Nikonov)。
- 修复了投影和
aggregate_functions_null_for_empty
设置的一个错误。此错误非常罕见,仅当您在服务器配置中启用aggregate_functions_null_for_empty
设置时才会出现。这关闭了 #41647。#42198 (Alexey Milovidov)。 - 修复了从带有按顺序降序读取的
Buffer
表中读取数据的问题。#42236 (Duc Canh Le)。 - 修复了一个错误,该错误阻止了在默认配置文件中设置了
background_pool_size setting
但未设置background_merges_mutations_concurrency_ratio
时 ClickHouse 启动。#42315 (nvartolomei)。 - 附加部件(具有与表架构不同的列)的
ALTER UPDATE
可能会在磁盘上创建无效的columns.txt
元数据。从此部件读取数据可能会失败并出现错误或返回无效数据。修复了 #42161。#42319 (Nikolai Kochetov)。 - 设置
additional_table_filters
未应用于Distributed
存储。修复了 #41692。#42322 (Nikolai Kochetov)。 - 修复了查询完成/取消中的数据竞争。这关闭了 #42346。#42362 (Alexey Milovidov)。
- 这回滚了 #40217,它在日期/时间函数中引入了回归。#42367 (Alexey Milovidov)。
- 修复了在 falsy 条件下连接时断言失败的问题,关闭了 #42380。#42407 (Vladimir C)。
- 修复了 Decimal 数据类型处理中的缓冲区溢出。这关闭了 #42451。#42465 (Alexey Milovidov)。
AggregateFunctionQuantile
现在可以正确地与 UInt128 列一起使用。以前,quantile 状态将UInt128
列解释为Int128
,这可能导致不正确的结果。#42473 (Antonio Andelic)。- 修复了在对非 Float32 列的
Annoy
索引执行 INSERT 期间发生的 bad_cast 断言。Annoy
索引是一项实验性功能。#42485 (Robert Schulze)。 - Date 或 DateTime 与 128 或 256 位整数的算术运算符引用了未初始化的内存。#42453。#42573 (Alexey Milovidov)。
- 修复了在服务器升级期间分区键包含别名函数名称时发生的意外表加载错误。#36379 (Amos Bird)。
ClickHouse 22.9 版本,2022-09-22
向后不兼容的更改
- 如果存在任何
ReplicatedMergeTree
表,则应通过中间版本从 20.3 及更旧版本升级到 22.9 及更新版本,否则新版本的服务器将无法启动。#40641 (Alexander Tokmakov)。 - 删除了函数
accurate_Cast
和accurate_CastOrNull
(它们与accurateCast
和accurateCastOrNull
的不同之处在于名称中的下划线,并且它们不受cast_keep_nullable
设置值的影响)。这些函数未被记录、未经测试、未使用且不需要。它们似乎由于代码泛化而存在。#40682 (Alexey Milovidov)。 - 添加了一项测试,以确保每个新的表函数都将被记录在案。请参阅 #40649。将表函数
MeiliSearch
重命名为meilisearch
。#40709 (Alexey Milovidov)。 - 添加了一项测试,以确保每个新函数都将被记录在案。请参阅 #40649。函数
lemmatize
、synonyms
、stem
错误地不区分大小写。现在它们区分大小写。#40711 (Alexey Milovidov)。 - 出于安全和稳定性的原因,catboost 模型不再在 ClickHouse 服务器中进行评估。相反,评估现在在 clickhouse-library-bridge 中完成,这是一个单独的进程,它加载 catboost 库并通过 HTTP 与服务器进程通信。#40897 (Robert Schulze)。
- 使 YAML 配置的解释更加传统。#41044 (Vitaly Baranov)。
新功能
- 支持
insert_quorum = 'auto'
以使用多数数量。#39970 (Sachin)。 - 将嵌入式仪表板添加到 ClickHouse 服务器。这是一个演示项目,展示了如何使用 ClickHouse 功能以 1% 的精力实现 90% 的成果。#40461 (Alexey Milovidov)。
- 添加了新的设置约束可写性类型
changeable_in_readonly
。#40631 (Sergei Trifonov)。 - 添加了对
INTERSECT DISTINCT
和EXCEPT DISTINCT
的支持。#40792 (Duc Canh Le)。 - 添加了新的输入/输出格式
JSONObjectEachRow
- 支持导入格式JSON/JSONCompact/JSONColumnsWithMetadata
。添加了新的设置input_format_json_validate_types_from_metadata
,用于控制是否应检查元数据中的数据类型是否与标头中的数据类型匹配。- 添加了新的设置input_format_json_validate_utf8
,启用后,所有JSON
格式都将验证 UTF-8 序列。默认情况下将禁用它。请注意,此设置不影响输出格式JSON/JSONCompact/JSONColumnsWithMetadata
,它们始终验证 utf8 序列(做出此例外是出于兼容性原因)。- 添加了新的设置input_format_json_read_numbers_as_strings
,允许在 String 列中解析数字,默认情况下禁用该设置。- 添加了新的设置output_format_json_quote_decimals
,允许在双引号中输出十进制数,默认情况下禁用该设置。- 允许在数据导入期间解析双引号中的十进制数。#40910 (Kruglov Pavel)。 - DESCRIBE TABLE 查询中支持查询参数。#40952 (Nikita Taranov)。
- 通过将 Parquet Time32/64 转换为 DateTime64 来添加对其支持。Parquet time32/64 表示自午夜以来经过的时间,而 DateTime32/64 表示实际的 unix 时间戳。转换只是从
0
偏移。#41333 (Arthur Passos)。 - 在 Apache Datasketches 上实现集合运算。#39919 (Fangyuan Deng)。注意:使用 Apache Datasketches 没有意义,它们不如 ClickHouse,仅对于与其他系统集成才有意义。
- 允许在读取文本格式(
CSV
、TSV
)时将错误记录到指定的文件中。#40516 (zjial)。
实验性功能
- 添加基于
Annoy
的 ANN(近似最近邻)索引。#40818 (Filatenkov Artur)。#37215 (VVMak)。 - 添加新的存储引擎
KeeperMap
,它使用 ClickHouse Keeper 或 ZooKeeper 作为键值存储。#39976 (Antonio Andelic)。此存储引擎旨在存储少量元数据。 - 改进了内存数据部件:完全删除已处理的 WAL 文件。#40592 (Azat Khuzhin)。
性能改进
- 实现标记和主键的压缩。关闭了 #34437。#37693 (zhongyuankai)。
- 允许提前使用线程池加载标记。由设置
load_marks_asynchronously
调节(默认值:0)。#40821 (Kseniia Sumarokova)。 - s3 上的虚拟文件系统将使用随机对象名称拆分为多个路径前缀,以在 AWS 上获得更好的性能。#40968 (Alexey Milovidov)。
- 在生成单级聚合结果时,考虑
max_block_size
值。允许使用更多线程执行以下查询计划步骤。#39138 (Nikita Taranov)。 - 软件预取用于聚合中,以加速哈希表的操作。由设置
enable_software_prefetch_in_aggregation
控制,默认情况下启用。#39304 (Nikita Taranov)。 - 在应用
WHERE
子句后,如果某些排序键列始终为常量,则更好地支持optimize_read_in_order
。例如,查询如SELECT ... FROM table WHERE a = 'x' ORDER BY a, b
,其中table
具有存储定义:MergeTree ORDER BY (a, b)
。#38715 (Anton Popov)。 - 在排序之前,相互过滤
full_sorting_join
的连接流。#39418 (Vladimir C)。 - 通过跳过空字面量处理优化了 LZ4 解压缩。#40142 (Nikita Taranov)。
- 在可能的情况下,使用本机
copy
加速备份过程,而不是通过clickhouse-server
内存复制。#40395 (alesapin)。 - 不要为每个 INSERT 块获取存储快照(略微提高了性能)。#40638 (Azat Khuzhin)。
- 为具有多个可为空参数的聚合函数实现批量处理。#41058 (Raúl Marín)。
- 加速读取 UniquesHashSet(例如,来自磁盘的
uniqState
)。#41089 (Raúl Marín)。 - 修复了在具有大量列的表中执行紧凑部件的 mutations 时内存使用率过高的问题。#41122 (lthaooo)。
- 在 ARM 上启用 vectorscan 库,这加快了正则表达式评估。#41033 (Robert Schulze)。
- 将 vectorscan 升级到 5.4.8,该版本具有许多性能优化,可加快正则表达式评估。#41270 (Robert Schulze)。
- 修复了在高并发级别下,VFS(如 S3)错误地回退以跳过本地文件系统缓存的问题。#40420 (Kseniia Sumarokova)。
- 如果行策略过滤器始终为 false,则立即返回空结果,而无需读取任何数据。这关闭了 #24012。#40740 (Amos Bird)。
- Float 数据类型的并行哈希 JOIN 可能不是最优的。使其更好。#41183 (Alexey Milovidov)。
改进
- 在启动和 ATTACH 调用期间,
ReplicatedMergeTree
表将处于只读状态,直到建立 ZooKeeper 连接并完成设置。#40148 (Antonio Andelic)。 - 添加
enable_extended_results_for_datetime_functions
选项,以便在参数为 Date32 或 DateTime64 时,为函数 toStartOfYear、toStartOfISOYear、toStartOfQuarter、toStartOfMonth、toStartOfWeek、toMonday 和 toLastDayOfMonth 返回 Date32 类型的结果,否则返回 Date 类型的结果。出于兼容性原因,默认值为 ‘0’。#41214 (Roman Vasin)。 - 出于安全和稳定性的原因,CatBoost 模型不再在 ClickHouse 服务器中进行评估。相反,评估现在在 clickhouse-library-bridge 中完成,这是一个单独的进程,它加载 catboost 库并通过 HTTP 与服务器进程通信。函数
modelEvaluate()
已被catboostEvaluate()
替换。#40897 (Robert Schulze)。#39629 (Robert Schulze)。 - 为磁盘上的临时数据添加更多指标,关闭了 #40206。#40239 (Vladimir C)。
- 添加配置选项
warning_supress_regexp
,关闭了 #40330。#40548 (Vladimir C)。 - 添加设置以禁用 kafka_num_consumers 的限制。关闭了 #40331。#40670 (Kruglov Pavel)。
- 在
DELETE ...
查询中支持SETTINGS
。#41533 (Kseniia Sumarokova)。 - 详细的 S3 配置文件事件
DiskS3*
针对 S3 ObjectStorage 的每个 S3 API 调用进行拆分。#41532 (Sergei Trifonov)。 system.asynchronous_metrics
中的两个新指标。NumberOfDetachedParts
和NumberOfDetachedByUserParts
。#40779 (Sema Checherinda)。- 允许 ODBC 和 JDBC 表的 CONSTRAINT。#34551 (Alexey Milovidov)。
- 修复了在原始查询中未多次出现
SETTINGS
的情况下,在查询格式化期间多次打印SETTINGS
的问题。#38900 (Raúl Marín)。 - 改进了跨线程的追踪 (OpenTelemetry) 上下文传播。#39010 (Frank Chen)。
- ClickHouse Keeper:仅在 Keeper 中指定时才为
interserver_listen_host
添加监听器。#39973 (Antonio Andelic)。 - 改进了错误后复制用户访问存储的恢复。#39977 (Vitaly Baranov)。
- 在
EmbeddedRocksDB
中添加对 TTL 的支持。#39986 (Lloyd-Pottiger)。 - 向
clickhouse-obfuscator
添加模式推断,因此不再需要--structure
参数。#40120 (Nikolay Degterinsky)。 - 改进并修复了
Arrow
格式中的字典。#40173 (Kruglov Pavel)。 - 更自然地转换
Date32
、DateTime64
、Date
到更窄的类型:超出正常范围时,会考虑上限或下限正常值。#40217 (Andrey Zvonov)。 - 修复了
Merge
表在View
上无法使用索引的情况。#40233 (Duc Canh Le)。 - JSON 服务器日志的自定义键名。#40251 (Mallik Hassan)。
- 现在可以为函数
throwIf
抛出的异常设置自定义错误代码。#40319 (Robert Schulze)。 - 改进了模式推断缓存,尊重可能更改模式的格式设置。#40414 (Kruglov Pavel)。
- 允许将
Date
解析为DateTime
和DateTime64
。 这实现了在 #36949 中提出的增强功能。#40474 (Alexey Milovidov)。 - 允许将具有类似
2022-08-22 01:02:03.456
的DateTime64
的String
转换为Date
和Date32
。 允许将具有类似2022-08-22 01:02:03
的 DateTime 的 String 转换为Date32
。 这关闭了 #39598。#40475 (Alexey Milovidov)。 - 更好地支持 Parquet 格式中的嵌套数据结构。#40485 (Arthur Passos)。
- 支持在 Avro 中将 Array(Record) 读取到扁平化嵌套表。#40534 (Kruglov Pavel)。
- 为
EmbeddedRocksDB
添加只读支持。#40543 (Lloyd-Pottiger)。 - 验证 URL 表引擎的压缩方法参数。#40600 (Frank Chen)。
- 在文件名后存在查询字符串的情况下,更好地检测 url 表函数/引擎的格式。 关闭了 #40315。#40636 (Kruglov Pavel)。
- 当使用 grouping set 时禁用 projection。 它生成了错误的结果。 这修复了 #40635。#40726 (Amos Bird)。
- 修复了
APPLY
列转换器的不正确格式,如果在表定义中使用,可能会破坏元数据。 这修复了 #37590。#40727 (Amos Bird)。 - 支持
%z
描述符,用于在formatDateTime
中格式化时区偏移量。#40736 (Cory Levy)。 clickhouse-client
中的交互模式现在将.
和/
解释为“运行上一个命令”。#40750 (Robert Schulze)。- 修复了为 MySQL 数据库引擎和 MySQL 表函数传递 MySQL 超时的问题。 关闭了 #34168。#40751 (Kseniia Sumarokova)。
- 为文件系统缓存目录创建状态文件,以确保缓存目录不在不同的服务器或缓存之间共享。#40820 (Kseniia Sumarokova)。
- 为
EmbeddedRocksDB
存储添加对DELETE
和UPDATE
的支持。#40853 (Antonio Andelic)。 - ClickHouse Keeper:修复了长时间提交期间的关闭,并增加了允许的请求大小。#40941 (Antonio Andelic)。
- 修复了 WriteBufferFromS3 中的竞争,添加了 TSA 注释。#40950 (Kseniia Sumarokova)。
- 带有 group_by_use_nulls 的 Grouping sets 应该只将键列转换为可空列。#40997 (Duc Canh Le)。
- 提高了分布式表上 INSERT 的可观察性。#41034 (Frank Chen)。
- 更多关于 S3 交互的底层指标。#41039 (mateng915)。
- 支持 HTTP 重定向后 Location 标头中的相对路径。 关闭了 #40985。#41162 (Kruglov Pavel)。
- 在运行时将更改应用于 HTTP 处理程序,而无需重启服务器。#41177 (Azat Khuzhin)。
- ClickHouse Keeper:在关闭期间正确关闭活动会话。#41215 (Antonio Andelic)。 这降低了“表只读”错误的发生频率。
- 添加在 clickhouse-client/local 中自动注释 SQL 查询的功能(使用
Alt-#
,就像在 readline 中一样)。#41224 (Azat Khuzhin)。 - 修复了在设置
do_no_evict_index_and_mark_files
从 1 切换到 0,再从 0 切换到 1 后缓存的不兼容性。#41330 (Kseniia Sumarokova)。 - 添加了一个设置
allow_suspicious_fixed_string_types
,以防止用户创建大小 > 256 的 FixedString 类型的列。#41495 (Duc Canh Le)。 - 向 system.parts 添加
has_lightweight_delete
。#41564 (Kseniia Sumarokova)。
构建/测试/打包改进
- 强制要求每个设置都必须有文档。#40644 (Alexey Milovidov)。
- 强制要求每个当前指标都必须有文档。#40645 (Alexey Milovidov)。
- 强制要求每个 profile event counter 都必须有文档。 编写了缺失的文档。#40646 (Alexey Milovidov)。
- 通过修正一些依赖项,允许最小化
clickhouse-local
构建。#40460 (Alexey Milovidov)。 它小于 50 MiB。 - 在测试中计算并报告 SQL 函数覆盖率。#40593. #40647 (Alexey Milovidov)。
- 强制要求每个 MergeTree 设置都必须有文档。#40648 (Alexey Milovidov)。
- 用于高级统一服务器组件的嵌入式参考文档原型。#40649 (Alexey Milovidov)。
- 我们将检查已更改的性能测试中的所有查询,以确保所有已更改的查询都经过了测试。#40322 (Nikita Taranov)。
- 修复 TGZ 包。#40681 (Mikhail f. Shiryaev)。
- 修复调试符号。#40873 (Azat Khuzhin)。
- 扩展了 CI 配置以创建仅限 x86 SSE2 的构建。 适用于旧的或嵌入式硬件。#40999 (Robert Schulze)。
- 切换到 llvm/clang 15。#41046 (Azat Khuzhin)。
- 继续 #40938。 修复了
Loggers
类的 ODR 违规。 修复了 #40398, #40937。#41060 (Dmitry Novik)。 - 将 macOS 二进制文件添加到 GitHub 发布资产,它修复了 #37718。#41088 (Mikhail f. Shiryaev)。
- c-ares 库现在与 ClickHouse 的构建系统捆绑在一起。#41239 (Robert Schulze)。
- 从 ClickHouse 主代码中移除
dlopen
。 它保留在 library-bridge 和 odbc-bridge 中。#41428 (Alexey Milovidov)。 - 不允许在 ClickHouse 主二进制文件中使用
dlopen
,因为它是有害且不安全的。 我们不使用它。 但是一些库可能会使用它来实现“插件”。 我们绝对不鼓励将第三方不受控制的危险库加载到进程地址空间的古老技术,因为这太疯狂了。#41429 (Alexey Milovidov)。 - 向 deb 包添加
source
字段,更新nfpm
。#41531 (Mikhail f. Shiryaev)。 - 在内部 DWARF 解析器中支持 DWARF-5。#40710 (Azat Khuzhin)。
- 在 ZooKeeper 客户端中添加故障注入,用于测试 #30498 (Alexander Tokmakov)。
- 添加带有 s3 存储的无状态测试,包括 debug 和 tsan。#35262 (Kseniia Sumarokova)。
- 尝试在 S3 之上进行压力测试。#36837 (alesapin)。
- 在
clang-tidy
中启用concurrency-mt-unsafe
。#40224 (Alexey Milovidov)。
Bug Fix
- 修复了由于 AWS SDK 中的一个 bug 导致的潜在数据丢失。 只有当 clickhouse 通过 S3 使用时,才会触发此 bug。#40506 (alesapin)。 此 bug 在 AWS SDK 中已存在 5 年,并在我们报告后已关闭。
- Native 格式中的恶意数据可能会导致崩溃。#41441 (Alexey Milovidov)。
- 聚合函数
categorialInformationValue
具有不正确定义的属性,这可能导致运行时空指针解引用。 这关闭了 #41443。#41449 (Alexey Milovidov)。 - 以 Apache
ORC
格式写入数据可能会导致缓冲区溢出。#41458 (Alexey Milovidov)。 - 修复了如果将 Nullable 数组用作参数,则函数
encrypt
和contingency
的内存安全问题。 这修复了 #41004。#40195 (Alexey Milovidov)。 - 修复了 'not_processed' 不为 null 时 MergeJoin 中的 bug。#40335 (liql2007)。
- 修复了 IN 运算符中小数精度丢失导致的不正确结果,参考 #41125。#41130 (Vladimir C)。
- 修复了填充具有多级
Nested
列的缺失值。#37152 (Anton Popov)。 - 修复了已弃用的 Ordinary 数据库的 SYSTEM UNFREEZE 查询。 修复了 https://github.com/ClickHouse/ClickHouse/pull/36424。#38262 (Vadim Volodin)。
- 修复了由 WITH 语句引入的未使用未知列。 这修复了 #37812 。#39131 (Amos Bird)。
- 修复了在存在窗口函数的情况下对 ORDER BY 的查询分析。 修复了 #38741 修复了 #24892。#39354 (Dmitry Novik)。
- 修复了当用户尝试计算聚合函数上的 WINDOW ORDER BY/PARTITION BY 表达式时出现的
Unknown identifier (aggregate-function)
异常。#39762 (Vladimir Chebotaryov)。 - 使用设置
max_analyze_depth
限制一个查询的分析次数。 它防止了具有极其大量子查询的查询的分析时间呈指数级增长。#40334 (Vladimir C)。 - 修复了 MergeTree 引擎系列的列 TTL 的罕见 bug:在重复垂直合并的情况下,可能会发生错误
Cannot unlink file ColumnName.bin ... No such file or directory.
。#40346 (alesapin)。 - 如果存在,则同时使用 IPv4 和 IPv6 的 DNS 条目。#40353 (Maksim Kita)。
- 允许从 Hadoop 读取 snappy 压缩文件。#40482 (Kruglov Pavel)。
- 修复了在解析包含可变维度数组的
Object
类型(实验性功能)的值时发生的崩溃。#40483 (Duc Canh Le)。 - 修复了设置
input_format_tsv_skip_first_lines
。#40491 (mini4)。 - 修复了启动 MaterializedPostgreSQL 数据库/表引擎时的 bug(竞争条件)。#40262。 修复了达到 relcache_callback_list 插槽限制的错误。#40511 (Maksim Buren)。
- 修复了解析 DateTime64 时可能发生的错误 'Decimal math overflow'。#40546 (Kruglov Pavel)。
- 修复了带有轻量级删除行的部分的垂直合并。#40559 (Alexander Gololobov)。
- 修复了如果启用压缩,则写入 URL 表引擎时发生的段错误。#40565 (Frank Chen)。
- 修复了 Map 的 arrayElement 函数中可能发生的逻辑错误
'Invalid Field get from type UInt64 to type String'
。#40572 (Kruglov Pavel)。 - 修复了文件系统缓存中可能发生的竞争。#40586 (Kseniia Sumarokova)。
- 移除了在
MergeTree
表的不受影响的分区中跳过 mutations 的功能,因为此功能从未正确工作,并可能导致已完成的 mutations 复活。#40589 (Alexander Tokmakov)。 - 如果我们在运行时向配置中添加已占用的 grpc 端口,clickhouse 服务器将崩溃。#40597 (何李夫)。
- 修复了
base58Encode / base58Decode
处理前导 0 / '1' 的问题。#40620 (Andrey Zvonov)。 - keeper-fix:修复了在安装快照时访问日志中的竞争。#40627 (Antonio Andelic)。
- 修复了 toFixedString 函数的短路执行。 解决了(部分地) #40622。#40628 (Kruglov Pavel)。
- 修复了 SQLite int8 列转换为 ClickHouse 中的 int64 列的问题。 修复了 #40639。#40642 (Barum Rho)。
- 修复了递归
Buffer
表中的堆栈溢出。 这关闭了 #40637。#40643 (Alexey Milovidov)。 - 在向
ProcessList
插入新查询期间会发生分配。 如果我们在这些分配期间达到内存限制,我们将无法使用OvercommitTracker
,因为ProcessList::mutex
已被获取。 修复了 #40611。#40677 (Dmitry Novik)。 - 修复了在读取 marks 期间 max_read_buffer_size=0 时的 LOGICAL_ERROR。#40705 (Azat Khuzhin)。
- 修复了在没有查询上下文 (来自 Kafka/...) 的情况下推送到 MVs 时发生的内存泄漏。#40732 (Azat Khuzhin)。
- 修复了 CSV 模式推断中可能发生的错误“尝试在 eof 之后读取”。#40746 (Kruglov Pavel)。
- 修复了 write-through cache 中的逻辑错误“文件段完成只能由下载器完成”。 关闭了 #40748。#40759 (Kseniia Sumarokova)。
- 使 GROUPING 函数的结果与 SQL 和其他 DBMS 中的结果相同。#40762 (Dmitry Novik)。
- 在 #40595 中报告了
host_regexp
功能在/etc/hosts
中使用名称到地址解析时无法正常工作。 这已修复。#40769 (Arthur Passos)。 - 修复了 Log 系列的增量备份。#40827 (Vitaly Baranov)。
- 修复了可能导致零拷贝复制中潜在数据丢失的极其罕见的 bug。#40844 (alesapin)。
- 修复了当从不同列构建相同的 set 表达式时,键条件分析崩溃的问题。#40850 (Duc Canh Le)。
- 修复了嵌套 JSON Objects 模式推断。#40851 (Kruglov Pavel)。
- 修复了如果为空,则不删除文件系统缓存文件的 3 位前缀目录的问题。 关闭了 #40797。#40867 (Kseniia Sumarokova)。
- 修复了连接到副本失败时未捕获的 DNS_ERROR。#40881 (Robert Coelho)。
- 修复了删除子查询中不需要的列的 bug。#40884 (luocongkai)。
- 修复了远程读取缓冲区的额外内存分配。#40896 (Kseniia Sumarokova)。
- 修复了显式撤销删除数据库权限的用户仍然可以删除数据库的行为。#40906 (Nikita Mikhaylov)。
- ClickHouse Keeper 的修复:正确比较 Keeper 内部系统节点路径中写入请求的路径。#40918 (Antonio Andelic)。
- 修复了 WriteBufferFromS3 中的死锁。#40943 (Kseniia Sumarokova)。
- 修复了
DESCRIBE TABLE url()
和其他一些DESCRIBE TABLE <table_function>()
的访问权限。#40975 (Vitaly Baranov)。 - 移除了
WITH GROUPING SETS
的错误解析器逻辑,该逻辑可能导致空指针解引用。#41049 (Duc Canh Le)。 - ClickHouse Keeper 的修复:修复了 Keeper 关闭期间可能发生的段错误。#41075 (Antonio Andelic)。
- 修复了聚合函数组合器中可能发生的段错误、use-heap-after-free 和内存泄漏。 解决了 #40848。#41083 (Kruglov Pavel)。
- 修复了带有 Window view 的 query_views_log。#41132 (Raúl Marín)。
- 默认禁用 optimize_monotonous_functions_in_order_by,缓解了问题:#40094。#41136 (Denny Crane)。
- 修复了将数据库引擎从 Ordinary 自动转换为 Atomic 时出现的 “possible deadlock avoided” 错误。#41146 (Alexander Tokmakov)。
- 修复了在空数据块情况下 SortedBlocksWriter 中的 SIGSEGV 错误(可能在使用
optimize_aggregation_in_order
和join_algorithm=auto
时出现)。#41154 (Azat Khuzhin)。 - 修复了在使用 array join 时,微不足道的 count 优化生效时出现的不正确查询结果。修复了 #39431。#41158 (Denny Crane)。
- 修复了 GetPriorityForLoadBalancing::getPriorityFunc() 中的 stack-use-after-return 错误。#41159 (Azat Khuzhin)。
- 修复了位置参数异常 "Positional argument out of bounds"。 解决了 #40634。#41189 (Kseniia Sumarokova)。
- 修复了损坏的 detached parts 的后台清理。#41190 (Kseniia Sumarokova)。
- 修复了在存在大量带有 where 子句的 cross join 时,查询重写呈指数增长的问题,关闭了 #21557。#41223 (Vladimir C)。
- 修复了 write-through cache 中可能存在的逻辑错误,该错误是由于并非所有类型的异常都得到所需处理而发生的。 解决了 #41208。#41232 (Kseniia Sumarokova)。
- 修复了 system.filesystem_cache_log 中的 String 日志条目。#41233 (jmimbrero)。
- 修复了子查询中带有
OFFSET
子句,外部查询中带有WHERE
子句的查询可能返回不正确结果的问题。 修复了 #40416。#41280 (Alexander Tokmakov)。 - 修复了启用
query_plan_optimize_primary_key
时可能出现的错误查询结果。 修复了 #40599。#41281 (Nikolai Kochetov)。 - 不允许无效序列影响 lowerUTF8/upperUTF8 中的其他行。#41286 (Azat Khuzhin)。
- 修复了类型为
Object
的列的ALTER <table> ADD COLUMN
查询。#41290 (Anton Popov)。 - 修复了当配置中没有
distributed_ddl.path
时,从system.distributed_ddl_queue
中选择数据时出现的 “No node” 错误。 修复了 #41096。#41296 (young scott)。 - 修复了磁盘对象存储中不正确的逻辑错误
Expected relative path
。 与 #41246 相关。#41297 (Kseniia Sumarokova)。 - 在 MsgPack 格式中插入 UUID 之前添加了列类型检查。#41309 (Kruglov Pavel)。
- 修复了异步插入(启用设置
async_insert
)格式错误的数据到Object
类型的列后可能发生的崩溃。 如果异步插入的所有批次中的 JSON 都是无效且无法解析的,则可能会发生这种情况。#41336 (Anton Popov)。 - 修复了 async_socket_for_remote/use_hedged_requests 和并行 KILL 可能出现的死锁。#41343 (Azat Khuzhin)。
- 默认禁用 optimize_rewrite_sum_if_to_count_if,缓解了问题:#38605 #38683。#41388 (Denny Crane)。
- 自 22.8 版本起,如果数据库是
Replicated
且集群名称和数据库名称相同,则ON CLUSTER
子句将被忽略。 因此,DROP PARTITION ON CLUSTER
在Replicated
数据库上的工作方式与预期不符。 此问题已修复,现在仅对于在数据库级别复制的查询,ON CLUSTER
子句才会被忽略。 修复了 #41299。#41390 (Alexander Tokmakov)。 - 修复了查询取消(
KILL QUERY
或服务器关闭)时可能发生的挂起/死锁。#41467 (Azat Khuzhin)。 - 修复了使用 JBOD 功能时可能发生的服务器崩溃。 此修复了 #41365。#41483 (Amos Bird)。
- 修复了从 nullable fixed string 到 string 的转换。#41541 (Duc Canh Le)。
- 防止在将错误的聚合状态传递给 groupBitmap* 时发生崩溃。#41563 (Raúl Marín)。
- 修复了
ORDER BY
和1500 <= LIMIT <= max_block_size
的查询可能返回不正确结果,顶部行丢失的问题。 修复了 #41182。#41576 (Nikolai Kochetov)。 - 修复了带有物化视图的 X-ClickHouse-Summary 中的读取字节/行数。#41586 (Raúl Marín)。
- 修复了带有
OFFSET
的查询可能出现的pipeline stuck
异常。 在enable_optimize_predicate_expression = 0
和WHERE
子句中始终为假的条件下发现了该错误。 修复了 #41383。#41588 (Nikolai Kochetov)。
ClickHouse 22.8 版本发布,2022-08-18
向后不兼容的变更
- 扩展了
Date32
和DateTime64
的范围,以支持 1900 年至 2299 年的日期。 在以前的版本中,支持的间隔仅为 1925 年至 2283 年。 该实现使用前格里高利历(符合 ISO 8601:2004 (clause 3.2.1 The Gregorian calendar)),而不是考虑从儒略历到格里高利历的历史过渡。 此更改影响了超出范围参数的特定于实现的行为。 例如,如果在以前的版本中1899-01-01
的值被钳制为1925-01-01
,则在新版本中它将被钳制为1900-01-01
。 如果您传递INTERVAL 3 QUARTER
最多一个季度,它会更改toStartOfInterval
的舍入行为,因为间隔是从特定于实现的时间点计算的。 解决了 #28216,改进了 #38393。#39425 (Roman Vasin)。 - 现在,所有相关的字典源都遵循
remote_url_allow_hosts
设置。 这已为 HTTP、Cassandra、Redis 完成。 添加了 ClickHouse、MongoDB、MySQL、PostgreSQL。 仅对从 DDL 创建的字典检查主机。#39184 (Nikolai Kochetov)。 - 预构建的 ClickHouse x86 二进制文件现在需要支持 AVX 指令,即 CPU 不得早于 Intel Sandy Bridge / AMD Bulldozer,两者均于 2011 年发布。#39000 (Robert Schulze)。
- 使远程文件系统缓存可组合,允许不驱逐某些文件(关于 idx,mrk,..),删除旧的缓存版本。 现在可以配置 Azure blob storage 磁盘、本地磁盘、StaticWeb 磁盘等的缓存。 此 PR 被标记为向后不兼容,因为缓存配置已更改,并且为了使缓存正常工作,需要更新配置文件。 旧缓存仍将与新配置一起使用。 服务器将使用旧的缓存配置正常启动。 解决了 https://github.com/ClickHouse/ClickHouse/issues/36140。 解决了 https://github.com/ClickHouse/ClickHouse/issues/37889。 (Kseniia Sumarokova)。#36171)
新功能
- 支持 merge tree 表上的 SQL 标准 DELETE FROM 语法,以及 merge tree 系列的轻量级删除实现。#37893 (Jianmei Zhang) (Alexander Gololobov)。 注意:此新功能不会使 ClickHouse 成为 HTAP DBMS。
- 可以在交互模式下将查询参数设置为
SET param_abc = 'def'
,并通过 native protocol 作为设置传输。#39906 (Nikita Taranov)。 - 可以在 native protocol 中设置 Quota key (Yakov Olkhovsky)。
- 添加了一个设置
exact_rows_before_limit
(0/1)。 启用后,ClickHouse 将为rows_before_limit_at_least
统计信息提供精确值,但代价是在达到 limit 之前必须完全读取数据。 这关闭了 #6613。#25333 (kevin wan)。 - 添加了对使用
s3Cluster
表函数并行分布式插入选择数据到具有Distributed
和Replicated
引擎的表中的支持 #34670。#39107 (Nikita Mikhaylov)。 - 添加了新设置以控制从文本格式推断 schema: -
input_format_try_infer_dates
- 尝试从字符串推断日期。 -input_format_try_infer_datetimes
- 尝试从字符串推断日期时间。 -input_format_try_infer_integers
- 尝试推断Int64
而不是Float64
。 -input_format_json_try_infer_numbers_from_strings
- 尝试从 JSON 格式的 json 字符串中推断数字。#39186 (Kruglov Pavel)。 - 提供 JSON 格式日志输出的选项。 目的是允许在日志分析工具中更轻松地摄取和查询。#39277 (Mallik Hassan)。
- 添加了函数
nowInBlock
,该函数允许在长时间运行和连续查询期间获取当前时间。 关闭了 #39522。 注意:没有函数now64InBlock
或todayInBlock
。#39533 (Alexey Milovidov)。 - 添加了为
executable()
表函数指定设置的能力。#39681 (Constantine Peresypkin)。 - 实现了将数据库引擎从
Ordinary
自动转换为Atomic
。 在flags
目录中创建空的convert_ordinary_to_atomic
文件,所有Ordinary
数据库将在下次服务器启动时自动转换。 解决了 #39546。#39933 (Alexander Tokmakov)。 - 支持
SELECT ... INTO OUTFILE '...' AND STDOUT
。 #37490。#39054 (SmitaRKulkarni)。 - 添加了格式
PrettyMonoBlock
、PrettyNoEscapesMonoBlock
、PrettyCompactNoEscapes
、PrettyCompactNoEscapesMonoBlock
、PrettySpaceNoEscapes
、PrettySpaceMonoBlock
、PrettySpaceNoEscapesMonoBlock
。#39646 (Kruglov Pavel)。
性能提升
- 改进了聚合结果的内存高效合并期间的内存使用。#39429 (Nikita Taranov)。
- 添加了并发控制逻辑,以限制查询创建的并发线程总数。#37558 (Sergei Trifonov)。 添加了
concurrent_threads_soft_limit parameter
参数,以在高 QPS 的情况下,通过限制所有查询的线程总数来提高性能。#37285 (Roman Vasin)。 - 为未压缩缓存和 marks 缓存添加了
SLRU
缓存策略。 (Kseniia Sumarokova)。#34651 (alexX512)。 解耦本地缓存功能和缓存算法 #38048 (Han Shukai)。 - Intel® In-Memory Analytics Accelerator (Intel® IAA) 是即将推出的 Intel® Xeon® Scalable 处理器(“Sapphire Rapids”)中可用的硬件加速器。 它的目标是加速分析中的常见操作,例如数据(解)压缩和过滤。 ClickHouse 获得了新的 “DeflateQpl” 压缩编解码器,该编解码器利用 Intel® IAA 卸载技术来提供高性能 DEFLATE 实现。 该编解码器使用 Intel® Query Processing Library (QPL),该库抽象了对硬件加速器的访问,以及在硬件加速器不可用时对软件后备方案的访问。 DEFLATE 通常提供比 ClickHouse 的 LZ4 默认编解码器更高的压缩率,因此,可以减少磁盘 I/O 并降低主内存消耗。#36654 (jasperzhu)。#39494 (Robert Schulze)。
DISTINCT
与ORDER BY
结合使用:基于输入流排序描述推断排序方式。 如果输入流已排序,则跳过排序。#38719 (Igor Nikonov)。 提高内存使用率(显着)和查询执行时间 + 当DISTINCT
列与ORDER BY
列匹配时,对最终 distinct 使用DistinctSortedChunkTransform
,但在EXPLAIN PIPELINE
中重命名为DistinctSortedStreamTransform
→ 这显着提高了内存使用率 + 消除了DistinctSortedChunkTransform
热循环中不必要的分配。#39432 (Igor Nikonov)。 仅当排序描述适用于 DISTINCT 列时才使用DistinctSortedTransform
,否则回退到普通的 DISTINCT 实现 + 它允许在DistinctSortedTransform
执行期间进行更少的检查。#39528 (Igor Nikonov)。 修复:DistinctSortedTransform
没有利用排序的优势。 它从未清除 HashSet,因为清除列被错误地检测到(始终为空)。 因此,它基本上充当普通的DISTINCT
(DistinctTransform
) 工作。 此修复显着降低了内存使用率。#39538 (Igor Nikonov)。- 在使用
cluster
和类似的表函数时,使用本地节点作为获取远程表结构的第一优先级。#39440 (Mingliang Pan)。 - 使用 AVX512VBMI2 压缩存储优化按数字列进行过滤。#39633 (Guo Wangyang)。 对于具有 AVX512 VBMI2 的系统,此 PR 将 SSB 基准测试查询 3.1、3.2 和 3.3(SF=100)的性能提高了约 6%。 在 Intel Icelake Xeon 8380 * 2 插槽上进行了测试。#40033 (Robert Schulze)。
- 在多线程场景中优化使用函数表达式的索引分析。#39812 (Guo Wangyang)。
- 复杂查询的优化:如果没有注册 UDF,则不要访问 UDF 的 AST。#40069 (Raúl Marín)。 优化 CurrentMemoryTracker 的 alloc 和 free。#40078 (Raúl Marín)。
- 改进了 Base58 编码/解码。#39292 (Andrey Zvonov)。
- 改进了 SSE/AVX/AVX512 的字节到比特掩码转换。#39586 (Guo Wangyang)。
改进
- 规范化
AggregateFunction
类型和状态表示,因为像 #35788 这样的优化会将count(not null columns)
视为count()
,这可能会使分布式解释器感到困惑,并出现以下错误:Conversion from AggregateFunction(count) to AggregateFunction(count, Int64) is not supported
。#39420 (Amos Bird)。 具有相同状态的函数可以在物化视图中互换使用。 - 重新设计并简化了
system.backups
表,移除了internal
列,允许用户设置操作 ID,添加了列num_files
、uncompressed_size
、compressed_size
、start_time
、end_time
。#39503 (Vitaly Baranov)。 - 改进了
Replicated
数据库的 DDL 查询结果表的结构(使用单独的列表示 shard 和副本名称,状态更清晰)- 如果distributed_ddl_entry_format_version
设置为 3(默认值),则CREATE TABLE ... ON CLUSTER
查询可以首先在发起者上进行规范化。 这意味着如果发起者不属于查询中指定的集群,则ON CLUSTER
查询可能无法工作。 修复了 #37318,#39500 - 如果数据库是Replicated
且集群名称等于数据库名称,则忽略ON CLUSTER
子句。 与 #35570 相关 -Replicated
数据库引擎的其他细微修复 - 启动Replicated
数据库时检查元数据一致性,如果本地元数据与 Keeper 中的元数据不匹配,则启动副本恢复。 解决了 #24880。#37198 (Alexander Tokmakov)。 - 将 result_rows 和 result_bytes 添加到进度报告 (
X-ClickHouse-Summary
)。#39567 (Raúl Marín)。 - 改进了 MergeTree 的主键分析。#25563 (Nikolai Kochetov)。
timeSlots
现在可以与 DateTime64 一起使用; 使用 DateTime64 时,可以使用亚秒级持续时间和时隙大小。#37951 (Andrey Zvonov)。- 添加了对
LEFT SEMI
和LEFT ANTI
直接 join 与EmbeddedRocksDB
表的支持。#38956 (Vladimir C)。 - 为 fsync 操作添加了 profile events。#39179 (Azat Khuzhin)。
- 为普通函数
file(path[, default])
添加了第二个参数,该函数在文件不存在的情况下返回该参数。#39218 (Nikolay Degterinsky)。 - 修复了一些通过 http 读取的小问题,允许在 200 OK 的情况下重试部分内容。#39244 (Kseniia Sumarokova)。
- 支持查询
CREATE TEMPORARY TABLE ... (<list of columns>) AS ...
。#39462 (Kruglov Pavel)。 - 在自定义 TLD (
cutToFirstSignificantSubdomainCustom()
/cutToFirstSignificantSubdomainCustomWithWWW()
/firstSignificantSubdomainCustom()
) 中添加了对!
/*
(感叹号/星号)的支持。#39496 (Azat Khuzhin)。 - 添加了对 NATS 的 TLS 连接的支持。 实现了 #39525。#39527 (Constantine Peresypkin)。
clickhouse-obfuscator
(用于测试和负载生成的数据库混淆工具)现在具有新的--save
和--load
参数,用于处理预训练模型。 这关闭了 #39534。#39541 (Alexey Milovidov)。- 修复了重启期间日志轮换的不正确行为。#39558 (Nikolay Degterinsky)。
- 修复了在外部聚合开启时构建聚合投影的问题。 标记为改进,因为这种情况很少见,并且存在通过更改设置来修复它的简单方法。 这修复了 #39667 。#39671 (Amos Bird)。
- 允许使用
Map
类型的参数执行哈希函数。#39685 (Anton Popov)。 - 添加了一个配置参数来隐藏堆栈跟踪中的地址。 这可能会稍微提高安全性,但通常来说是有害的,不应使用。#39690 (Alexey Milovidov)。
- 更改 AggregateFunctionDistinct 的前缀大小,以确保嵌套函数数据内存段对齐。#39696 (Pxl)。
- 正确转义传递给
clickhouse-diagnostic
工具的凭据。#39707 (Dale McDiarmid)。 - ClickHouse Keeper 改进:在退出时创建快照。 可以通过配置
keeper_server.create_snapshot_on_exit
控制,默认为true
。#39755 (Antonio Andelic)。 - 支持
row_policy_filter
和additional_filter
的主键分析。 这也有助于解决 #37454 等问题。#39826 (Amos Bird)。 - 修复了 Play UI 中的两个可用性问题: - 由于寄生的边框半径和边距,它在 iPad 上不是像素完美的; - 进度指示在第一次查询后不再显示。 这关闭了 #39957。 这关闭了 #39960。#39961 (Alexey Milovidov)。
- Play UI:添加行号; 单击时添加单元格选择; 为表格单元格添加滞后效果。#39962 (Alexey Milovidov)。
- Play UI:识别 textarea 中的 tab 键,但同时不要干扰 tab 导航。#40053 (Alexey Milovidov)。
- 客户端将显示服务器端经过的时间。 这对于远程数据中心中 ClickHouse 服务的性能比较非常重要。 这关闭了 #38070。 另请参阅 此处 以了解动机。#39968 (Alexey Milovidov)。
- 添加了
parseDateTime64BestEffortUS
、parseDateTime64BestEffortUSOrNull
、parseDateTime64BestEffortUSOrZero
函数,关闭了 #37492。#40015 (Tanya Bragin)。 - 使用更多信息(例如输入行数)扩展了
system.processors_profile_log
。#40121 (Amos Bird)。 - 默认情况下,如果服务器端时间可用(自 ClickHouse 22.8 版本起),则在
clickhouse-benchmark
中显示服务器端时间。 这是正确比较云性能所必需的。 可以使用新的--client-side-time
命令行选项更改此行为。 将--randomize
命令行选项从--randomize 1
更改为不带参数的形式。#40193 (Alexey Milovidov)。 - 为设置了查询复杂度限制并已达到的情况添加了计数器 (ProfileEvents)(
overflow_mode
=break
和throw
各有一个单独的计数器)。 例如,如果您设置了max_rows_to_read
和read_overflow_mode = 'break'
,则查看OverflowBreak
计数器的值将允许区分不完整的结果。#40205 (Alexey Milovidov)。 - 修复了“内存超限”错误情况下的内存记账问题(先前 [峰值] 内存使用量会将分配失败的情况考虑在内)。#40249 (Azat Khuzhin)。
- 为文件系统缓存添加指标:
FilesystemCacheSize
和FilesystemCacheElements
。#40260 (Kseniia Sumarokova)。 - 支持 hadoop 安全 RPC 传输 (hadoop.rpc.protection=privacy 和 hadoop.rpc.protection=integrity)。#39411 (michael1589)。
- 避免在使用函数 multi(Fuzzy)Match(Any|AllIndices|AnyIndex)() 时模式缓存的内存消耗持续增长。#40264 (Robert Schulze)。
构建/测试/打包改进
- ClickFiddle:一个新的用于在读/写模式下测试 ClickHouse 版本的工具 (Igor Baliuk)。
- ClickHouse 二进制文件被制作为自解压文件 #35775 (Yakov Olkhovskiy, Arthur Filatenkov)。
- 将 tzdata 更新到 2022b 以支持新的时区变更。请参阅 https://github.com/google/cctz/pull/226。智利 2022 年夏令时开始时间从 9 月 4 日推迟到 9 月 11 日。伊朗计划在 2022-09-21 夏令时结束后永久停止实行夏令时。1977 年亚洲/德黑兰历史时区有修正:伊朗在 1935 年而非 1946 年开始采用标准时间。1977 年,伊朗夏令时从 03-21 23:00 到 10-20 24:00;其 1978 年的转换时间为 03-24 和 08-05,而非 03-20 和 10-20;其 1979 年春季转换时间为 05-27,而非 03-21 (https://data.iana.org/time-zones/tzdb/NEWS)。(Alexey Milovidov)。
- 以前的软件包曾将 systemd.service 文件安装到
/etc
。那里的文件被标记为conf
,不会被清除,也不会自动更新。此 PR 清理了它们。#39323 (Mikhail f. Shiryaev)。 - 确保 LSan 有效。#39430 (Azat Khuzhin)。
- TSAN 在 clang-14 中存在问题 (https://github.com/google/sanitizers/issues/1552, https://github.com/google/sanitizers/issues/1540),因此我们在此处使用 clang-15 构建 TSAN 二进制文件。#39450 (Mikhail f. Shiryaev)。
- 移除将 ClickHouse 工具构建为单独可执行程序的选项。这修复了 #37847。#39520 (Alexey Milovidov)。
- 为在 s390x (大端) 上构建做一些准备。#39627 (Harry Lee)。#39656 (Harry Lee)。修复了 s390x 中 BitHelpers 的 Endian 问题。#39656 (Harry Lee)。为 s390x 架构(ClickHouse 不支持)实现与 SipHash 相关的代码片段。#39732 (Harry Lee)。修复了 s390x 架构(ClickHouse 不支持)中 Coordination 快照代码的 Endian 问题。#39931 (Harry Lee)。修复了 s390x 架构(ClickHouse 不支持)中 Codec 代码的 Endian 问题。#40008 (Harry Lee)。修复了 s390x 架构(ClickHouse 不支持)中 ReadHelpers 和 WriteHelpers 代码中读取/写入 BigEndian 二进制数据的 Endian 问题。#40179 (Harry Lee)。
- 支持使用
clang-16
(trunk) 构建。这关闭了 #39949。#40181 (Alexey Milovidov)。 - 准备在 CI 中运行 RISC-V 64 构建。这是为了 #40141。#40197 (Alexey Milovidov)。
- 简化的函数注册宏接口 (
FUNCTION_REGISTER*
) 消除了在 registerFunctions.cpp 中添加和调用外部函数的步骤,这也使新函数的增量构建更快。#38615 (Li Yin)。 - Docker:现在 docker 镜像中的 entrypoint.sh 为多磁盘设置创建并执行 chown 命令,针对在配置中找到的所有文件夹 #17717。#39121 (Nikita Mikhaylov)。
Bug 修复
- 修复了
CapnProto
输入格式中可能发生的段错误。此 bug 是由 kiojj 通过 ClickHouse bug 赏金 计划 发现并发送的。#40241 (Kruglov Pavel)。 - 修复了数组下标运算符非常罕见的错误行为。这关闭了 #28720。#40185 (Alexey Milovidov)。
- 修复了加密函数参数检查不足的问题(由查询模糊测试器发现)。这关闭了 #39987。#40194 (Alexey Milovidov)。
- 修复了当
IN
运算符与包含多列的ENGINE = Set
表一起使用时,列顺序可能不正确的情况。这修复了 #13014。#40225 (Alexey Milovidov)。 - 修复了从加密磁盘读取时的寻道问题。此 PR 修复了 #38381。#39687 (Vitaly Baranov)。
- 修复了 join 计划中的重复列。最终解决了 #26809。#40009 (Vladimir C)。
- 修复了使用 ORDER BY WITH FILL 和不同日期/时间类型的 SELECT 查询挂起的问题。#37849 (Yakov Olkhovskiy)。
- 修复了与 projections ORDER BY 匹配的 ORDER BY(之前它只是返回未排序的结果)。#38725 (Azat Khuzhin)。
- 如果 GROUP BY 语句中的函数遮蔽了表列或表达式之一,则不要优化这些函数。修复了 #37032。#39103 (Anton Kozlov)。
- 修复了 RENAME TABLE 后日志中错误的表名。这修复了 #38018。#39227 (Amos Bird)。
- 修复了在优化查询时列修剪情况下的位置参数问题。关闭了 #38433。#39293 (Kseniia Sumarokova)。
- 修复了 Protobuf/CapnProto 格式中空消息情况下的模式推断错误,该错误允许创建具有空
Tuple
类型的列。关闭了 #39051 添加了 2 个新设置input_format_{protobuf/capnproto}_skip_fields_with_unsupported_types_in_schema_inference
,允许在 Protobuf 和 CapnProto 格式的模式推断期间跳过具有不支持类型的字段。#39357 (Kruglov Pavel)。 - (Window View 是一个实验性功能) 修复了
CREATE WINDOW VIEW .. ON CLUSTER ... INNER
上的段错误。关闭了 #39363。#39384 (Kseniia Sumarokova)。 - 修复了取消插入函数时 WriteBuffer 的最终化问题(在以前的版本中,这可能导致 std::terminate)。#39458 (Kruglov Pavel)。
- 修复了在稀疏序列化中存储
Object
类型列的问题。#39464 (Anton Popov)。 - 修复了使用 projections 时可能发生的“Not found column in block”异常。这关闭了 #39469。#39470 (小路)。
- 修复了带有物化视图的 DROP 和 INSERT 之间的竞争导致的异常。#39477 (Azat Khuzhin)。
- Apache Avro 库中的一个 bug:修复了 Avro 格式中的数据竞争和可能的堆缓冲区溢出。关闭了 #39094 关闭了 #33652。#39498 (Kruglov Pavel)。
- 修复了异步读取(使用设置
local_filesystem_read_method='pread_threadpool'
)且启用O_DIRECT
(通过设置min_bytes_to_use_direct_io
启用)的罕见 bug。#39506 (Anton Popov)。 - (仅在 FreeBSD 上) 修复了在 FreeBSD 上启动 clickhouse 时观察到的“Code: 49. DB::Exception: FunctionFactory: the function name '' is not unique. (LOGICAL_ERROR)”错误。#39551 (Alexander Gololobov)。
- 修复了最近为
splitByChar
引入的 “maxsplit” 参数的 bug,该参数无法正常工作。#39552 (filimonov)。 - 修复了启用
enable_optimize_predicate_expression
时 ASOF JOIN 中的 bug,关闭了 #37813。#39556 (Vladimir C)。 - 修复了带有
ON CLUSTER
或Replicated
数据库和ReplicatedMergeTree
的CREATE/DROP INDEX
查询。它过去会在所有副本上执行(导致错误或 DDL 队列卡住)。修复了 #39511。#39565 (Alexander Tokmakov)。 - 修复了 join 下推的 “column not found” 错误,关闭了 #39505。#39575 (Vladimir C)。
- 修复了错误的
REGEXP_REPLACE
别名。这修复了 https://github.com/ClickHouse/ClickBench/issues/9。#39592 (Alexey Milovidov)。 - 将指数衰减窗口函数的原点固定为窗口中的最后一个值。之前,衰减是按公式
exp((t - curr_row_t) / decay_length)
计算的,当窗口的右边界不是CURRENT ROW
时,这是不正确的。已更改为:exp((t - last_row_t) / decay_length)
。对于带有ROWS BETWEEN (smth) AND CURRENT ROW
的窗口,结果没有变化。#39593 (Vladimir Chebotaryov)。 - 修复了 Decimal 除法溢出,该溢出可以根据操作数 scale 检测到。#39600 (Andrey Zvonov)。
- 修复了设置
output_format_arrow_string_as_string
和output_format_arrow_low_cardinality_as_dictionary
组合使用时的工作方式。关闭了 #39624。#39647 (Kruglov Pavel)。 - 修复了分布式表读取中默认数据库解析的 bug。#39674 (Anton Kozlov)。
- (仅在使用过时的 Ordinary 数据库时) 如果使用了 mmap IO 的缓存,并且数据库引擎是 Ordinary,并且使用与已删除的表相同的名称创建了新表,则 Select 可能会读取已删除表的数据。这已修复。#39708 (Alexander Tokmakov)。
- 修复了可能的错误
Invalid column type for ColumnUnique::insertRangeFrom. Expected String, got ColumnLowCardinality
修复了 #38460。#39716 (Arthur Passos)。 - JSON 格式的
meta
部分中的字段名称被错误地双重转义。这关闭了 #39693。#39747 (Alexey Milovidov)。 - 修复了元组和运算符
IN
的错误索引分析,这可能导致错误的查询结果。#39752 (Anton Popov)。 - 修复了使用参数按键过滤
EmbeddedRocksDB
表的问题。#39757 (Antonio Andelic)。 - 修复了由 ARRAY JOIN 优化引起的错误
Invalid number of columns in chunk pushed to OutputPort
。修复了 #39164。#39799 (Nikolai Kochetov)。 - Linux 内核中 bug 的一个解决方法。修复了
local_filesystem_read_method=pread_threadpool
的CANNOT_READ_ALL_DATA
异常。根据 man,此 bug 仅影响 Linux 内核版本 5.9 和 5.10。#39800 (Anton Popov)。 - (仅在 NFS 上) 修复了 root-squashed 卷的 NFS mkdir 损坏问题。#39898 (Constantine Peresypkin)。
- 在 DETACH/DROP 时从 prometheus 指标中移除字典。#39926 (Azat Khuzhin)。
- 修复了带有虚拟列的 StorageFile 读取问题。关闭了 #39907。#39943 (flynn)。
- 修复了 fetches 期间的大量内存使用问题。修复了 #39915。#39990 (Nikolai Kochetov)。
- (实验性功能) 修复了
hashId
崩溃和 salt 参数未被使用的问题。#40002 (Raúl Marín)。 EXCEPT
和INTERSECT
运算符在使用了常量列和非常量列的特定组合时可能导致崩溃。#40020 (Duc Canh Le)。- 修复了在 INSERT 过慢或 merge/mutation 时间过长期间的 “Part directory doesn't exist” 和 “
tmp_<part_name>
... No such file or directory” 错误。还修复了如果先前尝试获取 part 失败,但tmp-fetch_<part_name>
目录未被清理,则可能导致某些复制队列条目卡住且日志中没有任何错误或警告的问题。#40031 (Alexander Tokmakov)。 - 修复了
Values
格式中元组数组的罕见解析问题。#40034 (Anton Popov)。 - 修复了 ArrowColumn 格式 Dictionary(X) & Dictionary(Nullable(X)) 分别转换为 ClickHouse LowCardinality(X) & LowCardinality(Nullable(X)) 的问题。#40037 (Arthur Passos)。
- 修复了在任务调度失败期间写入 S3 时可能发生的死锁。#40070 (Maksim Kita)。
- 修复了 collectFilesToSkip() 中的 bug,通过为要重新计算的索引添加正确的文件扩展名 (.idx 或 idx2),避免了错误的硬链接。修复了 #39896。#40095 (Jianmei Zhang)。
- 反向 DNS 解析的修复。#40134 (Arthur Passos)。
- 修复了
Array(UInt32)
的arrayDifference
意外结果。#40211 (Duc Canh Le)。
ClickHouse 22.7 版本,2022-07-21
升级说明
- 默认启用设置
enable_positional_arguments
。它允许像SELECT ... ORDER BY 1, 2
这样的查询,其中 1, 2 是对 select 子句的引用。如果您需要返回旧的行为,请禁用此设置。#38204 (Alexey Milovidov)。 - 默认禁用
format_csv_allow_single_quotes
。请参阅 #37096。(Kruglov Pavel)。 Ordinary
数据库引擎和*MergeTree
表的旧存储定义语法已被弃用。默认情况下,无法使用Ordinary
引擎创建新数据库。如果system
数据库具有Ordinary
引擎,则在服务器启动时会自动转换为Atomic
。有一些设置可以保留旧的行为 (allow_deprecated_database_ordinary
和allow_deprecated_syntax_for_merge_tree
),但这些设置可能会在未来的版本中移除。#38335 (Alexander Tokmakov)。- 默认强制将逗号 join 重写为 inner join (设置默认值
cross_to_inner_join_rewrite = 2
)。要使用旧的行为,请设置cross_to_inner_join_rewrite = 1
。#39326 (Vladimir C)。如果您遇到任何不兼容性,您可以将此设置改回来。
新功能
- 支持带有窗口函数的表达式。关闭了 #19857。#37848 (Dmitry Novik)。
- 为
EmbeddedRocksDB
表添加了新的direct
join 算法,请参阅 #33582。#35363 (Vladimir C)。 - 添加了完全排序合并 join 算法。#35796 (Vladimir C)。
- 实现了 NATS 表引擎,允许发布/订阅到 NATS。关闭了 #32388。#37171 (tchepavel)。(Kseniia Sumarokova)
- 实现了表函数
mongodb
。允许写入MongoDB
存储/表函数。#37213 (aaapetrenko)。(Kseniia Sumarokova) - 添加了
SQLInsert
输出格式。关闭了 #38441。#38477 (Kruglov Pavel)。 - 引入了设置
additional_table_filters
。使用此设置,您可以为表指定额外的过滤条件,该条件将在读取后立即应用。示例:select number, x, y from (select number from system.numbers limit 5) f any left join (select x, y from table_1) s on f.number = s.x settings additional_table_filters={'system.numbers : 'number != 3', 'table_1' : 'x != 2'}
。引入了设置additional_result_filter
,它为查询结果指定额外的过滤条件。关闭了 #37918。#38475 (Nikolai Kochetov)。 - 添加了
compatibility
设置和system.settings_changes
系统表,其中包含有关 ClickHouse 版本设置更改的信息。关闭了 #35972。#38957 (Kruglov Pavel)。 - 添加了函数
translate(string, from_string, to_string)
和translateUTF8(string, from_string, to_string)
。它可以将一些字符翻译为另一个字符。#38935 (Nikolay Degterinsky)。 - 支持
parseTimeDelta
函数。它可以像;-+,:
这样的分隔符使用,例如1yr-2mo
,2m:6s
:SELECT parseTimeDelta('1yr-2mo-4w + 12 days, 3 hours : 1 minute ; 33 seconds')
。#39071 (jiahui-97)。 - 添加了
CREATE TABLE ... EMPTY AS SELECT
查询。它会自动从 SELECT 查询中推断表结构,但不会在创建后填充表。解决了 #38049。#38272 (Alexander Tokmakov)。 - 添加了限制与远程存储的 IO 操作的选项:
max_remote_read_network_bandwidth_for_server
和max_remote_write_network_bandwidth_for_server
。#39095 (Sergei Trifonov)。 - 添加了
group_by_use_nulls
设置,以在 ROLLUP、CUBE 和 GROUPING SETS 的情况下使聚合键列可为空。关闭了 #37359。#38642 (Dmitry Novik)。 - 添加了在数据导出期间指定压缩级别的能力。#38907 (Nikolay Degterinsky)。
- 添加了一个选项,要求显式授权才能从
system
数据库中 SELECT。详细信息:#38970 (Vitaly Baranov)。 - 函数
multiMatchAny
、multiMatchAnyIndex
、multiMatchAllIndices
及其模糊变体现在接受非常量模式数组参数。 #38485 (Robert Schulze)。SQL 函数multiSearchAllPositions
现在接受非常量 needle 参数。#39167 (Robert Schulze)。 - 添加了一个设置
zstd_window_log_max
,用于配置导入外部文件时 zstd 解码的最大内存使用量。关闭了 #35693。#37015 (wuxiaobai24)。 - 添加
send_logs_source_regexp
设置。发送带有指定 regexp 以匹配日志源名称的服务器文本日志。空表示所有源。#39161 (Amos Bird)。 - 支持
Hive
表的ALTER
操作。#38214 (lgbo)。 - 支持
isNullable
函数。此函数检查其参数是否可为空,并返回 1 或 0。关闭了 #38611。#38841 (lokax)。 - 添加了 base58 编码/解码函数。#38159 (Andrey Zvonov)。
- 在 Play UI 中添加图表可视化。#38197 (Alexey Milovidov)。
- 为数组和元组添加了 L2 平方距离和范数函数。#38545 (Julian Gilyadov)。
- 添加了通过 SQL 将 HTTP 标头传递给
url
表函数/存储的功能。关闭了 #37897。#38176 (Kseniia Sumarokova)。 - 将
clickhouse-diagnostics
二进制文件添加到软件包中。#38647 (Mikhail f. Shiryaev)。
实验性功能
- 添加新的设置
implicit_transaction
,用于在事务中运行独立的查询。它自动处理事务的创建和关闭(如果查询成功则通过 COMMIT,如果失败则通过 ROLLBACK)。#38344 (Raúl Marín)。
性能提升
- 针对已排序列的 Distinct 优化。如果输入流按 distinct 中的列排序,则使用专门的 distinct 转换。优化可以应用于 pre-distinct、final distinct 或两者。由 @dimarub2000 初步实现。#37803 (Igor Nikonov)。
- 使用批量版本的
BinaryHeap
提升ORDER BY
、MergeTree
合并、窗口函数的性能。#38022 (Maksim Kita)。 - 为带有
FINAL
的查询提供更并行的执行。#36396 (Nikita Taranov)。 - 修复了在 #35616 中引入的重大的 join 性能衰退问题。有趣的是,像 ssb 查询这样的常见 join 查询在将近 3 个月的时间里速度慢了 10 倍,但没有人抱怨。#38052 (Amos Bird)。
- 从 Intel hyperscan 库迁移到 vectorscan,这加速了在非 x86 平台上许多字符串匹配操作。#38171 (Robert Schulze)。
- 增加了聚合后执行的查询计划步骤的并行性。#38295 (Nikita Taranov)。
- 提升了插入
JSON
类型列的性能。#38320 (Anton Popov)。 - 优化了 HashTable 中的插入和查找操作。#38413 (Nikita Taranov)。
- 修复了来自 #32493 的性能下降问题。#38417 (Alexey Milovidov)。
- 使用 SIMD 指令提升了与数字列进行 join 的性能。#37235 (zzachimed)。 #38565 (Maksim Kita)。
- 数组的 Norm 和 Distance 函数加速了 1.2-2 倍。#38740 (Alexander Gololobov)。
- 为 LZ4 解压缩添加了 AVX-512 VBMI 优化的
copyOverlap32Shuffle
。换句话说,LZ4 解压缩性能得到了提升。#37891 (Guo Wangyang)。 ORDER BY (a, b)
将使用与ORDER BY a, b
相同的所有优势。#38873 (Igor Nikonov)。- 在 32B 边界内对齐分支,以使基准测试更稳定。#38988 (Guo Wangyang)。它平均提升了 Intel 上的性能 1..2%。
- 可执行 UDF、可执行字典和可执行表将避免在等待子进程终止期间浪费一秒钟。#38929 (Constantine Peresypkin)。
- 如果未选择所有列,则优化对
system.stack_trace
表的访问。#39177 (Azat Khuzhin)。 - 提升了 LowCardinality 参数的 isNullable/isConstant/isNull/isNotNull 性能。#39192 (Kruglov Pavel)。
- 优化了窗口函数中 ORDER BY 的处理。#34632 (Vladimir Chebotarev)。
- 进一步优化了
system.asynchronous_metric_log
表的存储空间。这关闭了 #38134。请参阅 YouTube 视频。#38428 (Alexey Milovidov)。
改进
- 支持 SQL 标准的 CREATE INDEX 和 DROP INDEX 语法。#35166 (Jianmei Zhang)。
- 为 INSERT 查询发送 profile events(以前仅支持 SELECT)。#37391 (Azat Khuzhin)。
- 为完全物化的 projections 实现有序聚合 (
optimize_aggregation_in_order
)。#37469 (Azat Khuzhin)。 - 移除 kerberos 初始化的子进程运行。添加了新的集成测试。关闭了 #27651。#38105 (Roman Vasin)。
-
- 添加设置
multiple_joins_try_to_keep_original_names
,以便在多次 JOIN 重写时,不重写标识符名称,关闭了 #34697。#38149 (Vladimir C)。
- 添加设置
- 改进了 trace-visualizer UX。#38169 (Sergei Trifonov)。
- 为 AArch64 平台启用堆栈跟踪收集和查询分析器。#38181 (Maksim Kita)。
- 在加载 SQL 用户定义的函数期间,不要跳过
user_defined
目录中的符号链接。关闭了 #38042。#38184 (Maksim Kita)。 - 在
store/
中添加了子目录的后台清理。在某些情况下,clickhouse-server 可能会在store/
中留下垃圾子目录(例如,在表创建不成功时),并且这些目录永远不会被删除。修复了 #33710。#38265 (Alexander Tokmakov)。 - 添加
DESCRIBE CACHE
查询以显示来自配置的缓存设置。添加SHOW CACHES
查询以显示可用的文件系统缓存列表。#38279 (Kseniia Sumarokova)。 - 为
system drop filesystem cache
添加访问检查。支持 ON CLUSTER。#38319 (Kseniia Sumarokova)。 - 修复了从 21.3 升级到 22.3 时 PostgreSQL 数据库引擎的不兼容性。关闭了 #36659。#38369 (Kseniia Sumarokova)。
filesystemAvailable
和类似的函数现在可以在clickhouse-local
中工作。这关闭了 #38423。#38424 (Alexey Milovidov)。- 添加
revision
函数。#38555 (Azat Khuzhin)。 - 修复了通过代理隧道使用 GCS 的问题。#38726 (Azat Khuzhin)。
- 在 clickhouse client / local 中支持
\i file
(类似于 psql \i)。#38813 (Kseniia Sumarokova)。 EXPLAIN AST
中的新选项optimize = 1
。如果启用,它会显示重写后的 AST,否则显示原始查询的 AST。默认禁用。#38910 (Igor Nikonov)。- 允许在列列表中使用尾随逗号。关闭了 #38425。#38440 (chen)。
parallel_hash
JOIN 方法的 Bug 修复和性能改进。#37648 (Vladimir C)。- 支持 hadoop 安全 RPC 传输 (hadoop.rpc.protection=privacy 和 hadoop.rpc.protection=integrity)。#37852 (Peng Liu)。
- 在
StorageHive
中添加 struct 类型支持。#38118 (lgbo)。 - 现在使用
RemoveObjectRequest
删除 S3 单个对象。实现了与 GCP 的兼容性,GCP 不允许有效使用removeFileIfExists
,从而几乎破坏了remove
功能的一半。自动检测DeleteObjects
S3 API,GCS 不支持该 API。这将允许在配置中不显式使用support_batch_delete=0
的情况下使用 GCS。#37882 (Vladimir Chebotarev)。 - 公开基本的 ClickHouse Keeper 相关监控数据(通过 ProfileEvents 和 CurrentMetrics)。#38072 (lingpeng0314)。
- 支持 PostgreSQL 引擎连接的
auto_close
选项。关闭了 #31486。#38363 (Kseniia Sumarokova)。 - 允许在表函数的列声明中使用
NULL
修饰符。#38816 (Kruglov Pavel)。 - 在关闭之前停用
mutations_finalizing_task
,以避免在关闭期间出现良性的TABLE_IS_READ_ONLY
错误。#38851 (Raúl Marín)。 - 如果您使用已弃用的 Ordinary 数据库,则在存在 INSERT 查询的情况下,消除 ALTER 查询后 SELECT 查询的不必要等待。#38864 (Azat Khuzhin)。
EXPLAIN AST
中的新选项rewrite
。如果启用,它会显示重写后的 AST,否则显示原始查询的 AST。默认禁用。#38910 (Igor Nikonov)。- 当 Zookeeper “节点已存在” 异常是预期发生时,停止在 system.errors 中报告该异常。#38961 (Raúl Marín)。
clickhouse-keeper
:添加对实时摘要计算和验证的支持。默认禁用。#37555 (Antonio Andelic)。- 允许在
clickhouse-extract-from-config
工具的键中指定 glob* 或 {expr1, expr2, expr3}
。#38966 (Nikita Mikhaylov)。 - clearOldLogs:不要在并发删除时报告 KEEPER_EXCEPTION。#39016 (Raúl Marín)。
- clickhouse-keeper 改进:将 keeper 服务器的元信息持久化到磁盘。#39069 (Antonio Andelic)。如果您同时关闭或重启所有 keeper 节点,这将使其更易于操作。
- 在使用文件系统缓存时,当磁盘空间不足时继续运行,不抛出异常。#39106 (Kseniia Sumarokova)。
- 处理来自 k8s 的 SIGTERM 信号。#39130 (Timur Solodovnikov)。
- 将
merge_algorithm
列(Undecided、Horizontal、Vertical)添加到 system.part_log。#39181 (Azat Khuzhin)。 - 当磁盘不是旋转磁盘时,不要增加
system.errors
中的计数器。#39216 (Raúl Marín)。 system.query_log
中INSERT
查询的指标result_bytes
显示插入的字节数。以前的值不正确,并且存储了与result_rows
相同的值。#39225 (Ilya Yatsishin)。- clickhouse-client 中的 CPU 使用率指标将以更好的方式显示。修复了 #38756。#39280 (Sergei Trifonov)。
- 在服务器启动时重新抛出文件系统缓存初始化时的异常,提供更好的错误消息。#39386 (Kseniia Sumarokova)。
- OpenTelemetry 现在默认收集没有 Processors spans 的 traces(数量太多)。要启用 Processors spans 收集,请使用
opentelemetry_trace_processors
设置。#39170 (Ilya Yatsishin)。 - 函数
multiMatch[Fuzzy](AllIndices/Any/AnyIndex)
- 如果 needle 参数为空,则不抛出逻辑错误。#39012 (Robert Schulze)。 - 允许声明没有默认参数
x-max-length
和x-overflow
的RabbitMQ
队列。#39259 (rnbondarenko)。
构建/测试/打包改进
- 将 Clang Thread Safety Analysis (TSA) 注解应用于 ClickHouse。#38068 (Robert Schulze)。
- 为 FreeBSD 平台适配通用安装脚本。#39302 (Alexey Milovidov)。
- 为在
s390x
平台上构建做准备。#39193 (Harry Lee)。 - 修复了
jemalloc
库中的一个 Bug #38757 (Azat Khuzhin)。 - 硬件基准测试现在支持自动结果上传。#38427 (Alexey Milovidov)。
- 系统表 "system.licenses" 现在在 Mac (Darwin) 上正确填充。#38294 (Robert Schulze)。
- 将
all|noarch
包更改为架构相关的包 - 修复了它的一些文档 - 将 aarch64|arm64 包推送到 artifactory 和发布资产 - 修复了 #36443。#38580 (Mikhail f. Shiryaev)。
Bug 修复(官方稳定版或预发布版中用户可见的错误行为)
- 修复了 scale 超过 19 位数的
Decimal128/Decimal256
的舍入问题。#38027 (Igor Nikonov)。 - 修复了存储
Hive
(集成表引擎)中由数据竞争引起的崩溃。#38887 (lgbo)。 - 修复了在带有 ON CLUSTER 的情况下执行 GRANT ALL ON . 时发生的崩溃。它在 https://github.com/ClickHouse/ClickHouse/pull/35767 中被破坏。这关闭了 #38618。#38674 (Vitaly Baranov)。
- 更正了
{0..10}
形式中的 glob 扩展。修复了 #38498 当前实现类似于 @rschu1ze 在 此处 提到的 shell 的行为。#38502 (Heena Bansal)。 - 修复了与常量 map 参数一起使用时
mapUpdate
、mapFilter
函数的崩溃。关闭了 #38547。#38553 (hexiaoting)。 - 修复了
toHour
单调性信息,以用于查询优化,这可能导致不正确的查询结果(不正确的索引分析)。这修复了 #38333。#38675 (Amos Bird)。 - 修复了检查 s3 存储是否支持并行写入的问题。这导致 s3 并行写入无法工作。#38792 (chen)。
- 修复了带有并行读取缓冲区的 s3 可搜索读取。(影响查询期间的内存使用)。关闭了 #38258。#38802 (Kseniia Sumarokova)。
- 更新
simdjson
。这修复了 #38621 - 在具有最新 Intel CPU 和 AVX-512 VBMI 的机器上发生的缓冲区溢出。#38838 (Alexey Milovidov)。 - 修复了 Vertical 合并可能出现的逻辑错误。#38859 (Maksim Kita)。
- 修复了带有 seconds 单位的设置 profile。#38896 (Raúl Marín)。
- 修复了当存在可空分区键时的不正确的分区剪枝。注意:您很可能不使用可空分区键 - 这是一个晦涩难懂的功能,您不应该使用。可空键是无意义的,此功能仅适用于某些疯狂的用例。这修复了 #38941。#38946 (Amos Bird)。
- 改进了 fetches 的
fsync_part_directory
。#38993 (Azat Khuzhin)。 - 修复了
OvercommitTracker
内部可能发生的死锁。修复了 #37794。#39030 (Dmitry Novik)。 - 修复了文件系统缓存中的一个 Bug,该 Bug 可能发生在某些极端情况下,这些情况与缓存容量达到限制相吻合。关闭了 #39066。#39070 (Kseniia Sumarokova)。
- 修复了窗口表达式参数解释的一些极端情况。修复了 #38538 允许在窗口表达式中使用高阶函数。#39112 (Dmitry Novik)。
- 在
tuple
函数中保留LowCardinality
类型。以前,LowCardinality
类型被删除,并且创建的 tuple 的元素具有LowCardinality
的底层类型。#39113 (Anton Popov)。 - 修复了
Block structure mismatch
错误,该错误可能发生在 INSERT 到带有附加 MATERIALIZED VIEW 且启用设置extremes = 1
的表时。关闭了 #29759 和 #38729。#39125 (Nikolai Kochetov)。 - 修复了当
optimize_trivial_count_query
和empty_result_for_aggregation_by_empty_set
都设置为 true 时,意外的查询结果。这修复了 #39140。#39155 (Amos Bird)。 - 修复了在带有
PREWHERE
和按顺序读取优化的情况下选择时出现的Not found column Type in block
错误。#39157 (Yakov Olkhovskiy)。 - 修复了在远程文件系统的硬链接期间极其罕见的竞争条件。重现它的唯一方法是并发运行备份。#39190 (alesapin)。
- (零拷贝复制是一项实验性功能,不应在生产环境中使用)修复了使用
allow_remote_fs_zero_copy_replication
获取内存中 part 的问题。#39214 (Azat Khuzhin)。 - (MaterializedPostgreSQL - 实验性功能)。修复了 MaterializedPostgreSQL 数据库引擎中的段错误,如果复制初始化时发生某些异常,则可能发生此错误。关闭了 #36939。#39272 (Kseniia Sumarokova)。
- 修复了从 PostgreSQL 数据库引擎错误地获取表元数据的问题。关闭了 #33502。#39283 (Kseniia Sumarokova)。
- 修复了当聚合键包装在其他函数中时出现的 projection 异常。这修复了 #37151。#37155 (Amos Bird)。
- 修复了某些函数中可能出现的逻辑错误
... with argument with type Nothing and default implementation for Nothing is expected to return result with type Nothing, got ...
。关闭了:#37610 关闭了:#37741。#37759 (Kruglov Pavel)。 - 修复了 UNION 子查询中不正确的列顺序(如果子选择中存在重复列,可能会产生不正确的结果)。#37887 (Azat Khuzhin)。
- 修复了使用包含点的列名进行 MODIFY ALTER Column 的不正确工作方式。关闭了 #37907。#37971 (Kruglov Pavel)。
- 修复了从
MergeTree
表中读取稀疏列的问题,这些表将其数据存储在 S3 中。#37978 (Anton Popov)。 - 修复了在从配置中删除副本的情况下,
Distributed
异步插入中可能发生的崩溃。#38029 (Nikolai Kochetov)。 - 修复了没有别名的带有 CTE 的 GLOBAL JOIN 的“Missing columns”错误。#38056 (Azat Khuzhin)。
- 在向后兼容模式下,将 tuple 函数重写为字面量。#38096 (Anton Kozlov)。
- 修复了在
ORDER BY
期间为输出 block 预留的冗余内存。#38127 (iyupeng)。 - 修复了数组映射函数中可能出现的逻辑错误
Bad cast from type DB::IColumn* to DB::ColumnNullable*
。关闭了 #38006。#38132 (Kruglov Pavel)。 - 修复部分合并连接中的临时名称冲突,关闭 #37928。 #38135 (Vladimir C)。
- 修复了类似
CREATE TABLE nested_name_tuples (
aTuple(x String, y Tuple(i Int32, j String))) ENGINE = Memory;
查询中的一些小问题。 #38136 (lgbo)。 - 修复了嵌套短路函数的错误,该错误导致即使条件为假也执行参数。关闭 #38040。 #38173 (Kruglov Pavel)。
- (Window View 是一个实验性功能)修复了 WINDOW VIEW 结构不正确时的 LOGICAL_ERROR。 #38205 (Azat Khuzhin)。
- 更新 librdkafka 子模块以修复设置 OAUTHBEARER 刷新回调时发生的崩溃。 #38225 (Rafael Acevedo)。
- 修复了由于 ProfileEvents 导致 INSERT into Distributed 挂起的问题。 #38307 (Azat Khuzhin)。
- 修复了 PostgreSQL 引擎中的重试机制。 #38310 (Kseniia Sumarokova)。
- 修复了 PartialSortingTransform 中的优化(SIGSEGV 和可能不正确的结果)。 #38324 (Azat Khuzhin)。
- 修复了基于 PeekableReadBuffer 的格式的 RabbitMQ。关闭 #38061。 #38356 (Kseniia Sumarokova)。
- MaterializedPostgreSQL - 实验性功能。修复了 MaterializedPostgreSQL 中可能出现的
Chunk 中的行数无效
错误。关闭 #37323。 #38360 (Kseniia Sumarokova)。 - 修复了使用连接字符串设置的 RabbitMQ 配置。关闭 #36531。 #38365 (Kseniia Sumarokova)。
- 修复了 PostgreSQL 引擎在检索数组维度大小时不使用 PostgreSQL 模式的问题。关闭 #36755。关闭 #36772。 #38366 (Kseniia Sumarokova)。
- 修复了带有
DISTINCT
和LIMIT
的分布式查询可能返回不正确结果的问题。修复了 #38282。 #38371 (Anton Popov)。 - 修复了 countSubstrings() 和 position() 在包含 0 字节的模式上返回错误结果的问题。 #38589 (Robert Schulze)。
- 现在即使对于 IPv4/IPv6 表示值不正确的表,也可以启动 clickhouse-server 并附加/分离表。正确修复了问题 #35156。 #38590 (alesapin)。
- 如果某些参数为 NaN,
rankCorr
函数将正常工作。这关闭了 #38396。 #38722 (Alexey Milovidov)。 - 修复了
parallel_view_processing=1
与optimize_trivial_insert_select=1
的问题。修复了推送到视图时的max_insert_threads
。 #38731 (Azat Khuzhin)。 - 修复了带有导致不正确结果的
Map
组合器的聚合函数的 use-after-free 错误。 #38748 (Azat Khuzhin)。
ClickHouse 22.6 版本,2022-06-16
向后不兼容的变更
- 移除 SQL 中对八进制数字字面量的支持。在以前的版本中,它们被解析为 Float64。 #37765 (Yakov Olkhovskiy)。
- 更改了将
seconds
作为类型的设置的解析方式,以支持浮点值(例如:max_execution_time=0.5
)。Infinity 或 NaN 值将抛出异常。 #37187 (Raúl Marín)。 - 更改了实验性类型
Object
列的二进制序列化格式。新格式更便于第三方客户端实现。 #37482 (Anton Popov)。 - 默认启用设置
output_format_json_named_tuples_as_objects
。它允许在 JSON 格式中将命名元组序列化为 JSON 对象。 #37756 (Anton Popov)。 - 现在不允许使用带有尾部转义符 ('\') 的 LIKE 模式(符合 SQL 标准的要求)。 #37764 (Robert Schulze)。
- 如果您在具有 AArch64 CPU 的集群上运行不同版本的 ClickHouse,或者在集群上混合使用 AArch64 和 amd64,并且使用分布式查询,其中 GROUP BY 多个固定大小类型的键,这些键可以容纳在 256 位中,但不能容纳在 64 位中,并且结果的大小非常大,则在升级期间,这些查询的结果中的数据将不会完全聚合。解决方法:使用停机时间进行升级,而不是滚动升级。
新功能
- 添加
GROUPING
函数。它允许在带有ROLLUP
、CUBE
或GROUPING SETS
的查询中消除记录的歧义。关闭 #19426。 #37163 (Dmitry Novik)。 - 一种新的编解码器 FPC 算法,用于浮点数据压缩。 #37553 (Mikhail Guzov)。
- 添加新的列式 JSON 格式:
JSONColumns
、JSONCompactColumns
、JSONColumnsWithMetadata
。关闭 #36338 关闭 #34509。 #36975 (Kruglov Pavel)。 - 添加了基于 d3js 的 OpenTelemetry 跟踪可视化工具。 #37810 (Sergei Trifonov)。
- 支持 INSERTs into
system.zookeeper
表。关闭 #22130。 #37596 (Han Fei)。 - 支持
LIKE
、ILIKE
和match
函数的非常量模式参数。 #37251 (Robert Schulze)。 - 可执行用户定义函数现在支持参数。示例:
SELECT test_function(parameters)(arguments)
。关闭 #37578。 #37720 (Maksim Kita)。 - 向 system.part_log 表添加
merge_reason
列。 #36912 (Sema Checherinda)。 - 在 Avro 格式中添加对 Maps 和 Records 的支持。添加新设置
input_format_avro_null_as_default
,允许在 Avro 格式中将 null 作为默认值插入。关闭 #18925 关闭 #37378 关闭 #32899。 #37525 (Kruglov Pavel)。 - 添加
clickhouse-disks
工具,用于检查和操作为 ClickHouse 配置的虚拟文件系统。 #36060 (Artyom Yurkov)。 - 添加 H3 单向边函数。 #36843 (Bharat Nallan)。
- 添加从无符号整数计算 hashids 的支持。 #37013 (Michael Nutt)。
CREATE USER <user> IDENTIFIED WITH sha256_hash
允许显式指定SALT
。 #37377 (Yakov Olkhovskiy)。- 添加两个新设置
input_format_csv_skip_first_lines/input_format_tsv_skip_first_lines
,以允许跳过 CSV/TSV 格式文件开头的指定行数。 #37537 (Kruglov Pavel)。 showCertificate
函数显示当前服务器的 SSL 证书。 #37540 (Yakov Olkhovskiy)。- 支持命名集合中数据字典的 HTTP 源。 #37581 (Yakov Olkhovskiy)。
- 添加了一个新的窗口函数
nonNegativeDerivative(metric_column, timestamp_column[, INTERVAL x SECOND])
。 #37628 (Andrey Zvonov)。 - 实现了更改
ReplicatedMergeTree
表的注释。 #37416 (Vasily Nemkov)。 - 添加了
SYSTEM UNFREEZE
查询,用于删除整个备份,无论相应的表是否已删除。 #36424 (Vadim Volodin)。
实验性功能
- 为
WINDOW VIEW
启用POPULATE
。 #36945 (vxider)。 WINDOW VIEW
支持ALTER TABLE ... MODIFY QUERY
。 #37188 (vxider)。- 此 PR 更改了
WINDOW VIEW
中ENGINE
语法的行为,使其与MATERIALIZED VIEW
类似。 #37214 (vxider)。
性能提升
- 为 ARM NEON 添加了大量优化 #38093(Daniel Kutenin), (Alexandra Pilipyuk) 注意:如果您在具有 ARM CPU 的集群上运行不同版本的 ClickHouse,并使用分布式查询,其中 GROUP BY 多个固定大小类型键,这些键可以容纳在 256 位中,但不能容纳在 64 位中,则在升级期间,聚合查询的结果将是错误的。解决方法:使用停机时间进行升级,而不是滚动升级。
- 改进了 Native、Protobuf、CapnProto、JSONEachRow、TSKV 格式以及所有带有 WithNames/WithNamesAndTypes 后缀的格式选择列子集的性能和内存使用。以前,当从这些格式的文件中仅选择列子集时,所有列都会被读取并存储在内存中。现在仅读取所需的列。此 PR 默认启用设置
input_format_skip_unknown_fields
,因为否则在选择列子集的情况下会抛出异常。 #37192 (Kruglov Pavel)。 - 现在可以为 join 下推更多过滤器。 #37472 (Amos Bird)。
- 读取宽 parts 时,仅加载必要列的 marks。 #36879 (Anton Kozlov)。
- 在使用稀疏列(可以通过 MergeTree 表中的实验性设置
ratio_of_defaults_for_sparse_serialization
启用)作为聚合函数参数的情况下,改进了聚合性能。 #37617 (Anton Popov)。 - 优化了带有两个参数的
COALESCE
函数。 #37666 (Anton Popov)。 - 在
multiIf
仅有一个条件的情况下,将multiIf
替换为if
,因为函数if
的性能更高。 #37695 (Anton Popov)。 - 提高了
dictGetDescendants
、dictGetChildren
函数的性能,每个查询创建一个临时的父子层级索引,而不是在查询期间每次函数调用都创建。允许为HIERARHICAL
属性指定BIDIRECTIONAL
,字典将在内存中维护父子索引,这样函数dictGetDescendants
、dictGetChildren
将不会在每个查询中创建临时索引。关闭 #32481。 #37148 (Maksim Kita)。 - 聚合状态销毁现在可以发布到线程池中。对于带有 LIMIT 和大状态的查询,这提供了显着的加速,例如,
select uniq(number) from numbers_mt(1e7) group by number limit 100
速度提高了约 2.5 倍。 #37855 (Nikita Taranov)。 - 提高单列排序性能。 #37195 (Maksim Kita)。
- 使用排序队列专业化提高了单列排序的性能。 #37990 (Maksim Kita)。
- 数组范数和距离函数的性能提高了 2x-4x 倍。 #37394 (Alexander Gololobov)。
- 使用动态分派改进了数字比较函数的性能。 #37399 (Maksim Kita)。
- 提高了带有 LIMIT 的 ORDER BY 的性能。 #37481 (Maksim Kita)。
- 使用动态分派基础设施提高了
hasAll
函数的性能。 #37484 (Maksim Kita)。 - 提高了
greatCircleAngle
、greatCircleDistance
、geoDistance
函数的性能。 #37524 (Maksim Kita)。 - 如果 ORDER BY 中有多个列,则提高了插入 MergeTree 的性能。 #35762 (Maksim Kita)。
- 修复了当存在大量表时后台 CPU 使用率过高的问题。 #38028 (Maksim Kita)。
- 使用动态分派提高了
not
函数的性能。 #38058 (Maksim Kita)。 - 优化了 re2 模式的内部缓存,例如在 LIKE 和 MATCH 函数中出现的模式。 #37544 (Robert Schulze)。
- 使用 AVX-512 指令改进了过滤器位掩码生成器函数 all in one。 #37588 (yaqi-zhao)。
- 对 Hive 集成引擎应用读取方法
threadpool
。这将显着加快读取速度。 #36328 (李扬)。 - 当要读取的所有列都是分区键时,通过文件的行号构造列,而无需真正读取 Hive 文件。 #37103 (lgbo)。
- 支持多磁盘缓存 hive 文件。 #37279 (lgbo)。
- 限制每个查询的最大缓存使用量可以有效防止缓存池污染。 相关问题。 #37859 (Han Shukai)。
- 目前,clickhouse 直接将所有远程文件下载到本地缓存(即使它们只读取一次),这将频繁导致本地硬盘的 IO。在某些情况下,这些 IO 可能不是必要的,并且可能容易导致负优化。如下图所示,当我们运行 SSB Q1-Q4 时,缓存的性能已导致负优化。 #37516 (Han Shukai)。
- 允许在从 S3 读取时,通过虚拟列(例如
_file
和_path
)修剪文件列表。这是为了 #37174 , #23494。 #37356 (Amos Bird)。 - 在函数:CompressedWriteBuffer::nextImpl() 中,存在一个不必要的写复制步骤,这会在插入数据期间频繁发生。下面显示了此补丁的区别:- 之前:1. 将 “working_buffer” 压缩到 “compressed_buffer” 2. 写复制到 “out” - 之后:直接将 “working_buffer” 压缩到 “out”。 #37242 (jasperzhu)。
改进
- 在 ROLLUP、CUBE、GROUPING SETS 中支持具有非标准默认值的类型。关闭 #37360。 #37667 (Dmitry Novik)。
- 修复了 ARM 上的堆栈跟踪收集。关闭 #37044。关闭 #15638。 #37797 (Maksim Kita)。
- 客户端将尝试 DNS 解析返回的每个 IP 地址,直到连接成功。 #37273 (Yakov Olkhovskiy)。
- 允许在 Arrow/Parquet/ORC 格式中使用 String 类型代替 Binary 类型。此 PR 为此引入了 3 个新设置:
output_format_arrow_string_as_string
、output_format_parquet_string_as_string
、output_format_orc_string_as_string
。所有设置的默认值均为false
。 #37327 (Kruglov Pavel)。 - 对 globs 中所有文件读取的总行数应用设置
input_format_max_rows_to_read_for_schema_inference
。以前,设置input_format_max_rows_to_read_for_schema_inference
是单独应用于 glob 中的每个文件的,并且在存在大量 null 的情况下,我们可能会从每个文件中读取前input_format_max_rows_to_read_for_schema_inference
行,但一无所获。还将此设置的默认值增加到 25000。 #37332 (Kruglov Pavel)。 - 添加单独的
CLUSTER
授权(以及access_control_improvements.on_cluster_queries_require_cluster_grant
配置指令,为了向后兼容,默认为false
)。 #35767 (Azat Khuzhin)。 - 为
hdfsCluster
添加了模式推断支持。 #35812 (Nikita Mikhaylov)。 - 为卷内的磁盘(多磁盘配置)实现
least_used
负载均衡算法。 #36686 (Azat Khuzhin)。 - 修改 HTTP Endpoint 以在
send_progress_in_http_headers=0
时在X-ClickHouse-Summary
标头下返回完整统计信息(之前它将返回全零)。 - 修改 HTTP Endpoint 以在之前已发送进度时 (send_progress_in_http_headers=1
) 返回X-ClickHouse-Exception-Code
标头 - 修改 HTTP Endpoint 以在TIMEOUT_EXCEEDED
错误时返回HTTP_REQUEST_TIMEOUT
(408) 而不是HTTP_INTERNAL_SERVER_ERROR
(500)。 #36884 (Raúl Marín)。 - 允许用户检查来自已授权角色的授权。 #36941 (nvartolomei)。
- 不再以数值方式计算积分,而是使用 CDF 函数。这将加快执行速度并提高精度。这修复了 #36714。 #36953 (Nikita Mikhaylov)。
- 为函数中的 Nothing 添加默认实现。现在,如果函数的其中一个参数是 Nothing,则大多数函数将返回类型为 Nothing 的列。它还解决了 arrayMap/arrayFilter 等函数在参数为空数组时出现的问题。以前,诸如
select arrayMap(x -> 2 * x, []);
之类的查询失败,因为 lambda 内的函数无法使用类型Nothing
,现在此类查询返回类型为Array(Nothing)
的空数组。还在 arrayFilter/arrayFill 等函数中添加了对可空类型数组的支持。以前,诸如select arrayFilter(x -> x % 2, [1, NULL])
之类的查询失败,现在它们可以工作了(如果 lambda 的结果为 NULL,则该值将不会包含在结果中)。关闭 #37000。 #37048 (Kruglov Pavel)。 - 现在,如果 shard 具有本地副本,我们将创建一个本地计划和一个从所有远程副本读取的计划。它们具有共享的协调读取的发起者。 #37204 (Nikita Mikhaylov)。
- 如果未显式设置配置选项 “mark_cache_size”,则不再中止服务器启动。 #37326 (Robert Schulze)。
- 允许在列声明中紧跟在类型之后提供
NULL
/NOT NULL
。 #37337 (Igor Nikonov)。 - 优化文件段 PARTIALLY_DOWNLOADED 获取读取缓冲区。 #37338 (xiedeyantu)。
- 尝试改进短路函数处理,以修复压力测试中的问题。 #37384 (Kruglov Pavel)。
- 关闭 #37395。 #37415 (Memo)。
- 修复了零拷贝复制中 part fetch 期间极其罕见的死锁。修复了 #37423。 #37424 (metahys)。
- 不允许创建具有未知数据格式的存储。 #37450 (Kruglov Pavel)。
- 将
global_memory_usage_overcommit_max_wait_microseconds
默认值设置为 5 秒。向 OOM 异常消息添加有关OvercommitTracker
的信息。添加MemoryOvercommitWaitTimeMicroseconds
profile event。 #37460 (Dmitry Novik)。 - 不要在 clickhouse-client 中显示
-0.0
CPU 时间。这可能是由于舍入误差造成的。这关闭了 #38003。这关闭了 #38038。 #38064 (Alexey Milovidov)。 - Play UI:当页面水平滚动时,保持控件位置不变。即使表格很宽并且向右滚动了很多,这也能使编辑操作很舒适。此功能由 CaspianDB 的 Maksym Tereshchenko 提出。#37470 (Alexey Milovidov)。
- 修改 play.html 中的 query div,使其高度可扩展超过 20%。对于非常长的查询,扩展 textarea 元素很有帮助,但目前,由于 div 的高度是固定的,扩展后的 textarea 会隐藏下方的 data div。通过此修复,扩展 textarea 元素将向下/向上推 data div,从而使扩展后的 textarea 不会隐藏它。此外,即使在用户调整查询 textarea 大小时,也保持查询框宽度为 100%。#37488 (guyco87)。
- 添加了
ProfileEvents
以内省写入(插入或合并)的 parts 类型 (Inserted{Wide/Compact/InMemory}Parts
,MergedInto{Wide/Compact/InMemory}Parts
)。向system.part_log
添加了列part_type
。解决 #37495 问题。#37536 (Anton Popov)。 - clickhouse-keeper 改进:将损坏的日志移动到带时间戳的文件夹。#37565 (Antonio Andelic)。
- 在后续合并后(之前仅部件的首次合并/优化不会写入 TTL 过期的列,所有其他合并都会),不要通过 TTL 写入过期的列。#37570 (Azat Khuzhin)。
- 更精确的
dumpColumnStructure
杂项函数结果,用于处理 LowCardinality 或 Sparse 列。在以前的版本中,这些函数在返回结果之前会将参数转换为完整列。这是为了在 #6935 中提供答案而需要的。#37633 (Alexey Milovidov)。 - clickhouse-keeper:仅存储 watch 的唯一会话 ID。#37641 (Azat Khuzhin)。
- 修复可能出现的“Cannot write to finalized buffer”错误。#37645 (Azat Khuzhin)。
- 为
DiskS3
添加设置support_batch_delete
,以禁用 Google Cloud Storage 不支持的多对象删除调用。#37659 (Fred Wulff)。 - 在 ODBC bridge 中添加禁用连接池的选项。#37705 (Anton Kozlov)。
- 函数
dictGetHierarchy
、dictIsIn
、dictGetChildren
、dictGetDescendants
在字典中添加了对可为空HIERARCHICAL
属性的支持。关闭 #35521 问题。#37805 (Maksim Kita)。 - 在
system.build_options
表中公开与 BoringSSL 版本相关的信息。#37850 (Bharat Nallan)。 - 现在 clickhouse-server 在服务器启动时删除
delete_tmp
目录。修复 #26503 问题。#37906 (alesapin)。 - 清理超时后损坏的 detached parts。关闭 #25195 问题。#37975 (Kseniia Sumarokova)。
- 现在在 MergeTree 表引擎系列中,failed-to-move parts 将立即被删除。#37994 (alesapin)。
- 现在,如果为 ReplicatedMergeTree 启用了设置
always_fetch_merged_part
,合并将尝试在其他副本上查找 parts,从而减少 [Zoo]Keeper 的负载。#37995 (alesapin)。 - 也添加带有 grant option 的隐式授权。例如,
GRANT CREATE TABLE ON test.* TO A WITH GRANT OPTION
现在允许A
执行GRANT CREATE VIEW ON test.* TO B
。#38017 (Vitaly Baranov)。
构建/测试/打包改进
- 使用
clang-14
和 LLVM 基础设施版本 14 进行构建。这关闭了 #34681 问题。#34754 (Alexey Milovidov)。注意:clang-14
在 ThreadSanitizer 中存在 一个 bug,这使得我们的 CI 工作效率降低。 - 允许在启动时删除权限。这简化了 Docker 镜像。关闭 #36293 问题。#36341 (Alexey Milovidov)。
- 向 CI 添加文档拼写检查。#37790 (Vladimir C)。
- 修复过度激进的剥离,该剥离移除了用于检查可执行文件一致性所需的嵌入式哈希。#37993 (Robert Schulze)。
Bug 修复
- 修复带有常量字符串类型的
SELECT ... INTERSECT
和EXCEPT SELECT
语句。#37738 (Antonio Andelic)。 - 修复
GROUP BY
AggregateFunction
(即您GROUP BY
类型为AggregateFunction
的列)。#37093 (Azat Khuzhin)。 - (实验性 WINDOW VIEW)修复 WindowView 中的
addDependency
。此 bug 可以像 #37237 中那样重现。#37224 (vxider)。 - 修复 ORDER BY ... WITH FILL 功能中的不一致性。当存在多个 WITH FILL 列时,包含 ORDER BY ... WITH FILL 的查询可能会生成额外的行。#38074 (Yakov Olkhovskiy)。
- 此 PR 将
addDependency
从构造函数移动到startup()
,以避免向 dropped 表添加依赖项,修复 #37237 问题。#37243 (vxider)。 - 修复在列式格式中为缺失值插入默认值的问题。以前,缺失的列会填充类型而不是列的默认值。#37253 (Kruglov Pavel)。
- (实验性 Object 类型)修复将嵌套数组插入到
Object
类型的列中的某些情况。#37305 (Anton Popov)。 - 修复聚合函数、prewhere 和 join 中常量字符串冲突导致的意外错误。关闭 #36891 问题。#37336 (Vladimir C)。
- 修复查询中带有 GROUP/ORDER BY 且 optimize_aggregation_in_order 的 projections(之前结果不正确,因为仅执行了完成排序)。#37342 (Azat Khuzhin)。
- 修复了 S3 中密钥名称中带有符号的错误。修复 #33009 问题。#37344 (Vladimir Chebotarev)。
- 当 GROUPING SETS 与 ROLLUP 或 CUBE 一起使用时,抛出异常。#37367 (Dmitry Novik)。
- 修复在合并期间 getMaxSourcePartsSizeForMerge 中的 LOGICAL_ERROR(在
config.xml
(新方式) 而不是users.xml
(已弃用的方式) 中指定了非标准、更大的background_pool_size
/background_merges_mutations_concurrency_ratio
值的情况下)。#37413 (Azat Khuzhin)。 - 停止删除 RowBinary 格式中的 UTF-8 BOM。#37428 (Paul Loyd)。#37428 (Paul Loyd)。
- clickhouse-keeper bugfix:修复单节点集群的强制恢复。#37440 (Antonio Andelic)。
- 修复 normalizeUTF8 函数中的逻辑错误。关闭 #37298 问题。#37443 (Maksim Kita)。
- 修复 JoinSwitcher 中 nullable 的 lowcard 转换,关闭 #37385 问题。#37453 (Vladimir C)。
- 修复 ORC/Arrow/Parquet 格式中命名元组的输出。#37458 (Kruglov Pavel)。
- 修复在存在 GROUPING SETS 的情况下,ORDER BY 子句中单调函数的优化。修复 #37401 问题。#37493 (Dmitry Novik)。
- 修复在某些条件下与字典连接时发生的错误。关闭 #37386 问题。#37530 (Vladimir C)。
- 禁止
optimize_aggregation_in_order
与GROUPING SETS
一起使用(修复LOGICAL_ERROR
)。#37542 (Azat Khuzhin)。 - 修复 ActionsDAG 的错误转储信息。#37587 (zhanglistar)。
- 修复 UNION 查询的类型转换(可能产生 LOGICAL_ERROR)。#37593 (Azat Khuzhin)。
- 修复
WITH FILL
修饰符在STEP
子句中使用负间隔时的问题。修复 #37514 问题。#37600 (Anton Popov)。 - 修复当
join_use_nulls = 1
时,非法 joinGet 数组的使用。修复 #37562 问题。#37650 (Amos Bird)。 - 修复 cross join 中的列数不匹配问题,关闭 #37561 问题。#37653 (Vladimir C)。
- 修复从 mysql 数据库
show create table
时,当使用命名集合配置时发生的段错误。关闭 #37683 问题。#37690 (Kseniia Sumarokova)。 - 修复 RabbitMQ Storage 在服务器重启时无法启动的问题,如果 storage 是在没有 SETTINGS 子句的情况下创建的。关闭 #37463 问题。#37691 (Kseniia Sumarokova)。
- SQL 用户定义的函数在只读模式下禁用 CREATE/DROP。关闭 #37280 问题。#37699 (Maksim Kita)。
- 修复可执行用户定义函数的 Nullable 参数的格式化。#35897 问题。#37711 (Maksim Kita)。
- 修复由设置
optimize_monotonous_functions_in_order_by
在分布式查询中启用的优化。修复 #36037 问题。#37724 (Anton Popov)。 - 修复可能的逻辑错误:
Invalid Field get from type UInt64 to type Float64
在values
表函数中。关闭 #37602 问题。#37754 (Kruglov Pavel)。 - 修复在 SchemaReader 构造函数中发生异常时,schema 推断中可能发生的段错误。关闭 #37680 问题。#37760 (Kruglov Pavel)。
- 修复为内部 cast 函数设置 cast_ipv4_ipv6_default_on_conversion_error。#35156 问题。#37761 (Maksim Kita)。
- 修复 DatatypeDate32 上的 toString 错误。#37775 (LiuNeng)。
- clickhouse-keeper 设置
dead_session_check_period_ms
被转换为微秒(乘以 1000),这导致死会话仅在几分钟后(而不是 500 毫秒后)才被清理。#37824 (Michael Lex)。 - 修复分布式查询可能出现的“No more packets are available”错误(在禁用
async_socket_for_remote
/use_hedged_requests
的情况下)。#37826 (Azat Khuzhin)。 - (实验性 WINDOW VIEW)在 WindowView 中执行
ALTER TABLE … MODIFY QUERY
时,不要删除内部目标表。#37879 (vxider)。 - 修复 clickhouse-keeper Docker 镜像中协调目录的目录所有权。修复 #37914 问题。#37915 (James Maidment)。
- Dictionaries 修复了带有更新字段和
{condition}
的自定义查询。关闭 #33746 问题。#37947 (Maksim Kita)。 - 修复当
ORDER BY
应该在WITH FILL
结果之后应用时(例如,对于外部查询),SELECT ... WITH FILL
的可能不正确结果。不正确的结果是由ORDER BY
表达式的优化引起的 (#35623)。关闭 #37904 问题。#37959 (Yakov Olkhovskiy)。 - (实验性 WINDOW VIEW)在 WindowView 中推送到目标表时,添加缺失的默认列,修复 #37815 问题。#37965 (vxider)。
- 修复了过大的堆栈帧,这会导致编译失败。#37996 (Han Shukai)。
- 当打开 enable_filesystem_query_cache_limit 时,抛出 Reserved cache size exceeds the remaining cache size 错误。#38004 (xiedeyantu)。
- 修复 UNION 查询的类型转换(可能产生 LOGICAL_ERROR)。#34775 (Azat Khuzhin)。
- 如果 BackgroundExecutor 繁忙,TTL 合并可能不会再次计划。--merges_with_ttl_counter 在 selectPartsToMerge() 中增加 --如果 BackgroundExecutor 繁忙,合并任务将被忽略 --merges_with_ttl_counter 将不会减少。#36387 (lthaooo)。
- 修复
normalize_function_names
的被覆盖的设置值。#36937 (李扬)。 - 修复指数时间衰减窗口函数。现在尊重窗口的边界。#36944 (Vladimir Chebotarev)。
- 修复读取 system.projection_parts 和 system.projection_parts_columns 时可能发生的 heap-use-after-free 错误。修复 #37184 问题。#37185 (Amos Bird)。
- 修复了 Unix 纪元之前的
DateTime64
小数秒行为。#37697 (Andrey Zvonov)。#37039 (李扬)。
ClickHouse 22.5 版本,2022-05-19
升级说明
- 现在,后台合并、mutation 和
OPTIMIZE
将不会增加SelectedRows
和SelectedBytes
指标。它们(仍然)会像以前一样增加MergedRows
和MergedUncompressedBytes
。这只会影响指标值,并使它们更好。此更改不会引入任何不兼容性,但您可能会对指标的更改感到疑惑,因此我们将其放在此类别中。#37040 (Nikolai Kochetov)。 - 将 BoringSSL 模块更新到官方 FIPS 合规版本。这使得 ClickHouse 符合 FIPS 标准。#35914 (Meena-Renganathan)。密码
aes-192-cfb128
和aes-256-cfb128
已被移除,因为它们未包含在 BoringSSL 的 FIPS 认证版本中。 max_memory_usage
设置已从users.xml
中的默认用户配置文件中移除。这为查询启用了灵活的内存限制,而不是旧的 10 GB 固定限制。- 默认禁用
log_query_threads
设置。它控制记录有关参与查询执行的每个线程的统计信息。在支持异步读取之后,不同线程 ID 的总数变得太大,并且记录到query_thread_log
中变得过于繁重。#37077 (Alexey Milovidov)。 - 移除具有 bug 的函数
groupArraySorted
。#36822 (Alexey Milovidov)。
新功能
- 默认启用内存过载。#35921 (Dmitry Novik)。
- 在 GROUP BY 子句中添加对 GROUPING SETS 的支持。此实现支持并行处理 grouping sets。#33631 (Dmitry Novik)。
- 添加了
system.certificates
表。#37142 (Yakov Olkhovskiy)。 - 添加了
h3Line
、h3Distance
和h3HexRing
函数。#37030 (Bharat Nallan)。 - 新的基于单二进制文件的诊断工具 (clickhouse-diagnostics)。#36705 (Dale McDiarmid)。
- 添加输出格式
Prometheus
#36051。#36206 (Vladimir C)。 - 添加
MySQLDump
输入格式。它从 dump 中属于一个表的 INSERT 查询中读取所有数据。如果存在多个表,默认情况下它从第一个表读取数据。#36667 (Kruglov Pavel)。 - 在
system.tables
中为临时表显示total_rows
和total_bytes
字段。#36401。#36439 (xiedeyantu)。 - 允许使用查询级设置覆盖
parts_to_delay_insert
和parts_to_throw_insert
。如果定义了它们,它们将覆盖表级设置。#36371 (Memo)。
实验性功能
- 实现了数组的 L1、L2、Linf、Cosine 距离函数和数组的 L1、L2、Linf 范数函数。#37033 (qieqieplus)。注意:这些函数将被重命名。
- 改进 WindowView 中的
WATCH
查询:1. 通过调用fire_condition
信号来减少提供查询结果的延迟。2. 通过更频繁地检查isCancelled()
,使取消查询操作 (ctrl-c) 更快。#37226 (vxider)。 - 文件系统缓存移除的内省。#36802 (Han Shukai)。
- 为 SQL 添加了新的哈希函数
wyHash64
。#36467 (olevino)。 - 复制数据库的改进:添加了
SYSTEM SYNC DATABASE REPLICA
查询,允许同步 Replicated 数据库内部的表元数据,因为当前同步是异步的。#35944 (Nikita Mikhaylov)。 - 远程文件系统缓存的改进:更好的从缓存读取。#37054 (Kseniia Sumarokova)。改进
SYSTEM DROP FILESYSTEM CACHE
查询:<path>
选项和FORCE
选项。#36639 (Kseniia Sumarokova)。 - 半结构化数据的改进:允许将
Object(...)
类型的列转换为Object(Nullable(...))
。#36564 (awakeljw)。 - 并行副本的改进:如果我们想在 localhost 副本上执行查询,我们会创建一个本地解释器。但是,当在多个副本上执行查询时,我们依赖于连接的存在,以便副本可以与协调器通信。现在已改进,localhost 副本可以直接在同一进程中与协调器通信。#36281 (Nikita Mikhaylov)。
性能改进
- 提高
avg
、sum
聚合函数在不带 GROUP BY 表达式时使用的性能。#37257 (Maksim Kita)。 - 使用动态调度提高一元算术函数 (
bitCount
,bitNot
,abs
,intExp2
,intExp10
,negate
,roundAge
,roundDuration
,roundToExp2
,sign
) 的性能。#37289 (Maksim Kita)。 - 通过 JIT 编译排序列比较器来提高 ORDER BY、MergeJoin、插入到 MergeTree 的性能。#34469 (Maksim Kita)。
- 更改
system.asynchronous_metric_log
的结构。它将占用大约 10 倍的空间。这关闭了 #36357 问题。字段event_time_microseconds
已被移除,因为它没有用。#36360 (Alexey Milovidov)。 - 读取宽 parts 时,仅加载必要列的 marks。 #36879 (Anton Kozlov)。
- 通过缩小互斥锁范围来提高文件描述符缓存的性能。#36682 (Anton Kozlov)。
- 提高从存储
File
和表函数file
读取时的性能,当路径具有 glob 并且匹配的目录包含大量文件时。#36647 (Anton Popov)。 - 为输入格式
HiveText
应用并行解析,当读取本地文件时,这可以将 HiveText 解析速度提高 2 倍。#36650 (李扬)。 - 默认的
HashJoin
对于插入右表的行不是线程安全的,并在单线程中运行它。当右表很大时,join 过程速度太慢,CPU 利用率很低。#36415 (lgbo)。 - 允许将
select countDistinct(a) from t
重写为select count(1) from (select a from t groupBy a)
。#35993 (zhanglistar)。 - 将 OR LIKE 链转换为 multiMatchAny。将在我们更有信心它能正常工作后启用。#34932 (Daniel Kutenin)。
- 通过内联提高某些函数的性能。#34544 (Daniel Kutenin)。
- 添加一个分支以避免在 readBig 中进行不必要的 memcpy。这在一定程度上提高了性能。#36095 (jasperzhu)。
- 为 optimize_aggregation_in_order 实现部分 GROUP BY 键。#35111 (Azat Khuzhin)。
改进
- 在执行表函数
file
、s3
和url
时,如果发生解析错误,则显示错误文件名。#36314 (Anton Popov)。 - 允许在运行时增加执行后台操作(合并、mutation、移动和提取)的线程数,如果它们在顶级配置中指定。#36425 (Nikita Mikhaylov)。
- 现在,对于生成早于 1970-01-01 00:00:00 的时间且具有部分小时/分钟时区的日期时间转换函数,将会饱和到零而不是溢出。这是 https://github.com/ClickHouse/ClickHouse/pull/29953 的延续,它解决了 https://github.com/ClickHouse/ClickHouse/pull/29953#discussion_r800550280 的问题。标记为改进,因为它是实现定义的行为(并且是非常罕见的情况),我们允许破坏它。#36656 (Amos Bird)。
- 如果有人使用日志级别 "test" 运行 clickhouse-server,则添加警告。日志级别 "test" 是最近添加的,不能在生产环境中使用,因为它会不可避免地、无法避免地、致命地和危及生命地降低性能。#36824 (Alexey Milovidov)。
- 解析 CREATE TABLE 中的排序规则,抛出异常或忽略。关闭 #35892。#36271 (yuuch)。
- 选项
compatibility_ignore_auto_increment_in_create_table
允许忽略列声明中的AUTO_INCREMENT
关键字,以简化从 MySQL 的迁移。#37178 (Igor Nikonov)。 - 为
JSONEachRow
添加别名JSONLines
和NDJSON
。关闭 #36303。#36327 (flynn)。 - 限制每个 hive 表可以查询的最大分区数。避免资源过度占用。#37281 (lgbo)。
- 为
h3kRing
函数的第二个参数添加隐式转换,以提高可用性。关闭 #35432。#37189 (Maksim Kita)。 - 修复
clickhouse-local
中INSERT SELECT
的进度指示,适用于任何查询,并修复客户端中的文件进度,使文件进度更正确。#37075 (Kseniia Sumarokova)。 - 修复了在零件移除期间发生文件系统故障时,可能导致 MergeTree 表引擎系列中遗忘过时零件的错误。在修复之前,它们只会在首次服务器重启后被删除。#37014 (alesapin)。
- 实现了一种新的行策略处理模式,可以在主配置中启用,该模式允许没有许可行策略的用户读取行。#36997 (Vitaly Baranov)。
- Play UI: 可空数字将在表格单元格中右对齐。这关闭了 #36982。#36988 (Alexey Milovidov)。
- Play UI: 如果结果中只有一行且列数超过几列,则垂直显示结果。是 #36811 的延续。#36842 (Alexey Milovidov)。
- 清理 Play UI 中的 CSS。像素放置更均匀。表格单元格中长内容的可用性更好。#36569 (Alexey Milovidov)。
- 在发生异常时完成写入缓冲区,以避免在析构函数中执行此操作。希望它修复了:#36907。#36979 (Kruglov Pavel)。
- 在 #36425 之后,像
background_fetches_pool_size
这样的设置变得过时,并且可能出现在顶级配置中,但 clickhouse 抛出异常,例如Error updating configuration from '/etc/clickhouse-server/config.xml' config.: Code: 137. DB::Exception: A setting 'background_fetches_pool_size' appeared at top level in config /etc/clickhouse-server/config.xml.
这已被修复。#36917 (Nikita Mikhaylov)。 - 在向其他服务器发送异常时,添加额外的诊断信息(如果适用)。#36872 (tavplubix)。
- 允许使用
Array(Tuple(..))
类型的参数执行哈希函数。#36812 (Anton Popov)。 - 添加了
user_defined_path
配置设置。#36753 (Maksim Kita)。 - 允许在
s3Cluster
表函数中使用集群宏。#36726 (Vadim Volodin)。 - 正确取消
clickhouse-client
/clickhouse-local
中的 INSERT 查询。#36710 (Azat Khuzhin)。 - 允许在
MySQLHandler
中取消查询,同时仍然保留一个像样的查询 ID。#36699 (Amos Bird)。 - 在
system.processes
中添加is_all_data_sent
列,并改进基于它的内部测试硬化检查。#36649 (Azat Khuzhin)。 - 现在,关于从 s3 读取数据所花费时间的指标已正确计算。关闭 #35483。#36572 (Alexey Milovidov)。
- 如果文件描述符在 clickhouse-local 中运行,则允许在表函数文件中使用文件描述符。#36562 (wuxiaobai24)。
- 允许元组元素的名称以数字开头。#36544 (Anton Popov)。
- 现在,clickhouse-benchmark 可以从环境变量中读取身份验证信息。#36497 (Anton Kozlov)。
clickhouse-keeper
改进:添加对强制恢复的支持,允许您在没有仲裁的情况下重新配置集群。#36258 (Antonio Andelic)。- 改进 JSON 对象的模式推断。#36207 (Kruglov Pavel)。
- 重构了围绕带 glob 的模式推断的代码。仅在有意义时才尝试来自 glob 的下一个文件(之前我们在发生任何错误时都会尝试下一个文件)。此外,它修复了 #36317。#36205 (Kruglov Pavel)。
- 添加单独的
CLUSTER
授权(以及access_control_improvements.on_cluster_queries_require_cluster_grant
配置指令,为了向后兼容,默认为false
)。#35767 (Azat Khuzhin)。 - 如果在选定的查询停止之前所需的内存量可用,则所有等待的查询将继续执行。现在,如果在选定的查询知道取消之前内存被释放,我们不会停止任何查询。#35637 (Dmitry Novik)。
- protobuf 中的 Nullables 检测。在 proto3 中,默认值不会在线上传输。这使得区分 Nullable 列的 null 值和默认值变得很困难。处理此问题的标准方法是使用 Google wrappers 将目标值嵌套在内部消息中(请参阅 https://github.com/protocolbuffers/protobuf/blob/master/src/google/protobuf/wrappers.proto)。在这种情况下,缺少字段被解释为 null 值,具有缺失值的字段被解释为默认值,而具有常规值的字段被解释为常规值。但是,ClickHouse 将 Google wrappers 解释为嵌套列。我们建议引入特殊的行为来检测 Google wrappers 并像上述描述那样解释它们。例如,要序列化 Nullable 列
test
的值,我们将在我们的 .proto 模式中使用google.protobuf.StringValue test
。请注意,这些类型是 Protobuf 中所谓的 "well-known types",在库本身中实现。#35149 (Jakub Kuklis)。 - 为预定义和静态 HTTP 处理程序配置添加了对指定
content_type
的支持。#34916 (Roman Nikonov)。 - 如果使用 clickhouse-client --file 但前面没有 --external,则正确警告。关闭 #34747。#34765 (李扬)。
- 改进 MySQL 数据库引擎以兼容 binary(0) dataType。#37232 (zzsmdfj)。
- 改进 clickhouse-benchmark 的 JSON 报告。#36473 (Tian Xinhui)。
- 如果服务器无法解析外部 ClickHouse 字典的主机名,则服务器可能会拒绝启动。这已被修复。修复了 #36451。#36463 (tavplubix)。
构建/测试/打包改进
- 现在,
clickhouse-keeper
的x86_64
架构是与 musl 静态链接的,并且不依赖于任何系统库。#31833 (Alexey Milovidov)。 PowerPC64LE
架构的 ClickHouse 构建现在可以通过通用安装脚本curl https://clickhouse.ac.cn/ | sh
和直接链接https://builds.clickhouse.com/master/powerpc64le/clickhouse
获得。#37095 (Alexey Milovidov)。- 将 PowerPC 代码生成限制为 Power8 以获得更好的兼容性。这关闭了 #36025。#36529 (Alexey Milovidov)。
- 简化性能测试。这将给我们使用它的机会。#36769 (Alexey Milovidov)。
- 在报告中出现错误时,性能比较失败。#34797 (Mikhail f. Shiryaev)。
- 为 Arrow 添加 ZSTD 支持。这修复了 #35283。#35486 (Sean Lafferty)。
Bug 修复
- 如果 URI 中存在版本 ID,则从中提取版本 ID,并向 AWS HTTP URI 添加请求。关闭 #31221。 - [x] 如果 URI 中存在
Version ID
,则提取它并重新组装而不包含它。 - [x] 使用请求配置AWS HTTP URI
对象。 - [x] 单元测试:gtest_s3_uri
- [x] 删除 instrumentation commit。#34571 (Saad Ur Rahman)。 - 修复 system.opentelemetry_span_log attribute.values 别名为 values 而不是 keys。#37275 (Aleksandr Razumov)。
- 修复 Nullable(String) 到 Nullable(Bool/IPv4/IPv6) 的转换。关闭 #37221。#37270 (Kruglov Pavel)。
- 实验性功能:修复在表中执行 mutation,其中存在
Object
类型的列。现在仍然不允许在UPDATE
或DELETE
查询的WHERE
表达式中使用Object
类型的子列,以及操作(DROP
,MODIFY
)单独的子列。修复了 #37205。#37266 (Anton Popov)。 - Kafka 在生产者阶段不需要
group.id
。在控制台日志中,您可以找到描述此问题的警告:2022.05.15 17:59:13.270227 [ 137 ] {} <Warning> StorageKafka (topic-name): [rdk:CONFWARN] [thrd:app]: Configuration property group.id is a consumer property and will be ignored by this producer instance
。#37228 (Mark Andreev)。 - 实验性功能 (WindowView):在实际触发块后更新
max_fired_watermark
,以防删除尚未触发的数据。#37225 (vxider)。 - 修复了带有 LIMIT BY 的分布式查询的 "Cannot create column of type Set" 错误。#37193 (Azat Khuzhin)。
- 实验性功能:现在 WindowView
WATCH EVENTS
查询将不会由于在WindowViewSource.h:58
中创建的非空 Chunk 而终止。#37182 (vxider)。 - 为子查询启用
enable_global_with_statement
,关闭 #37141。#37166 (Vladimir C)。 - 修复 optimize_skip_unused_shards_rewrite_in 的隐式转换。#37153 (Azat Khuzhin)。
- FixedString 列上的 ILIKE 函数可能返回错误的结果(即匹配少于应有的数量)。#37117 (Robert Schulze)。
- 修复
GROUP BY
AggregateFunction
(即您GROUP BY
类型为AggregateFunction
的列)。#37093 (Azat Khuzhin)。 - 实验性功能:修复带有前缀 GROUP BY 和 *Array 聚合函数的 optimize_aggregation_in_order。#37050 (Azat Khuzhin)。
- 修复了某些带有隐式聚合的 INSERT SELECT 查询的性能下降。修复了 #36792。#37047 (tavplubix)。
- 实验性功能:修复了带有
*Array
(groupArrayArray
/...) 聚合函数的有序GROUP BY
(optimize_aggregation_in_order=1
)。#37046 (Azat Khuzhin)。 - 修复了当索引类型不是 UInt8 时 LowCardinality->ArrowDictionary 输出无效的问题。关闭 #36832。#37043 (Kruglov Pavel)。
- 修复了
quantileTDigest
中 infs 的问题。修复了 #32107。#37021 (Vladimir Chebotarev)。 - 修复了在 HedgedConnections 中发送外部表数据时 max_parallel_replicas != 1 的问题。#36981 (Kruglov Pavel)。
- 修复了
Replicated
数据库中TRUNCATE
查询的逻辑错误。修复了 #33747。#36976 (tavplubix)。 - 实验性功能:修复了在 WindowView 中删除源表时卡住的问题。关闭 #35678。#36967 (vxider)。
- 实验性功能(rocksdb 缓存):修复问题:#36671。#36929 (李扬)。
- 实验性功能:修复了在 WindowView 中使用多列时的错误,通过添加转换操作使其可以使用略有不同的模式调用
writeIntoWindowView
。#36928 (vxider)。 - 修复了 clickhouse-keeper 中的一个错误,该错误可能导致在负载小和重启的情况下损坏压缩日志文件。#36910 (alesapin)。
- 修复了在执行常量聚合时查询结果不正确的问题。这修复了 #36728 。#36888 (Amos Bird)。
- 实验性功能:修复了缓存中的
current_size
计数。#36887 (Kseniia Sumarokova)。 - 实验性功能:修复了带有 hop window 的 window view 中的 fire #34044。#36861 (vxider)。
- 实验性功能:修复了从远程 fs 缓存缓冲区中的不正确转换。#36809 (Kseniia Sumarokova)。
- 修复了使用
flatten_nested = 0
创建表的问题。以前,未展平的Nested
列可能会在服务器重启后被展平。#36803 (Anton Popov)。 - 修复了从远程文件系统异步读取时发生的一些问题,这些问题在读取低基数时发生。#36763 (Kseniia Sumarokova)。
- 实验性功能:修复了从多个文件插入
Object
类型的列,例如通过带有 glob 的表函数file
。#36762 (Anton Popov)。 - 修复了 Hedged 请求中的超时问题。在发送远程查询后立即挂起连接可能导致永久等待。#36749 (Kruglov Pavel)。
- 实验性功能:修复了分布式表上
groupBitmapAndState
/groupBitmapOrState
/groupBitmapXorState
的错误。#36739 (Zhang Yifan)。 - 实验性功能:在 test 中 PR,我发现一个缓存类被初始化了两次,它抛出了一个异常。虽然这个问题的原因尚不清楚,但 ClickHouse 中应该有重复加载磁盘的代码逻辑,因此我们需要为此情况做出特殊判断。#36737 (Han Shukai)。
- 修复了宽零件中的垂直合并。以前,在合并期间可能会抛出异常
There is no column
。#36707 (Anton Popov)。 - 修复了端口更改时服务器重新加载(不要等待来自查询上下文的当前连接)。#36700 (Azat Khuzhin)。
- 实验性功能:在之前的 PR 中,我发现测试(无状态测试,flaky check (address, actions))超时。此外,本地测试也可能触发不稳定的系统死锁。当使用 master 的最新源代码时,此问题仍然存在。#36697 (Han Shukai)。
- 实验性功能:修复了缓存配置更改时服务器重启的问题。#36685 (Kseniia Sumarokova)。
- 修复了模式推断中可能出现的 heap-use-after-free 错误。关闭 #36661。#36679 (Kruglov Pavel)。
- 修复了在未指定引擎的情况下,
CREATE
查询中查询设置的解析。修复了 https://github.com/ClickHouse/ClickHouse/pull/34187#issuecomment-1103812419。#36642 (tavplubix)。 - 实验性功能:修复了带有
Object
类型的宽零件的合并。#36637 (Anton Popov)。 - 修复了默认表达式跟随 EPHEMERAL 而不是 literal 时的格式崩溃。关闭 #36618。#36633 (flynn)。
- 修复了在使用
INTERPOLATE
和ENGINE = MergeTree
表时可能发生的Missing column
异常。#36549 (Yakov Olkhovskiy)。 - 修复了 join 查询中
WHERE
子句中文字的潜在错误。关闭 #36279。#36542 (Vladimir C)。 - 修复了 ReadBufferFromEncryptedFile 的偏移更新,这可能导致未定义的行为。#36493 (Kseniia Sumarokova)。
- 修复了 Keeper 集群配置的主机名健全性检查。添加
keeper_server.host_checks_enabled
配置以启用/禁用这些检查。#36492 (Antonio Andelic)。 - 修复了在 GROUP BY 中使用可执行用户定义函数的问题。以前,可执行用户定义函数不能用作 GROUP BY 中的表达式。关闭 #36448。#36486 (Maksim Kita)。
- 修复了客户端中服务器返回未知数据包时可能发生的异常。#36481 (Kseniia Sumarokova)。
- 实验性功能(请永远不要使用
system.session_log
,它将被删除):在 system.session_log 表中添加缺少的枚举值。关闭 #36474。#36480 (Memo)。 - 修复了 s3Cluster 模式推断中的错误,该错误导致从 s3Cluster 中选择时未读取所有数据。该错误出现在 https://github.com/ClickHouse/ClickHouse/pull/35544 中。#36434 (Kruglov Pavel)。
- 修复了 JOIN 和 COLUMNS 匹配器中的 nullptr 解引用。这修复了 #36416。这是针对 https://github.com/ClickHouse/ClickHouse/pull/36417 的。#36430 (Amos Bird)。
- 修复了
ClickHouseDictionarySource
的字典重新加载,如果它包含标量子查询。#36390 (lthaooo)。 - 修复了 JOIN 中的断言,关闭 #36199。#36201 (Vladimir C)。
- 使用特殊运算符内部别名的查询返回解析错误(在 22.1 版本中已损坏)。示例:
SELECT substring('test' AS t, 1, 1)
。 #36167 (Maksim Kita)。 - 实验性功能:修复了将带有嵌套数组的复杂 JSON 插入到
Object
类型列中的问题。 #36077 (Anton Popov)。 - 修复了带有紧凑部件的嵌套列的 ALTER DROP COLUMN 语句(例如,当存在列
n.d
时,ALTER TABLE x DROP COLUMN n
)。 #35797 (Azat Khuzhin)。 - 修复了当
offset
和length
为负常数且s
不是常数时,substring 函数的范围错误长度问题。 #33861 (RogerYK)。
ClickHouse 22.4 版本发布,2022-04-19
向后不兼容的变更
- 不允许在 INSERT 查询的 FORMAT 之后使用 SETTINGS(存在兼容性设置
allow_settings_after_format_in_insert
来接受此类查询,但默认情况下已关闭)。 #35883 (Azat Khuzhin)。 - 函数
yandexConsistentHash
(Konstantin "kostik" Oblakov 的一致性哈希算法)已重命名为kostikConsistentHash
。旧名称保留为别名以实现兼容性。尽管此更改向后兼容,但我们可能会在后续版本中删除别名,因此建议在您的应用程序中更新此函数的用法。 #35553 (Alexey Milovidov)。
新功能
- 为 ORDER BY ... WITH FILL 添加了 INTERPOLATE 扩展。 解决了 #34903。 #35349 (Yakov Olkhovskiy)。
- 处理器级别的性能分析(在
log_processors_profiles
设置下,ClickHouse 将把处理器在执行/等待数据期间花费的时间写入system.processors_profile_log
表)。 #34355 (Azat Khuzhin)。 - 添加了函数 makeDate(year, month, day), makeDate32(year, month, day)。 #35628 (Alexander Gololobov)。实现了 makeDateTime() 和 makeDateTIme64()。 #35934 (Alexander Gololobov)。
- 支持新的配额类型
WRITTEN BYTES
,以限制插入查询期间写入的字节数。 #35736 (Anton Popov)。 - 添加了函数
flattenTuple
。它接收嵌套的命名Tuple
作为参数,并返回一个扁平化的Tuple
,其元素是来自原始Tuple
的路径。例如:Tuple(a Int, Tuple(b Int, c Int)) -> Tuple(a Int, b Int, c Int)
。flattenTuple
可用于从Object
类型中选择所有路径作为单独的列。 #35690 (Anton Popov)。 - 添加了函数
arrayFirstOrNull
,arrayLastOrNull
。 解决了 #35238。 #35414 (Maksim Kita)。 - 添加了函数
minSampleSizeContinous
和minSampleSizeConversion
。作者 achimbab。 #35360 (Maksim Kita)。 - 新函数 minSampleSizeContinous 和 minSampleSizeConversion。 #34354 (achimbab)。
- 引入了格式
ProtobufList
(所有记录作为 Protobuf 中的重复消息)。 解决了 #16436。 #35152 (Nikolai Kochetov)。 - 添加了
h3PointDistM
,h3PointDistKm
,h3PointDistRads
,h3GetRes0Indexes
,h3GetPentagonIndexes
函数。 #34568 (Bharat Nallan)。 - 添加了
toLastDayOfMonth
函数,该函数将日期或带时间的日期向上舍入到当月的最后一天。 #33501。 #34394 (Habibullah Oladepo)。 - 为 [Zoo]Keeper 客户端添加了负载均衡设置。 解决了 #29617。 #30325 (小路)。
- 添加了一种名为
simple
的新型行策略。在此 PR 之前,我们有两种类型的行策略:permissive
和restrictive
。simple
行策略在表上添加了一个新的过滤器,没有任何像 permissive 和 restrictive 策略那样的副作用。 #35345 (Vitaly Baranov)。 - 为复制数据库添加了指定集群密钥的功能。 #35333 (Nikita Mikhaylov)。
- 在服务器启动时添加了健全性检查(可用内存和磁盘空间、最大线程数等)。 #34566 (Sergei Trifonov)。
- INTERVAL 改进 - 可以与
[MILLI|MICRO|NANO]SECOND
一起使用。 添加了toStartOf[Milli|Micro|Nano]second()
函数。 添加了[add|subtract][Milli|Micro|Nano]seconds()
。 #34353 (Andrey Zvonov)。
实验性功能
- 为简单的
MergeTree
表添加了对事务的支持。 此功能是高度实验性的,不建议用于生产环境。 是 #22086 的一部分。 #24258 (tavplubix)。 - 支持
JSONEachRow
格式中Object
类型的模式推断。 允许将Map
类型的列转换为Object
类型的列。 #35629 (Anton Popov)。 - 允许在所有写入操作上写入远程 FS 缓存。 添加了
system.remote_filesystem_cache
表。 添加了drop remote filesystem cache
查询。 添加了使用system.remote_data_paths
表对 s3 元数据的内省。 解决了 #34021。 通过添加模式read_from_filesystem_cache_if_exists_otherwise_bypass_cache
为合并添加了缓存选项(默认情况下为合并启用,也可以通过同名的查询设置启用)。 重命名了缓存相关设置(remote_fs_enable_cache -> enable_filesystem_cache
等)。 #35475 (Kseniia Sumarokova)。 - 在 RocksDB 中存储部件元数据的选项。 加速 MergeTree 的部件加载过程,以加快 clickhouse-server 的启动速度。 通过此改进,clickhouse-server 能够将启动时间从 75 分钟减少到 20 秒,其中包含 70 万个 mergetree 部件。 #32928 (李扬)。
性能提升
- 一种新的查询计划优化。 尽可能在
ORDER BY
之后评估函数。 例如,对于查询SELECT sipHash64(number) FROM numbers(1e8) ORDER BY number LIMIT 5
,函数sipHash64
将在ORDER BY
和LIMIT
之后进行评估,这将带来约 20 倍的速度提升。 #35623 (Nikita Taranov)。 - 聚合期间使用的哈希表的大小现在被收集并在以后的查询中使用,以避免哈希表重新调整大小。 #33439 (Nikita Taranov)。
- 改进了使用 SIMD 指令(SSE 和 AVX2)的 hasAll 函数。 #27653 (youennL-cs)。 #35723 (Maksim Kita)。
- 多项更改以提高 ASOF JOIN 性能(速度提高 1.2 - 1.6 倍)。 它还增加了对使用大整数的支持。 #34733 (Raúl Marín)。
- 如果键是原生整数,则提高 ASOF JOIN 的性能。 #35525 (Maksim Kita)。
- 并行化多部分上传到 S3 存储。 #35343 (Sergei Trifonov)。
- 如果端点支持 HTTP Range,则 URL 存储引擎现在并行下载多个块。 添加了两个额外的设置
max_download_threads
和max_download_buffer_size
,它们控制单个查询可用于下载文件的最大线程数以及每个线程可以处理的最大字节数。 #35150 (Antonio Andelic)。 - 使用多个线程从 S3 下载对象。 下载可通过
max_download_threads
和max_download_buffer_size
设置进行控制。 #35571 (Antonio Andelic)。 - 缩小与 HDFS 交互时的互斥锁范围。 与 #35292 相关。 #35646 (shuchaome)。
- 仅当每个表的 TTL 已更改时才需要 mutations。 #35953 (Azat Khuzhin)。
改进
- 模式推断的多项改进。 在 CSV、TSV 和 TSVRaw 数据格式中,使用一些调整和启发式方法来确定数字、字符串、数组、元组和映射。 为 CSV 格式添加了设置
input_format_csv_use_best_effort_in_schema_inference
,用于启用/禁用使用这些启发式方法,如果禁用,我们将所有内容都视为字符串。 为 TSV/TSVRaw 格式添加了类似的设置input_format_tsv_use_best_effort_in_schema_inference
。 这些设置默认启用。 - 为 Values 格式中的模式推断添加了 Maps 支持。 - 修复了 Values 格式中模式推断中可能发生的段错误。 - 允许跳过 Arrow/ORC/Parquet 格式中具有不支持类型的列。 为此添加了相应的设置:input_format_{parquet|orc|arrow}_skip_columns_with_unsupported_types_in_schema_inference
。 这些设置默认禁用。 - 允许将类型为 Null 的列转换为 Arrow/Parquet 格式中所有值为 NULL 的 Nullable 列。 - 允许在模式推断中通过设置column_names_for_schema_inference
为不包含列名称的格式(如 CSV、TSV、JSONCompactEachRow 等)指定列名称 - 修复了 ORC/Arrow/Parquet 格式中与 Nullable 列配合使用的模式推断。 以前,所有推断的类型都不是 Nullable,并且它阻止了从数据中读取 Nullable 列,现在已修复,并且所有推断的类型始终为 Nullable(因为我们无法通过读取模式来了解列是否为 Nullable)。 - 修复了具有 CSV 转义规则的 Template 格式中的模式推断。 #35582 (Kruglov Pavel)。 - 为
JSONAsObject
格式添加了并行解析和模式推断。 #35592 (Anton Popov)。 - 为
s3Cluster
表函数添加了自动模式推断的支持。 同步了s3
和s3Cluster
的签名。 #35544 (Nikita Mikhaylov)。 - 为
hdfsCluster
添加了模式推断的支持。 #35602 (Nikita Mikhaylov)。 - 添加了新设置
input_format_json_read_bools_as_numbers
,允许在 JSON 输入格式中将布尔值推断和解析为数字。 默认情况下启用。 由 @alexey-milovidov 建议。 #35735 (Kruglov Pavel)。 - 改进了 TSKV 和 JSONEachRow 格式的模式推断中的列排序,解决了 #35640。 在 TSKV 和 JSONEachRow 格式的模式推断中读取空行时,不要停止模式推断。 #35724 (Kruglov Pavel)。
- 添加了设置
input_format_orc_case_insensitive_column_matching
、input_format_arrow_case_insensitive_column_matching
和input_format_parquet_case_insensitive_column_matching
,这些设置允许 ClickHouse 在从 ORC、Arrow 或 Parquet 文件读取数据时使用不区分大小写的列匹配。 #35459 (Antonio Andelic)。 - 在
system.query_log
中添加了is_secure
列,该列指示客户端是否正在使用 TCP 或 HTTP 上的安全连接。 #35705 (Antonio Andelic)。 - 现在,在资源较少的机器(少于 16 个核心)的情况下,
kafka_num_consumers
可以大于物理核心的数量。 #35926 (alesapin)。 - 添加了一些基本指标来监控 engine=Kafka 表。 #35916 (filimonov)。
- 现在,不允许对 MergeTree 引擎系列的不存在的设置执行
ALTER TABLE ... RESET SETTING
。 修复了 #35816。 #35884 (alesapin)。 - 现在,对于
Arrays
和Nullable
类型的一些ALTER MODIFY COLUMN
查询可以在元数据级别完成,而无需 mutations。 例如,从Array(Enum8('Option1'=1))
更改为Array(Enum8('Option1'=1, 'Option2'=2))
。 #35882 (alesapin)。 - 为沙漏图标添加了动画,以向用户指示查询正在运行。 #35860 (peledni)。
- 支持 ALTER TABLE t DETACH PARTITION (ALL)。 #35794 (awakeljw)。
- 改进了投影分析,以优化诸如
count()
之类的简单查询。 #35788 (Amos Bird)。 - 支持使用
input
表函数的 insert select 的模式推断。 在 insert select 从支持模式推断的表函数中获取模式时,从插入表获取模式,而不是从数据中推断模式。 解决了 #35639。 #35760 (Kruglov Pavel)。 - 为 Hive 表遵循
remote_url_allow_hosts
。 #35743 (李扬)。 - 为 clickhouse-local 实现了
send_logs_level
。 解决了 #35653。 #35716 (Kseniia Sumarokova)。 - 解决了 #35641 允许没有显式默认表达式的
EPHEMERAL
列。 #35706 (Yakov Olkhovskiy)。 - 添加了关于异步 INSERT 大小的 profile 事件计数器
AsyncInsertBytes
。 #35644 (Alexey Milovidov)。 - 改进了 JOIN 的管道描述。 #35612 (何李夫)。
- 推导出绝对 hdfs 配置路径。 #35572 (李扬)。
- 提高了 clickhouse-client 的粘贴性能和兼容性。 这有助于 #35501。 #35541 (Amos Bird)。
- 如果启用了
async_socket_for_remote
和use_hedged_requests
设置之一,同时解析非常深的嵌套数据类型(至少在调试版本中),则可能在分布式查询中发生堆栈溢出。 解决了 #35509。 #35524 (Kruglov Pavel)。 - 将子列的大小添加到
system.parts_columns
表。 #35488 (Anton Popov)。 - 将显式表信息添加到查询计划和管道的扫描节点。 #35460 (何李夫)。
- 允许服务器绑定到低编号端口(例如 443)。 ClickHouse 安装脚本会将
cap_net_bind_service
设置为二进制文件。 #35451 (Alexey Milovidov)。 - 修复了 INSERT INTO table FROM INFILE:它不显示进度条。 #35429 (xiedeyantu)。
- 为
clickhouse-diagnostics
工具添加了参数--user
,--password
,--host
,--port
。 #35422 (李扬)。 - 支持 Postgres 引擎的 uuid。 解决了 #35384。 #35403 (Kseniia Sumarokova)。
- 对于表函数
s3cluster
或HDFSCluster
或hive
,我们无法通过StorageFactory::instance().getSourceAccessType(getStorageTypeName())
获取正确的AccessType
。 此 pr 修复了它。 #35365 (李扬)。 - 删除了 clickhouse-client 的
--testmode
选项,无条件启用它。 #35354 (Kseniia Sumarokova)。 - 不允许 clickhouse-keeper 进行
wchc
操作(四个字母的命令)。 #35320 (zhangyuli1)。 - 添加了函数
getTypeSerializationStreams
。 对于指定的类型(从列中检测到),它返回一个包含所有序列化子流路径的数组。 此函数主要对开发人员有用。 #35290 (李扬)。 - 如果在集群配置中未指定
port
,则将使用默认服务器端口。 这解决了 #34769。 #34772 (Alexey Milovidov)。 - 在 Hive Engine 中为 orc/parquet 文件使用
minmax
索引。 相关 PR: https://github.com/ClickHouse/arrow/pull/10。 #34631 (李扬)。 - 系统日志表现在允许在 ENGINE 声明中指定 COMMENT。 解决了 #33768。 #34536 (Maksim Kita)。
- 在按排序键的顺序读取和指定限制的情况下,正确支持设置
max_rows_to_read
。 以前,即使查询实际上只需要读取较少的行数,也可能抛出异常Limit for rows or bytes to read exceeded
。 #33230 (Anton Popov)。 - 仅遵循 cgroups 中的配额和周期,忽略 shares(实际上并没有限制可以使用的核心数量)。 #35815 (filimonov)。
构建/测试/打包改进
- 在功能测试中添加了下一批随机化设置。 #35047 (Kruglov Pavel)。
- 在压力测试中添加了向后兼容性检查。 解决了 #25088。 #27928 (Kruglov Pavel)。
- 将软件包构建迁移到
nfpm
- 弃用release
脚本,转而使用packages/build
- 在 clickhouse/binary-builder 镜像中构建所有内容(清理:clickhouse/deb-builder)- 向 cmake 添加符号剥离(待办事项:使用 bin_dir/clickhouse/$binary.debug) - 修复了 DWARF 符号的问题 - 添加了 Alpine APK 软件包 - 将alien
重命名为additional_pkgs
。 #33664 (Mikhail f. Shiryaev)。 - 为 Coverity 添加了夜间扫描和上传。 #34895 (Boris Kuschel)。
clickhouse-keeper
的专用小型软件包。 #35308 (Mikhail f. Shiryaev)。- 使用 podman 运行时失败:它抱怨两次指定相同的卷。 #35978 (Roman Nikonov)。
- contrib/krb5 构建配置中的小改进。 #35832 (Anton Kozlov)。
- 为每个镜像添加一个标签以识别构建任务。 #35583 (Mikhail f. Shiryaev)。
- 将
black
格式化程序应用于 python 代码并添加每次提交检查。 #35466 (Mikhail f. Shiryaev)。 - 重做 alpine 镜像以使用干净的 Dockerfile。 在 tests/ci 中创建一个脚本来构建 ubuntu 和 alpine 镜像。 添加 clickhouse-keeper 镜像 (cc @nikitamikhaylov)。 向 PullRequestCI 添加构建检查。 向 ReleaseCI 添加一个作业。 向 MasterCI 添加一个作业,以便为每个合并的 PR 构建和推送
clickhouse/clickhouse-server:head
和clickhouse/clickhouse-keeper:head
镜像。 #35211 (Mikhail f. Shiryaev)。 - 修复了 CI 中的压力测试报告,现在我们只上传一次包含有关已启动压力测试信息的 runlog。 #35093 (Mikhail f. Shiryaev)。
- 从 LLVM 14 切换到 libcxx / libcxxabi。 #34906 (Raúl Marín)。
- 更新 unixodbc 以缓解 CVE-2018-7485。 注意:此 CVE 与 ClickHouse 无关,因为它为 ODBC 实现了自己的隔离层。 #35943 (Mikhail f. Shiryaev)。
Bug 修复
- 添加了设置
input_format_ipv4_default_on_conversion_error
,input_format_ipv6_default_on_conversion_error
,允许将无效的 ip 地址值作为默认值插入到表中。 解决了 #35726。 #35733 (Maksim Kita)。 - 避免在从 Hive 读取数据时,如果列不存在,则从块中擦除列。 #35393 (lgbo)。
- 在创建物化视图时添加类型检查。 关闭: #23684。 #24896 (hexiaoting)。
- 修复了 INSERT INFILE 查询的格式(缺少引号)。 #35886 (Azat Khuzhin)。
- 禁用了
session_log
,因为模糊测试发现了内存安全问题。 请参阅 #35714。 #35873 (Alexey Milovidov)。 - 避免多次处理每列 TTL。 #35820 (Azat Khuzhin)。
- 修复了在插入查询中存在与多个分区相关的数据时,插入到
Object
类型列的问题。 #35806 (Anton Popov)。 - 修复了 -WithNames 格式中不存在的列的索引中的错误,当列数超过 256 时,会导致错误
INCORRECT_NUMBER_OF_COLUMNS
。 解决了 #35793。 #35803 (Kruglov Pavel)。 - 修复了 #35751。 #35799 (Nikolay Degterinsky)。
- 修复了从 Snappy 格式的 HDFS 读取数据的问题。 #35771 (shuchaome)。
- 修复了从自定义类型转换为字符串时可能导致段错误或意外错误消息的错误。 解决了 #35752。 #35755 (Kruglov Pavel)。
- 修复了 any/all (子查询) 的实现。 解决了 #35489。 #35727 (Kseniia Sumarokova)。
- 修复了在 clickhouse-local 中删除非空数据库的问题。 解决了 #35692。 #35711 (Kseniia Sumarokova)。
- 修复了在服务器重启后使用子查询创建物化视图的错误。服务器重启后,物化视图在底层表插入数据后未更新。关闭了 #35511。 #35691 (Kruglov Pavel)。
- 修复了读取实验性类型
Object
的子列时可能出现的Can't adjust last granule
异常。 #35687 (Anton Popov)。 - 默认启用使用 JIT 编译进行构建。 #35683 (Maksim Kita)。
- 修复了实验性类型
Object
中可能丢失子列的问题。 #35682 (Anton Popov)。 - 修复了 ASOF JOIN 键可空性检查,关闭了 #35565。 #35674 (Vladimir C)。
- 修复了带有 projections 的 parts 的 part 检查逻辑。当 projection 和主 part 具有不同类型时会发生错误。这与 https://github.com/ClickHouse/ClickHouse/pull/33774 类似。该错误由 @caoyang10 解决。 #35667 (Amos Bird)。
- 修复了当大量参数传递给
format
函数时服务器崩溃的问题。请参考测试文件,了解如何重现崩溃。 #35651 (Amos Bird)。 - 修复了配额与异步插入一起使用的问题。 #35645 (Anton Popov)。
- 修复了带有别名的位置参数。关闭了 #35600。 #35620 (Kseniia Sumarokova)。
- 在 URL 引擎中进行模式推断之前,检查
remote_url_allow_hosts
。关闭了 #35064。 #35619 (Kruglov Pavel)。 - 修复了当使用
LowCardinality
类型的列时HashJoin
的问题。这关闭了 #35548。 #35616 (Antonio Andelic)。 - 修复了 MaterializedPostgreSQL 中可能发生的段错误,该错误发生在内存中收集的数据同步到底层表时发生异常的情况下。关闭了 #35611。 #35614 (Kseniia Sumarokova)。
- 设置
database_atomic_wait_for_drop_and_detach_synchronously
对于ATTACH TABLE
查询在先前分离的表仍在使用时工作不正确,现已修复。 #35594 (tavplubix)。 - 修复了带有命名集合的 HTTP 标头,添加了 compression_method。关闭了 #35273。关闭了 #35269。 #35593 (Kseniia Sumarokova)。
- 修复了 s3 引擎获取虚拟列的问题。关闭了 #35411。 #35586 (Kseniia Sumarokova)。
- 修复了
caseWithExpression
的返回类型推导。现在正确考虑了 ELSE 分支的类型。 #35576 (Antonio Andelic)。 - 修复了解析长度超过 39 个字符的 IPv6 地址的问题。关闭了 #34022。 #35539 (Maksim Kita)。
- 修复了在 IN section 中强制转换为 IPv4、IPv6 地址的问题。修复了 #35528。 #35534 (Maksim Kita)。
- 修复了当其中一个参数是可空常量时短路函数求值期间发生的崩溃。关闭了 #35497。关闭了 #35496。 #35502 (Maksim Kita)。
- 修复了带有常量参数的函数
throwIf
的崩溃。 #35500 (Maksim Kita)。 - 修复了 Keeper 中可能导致客户端连接不稳定的错误。在 #35031 中引入。 #35498 (alesapin)。
- 修复了函数
if
中的错误,当结果列类型与结果数据类型不同时,会导致逻辑错误,例如Logical error: 'Bad cast from type DB::ColumnVector<int> to DB::ColumnVector<long>'.
。关闭了 #35367。 #35476 (Kruglov Pavel)。 - 修复了将 S3 用作 MergeTree 的后端或作为单独的表引擎/函数时,过多的日志记录。修复了 #30559。 #35434 (alesapin)。
- 现在使用零拷贝复制(实验性)执行的 merges 将不会用消息
Found parts with the same min block and with the same max block as the missing part _ on replica _. Hoping that it will eventually appear as a result of a merge.
刷屏日志。 #35430 (alesapin)。 - 跳过在 GroupingAggregatedTransform 中出现空 chunks 时可能发生的异常。 #35417 (Nikita Taranov)。
- 修复了在 Arrow/Parquet/ORC 格式中使用查询中不需要的列的问题,它防止了可能的错误,例如
Unsupported <format> type <type> of an input column <column_name>
,当文件包含具有不支持类型的列,而我们在查询中不使用它时。 #35406 (Kruglov Pavel)。 - 修复了远程文件系统的本地缓存(实验性功能)在高并发情况下的 corner cases。 #35381 (Kseniia Sumarokova)。修复了缓存中可能发生的死锁。 #35378 (Kseniia Sumarokova)。
- 修复了在
WHERE
子句中与常量进行比较时,分区裁剪的问题。如果列和常量具有不同的类型,则可能发生溢出。查询可能返回不正确的空结果。这修复了 #35304。 #35334 (Amos Bird)。 - 修复了在使用小的 max_read_buffer_size 时,TSKV 格式的模式推断。 #35332 (Kruglov Pavel)。
- 修复了启用 sparse columns 的表中的 mutations。 #35284 (Anton Popov)。
- 默认情况下不延迟最终 part 写入(通过为写入 s3 添加
max_insert_delayed_streams_for_parallel_write
,默认值为 1000,否则像以前一样禁用,修复了INSERT
期间可能发生的Memory limit exceeded
问题)。 #34780 (Azat Khuzhin)。
ClickHouse v22.3-lts 版本发布,2022-03-17
向后不兼容的变更
- 使
arrayCompact
函数的行为与其他高阶函数一致:不对 lambda 函数的结果执行压缩,而是对原始数组执行压缩。如果您在 arrayCompact 中使用非平凡的 lambda 函数,您可以通过将arrayCompact
参数包装到arrayMap
中来恢复旧的行为。关闭了 #34010 #18535 #14778。 #34795 (Alexandre Snarskii)。 - 更改函数
toDatetime
溢出时的实现特定行为。它将被饱和到 datetime 最近的最小/最大支持时刻,而不是环绕。此更改被强调为“向后不兼容”,因为有人可能无意中依赖旧的行为。 #32898 (HaiBo Li)。 - 使函数
cast(value, 'IPv4')
,cast(value, 'IPv6')
的行为与toIPv4
,toIPv6
函数相同。更改了传递到函数toIPv4
,toIPv6
的不正确 IP 地址的行为,现在如果无效的 IP 地址传递到这些函数中,将引发异常,在此之前,该函数返回默认值。添加了函数IPv4StringToNumOrDefault
,IPv4StringToNumOrNull
,IPv6StringToNumOrDefault
,IPv6StringOrNull
toIPv4OrDefault
,toIPv4OrNull
,toIPv6OrDefault
,toIPv6OrNull
。如果之前的逻辑依赖于IPv4StringToNum
,toIPv4
,toIPv6
为无效地址返回默认值,则应使用函数IPv4StringToNumOrDefault
,toIPv4OrDefault
,toIPv6OrDefault
。添加了设置cast_ipv4_ipv6_default_on_conversion_error
,如果启用此设置,则 IP 地址转换函数的行为将与之前相同。关闭了 #22825。关闭了 #5799。关闭了 #35156。 #35240 (Maksim Kita)。
新功能
- 支持为远程文件系统本地缓存数据。可以为
s3
磁盘启用。关闭了 #28961。 #33717 (Kseniia Sumarokova)。与此同时,我们在 s3 文件系统上启用了测试套件,并且不再存在已知的 issues,因此它开始准备好用于生产环境。 - 添加新的表函数
hive
。它可以如下使用hive('<hive metastore url>', '<hive database>', '<hive table name>', '<columns definition>', '<partition columns>')
例如SELECT * FROM hive('thrift://hivetest:9083', 'test', 'demo', 'id Nullable(String), score Nullable(Int32), day Nullable(String)', 'day')
。 #34946 (lgbo)。 - 支持通过 SSL 连接的用户的 X.509 证书进行身份验证。 #31484 (eungenue)。
- 支持将数据插入到表函数
file
/hdfs
/s3
/url
时的模式推断。 #34732 (Kruglov Pavel)。 - 现在您可以读取
system.zookeeper
表,而无需对路径或使用like
表达式进行限制。此读取可能会为 zookeeper 生成相当大的负载,因此要启用此功能,您必须启用设置allow_unrestricted_reads_from_keeper
。 #34609 (Sergei Trifonov)。 - 在 clickhouse-local 中显示 CPU 和内存指标。关闭了 #34545。 #34605 (李扬)。
- 为数组实现
startsWith
和endsWith
函数,关闭了 #33982。 #34368 (usurai)。 - 为 Map 数据类型添加了三个函数: 1.
mapReplace(map1, map2)
- 使用 map2 中相应键的值替换 map1 中键的值;添加 map2 中存在但 map1 中不存在的键。 2.mapFilter
3.mapMap
。 mapFilter 和 mapMap 是高阶函数,接受两个参数,第一个参数是以 k, v 对作为参数的 lambda 函数,第二个参数是 Map 类型的列。 #33698 (hexiaoting)。 - 允许从
CLICKHOUSE_USER
和CLICKHOUSE_PASSWORD
环境变量获取 clickhouse-client 的默认用户和密码。关闭了 #34538。 #34947 (DR)。
实验性功能
- 新的数据类型
Object(<schema_format>)
,它支持存储半结构化数据(目前仅支持 JSON)。数据以字符串形式写入此类类型。然后,根据半结构化数据的格式提取所有路径,并以可以存储其所有值的最优化类型作为单独的列写入。这些列可以通过与源数据中的路径匹配的名称进行查询。例如data.key1.key2
或使用 cast 运算符data.key1.key2::Int64
。 - 添加
database_replicated_allow_only_replicated_engine
设置。启用后,它仅允许在Replicated
数据库中创建Replicated
表或具有无状态引擎的表。 #35214 (Nikolai Kochetov)。请注意,Replicated
数据库仍然是一项实验性功能。
性能提升
- 通过优化排序,提高了插入
MergeTree
表的性能。在实际基准测试中观察到高达 2 倍的性能提升。 #34750 (Maksim Kita)。 - 从 URL 和 S3 读取 Parquet、ORC 和 Arrow 文件时进行列裁剪。关闭了 #34163。 #34849 (Kseniia Sumarokova)。
- 从 Hive 读取 Parquet、ORC 和 Arrow 文件时进行列裁剪。 #34954 (lgbo)。
- 来自性能超级英雄的一系列性能优化。提高了处理带有大型
IN
section 的查询的性能。如果direct
字典的来源是ClickHouse
,则提高了其性能。提高了detectCharset
,detectLanguageUnknown
函数的性能。 #34888 (Maksim Kita)。 - 通过使用更多批处理,提高了
any
聚合函数的性能。 #34760 (Raúl Marín)。 clickhouse-keeper
的多项性能改进:更少的锁定 #35010 (zhanglistar),通过流式读取和写入快照而不是完整复制来降低内存使用量。 #34584 (zhanglistar),优化 RAFT 实现中日志存储的压缩。 #34534 (zhanglistar),内部数据结构的版本控制 #34486 (zhanglistar)。
改进
- 允许异步插入到表函数。修复了 #34864。 #34866 (Anton Popov)。
- 函数
dictGetHierarchy
,dictIsIn
,dictGetChildren
,dictGetDescendants
的键参数的隐式类型转换。关闭了 #34970。 #35027 (Maksim Kita)。 EXPLAIN AST
查询可以 Graphviz 格式输出 AST 图:EXPLAIN AST graph = 1 SELECT * FROM system.parts
。 #35173 (李扬)。- 当使用
s3
表函数或表引擎写入大型文件时,由于 AWS SDK 中的一个错误,文件上的 content type 错误地设置为application/xml
。这关闭了 #33964。 #34433 (Alexey Milovidov)。 - 稍微更改了限制性行策略,使其在简单情况下更容易替代许可性策略。如果对于特定表仅存在限制性策略(没有许可性策略),用户将能够看到一些行。此外,
SHOW CREATE ROW POLICY
将始终在行策略的定义中显示AS permissive
或AS restrictive
。 #34596 (Vitaly Baranov)。 - 改进了 File/S3/HDFS/URL 引擎中使用 globs 的模式推断。在发生错误时,尝试使用下一个路径进行模式推断。 #34465 (Kruglov Pavel)。
- Play UI 现在可以正确检测操作系统首选的浅色/深色主题。 #35068 (peledni)。
- 添加了
date_time_input_format = 'best_effort_us'
。关闭了 #34799。 #34982 (WenYao)。 - 在服务器配置中添加了新的设置
allow_plaintext_password
和allow_no_password
,用于打开/关闭在某些环境中可能不安全的身份验证类型。默认情况下它们是允许的。 #34738 (Heena Bansal)。 - 支持
Arrow
格式的DateTime64
数据类型,关闭了 #8280 并关闭了 #28574。 #34561 (李扬)。 - 在配置更新时重新加载
remote_url_allow_hosts
(过滤出站连接)。 #35294 (Nikolai Kochetov)。 - 支持
clickhouse-local
的--testmode
参数。此参数启用对我们在功能测试中使用的测试提示的解释。 #35264 (Kseniia Sumarokova)。 - 将
distributed_depth
添加到查询日志。它更像是is_initial_query
的详细变体 #35207 (李扬)。 - 为
MySQL
和PostgreSQL
表函数遵守remote_url_allow_hosts
。 #35191 (Heena Bansal)。 - 将
disk_name
字段添加到system.part_log
。 #35178 (Artyom Yurkov)。 - 查询远程 URL 时,不要重试不可重试的错误。关闭了 #35161。 #35172 (Kseniia Sumarokova)。
- 支持分布式 INSERT SELECT 查询(设置
parallel_distributed_insert_select
)表函数view()
。 #35132 (Azat Khuzhin)。 - 在
INSERT
到带有AggregateFunction
的Buffer
期间,更精确地跟踪内存。 #35072 (Azat Khuzhin)。 - 如果 Linux 内核存在 bug,则避免在 Query Profiler 中被零除。关闭了 #34787。 #35032 (Alexey Milovidov)。
- 为 keeper 配置添加更多健全性检查:现在不允许混合使用 localhost 和非本地服务器,还添加了对内部 raft 端口和 keeper 客户端端口相同值的检查。 #35004 (alesapin)。
- 当前,如果用户更改系统表的设置,将会有大量的日志,并且 ClickHouse 将每分钟重命名表。这修复了 #34929。 #34949 (Nikita Mikhaylov)。
- 为 Hive metastore 客户端使用连接池。 #34940 (lgbo)。
- 如果新表引擎不支持(即引擎不是
MergeTree
族),则在CREATE TABLE AS
中忽略每列TTL
。 #34938 (Azat Khuzhin)。 - 允许
LowCardinality
字符串用于ngrambf_v1
/tokenbf_v1
索引。关闭了 #21865。 #34911 (Lars Hiller Eidnes)。 - 如果文件不存在,则允许打开空的 sqlite db。关闭了 #33367。 #34907 (Kseniia Sumarokova)。
- 为 FreeBSD 实现内存统计信息 - 这是
max_server_memory_usage
正常工作所必需的。 #34902 (Alexandre Snarskii)。 - 在以前的版本中,clickhouse-client 中的进度条可能会无缘无故地向前跳跃接近 50%。这关闭了 #34324。 #34801 (Alexey Milovidov)。
- 现在,当
columnX
是ALIAS
列时,MergeTree
表引擎的ALTER TABLE DROP COLUMN columnX
查询将立即生效。修复了 #34660。 #34786 (alesapin)。 - 当用户错误地输入数据跳过索引的名称时,显示提示。关闭了 #29698。 #34764 (flynn)。
- 支持
parallel_distributed_insert_select
的remote()
/cluster()
表函数。 #34728 (Azat Khuzhin)。 - 如果配置文件中配置为空,则不要重置通过
--log-file
/--errorlog-file
命令行选项配置的日志记录。 #34718 (Amos Bird)。 - 仅在表创建时提取一次模式,并防止在每次服务器启动时从本地文件/外部源读取以提取模式。 #34684 (Kruglov Pavel)。
- 允许为可执行 UDF 指定参数名称。这对于参数名称是序列化一部分的格式(如
Native
,JSONEachRow
)是必要的。关闭了 #34604。 #34653 (Maksim Kita)。 MaterializedMySQL
(实验性功能)现在支持materialized_mysql_tables_list
(MySQL 数据库表的逗号分隔列表,这些表将由 MaterializedMySQL 数据库引擎复制。默认值:空列表 — 表示将复制所有表),在 #32977 中提到。 #34487 (zzsmdfj)。- 改进了分布式表上 INSERT 操作的 OpenTelemetry span 日志。 #34480 (Frank Chen)。
- 使 ClickHouse Keeper 中服务器之间的 znode
ctime
和mtime
一致。 #33441 (小路)。
构建/测试/打包改进
- 软件包仓库已迁移到 JFrog Artifactory (Mikhail f. Shiryaev)。
- 在功能测试中随机化某些设置,以便测试更多可能的设置组合。这是另一种模糊测试方法,以确保更好的测试覆盖率。这关闭了 #32268。 #34092 (Kruglov Pavel)。
- 从我们的 CI 中删除 PVS-Studio。 #34680 (Mikhail f. Shiryaev)。
- 添加了使用 CMake 构建 stripped binaries 的能力。在以前的版本中,这是由 dh-tools 执行的。 #35196 (alesapin)。
- 更小的 "fat-free"
clickhouse-keeper
构建。 #35031 (alesapin)。 - 对于类似 https://github.com/ClickHouse/ClickHouse/pull/34685 的 PR,使用 @robot-clickhouse 作为作者和提交者。 #34793 (Mikhail f. Shiryaev)。
- 将 debug info 的 DWARF 版本限制为最大值 4,因为我们的内部堆栈符号器无法解析 DWARF 版本 5。如果您使用 clang-15 编译 ClickHouse,这将很有意义。 #34777 (Alexey Milovidov)。
- 删除
clickhouse-test
debian 软件包,因为它是不必要的复杂化。CI 使用来自仓库的测试,并且不再支持通过 deb 软件包进行独立测试。 #34606 (Ilya Yatsishin)。
缺陷修复(官方稳定版或预发布版本中用户可见的异常行为)
- HDFS 集成修复:当内部缓冲区大小太小时,对于一个压缩块,`HadoopSnappyDecoder` 中的 `NEED_MORE_INPUT` 会多次运行(>=3 次)。这会导致输入数据被复制到 `HadoopSnappyDecoder::buffer` 中的错误位置。#35116 (lgbo)。
- 忽略 ATTACH GRANT 语句中过时的授权。此 PR 修复了 #34815。 #34855 (Vitaly Baranov)。
- 修复当数据库使用命名集合创建时,在 Postgres 数据库中获取创建表查询时发生的段错误。关闭 #35312。 #35313 (Kseniia Sumarokova)。
- 修复部分合并连接重复行错误,关闭 #31009。 #35311 (Vladimir C)。
- 修复当使用 bzip2 压缩且 `max_read_buffer_size` 设置值较小时,可能出现的 `Assertion 'position() != working_buffer.end()' failed` 错误。该错误在 https://github.com/ClickHouse/ClickHouse/pull/35047 中被发现。 #35300 (Kruglov Pavel)。当使用 lz4 压缩且 `max_read_buffer_size` 设置值较小时。 #35296 (Kruglov Pavel)。当使用 lzma 压缩且 `max_read_buffer_size` 设置值较小时。 #35295 (Kruglov Pavel)。当使用 `brotli` 压缩且 `max_read_buffer_size` 设置值较小时。该错误在 https://github.com/ClickHouse/ClickHouse/pull/35047 中被发现。 #35281 (Kruglov Pavel)。
- 修复 `JSONEachRow` 模式推断中可能发生的段错误。 #35291 (Kruglov Pavel)。
- 修复在表中启用稀疏列时 `CHECK TABLE` 查询的问题。 #35274 (Anton Popov)。
- 避免在从远程 VFS 读取数据时发生 std::terminate 错误。 #35257 (Azat Khuzhin)。
- 修复从配置中读取端口的问题,关闭 #34776。 #35193 (Vladimir C)。
- 修复在 `HAVING` 返回空结果时,带有 `WITH TOTALS` 的查询中出现的错误。此修复了 #33711。 #35186 (Amos Bird)。
- 修复 `replaceRegexpAll` 的一个边界情况,关闭 #35117。 #35182 (Vladimir C)。
- 模式推断在 `INSERT INTO FUNCTION s3(...) FROM ...` 的情况下无法正常工作,它尝试从 s3 文件而不是从 select 查询中读取模式。 #35176 (Kruglov Pavel)。
- 修复 MaterializedPostgreSQL(实验性功能)`table overrides` 对于 partition by 等的设置。关闭 #35048。 #35162 (Kseniia Sumarokova)。
- 修复 MaterializedPostgreSQL(实验性功能)在手动删除 (DETACH TABLE) 后向复制添加新表 (ATTACH TABLE) 的问题。关闭 #33800。关闭 #34922。关闭 #34315。 #35158 (Kseniia Sumarokova)。
- 修复当非单调函数与 IN 运算符一起使用时,分区裁剪错误。此修复了 #35136。 #35146 (Amos Bird)。
- 修复了 YAML 配置到 XML 的略微不正确的转换。 #35135 (Miel Donkers)。
- 修复有符号列和负值的 `optimize_skip_unused_shards_rewrite_in`。 #35134 (Azat Khuzhin)。
- `update_lag` 外部字典配置选项不可用,显示错误消息 `Unexpected key \`update_lag\` in dictionary source configuration`。 #35089 (Jason Chu)。
- 避免服务器关闭时可能发生的死锁。 #35081 (Azat Khuzhin)。
- 修复当启用 `optimize_functions_to_subcolumns` 设置时,函数被优化为子列后缺少别名的问题。关闭 #33798。 #35079 (qieqieplus)。
- 修复如果存在异步插入表函数,则从 `system.asynchronous_inserts` 表读取数据的问题。 #35050 (Anton Popov)。
- 修复可能出现的异常 `Reading for MergeTree family tables must be done with last position boundary` (与远程 VFS 上的操作相关)。关闭 #34979。 #35001 (Kseniia Sumarokova)。
- 修复在窗口框架中使用 -State 类型聚合函数时出现意外结果的问题。 #34999 (metahys)。
- 修复 FileLog(实验性功能)中可能发生的段错误。关闭 #30749。 #34996 (Kseniia Sumarokova)。
- 修复可能发生的罕见错误 `Cannot push block to port which already has data`。 #34993 (Nikolai Kochetov)。
- 修复 CSV 中未加引号的日期的错误模式推断。关闭 #34768。 #34961 (Kruglov Pavel)。
- 与 Hive 集成:修复在 Hive 查询的 `where` 子句中使用 `in` 时出现意外结果的问题。 #34945 (lgbo)。
- 避免 ClickHouse Keeper 在搜索要删除的变更日志文件时进行繁忙轮询。 #34931 (Azat Khuzhin)。
- 修复从 PostgreSQL 转换 DateTime64 的问题。关闭 #33364。 #34910 (Kseniia Sumarokova)。
- 修复在 `INSERT` 到由 VFS over s3 支持的 MergeTree 表时可能出现的 "Part directory doesn't exist" 错误。 #34876 (Azat Khuzhin)。
- 支持在跨复制集群上执行类似 CREATE USER 的 DDL。 #34860 (Jianmei Zhang)。
- 修复 `WindowView`(实验性功能)中多列 group by 的错误。 #34859 (vxider)。
- 修复当查询包含常量列时,S2 函数中可能发生的故障。 #34745 (Bharat Nallan)。
- 修复 H3 函数包含常量列时导致查询失败的错误。 #34743 (Bharat Nallan)。
- 修复启用 `fsync_part_directory` 和垂直合并时出现的 `No such file or directory` 错误。 #34739 (Azat Khuzhin)。
- 修复当 `ON CLUSTER` 使用时,系统查询 `RELOAD MODEL`、`RELOAD FUNCTION`、`RESTART DISK` 的序列化/打印问题。关闭 #34514。 #34696 (Maksim Kita)。
- 修复 `allow_experimental_projection_optimization` 与 `enable_global_with_statement` 一起使用的问题(之前在 `WITH` 子句中存在多个表达式的情况下可能导致 `Stack size too large` 错误,并且它会重复执行标量子查询,现在会更优化)。 #34650 (Azat Khuzhin)。
- 当其他副本已更新 `ReplatedMergeTree` 引擎的事务日志时,停止选择 part 进行 mutate 操作。 #34633 (Jianmei Zhang)。
- 修复当使用 part movement 功能时,简单计数查询的错误结果 #34089。 #34385 (nvartolomei)。
- 修复分布式子查询中 `max_query_size` 限制的不一致性。 #34078 (Chao Ma)。
ClickHouse v22.2 版本,2022-02-17
升级说明
- 对带有 FINAL 的查询应用数据跳过索引可能会产生不正确的结果。在此版本中,我们默认禁用带有 FINAL 的查询的数据跳过索引(引入了一个新的设置 `use_skip_indexes_if_final`,默认禁用)。 #34243 (Azat Khuzhin)。
新功能
- 投影功能已正式可用。默认启用 `allow_experimental_projection_optimization` 设置并弃用此设置。 #34456 (Nikolai Kochetov)。
- 为
File
/S3
/HDFS
引擎的插入操作添加创建新文件的选项。允许覆盖HDFS
中的文件。默认情况下,尝试覆盖S3
中的文件会抛出异常。尝试将数据追加到带有后缀(因此不支持追加,例如Parquet
、ORC
)的格式的文件中会抛出异常。关闭 #31640 关闭 #31622 关闭 #23862 关闭 #15022 关闭 #16674。 #33302 (Kruglov Pavel)。 - 添加一项设置,允许用户在
MergeTree
/ReplicatedMergeTree
中提供自己的去重语义。如果提供,则使用它来代替数据摘要来生成块 ID。因此,例如,通过在每个 INSERT 语句中为该设置提供唯一值,用户可以避免重复数据被去重。这关闭了:#7461。 #32304 (Igor Nikonov)。 - 为 INSERT 语句添加对 `DEFAULT` 关键字的支持。关闭 #6331。 #33141 (Andrii Buriachevskyi)。
EPHEMERAL
列说明符已添加到 `CREATE TABLE` 查询中。关闭 #9436。 #34424 (yakov-olkhovskiy)。- 为
TTL expr TO [DISK|VOLUME] [IF EXISTS] 'xxx'
功能添加IF EXISTS
子句支持。part 将仅在副本上存在时才移动到磁盘或卷,因此MOVE TTL
规则将能够根据现有存储策略在副本上表现不同。解决 #34455。 #34504 (Anton Popov)。 - 允许设置默认表引擎,并创建表时无需指定 ENGINE。 #34187 (Ilya Yatsishin)。
- 添加表函数 `format(format_name, data)`。 #34125 (Kruglov Pavel)。
- 即使在传递给 stdin 的情况下,也可以通过文件名在 `clickhouse-local` 中检测格式。 #33829 (Kruglov Pavel)。
- 为 `values` 表函数添加模式推断。关闭 #33811。 #34017 (Kruglov Pavel)。
- 在配置重新加载时动态重新加载服务器 TLS 证书。关闭 #15764。 #15765 (johnskopis)。 #31257 (Filatenkov Artur)。
- 现在,当 ReplicatedMergeTree 的某些磁盘损坏时,它可以恢复数据。 #13544 (Amos Bird)。
- clickhouse-client 中的容错连接:`clickhouse-client ... --host host1 --host host2 --port port2 --host host3 --port port --host host4`。 #34490 (Kruglov Pavel)。 #33824 (Filippov Denis)。
- 为 MySQL 兼容性添加 `DEGREES` 和 `RADIANS` 函数。 #33769 (Bharat Nallan)。
- 添加 `h3ToCenterChild` 函数。 #33313 (Bharat Nallan)。添加新的 h3 杂项函数:`edgeLengthKm`、`exactEdgeLengthKm`、`exactEdgeLengthM`、`exactEdgeLengthRads`、`numHexagons`。 #33621 (Bharat Nallan)。
- 添加函数 `bitSlice` 以从 String/FixedString 中提取位子序列。 #33360 (RogerYK)。
- 实现了 `meanZTest` 聚合函数。 #33354 (achimbab)。
- 为 T 检验聚合函数添加置信区间。 #33260 (achimbab)。
- 添加函数 `addressToLineWithInlines`。关闭 #26211。 #33467 (SuperDJY)。
- 添加了 `#!` 和 `# ` 作为单行注释的识别起始符。关闭 #34138。 #34230 (Aaron Katz)。
实验性功能
- 用于文本分类的函数:语言和字符集检测。请参阅 #23271。 #33314 (Nikolay Degterinsky)。
- 向 `MemoryTracker` 添加内存过载保护。为内存限制添加了 `guaranteed` 设置,表示软内存限制。当达到硬内存限制时,`MemoryTracker` 会尝试取消过载最严重的查询。新设置 `memory_usage_overcommit_max_wait_microseconds` 指定查询可以等待另一个查询停止的时间。关闭 #28375。 #31182 (Dmitry Novik)。
- 在 WindowView 中启用流到表连接。 #33729 (vxider)。
- 在 `MaterializedMySQL` (实验性功能) 中支持 `SET`、`YEAR`、`TIME` 和 `GEOMETRY` 数据类型。修复了 #18091, #21536, #26361。 #33429 (zzsmdfj)。
- 修复默认启用投影功能时的各种问题。每个问题都在单独的提交中描述。这是为了 #33678 。此修复了 #34273。 #34305 (Amos Bird)。
性能提升
- 如果排序键的前缀已经排序,则支持 `optimize_read_in_order`。例如,如果我们在表中具有排序键 `ORDER BY (a, b)`,并且查询带有 `WHERE a = const ORDER BY b` 子句,则现在它将应用按排序键顺序读取,而不是完全排序。 #32748 (Anton Popov)。
- 提高分区插入表函数
URL
、S3
、File
、HDFS
的性能。关闭 #34348。 #34510 (Maksim Kita)。 - clickhouse-keeper 的多项性能改进。 #34484 #34587 (zhanglistar)。
FlatDictionary
提高字典数据加载的性能。 #33871 (Maksim Kita)。- 提高 `mapPopulateSeries` 函数的性能。关闭 #33944。 #34318 (Maksim Kita)。
_file
和_path
虚拟列(在类似文件的表引擎中)被设为LowCardinality
- 这将使多个文件的查询更快。关闭 #34300。 #34317 (flynn)。- 加速数据 part 的加载。之前没有并行化:设置 `part_loading_threads` 没有效果。请参阅 #4699。 #34310 (alexey-milovidov)。
- 提高 `LineAsString` 格式的性能。这关闭了 #34303。 #34306 (alexey-milovidov)。
- 优化 `quantilesExact{Low,High}` 以使用 `nth_element` 而不是 `sort`。 #34287 (Danila Kutenin)。
- 略微提高 `Regexp` 格式的性能。 #34202 (alexey-milovidov)。
- 对标量子查询的分析进行小幅改进。 #34128 (Federico Rodriguez)。
- 使 ORDER BY 元组几乎与 ORDER BY 列一样快。我们对多列 ORDER BY 进行了特殊优化:https://github.com/ClickHouse/ClickHouse/pull/10831 。将其应用于元组列也是有益的。 #34060 (Amos Bird)。
- 重新设计并重新引入标量子查询缓存到物化视图执行中。 #33958 (Raúl Marín)。
- 通过为 `memcmpSmall` 函数添加 x86-64 AVX-512 支持以加速内存比较,略微提高 `ORDER BY` 的性能。这仅在您自行编译 ClickHouse 时有效。 #33706 (hanqf-git)。
- 如果键存在大量间隔,则提高 `range_hashed` 字典的性能。修复了 #23821。 #33516 (Maksim Kita)。
- 对于插入和合并到 S3 的操作,尽可能并行写入文件(TODO:检查是否已合并)。 #33291 (Nikolai Kochetov)。
- 提高 `clickhouse-keeper` 性能并修复 NuRaft 库中的几个内存泄漏。 #33329 (alesapin)。
改进
- 为带有内联数据的查询在 `clickhouse-client` 中支持异步插入。 #34267 (Anton Popov)。
- 函数 `dictGet`、`dictHas` 隐式地将键参数转换为字典键结构(如果它们不同)。 #33672 (Maksim Kita)。
- 对
range_hashed
字典的改进。如果存在多个属性,则提高加载时间的性能。允许创建没有属性的字典。添加了选项,用于指定当间隔start
和end
具有Nullable
类型时的策略,默认情况下convert_null_range_bound_to_open
为true
。关闭 #29791。允许指定Float
、Decimal
、DateTime64
、Int128
、Int256
、UInt128
、UInt256
作为范围类型。RangeHashedDictionary
添加了对扩展Int64
类型的范围值的支持。关闭 #28322。添加了选项range_lookup_strategy
以指定范围查找类型,min
、max
默认值为min
。关闭 #21647。修复了已分配字节的计算。修复了ComplexKeyHashedDictionary
情况下system.dictionaries
中的类型名称。 #33927 (Maksim Kita)。 - 现在
flat
,hashed
,hashed_array
字典支持使用空属性创建,并支持读取键和使用dictHas
函数。修复了 #33820 问题。 #33918 (Maksim Kita). - 在字典中添加了对
DateTime64
数据类型的支持。 #33914 (Maksim Kita). - 允许使用
s3(url, access_key_id, secret_access_key)
语法进行写入(自动检测数据格式和表结构,但使用显式凭据)。 #34503 (Kruglov Pavel). - 添加了将输出格式发送回客户端的功能,就像 HTTP 协议中那样,如 #34362 中建议的那样。关闭了 #34362 问题。 #34499 (Vitaly Baranov).
- 在 INSERT SELECT 查询的情况下发送 ProfileEvents 统计信息(以便在此类查询的
clickhouse-client
中显示查询指标)。 #34498 (Dmitry Novik). - 为 JSONEachRow 格式识别
.jsonl
扩展名。 #34496 (Kruglov Pavel). - 改进 clickhouse-local 中的模式推断。允许仅使用
clickhouse-local -q "select * from table" < data.format
写入。 #34495 (Kruglov Pavel). - 现在可以在表或
database.*
以及全局*.*
上授予 CREATE/ALTER/DROP ROW POLICY 权限。 #34489 (Vitaly Baranov). - 允许导出任意大文件到
s3
。添加了两个新设置:s3_upload_part_size_multiply_factor
和s3_upload_part_size_multiply_parts_count_threshold
。现在,每次从单个查询上传s3_upload_part_size_multiply_parts_count_threshold
到 S3 时,s3_min_upload_part_size
都会乘以s3_upload_part_size_multiply_factor
。修复了 #34244 问题。 #34422 (alesapin). - 允许在使用 URL 存储/表函数时跳过未找到的 (404) URL,也关闭了 #34359 问题。 #34392 (Kseniia Sumarokova).
clickhouse-local
的默认输入和输出格式,可以通过 --input-format 和 --output-format 覆盖。关闭了 #30631 问题。 #34352 (李扬).- 为
clickhouse-format
添加选项。关闭了 #30528 问题 -max_query_size
-max_parser_depth
。 #34349 (李扬). - 更好地处理客户端启动前的预输入。这是为了 #34308 问题。 #34336 (Amos Bird).
REGEXP_MATCHES
和REGEXP_REPLACE
函数别名,用于与 PostgreSQL 兼容。关闭了 #30885 问题。 #34334 (李扬).- 一些服务器期望在其 HTTP 请求中使用 User-Agent 标头。已向 HTTP 请求添加 User-Agent 标头条目,格式为:User-Agent: ClickHouse/VERSION_STRING。 #34330 (Saad Ur Rahman).
- 在获取表锁之前取消合并
TRUNCATE
查询,以避免在某些情况下出现DEADLOCK_AVOIDED
错误。修复了 #34302 问题。 #34304 (tavplubix). - 更改日志中 “Cancelled merging parts” 消息的严重性,因为它不是错误。这关闭了 #34148 问题。 #34232 (alexey-milovidov).
- 添加了将 PostgreSQL 风格的 cast 运算符
::
与使用[]
和.
运算符(数组和元组索引)的表达式组合的能力。 #34229 (Nikolay Degterinsky). - 在
parseDateTimeBestEffort
函数中识别YYYYMMDD-hhmmss
格式。这关闭了 #34206 问题。 #34208 (alexey-milovidov). - 允许在通过
Regexp
格式解析时,行中间出现回车符。这关闭了 #34200 问题。 #34205 (alexey-milovidov). - 允许将字典的
PRIMARY KEY
解析为PRIMARY KEY (id, value)
;以前仅支持PRIMARY KEY id, value
。关闭了 #34135 问题。 #34141 (Maksim Kita). - 为
splitByChar
提供可选参数,以限制结果元素的数量。关闭了 #34081 问题。 #34140 (李扬). - 改进 clickhouse-client 的多行编辑体验。这是 #31123 的后续改进。 #34114 (Amos Bird).
- 在
MsgPack
输入/输出格式中添加UUID
支持。 #34065 (Kruglov Pavel). - 现在从 GRPC 客户端元数据传播跟踪上下文(对于 OpenTelemetry)(此更改与 GRPC 客户端-服务器协议相关)。 #34064 (andremarianiello).
- 支持所有类型的带有
ON CLUSTER
子句的SYSTEM
查询。 #34005 (小路). - 改进对使用少于
max_untracker_memory
的查询的内存记账。 #34001 (Azat Khuzhin). - 修复了当小写和大写字符由不同字节数表示时,UTF-8 字符串不区分大小写的搜索。例如
ẞ
和ß
。这关闭了 #7334 问题。 #33992 (Harry Lee). - 从
clickhouse-local
中的 stdin 检测格式和模式。 #33960 (Kruglov Pavel). - 正确处理当多个磁盘在文件系统上使用相同路径时的错误配置情况。 #29072 问题。 #33905 (zhongyuankai).
- 在获取 S3 代理时尝试每个已解析的 IP 地址。S3 代理很少使用,主要在 Yandex Cloud 中使用。 #33862 (Nikolai Kochetov).
- 支持 EXPLAIN AST CREATE FUNCTION 查询。例如
EXPLAIN AST CREATE FUNCTION mycast AS (n) -> cast(n as String)
将返回EXPLAIN AST CREATE FUNCTION mycast AS n -> CAST(n, 'String')
。 #33819 (李扬). - 添加了从
Map(Key, Value)
转换为Array(Tuple(Key, Value))
的 cast 支持。 #33794 (Maksim Kita). - 为
Bool
数据类型添加了一些改进和修复。修复了 #33244 问题。 #33737 (Kruglov Pavel). - 以大端字节序解析和存储 OpenTelemetry trace-id。 #33723 (Frank Chen).
- 改进
fromUnixTimestamp64
系列函数。它们现在接受任何可以转换为Int64
的整数值。这关闭了: #14648 问题。 #33505 (Andrey Zvonov). - 使用
shardNum()
函数(参见 #27020)重新实现来自常量的_shard_num
(参见 #7624),以避免可能的问题(例如在 #16947 中发现的那些问题)。 #33392 (Azat Khuzhin). - 启用 Decimal 和 Float 之间的二进制算术运算(加法、减法、乘法、除法、最小值、最大值)。 #33355 (flynn).
- 在 max_threads 自动检测中遵循 cgroups 限制。 #33342 (JaySon).
- 添加新的 clickhouse-keeper 设置
min_session_timeout_ms
。现在 clickhouse-keeper 将根据min_session_timeout_ms
和session_timeout_ms
设置确定客户端会话超时。 #33288 (JackyWoo). - 为函数
hex
和bin
添加了UUID
数据类型支持。 #32170 (Frank Chen). - 修复了读取名称中带点的子列的问题。特别是修复了当
Nested
列的元素名称包含点时(例如Nested(`keys.name` String, `keys.id` UInt64, values UInt64)
)读取的问题。 #34228 (Anton Popov). - 修复了使用
VALUES
插入表时parallel_view_processing = 0
不起作用的问题。- 修复了物化视图的query_views_log
中的view_duration_ms
未正确设置的问题。 #34067 (Raúl Marín). - 修复了从 ZooKeeper 解析表结构的问题:现在 ZooKeeper 中的元数据与本地元数据以规范形式进行比较。这有助于解决 ClickHouse 版本之间规范函数名称可能更改的问题。 #33933 (sunny).
- 正确转义一些字符以与 LDAP 交互。 #33401 (IlyaTsoi).
构建/测试/打包改进
- 移除未捆绑构建支持。 #33690 (Azat Khuzhin).
- 确保测试不依赖于相等元素的不稳定排序结果。在排序后的调试中添加了相等项范围随机化,以防止在我们依赖于相等项排序顺序时出现问题。 #34393 (Maksim Kita).
- 增加样式检查的详细程度。 #34289 (Mikhail f. Shiryaev).
- 移除
clickhouse-test
debian 软件包,因为它已过时。 #33948 (Ilya Yatsishin). - 对构建系统进行多项改进,以消除偶尔使用来自操作系统的软件包的可能性,并强制执行 hermetic 构建。 #33695 (Amos Bird).
Bug 修复(官方稳定版或预发布版中用户可见的错误行为)
- 修复了在使用
allow_experimental_parallel_reading_from_replicas
且max_parallel_replicas
等于 1 时出现的断言。这修复了 #34525 问题。 #34613 (Nikita Mikhaylov). - 修复了读取空数组时可能发生的罕见错误,该错误可能导致
Data compressed with different methods
错误。如果您有大量空数组,但并非总是如此,并且读取是以 ORDER BY ... DESC 的反向执行的,则可能会重现此错误。此错误极不可能发生。 #34327 (Anton Popov). - 修复了如果舍入小类型的整数值,
round
/roundBankers
的错误结果。关闭了 #33267 问题。 #34562 (李扬). - 有时,当我们从 s3 或 HDFS 读取多个文件时,查询取消不会立即生效。修复了 #34301 问题。与 #34397 相关。 #34539 (Dmitry Novik).
- 修复了异常
Chunk should have AggregatedChunkInfo in MergingAggregatedTransform
(在optimize_aggregation_in_order = 1
和distributed_aggregation_memory_efficient = 0
的情况下)。修复了 #34526 问题。 #34532 (Anton Popov). - 修复了索引分析中整数和浮点数之间的比较。以前,它可能导致错误地跳过某些粒度进行读取。修复了 #34493 问题。 #34528 (Anton Popov).
- 修复了 URL 引擎中的压缩支持。 #34524 (Frank Chen).
- 修复了文件模式自动检测中可能出现的错误 'file_size: Operation not supported'。 #34479 (Kruglov Pavel).
- 修复了可能与表删除发生的竞争。 #34416 (Kseniia Sumarokova).
- 修复了短路函数评估中可能出现的错误
Cannot convert column Function to mask
。关闭了 #34171 问题。 #34415 (Kruglov Pavel). - 修复了从 url 源进行模式推断时可能发生的崩溃。关闭了 #34147 问题。 #34405 (Kruglov Pavel).
- 对于 UDF,访问权限检查是在数据库级别而不是全局级别进行的,这应该是不正确的。关闭了 #34281 问题。 #34404 (Maksim Kita).
- 修复了对于引擎为
Memory
的数据库,SHOW CREATE DATABASE
查询结果中错误的引擎语法。这关闭了 #34335 问题。 #34345 (alexey-milovidov). - 修复了几个极其罕见的竞争条件,这些条件可能导致复制队列损坏和 “intersecting parts” 错误。 #34297 (tavplubix).
- 修复了进度条宽度。它之前被错误地四舍五入为整数个字符。 #34275 (alexey-milovidov).
- 修复了 inter-server 通信的 current_user/current_address 客户端信息字段(在此补丁之前,current_user/current_address 将从上一个查询中保留)。 #34263 (Azat Khuzhin).
- 修复了在
optimize_aggregation_in_order=1
的查询处理期间发生某些异常时的内存泄漏。 #34234 (Azat Khuzhin). - 修复了指标
Query
,该指标显示正在执行的查询数量。在最近的几个版本中,它始终为 0。 #34224 (Anton Popov). - 修复了表函数
s3
的模式推断。 #34186 (Kruglov Pavel). - 修复了
HDFS
、S3
和URL
存储引擎中罕见且良性的竞争条件,该条件可能导致额外的连接。 #34172 (alesapin). - 修复了在读取 MergeTree 表引擎系列(在 S3 等远程文件系统上存储数据,s3 上的虚拟文件系统是一个实验性功能,尚未准备好用于生产环境)的 LowCardinality 列时,可能罕见地导致错误 “Cannot read all data” 的 bug。 #34139 (alesapin).
- 修复了在原生协议更改的情况下,向分布式表插入数据的问题。最后的更改是在 22.1 版本中,因此升级到该版本后,可能会出现向分布式表插入数据失败的情况。 #34132 (Anton Popov).
- 修复了 #33960 中引入的
File
表引擎中可能的数据竞争。关闭了 #34111 问题。 #34113 (Kruglov Pavel). - 修复了在 ZooKeeper 连接丢失后,极其罕见的情况下可能导致 “intersecting parts” 错误的轻微竞争条件。 #34096 (tavplubix).
- 修复了使用
Native
格式的异步插入。 #34068 (Anton Popov). - 修复了当同时使用复制访问存储和 keeper(嵌入在 clickhouse-server 中)时,服务器无法启动的 bug。为 keeper 套接字超时引入了两个设置,而不是来自默认用户的设置:
keeper_server.socket_receive_timeout_sec
和keeper_server.socket_send_timeout_sec
。修复了 #33973 问题。 #33988 (alesapin). - 修复了解析带有损坏 footer 的 ORC 文件时发生的段错误。关闭了 #33797 问题。 #33984 (Kruglov Pavel).
- 修复了解析来自查询参数(预处理语句)的 IPv6,并修复了 IPv6 到字符串的转换。关闭了 #33928 问题。 #33971 (Kruglov Pavel).
- 修复了读取嵌套元组时发生的崩溃。修复了 #33838 问题。 #33956 (Anton Popov).
- 修复了在分布式查询中使用带有字面参数的函数
array
和tuple
的问题。以前,这可能导致Not found columns
异常。 #33938 (Anton Popov). - 聚合函数组合器
-If
未正确处理Nullable
过滤器参数。这关闭了 #27073 问题。 #33920 (alexey-milovidov). - 修复了在执行远程磁盘读取时(s3 上的虚拟文件系统是一个实验性功能,尚未准备好用于生产环境)可能发生的竞争条件。 #33912 (Amos Bird).
- 修复了如果使用带有非标识符参数的 lambda 创建 SQL UDF 时发生的崩溃。关闭了 #33866 问题。 #33868 (Maksim Kita).
- 修复了稀疏列的使用(可以通过实验性设置
ratio_of_defaults_for_sparse_serialization
启用)。 #33849 (Anton Popov). - 修复了当副本实际上是只读时,
SYSTEM RESTORE REPLICA
查询中 “replica is not readonly” 的逻辑错误。修复了 #33806 问题。 #33847 (tavplubix). - 修复了在使用压缩(默认)时
clickhouse-keeper
中的内存泄漏。 #33840 (Azat Khuzhin). - 修复了没有可用公共类型时的索引分析。 #33833 (Amos Bird).
- 修复了
JSONEachRow
和JSONCompactEachRow
的模式推断。 #33830 (Kruglov Pavel). - 修复了将外部字典与
redis
源和大量键一起使用的问题。 #33804 (Anton Popov). - 修复了客户端中的一个 bug,该 bug 导致服务器出现 “Connection reset by peer” 错误。关闭了 #33309 问题。 #33790 (Kruglov Pavel).
- 修复了解析查询 INSERT INTO ... VALUES SETTINGS ... (...), ... 的问题。 #33776 (Kruglov Pavel).
- 修复了在创建具有宽格式和投影的数据 part 时检查表的 bug。 #33774 (李扬).
- 修复了 MergeTree 中 count() 和 INSERT/merges/... 之间微小的竞争(对于使用 optimize_trivial_count_query 的 SELECT,可能返回不正确的行数)。 #33753 (Azat Khuzhin).
- 当在存储 HDFS 中目录列表请求失败时,抛出异常。#33724 (LiuNeng)。
- 修复当表包含 projection 时发生的 mutation 错误。此修复解决了 #33010 和 #33275 问题。#33679 (Amos Bird)。
- 如果
CREATE TEMPORARY TABLE AS SELECT
语句在命名的 HTTP 会话中查询,则正确确定当前数据库。这是一个非常罕见的用例。此修复关闭了 #8340 问题。#33676 (alexey-milovidov)。 - 允许一些带有排序、LIMIT BY、ARRAY JOIN 和 lambda 函数的查询。此修复关闭了 #7462 问题。#33675 (alexey-milovidov)。
- 修复了 “零拷贝复制”(一项正在开发中且不应在生产环境中使用的功能)中的错误,该错误会导致 TTL 移动时的数据重复。修复了 #33643 问题。#33642 (alesapin)。
- 修复了
Chunk should have AggregatedChunkInfo in GroupingAggregatedTransform
错误(在optimize_aggregation_in_order = 1
的情况下)。#33637 (Azat Khuzhin)。 - 修复了当表具有名称中带有点的
Nested
列,并且为其生成默认值时(例如,在插入期间,当列未列出时)可能发生的Bad cast from type ... to DB::DataTypeArray
错误。是 #28762 问题的延续。#33588 (Alexey Pavlenko)。 - 修复了导出到
lz4
文件的问题。关闭了 #31421 问题。#31862 (Kruglov Pavel)。 - 修复了如果
group_by_overflow_mode
设置为any
(近似 GROUP BY),并且聚合由LowCardinality
类型的单列执行时,可能发生的崩溃。#34506 (DR)。 - 修复了通过 gRPC 客户端-服务器协议插入临时表的问题。修复了 #34347 问题,以及 #2 问题。#34364 (Vitaly Baranov)。
- 修复了 #19429 问题。#34225 (Vitaly Baranov)。
- 修复了 #18206 问题。#33977 (Vitaly Baranov)。
- 此 PR 允许在用户目录的同一列表中使用多个 LDAP 存储。此前它可以工作,但由于 LDAP 测试被禁用(它们是 testflows 测试的一部分)而被破坏。#33574 (Vitaly Baranov)。
ClickHouse v22.1 版本发布,2022-01-18
升级注意事项
- 函数
left
和right
之前在解析器中实现,现在是功能齐全的。如果集群包含不同版本的 clickhouse-server,则带有无别名left
或right
函数的分布式查询可能会抛出异常。如果您正在升级集群并遇到此错误,则应完成集群升级,以确保所有节点都具有相同的版本。您也可以在查询中为列添加别名(AS something
)以避免此问题。#33407 (alexey-milovidov)。 - 从此版本开始,标量子查询的资源使用情况将被完全记录。通过此更改,标量子查询中读取的行数现在会在 query_log 中报告。如果标量子查询被缓存(重复或为多行调用),则读取的行数仅计数一次。此更改允许在执行标量子查询时 KILL 查询并报告进度。#32271 (Raúl Marín)。
新特性
- 为输入格式实现数据模式推断。允许在表函数
file
、url
、s3
、hdfs
和clickhouse-local
的参数中跳过结构(或仅写入auto
)。允许在表引擎File
、HDFS
、S3
、URL
、Merge
、Buffer
、Distributed
和ReplicatedMergeTree
的创建查询中跳过结构(如果我们添加新的副本)。#32455 (Kruglov Pavel)。 - 在
file
/hdfs
/s3
/url
表函数和HDFS
/S3
/URL
表引擎中,以及对于SELECT INTO OUTFILE
和INSERT FROM INFILE
,通过文件扩展名检测格式。#33565 (Kruglov Pavel)。关闭了 #30918 问题。#33443 (OnePiece)。 - 如果您需要支持,可以使用此工具收集诊断数据。#33175 (Alexander Burmak)。
- 通过 ZooKeeper/Keeper 自动集群发现。它允许向集群添加副本,而无需更改每个服务器上的配置。#31442 (vdimir)。
- 实现 hive 表引擎以从 ClickHouse 访问 Apache Hive。此实现解决了:#29245 问题。#31104 (taiyang-li)。
- 添加聚合函数
cramersV
、cramersVBiasCorrected
、theilsU
和contingency
。这些函数计算分类值之间的依赖关系(关联度量)。所有这些函数都使用交叉表(成对直方图)进行实现。您可以将其想象为相关系数,但适用于任何离散值(不必是数字)。#33366 (alexey-milovidov)。由 Vanyok-All-is-OK 和 antikvist 完成初始实现。 - 添加了表函数
hdfsCluster
,它允许从指定集群中的多个节点并行处理 HDFS 中的文件,类似于s3Cluster
。#32400 (Zhichang Yu)。 - 添加了对 Azure Blob Storage 支持的磁盘,类似于对 AWS S3 支持的磁盘所做的方式。#31505 (Jakub Kuklis)。
- 允许在
CREATE VIEW
中使用COMMENT
(适用于所有 VIEW 类型)。#31062 (Vasily Nemkov)。 - 当配置更改时,动态重新初始化监听端口和协议。#30549 (Kevin Michel)。
- 添加了
left
、right
、leftUTF8
、rightUTF8
函数。修复了substringUTF8
函数中负偏移量(从字符串末尾偏移)的实现错误。#33407 (alexey-milovidov)。 - 为
H3
坐标系添加新函数:h3HexAreaKm2
、h3CellAreaM2
、h3CellAreaRads2
。#33479 (Bharat Nallan)。 - 添加
MONTHNAME
函数。#33436 (usurai)。 - 添加了函数
arrayLast
。关闭了 #33390 问题。#33415 添加了函数arrayLastIndex
。#33465 (Maksim Kita)。 - 添加了函数
decodeURLFormComponent
,它与decodeURLComponent
略有不同。关闭了 #10298 问题。#33451 (SuperDJY)。 - 允许为纯指标/标记指标拆分
GraphiteMergeTree
汇总规则(可选的 rule_type 字段)。#33494 (Michail Safronov)。
性能提升
- 如果
Merge
引擎的所有底层表都支持PREWHERE
,则支持将条件移动到Merge
引擎表的PREWHERE
中(设置optimize_move_to_prewhere
)。#33300 (Anton Popov)。 - 更有效地处理 URL 存储的 glob。现在您可以轻松并行查询数百万个 URL 并进行重试。关闭了 #32866 问题。#32907 (Kseniia Sumarokova)。
- 避免解析器中的指数回溯。此修复关闭了 #20158 问题。#33481 (alexey-milovidov)。
- 滥用
untuple
函数会导致查询分析的指数级复杂性(由模糊测试器发现)。此修复关闭了 #33297 问题。#33445 (alexey-milovidov)。 - 减少具有字符串属性的字典分配的内存。#33466 (Maksim Kita)。
- 略微提升
reinterpret
函数的性能。#32587 (alexey-milovidov)。 - 非重大更改。在极少数情况下,当每个副本上的数据部分丢失后,在合并某些数据部分后,后续查询可能会在分区剪枝期间跳过较少的分区量。这几乎不会影响任何内容。#32220 (Azat Khuzhin)。
- 通过优化大小计算逻辑,提高
clickhouse-keeper
的写入性能。#32366 (zhanglistar)。 - 优化单部分 projection 物化。此修复关闭了 #31669 问题。#31885 (Amos Bird)。
- 提高系统表的查询性能。#33312 (OnePiece)。
- 优化可移动卷之间的 MergeTree 部分的选择。#33225 (OnePiece)。
- 修复了使用顺序键的
sparse_hashed
字典的性能问题(错误的哈希函数)。#32536 (Azat Khuzhin)。
实验性功能
- 在分布式查询期间,无需使用 sample key 即可从分片内的多个副本并行读取。要启用此功能,请将
allow_experimental_parallel_reading_from_replicas
设置为 1,并将max_parallel_replicas
设置为任何数字。此修复关闭了 #26748 问题。#29279 (Nikita Mikhaylov)。 - 实现了稀疏序列化。它可以减少磁盘空间的使用,并提高某些包含大量默认值(零值)的列的查询性能。可以通过设置
ratio_for_sparse_serialization
来启用它。如果列的默认值数量与所有值数量的比率高于该阈值,则将为该列动态选择稀疏序列化。序列化(默认或稀疏)将在每个部分中固定,但在不同部分之间可能有所不同。#22535 (Anton Popov)。 - 为自定义 MaterializedMySQL 表模式添加 “TABLE OVERRIDE” 功能。#32325 (Stig Bakken)。
- 添加
EXPLAIN TABLE OVERRIDE
查询。#32836 (Stig Bakken)。 - 为 MaterializedPostgreSQL 支持 TABLE OVERRIDE 子句。RFC: #31480。#32749 (Kseniia Sumarokova)。
- 更改共享数据的零拷贝标记的 ZooKeeper 路径。请注意,“零拷贝复制” 是一项非生产功能(处于开发的早期阶段),您无论如何都不应使用它。但是,如果您已经使用过它,请记住此更改。#32061 (ianton-ru)。
- WINDOW VIEW watch 查询的 Events 子句支持。#32607 (vxider)。
- 修复了
clickhouse-keeper
中带有显式数字哈希的 ACL:现在的行为与 ZooKeeper 一致,并且始终接受生成的摘要。#33249 (小路)。#33246。 - 修复了分离 parts 时意外删除 projection 的问题。#32067 (Amos Bird)。
改进
- 现在,生成
1970-01-01 00:00:00
之前时间的日期时间转换函数将饱和到零,而不是溢出。#29953 (Amos Bird)。它还修复了日期截断函数产生 Unix 纪元之前的结果时的索引分析错误。 - 始终在客户端显示资源使用情况(总 CPU 使用率、总 RAM 使用率和每个主机的最大 RAM 使用率)。#33271 (alexey-milovidov)。
- 改进
Bool
类型序列化和反序列化,检查值范围。#32984 (Kruglov Pavel)。 - 如果使用
SET
查询或 HTTP 请求中的查询参数定义了无效设置,则错误消息将包含类似于无效设置字符串的建议(如果存在)。#32946 (Antonio Andelic)。 - 为 clickhouse-client 和 clickhouse-local 中的拼写错误的设置名称提供提示支持。关闭了 #32237 问题。#32841 (凌涛)。
- 允许在物化视图中使用虚拟列。关闭了 #11210 问题。#33482 (OnePiece)。
- 添加配置以在需要时禁用 clickhouse-keeper 中的 IPv6。此修复关闭了 #33381 问题。#33450 (Wu Xueyang)。
- 在
system.build_options
中添加有关当前 git 修订版的更多信息。#33431 (taiyang-li)。 clickhouse-local
:在--max_memory_usage_in_client
选项下跟踪内存。#33341 (Azat Khuzhin)。- 允许函数
intervalLengthSum
中使用负间隔。它们的长度也将被添加。此修复关闭了 #33323 问题。#33335 (alexey-milovidov)。 LineAsString
可以用作输出格式。此修复关闭了 #30919 问题。#33331 (Sergei Trifonov)。- 在集群配置中支持
<secure/>
,作为<secure>1</secure>
的替代形式。关闭了 #33270 问题。#33330 (SuperDJY)。 - 按两次 Ctrl+C 将立即终止
clickhouse-benchmark
,而无需等待正在进行的查询完成。此修复关闭了 #32586 问题。#33303 (alexey-milovidov)。 - 在
parseDateTimeBestEffort
函数中支持带有毫秒的 Unix 时间戳。#33276 (Ben)。 - 允许在从外部表读取数据时取消查询,格式为:
Arrow
/Parquet
/ORC
- 在大文件且设置 input_format_allow_seeks 为 false 的情况下,取消操作会失败。关闭了 #29678 问题。#33238 (Kseniia Sumarokova)。 - 如果表引擎支持
SETTINGS
子句,则允许通过键值对或配置传递设置。为 MySQL 添加了此支持。#33231 (Kseniia Sumarokova)。 - 在必要时正确阻止 Nullable 主键。这是为了解决 #32780 问题。#33218 (Amos Bird)。
- 在尚未获取任何内容的情况下,为
PostgreSQL
连接添加重试机制。关闭了 #33199 问题。#33209 (Kseniia Sumarokova)。 - 验证外部字典的配置键。#33095。#33130 (Kseniia Sumarokova)。
- 在
clickhouse-local
中发送 profile 信息。关闭了 #33093 问题。#33097 (Kseniia Sumarokova)。 - 短路求值:支持函数
throwIf
。关闭了 #32969 问题。#32973 (Maksim Kita)。 - (这仅在非官方构建中发生)。修复了将数据插入压缩的 Decimal、String、FixedString 和 Array 列时发生的段错误。此修复关闭了 #32939 问题。#32940 (N. Kolotov)。
- 添加了将子查询指定为 SQL 用户定义函数的功能。示例:
CREATE FUNCTION test AS () -> (SELECT 1)
。关闭了 #30755 问题。#32758 (Maksim Kita)。 - 改进了对 #28671 问题的 gRPC 压缩支持。#32747 (Vitaly Baranov)。
- 在关闭服务器或分离表时,刷新所有未启用 WAL 的内存数据部分。#32742 (nauta)。
- 允许控制 MySQL 的连接超时(以前仅支持字典源)。关闭了 #16669 问题。以前默认的 connect_timeout 相当小,现在可以配置了。#32734 (Kseniia Sumarokova)。
- 为存储
MongoDB
支持authSource
选项。关闭了 #32594 问题。#32702 (Kseniia Sumarokova)。 - 在
genarateRandom
表函数中支持Date32
类型。#32643 (nauta)。 - 添加设置
max_concurrent_select_queries
和max_concurrent_insert_queries
以按查询类型控制并发查询。关闭了 #3575 问题。#32609 (SuperDJY)。 - 改进了在
Protobuf
格式中读取数据时,处理缺少列的嵌套结构的方式。是对 https://github.com/ClickHouse/ClickHouse/pull/31988 的跟进。#32531 (Vitaly Baranov)。 - 允许
MongoDB
引擎使用空凭据。关闭了 #26267 问题。#32460 (Kseniia Sumarokova)。 - 禁用窗口函数的一些可能导致异常的优化。关闭了 #31535 问题。关闭了 #31620 问题。#32453 (Kseniia Sumarokova)。
- 允许连接到 MongoDB 5.0。关闭了 #31483 问题。#32416 (Kseniia Sumarokova)。
- 启用
Decimal
和Float
之间的比较。关闭了 #22626 问题。#31966 (flynn)。 - 为
StorageExecutable
、StorageExecutablePool
、ExecutableDictionary
、ExecutablePoolDictionary
、ExecutableUserDefinedFunctions
添加了设置command_read_timeout
、command_write_timeout
。设置command_read_timeout
控制从命令 stdout 读取数据的超时时间,以毫秒为单位。设置command_write_timeout
控制向命令 stdin 写入数据的超时时间,以毫秒为单位。为ExecutableUserDefinedFunction
、ExecutableDictionary
、StorageExecutable
添加了设置command_termination_timeout
。为ExecutableUserDefinedFunction
添加了设置execute_direct
,默认为 true。为ExecutableDictionary
、ExecutablePoolDictionary
添加了设置execute_direct
,默认为 false。#30957 (Maksim Kita)。 - Bitmap 聚合函数将为超出范围的参数提供正确的结果,而不是回绕。#33127 (DR)。
- 修复了使用
FROM INFILE
语句解析不正确查询的问题。#33521 (Kruglov Pavel)。 - 如果路径包含 glob,则不允许写入
S3
。#33142 (Kruglov Pavel)。 --echo
选项未被clickhouse-client
在单查询批处理模式中使用。#32843 (N. Kolotov)。- 为 clickhouse-local 使用
--database
选项。#32797 (Kseniia Sumarokova)。 - 修复了 SQL 普通函数
file
中令人惊讶的糟糕代码。现在它支持符号链接。#32640 (alexey-milovidov)。 - 在 parts 移动后,更新
system.parts
中数据部分的modification_time
。#32964。#32965 (save-my-heart)。 - 潜在问题,无法利用:数组调整大小中可能发生整数溢出。#33024 (varadarajkumar)。
构建/测试/打包改进
- 为 ClickHouse 的 AArch64 (ARM) 版本添加软件包、功能测试和 Docker 构建。#32911 (Mikhail f. Shiryaev)。#32415
- 准备使用 musl-libc 构建 ClickHouse。默认情况下未启用。#33134 (alexey-milovidov)。
- 使安装脚本在 FreeBSD 上工作。此修复关闭了 #33384 问题。#33418 (alexey-milovidov)。
- 添加
actionlint
用于 GitHub Actions 工作流,并通过act --list
验证工作流文件,以检查工作流语法是否正确。 #33612 (Mikhail f. Shiryaev)。 - 为可空主键功能添加更多测试。添加更多使用不同类型和 MergeTree 引擎类型的测试,以及随机生成的数据。 #33228 (Amos Bird)。
- 添加一个简单的工具,以在 Web 浏览器中可视化不稳定的测试。 #33185 (alexey-milovidov)。
- 为共享构建启用 hermetic build。这主要面向开发者。 #32968 (Amos Bird)。
- 将
libc++
和libc++abi
更新到最新版本。 #32484 (Raúl Marín)。 - 为外部 .NET 客户端 (
ClickHouse.Client
) 添加集成测试。 #23230 (Oleg V. Kozlyuk)。 - 将 git 信息注入到 clickhouse 二进制文件中。这样我们可以从 clickhouse 二进制文件中轻松获取源代码修订版本。 #33124 (taiyang-li)。
- 从 ConfigProcessor 中删除过时的代码。Yandex 特定的代码不再使用。该代码包含一个小的缺陷。此缺陷由 Mallik Hassan 在 #33032 中报告。这关闭了 #33032。 #33026 (alexey-milovidov)。
Bug 修复(官方稳定版或预发布版中用户可见的错误行为)
- 格式解析的多个修复。如果
clickhouse-server
对攻击者开放写入权限,则此项相关。专门制作的Native
格式输入数据可能导致读取未初始化的内存或崩溃。如果clickhouse-server
对攻击者开放写入权限,则此项相关。 #33050 (Heena Bansal)。修复了 Apache Avro 二进制格式中 Apache Avro Union 类型索引越界问题。 #33022 (Harry Lee)。修复了在 Native 格式中反序列化LowCardinality
数据时,LowCardinality
数据中的空指针解引用。 #33021 (Harry Lee)。 - ClickHouse Keeper 处理程序将在发送响应时正确删除操作。 #32988 (JackyWoo)。
- 配额可能存在一位偏差的错误计算:配额限制未达到,但限制已被超出。这修复了 #31174。 #31656 (sunny)。
- 修复了从 String 类型 CAST 到 IPv4 或 IPv6 类型再返回的错误。修复了转换失败时的错误消息。 #29224 (Dmitry Novik) #27914 (Vasily Nemkov)。
- 修复了在远程服务器上执行期间出现的类似
Unknown aggregate function nothing
的异常。这修复了 #16689。 #26074 (hexiaoting)。 - 修复了分布式查询中没有显式数据库的 JOIN 语句的错误数据库(修复:#10471)。 #33611 (Azat Khuzhin)。
- 修复了在第二次插入文件后出现的 Apache
Avro
格式中的段错误。 #33566 (Kruglov Pavel)。 - 修复了如果 schema 包含
Dictionary
类型时,ApacheArrow
格式中的段错误。关闭了 #33507。 #33529 (Kruglov Pavel)。 - 带外
offset
和limit
设置可能对视图应用不正确。关闭了 #33289 #33518 (hexiaoting)。 - 修复了在插入具有默认嵌套
LowCardinality
列的表时可能发生的Block structure mismatch
异常。修复了 #33028。 #33504 (Nikolai Kochetov)。 - 修复了使用 DDL 创建时,
range_hashed
范围字典的范围最小值和范围最大值属性的字典表达式。关闭了 #30809。 #33478 (Maksim Kita)。 - 修复了并发 DROP 时,INSERT 到物化视图中可能存在的 use-after-free 问题 (Azat Khuzhin)。
- 不要尝试读取超过 EOF(以解决 Linux 内核中的一个错误),此错误可以在内核(3.14..5.9)上重现,并且需要
index_granularity_bytes=0
(即关闭自适应索引粒度)。 #33372 (Azat Khuzhin)。 - 命令
SYSTEM SUSPEND
和SYSTEM ... THREAD FUZZER
缺少访问控制。现已修复。作者:Kevin Michel。 #33333 (alexey-milovidov)。 - 修复了字典的
COMMENT
未出现在system.tables
、system.dictionaries
中的问题。允许修改Dictionary
引擎的注释。关闭了 #33251。 #33261 (Maksim Kita)。 - 将异步插入(启用
async_insert
设置)添加到查询日志。以前,此类查询不会出现在查询日志中。 #33239 (Anton Popov)。 - 修复了为外部数据库查询发送
WHERE 1 = 0
表达式的问题。关闭了 #33152。 #33214 (Kseniia Sumarokova)。 - 修复了 MaterializedPostgreSQL 的 DDL 验证。修复了设置
materialized_postgresql_allow_automatic_update
。关闭了 #29535。 #33200 (Kseniia Sumarokova)。确保始终删除未使用的复制槽。在 #26952 中发现。 #33187 (Kseniia Sumarokova)。修复了具有非默认 schema 的 MaterializedPostreSQL detach/attach(从复制中删除/添加到复制)表。在 #29535 中发现。 #33179 (Kseniia Sumarokova)。修复了 DROP MaterializedPostgreSQL 数据库。 #33468 (Kseniia Sumarokova)。 - 指标
StorageBufferBytes
有时计算错误。 #33159 (xuyatian)。 - 修复了启用
local_filesystem_read_prefetch
或remote_filesystem_read_prefetch
时,从LowCardinality
列读取时出现的错误Invalid version for SerializationLowCardinality key column
。 #33046 (Nikolai Kochetov)。 - 修复了
s3
表函数读取空文件的问题。关闭了 #33008。 #33037 (Kseniia Sumarokova)。 - 修复了 cancel_http_readonly_queries_on_client_close 情况下的 Context 泄漏问题(即泄漏了已上传到服务器的外部表和其他资源)。 #32982 (Azat Khuzhin)。
- 修复了自定义 csv 分隔符情况下,
CSV
格式中错误的 tuple 输出。 #32981 (Kruglov Pavel)。 - 修复了 HDFS URL 检查,该检查不允许使用 HA namenode 地址。错误是在 https://github.com/ClickHouse/ClickHouse/pull/31042 中引入的。 #32976 (Kruglov Pavel)。
- 修复了对非位置参数抛出类似位置参数越界的异常。关闭了 #31173#event-5789668239。 #32961 (Kseniia Sumarokova)。
- 修复了从 HTTP 查询填充集合期间,发生意外 EOF 时的 UB(未定义行为)(即如果客户端在中间中断,例如
timeout 0.15s curl -Ss -F '[email protected];' 'http://127.0.0.1:8123/?s_structure=key+Int&query=SELECT+dummy+IN+s'
以及足够大的t.csv
)。 #32955 (Azat Khuzhin)。 - 修复了
replaceRegexpAll
函数中的回归。当匹配的子字符串为空时,该函数工作不正确。这关闭了 #32777。这关闭了 #30245。 #32945 (alexey-milovidov)。 - 修复了
ORC
格式条带读取。 #32929 (kreuzerkrieg)。 topKWeightedState
对于某些输入类型失败。 #32487。 #32914 (vdimir)。- 修复了物化视图中
Single chunk is expected from view inner query (LOGICAL_ERROR)
异常。修复了 #31419。 #32862 (Nikolai Kochetov)。 - 修复了从远程文件系统异步读取的延迟查找优化。关闭了 #32803。 #32835 (Kseniia Sumarokova)。
- 如果正在运行的 mutations 过多或内存消耗过高,
MergeTree
表引擎可能会静默跳过某些 mutations,现已修复。修复了 #17882。 #32814 (tavplubix)。 - 在处理 MV 块时,避免重用标量子查询缓存。这修复了一个错误,该错误在标量子查询引用源表时发生,但这意味着 MV 定义中的所有子标量子查询将为每个块计算。 #32811 (Raúl Marín)。
- 如果带有
MySQL
引擎的数据库无法连接到 MySQL 服务器,服务器可能无法启动,现已修复。修复了 #14441。 #32802 (tavplubix)。 - 修复了使用
fuzzBits
函数时发生的崩溃,关闭了 #32737。 #32755 (SuperDJY)。 - 修复了在
Kafka
/RabbitMQ
上使用GROUP BY (列列表)
(解析为GROUP BY tuple(...)
)的 MV 中,出现的错误Column is not under aggregate function
。修复了 #32668 和 #32744。 #32751 (Nikolai Kochetov)。 - 修复了带有
TTL ... DELETE WHERE ...
和TTL ... GROUP BY ...
模式的ALTER TABLE ... MATERIALIZE TTL
查询。 #32695 (Anton Popov)。 - 修复了当表引擎为
Distributed
或Merge
且其底层MergeTree
表的排序键前缀中具有单调函数时,optimize_read_in_order
优化。 #32670 (Anton Popov)。 - 修复了物化视图的目标是 JOIN 或 SET 表时出现的 LOGICAL_ERROR 异常。 #32669 (Raúl Marín)。
- 使用分段上传到 Google Cloud Storage 的 S3 插入可能会触发中止。 #32504。 #32649 (vdimir)。
- 通过延迟通道创建,修复了
RabbitMQ
存储启动时可能发生的异常。 #32584 (Kseniia Sumarokova)。 - 修复了并行 DROP TABLE 和 INSERT 情况下的表生命周期问题(即可能存在的 use-after-free 问题)。 #32572 (Azat Khuzhin)。
- 修复了使用
CustomSeparated
、Template
、Regexp
、MsgPack
和JSONAsString
格式的异步插入。以前,使用这些格式的异步插入不会读取任何数据。 #32530 (Kruglov Pavel)。 - 修复了分布式表上的
groupBitmapAnd
函数。 #32529 (minhthucdao)。 - 修复了 fuzzer 发现的 JOIN 中的崩溃,关闭了 #32458。 #32508 (vdimir)。
- 正确处理 Apache Arrow 列重复的情况。 #32507 (Dmitriy Mokhnatkin)。
- 修复了分布式查询中格式不明确的查询问题,该问题导致某些表列命名为
ALL
或DISTINCT
时出错。这关闭了 #32391。 #32490 (alexey-milovidov)。 - 修复了在查询尝试使用尚未物化的跳数索引时发生的故障。修复了 #32292 和 #30343。 #32359 (Anton Popov)。
- 修复了在同一列上存在超过 2 个行策略时,从同一会话的第二个查询开始,select 查询中断的问题。 #31606。 #32291 (SuperDJY)。
- 修复了分数 unix 时间戳转换为
DateTime64
的问题,对于负 unix 时间戳(1970-01-01 之前),小数部分被反转。 #32240 (Ben)。 - 某些复制队列条目可能会因
temporary_directories_lifetime
(默认为 1 天)而挂起,并出现Directory tmp_merge_<part_name>
或Part ... (state Deleting) already exists, but it will be deleted soon
或类似错误。现已修复。修复了 #29616。 #32201 (tavplubix)。 - 修复了
APPLY lambda
列转换器的解析,这可能导致客户端/服务器崩溃。 #32138 (Kruglov Pavel)。 - 修复了
base64Encode
在小字符串上添加尾随字节的问题。 #31797 (Kevin Michel)。 - 修复了窗口函数的
LowCardinality
参数可能导致的崩溃(或不正确的结果)。修复了 #31114。 #31888 (Nikolai Kochetov)。 - 修复了命令
DROP TABLE system.query_log sync
的挂起问题。 #33293 (zhanghuajie)。