2024 更新日志
目录
ClickHouse 发布 v24.12, 2024-12-19
ClickHouse 发布 v24.11, 2024-11-26
ClickHouse 发布 v24.10, 2024-10-31
ClickHouse 发布 v24.9, 2024-09-26
ClickHouse 发布 v24.8 LTS, 2024-08-20
ClickHouse 发布 v24.7, 2024-07-30
ClickHouse 发布 v24.6, 2024-07-01
ClickHouse 发布 v24.5, 2024-05-30
ClickHouse 发布 v24.4, 2024-04-30
ClickHouse 发布 v24.3 LTS, 2024-03-26
ClickHouse 发布 v24.2, 2024-02-29
ClickHouse 发布 v24.1, 2024-01-30
2023 年更新日志
ClickHouse 发布 24.12, 2024-12-19
向后不兼容的变更
- 函数
greatest
和least
现在忽略 NULL 输入值,而之前如果参数之一为 NULL,则返回 NULL。例如,SELECT greatest(1, 2, NULL)
现在返回 2。这使得行为与 PostgreSQL 兼容,但同时打破了与返回 NULL 的 MySQL 的兼容性。要保留之前的行为,请将设置least_greatest_legacy_null_behavior
(默认值:false
)设置为true
。#65519 #73344 (kevinyhzou)。 - 新的 MongoDB 集成现在是默认设置。喜欢使用旧版 MongoDB 驱动程序(基于 Poco 驱动程序)的用户可以启用服务器设置
use_legacy_mongodb_integration
。#73359 (Kirill Nikiforov。
新功能
- 将
JSON
/Dynamic
/Variant
类型从实验性功能移至 beta 版。#72294 (Pavel Kruglov)。我们还将所有修复以及此更改向后移植到 24.11。 - Iceberg 数据存储格式的模式演变,为用户提供了广泛的选项来修改其表的模式。列的顺序、列名和简单类型扩展可以在后台更改。#69445 (Daniil Ivanik)。
- 与 Iceberg REST Catalog 集成:一个新的数据库引擎,名为 Iceberg,它将整个目录插入到 ClickHouse 中。#71542 (Kseniia Sumarokova)。
- 为
MergeTree
表的主键索引添加缓存(可以通过表设置use_primary_key_cache
启用)。如果为主键索引启用了延迟加载和缓存,则它将按需加载到缓存(类似于标记缓存),而不是永远保存在内存中。在数据部分的插入/合并/提取以及表重启时添加主键索引的预热(可以通过设置prewarm_primary_key_cache
启用)。这允许在共享存储上为大型表降低内存使用量,我们在超过一千万亿条记录的表上对其进行了测试。#72102 (Anton Popov)。#72750 (Alexander Gololobov)。 - 实现
SYSTEM LOAD PRIMARY KEY
命令,以加载指定表的所有部分或所有表的主键索引(如果未指定表)。这将对基准测试和防止查询执行期间的额外延迟很有用。#66252 #67733 (ZAWA_ll)。 - 添加了一个查询,允许将
MergeTree
表附加为ReplicatedMergeTree
,反之亦然:ATTACH TABLE ... AS REPLICATED
和ATTACH TABLE ... AS NOT REPLICATED
。#65401 (Kirill)。 - 一个新的设置
http_response_headers
,允许您自定义 HTTP 响应标头。例如,您可以告诉浏览器渲染存储在数据库中的图片。这关闭了 #59620。#72656 (Alexey Milovidov)。 - 添加函数
toUnixTimestamp64Second
,将DateTime64
转换为具有固定秒精度的Int64
值,以便我们可以支持日期在 Unix 纪元之前的负值。#70597 (zhanglistar)。#73146 (Robert Schulze)。 - 添加新设置
enforce_index_structure_match_on_partition_manipulation
,以允许在源表的投影和二级索引集是目标表中这些项的子集时进行附加。关闭 #70602。#70603 (zwy991114)。 - 为 ALTER USER 添加语法
{ADD|MODIFY|DROP SETTING}
,ALTER USER{ADD|DROP PROFILE}
,对于 ALTER ROLE 和 ALTER PROFILE 也是如此。因此,您可以修改设置集,而不是替换所有设置集。#72050 (pufit)。 - 添加了
arrayPRAUC
函数,用于计算精确率-召回率曲线的 AUC(曲线下面积)。#72073 (Emmanuel)。 - 为数组类型添加
indexOfAssumeSorted
函数。优化在非递减顺序排序数组的情况下的搜索。效果出现在非常大的数组(超过 100,000 个元素)上。#72517 (Eric Kurbanov)。 - 允许使用分隔符作为聚合函数
groupConcat
的可选第二个参数。#72540 (Yarik Briukhovetskyi)。 - 如果
from
参数包含的字符多于to
参数,则函数translate
现在支持字符删除。示例:SELECT translate('clickhouse', 'clickhouse', 'CLICK')
现在返回CLICK
。#71441 (shuai.xu)。
实验性功能
- 一个新的 MergeTree 设置
allow_experimental_reverse_key
,它支持 MergeTree 排序键中的降序排序顺序。这对于时间序列分析非常有用,尤其是 TopN 查询。示例用法:ENGINE = MergeTree ORDER BY (time DESC, key)
-time
字段的降序。#71095 (Amos Bird)。
性能提升
- JOIN 重新排序。添加了一个选项来选择将充当查询计划中内部(构建)表的 join 侧。这由
query_plan_join_swap_table
控制,可以将其设置为auto
。在这种模式下,ClickHouse 将尝试选择行数最少的表。#71577 (Vladimir Cherkasov)。 - 现在,当
join_algorithm
设置设置为default
时,将使用parallel_hash
算法(如果适用)。当无法使用parallel_hash
时,仍然会考虑之前的两个替代方案(direct
和hash
)。#70788 (Nikita Taranov)。 - 添加选项以从
WHERE
和ON
表达式中提取公共表达式,以减少 join 期间使用的哈希表数量。当 JOIN ON 条件在不同的 OR 部分内具有公共部分时,这才有意义。可以通过optimize_extract_common_expressions = 1
启用。#71537 (János Benjamin Antal)。 - 当索引列被 CAST 为
LowCardinality(String)
时,允许在SELECT
上使用索引,这可能是对 Merge 表运行查询时,某些表具有String
,而某些表具有LowCardinality(String)
的情况。#71598 (Yarik Briukhovetskyi)。 - 在使用并行副本并启用本地计划执行查询期间,不要在 worker 上执行索引分析。协调器将根据其侧(查询发起者)的索引分析,为 worker 选择要读取的范围。这使得具有并行副本的短查询具有与单节点查询一样低的延迟。#72109 (Igor Nikonov)。
- 对于对象存储磁盘,
clickhouse disks remove --recursive
的内存使用量已减少。#67323 (Kirill)。 - 从 #57631 中恢复读取紧凑部分中单列子列的优化。它是意外删除的。#72285 (Pavel Kruglov)。
- 通过在比较器中取消虚拟化调用来加速
LowCardinality(String)
列的排序。#72337 (Alexander Gololobov)。 - 优化函数
argMin
/argMax
以处理一些简单的数据类型。#72350 (alesapin)。 - 优化内存跟踪器中带有共享锁的锁定,以减少锁争用,从而提高 CPU 数量非常高的系统上的性能。#72375 (Jiebin Sun)。
- 添加了一个新设置
use_async_executor_for_materialized_views
。使用物化视图查询的异步和潜在的多线程执行,可以加快 INSERT 期间的视图处理速度,但也消耗更多内存。#72497 (alesapin)。 - 改进了聚合函数状态的反序列化性能(在数据类型
AggregateFunction
和分布式查询中)。略微提高了格式RowBinary
的解析性能。#72818 (Anton Popov)。 - 以表的键顺序拆分使用并行副本读取的范围,以减少读取期间的内存消耗。#72173 (JIaQi)。
- 在插入批次中分区键的单个值的情况下,加速插入到 merge tree 中。#72348 (alesapin)。
- 在从备份还原时,实现并行创建表。在此 PR 之前,
RESTORE
命令始终在单个线程中创建表,这在包含许多表的备份的情况下可能会很慢。#72427 (Vitaly Baranov)。 - 如果标记缓存很大,则删除标记缓存可能需要相当长的时间。如果在此期间我们持有上下文互斥锁,它会阻止许多其他活动,甚至在释放互斥锁之前都无法建立新的客户端连接。实际上,同步不需要持有此互斥锁,通过共享 ptr 获得对缓存的本地引用就足够了。#72749 (Alexander Gololobov)。
改进
- 删除
allow_experimental_join_condition
设置,默认允许非等值条件。#69910 (Vladimir Cherkasov)。 - 来自服务器配置 (users.xml) 的设置现在也适用于客户端。对格式设置很有用,例如
date_time_output_format
。#71178 (Michael Kolupaev)。 - 基于服务器/用户内存使用量的自动
GROUP BY
/ORDER BY
到磁盘。通过max_bytes_ratio_before_external_group_by
/max_bytes_ratio_before_external_sort
查询设置控制。#71406 (Azat Khuzhin)。 - 添加新的取消逻辑:
CancellationChecker
检查每个启动的查询的超时,并在超时到达后停止它们。#69880 (Yarik Briukhovetskyi)。 - 支持从
Object
到JSON
的 ALTER,这意味着您可以轻松地从已弃用的 Object 类型迁移。#71784 (Pavel Kruglov)。 - 允许集合中存在 Enum 中不存在的未知值。修复 #72662。#72686 (zhanglistar)。
- 支持
Enum
数据类型的字符串搜索运算符(例如,LIKE),实现 #72661。#72732 (zhanglistar)。 - 某些无意义的 ALTER USER 查询被接受。修复了 #71227。#71286 (Arthur Passos)。
- 在为分布式
INSERT ... SELECT
构建计划时,遵守prefer_locahost_replica
。#72190 (filimonov)。 - Azure 违反了 Iceberg 规范,错误地将 Iceberg v1 标记为 Iceberg v2。问题在 这里描述。Azure Iceberg Writer 创建的 Iceberg 元数据文件(以及清单文件)违反了规范。现在我们尝试使用 v2 读取器读取 v1 Iceberg 格式元数据(因为他们以这种方式编写),并在他们未在清单文件中创建相应字段时添加错误。#72277 (Daniil Ivanik)。
- 现在允许在查询中使用
UNION [ALL]
来CREATE MATERIALIZED VIEW
。行为与带有JOIN
的物化视图相同:只有SELECT
表达式中的第一个表将充当插入的触发器,所有其他表将被忽略。但是,如果对第一个表有多个引用(例如,与自身 UNION),则所有这些引用都将作为插入的数据块进行处理。#72347 (alesapin)。 - 当 ClickHouse 用作字典的源时,添加了源查询验证。#72548 (Alexey Katsman)。
- 确保 ClickHouse 将在配置重新加载时看到 ZooKeeper 更改。#72593 (Azat Khuzhin)。
- 更好地近似缓存标记的内存使用量,以减少缓存的总内存使用量。#72630 (Antonio Andelic)。
- 添加新的
StartupScriptsExecutionState
指标。该指标可以有三个值:0 = 启动脚本尚未完成,1 = 启动脚本成功执行,2 = 启动脚本失败。我们需要此指标,因为我们需要知道启动脚本是否在云中成功执行,尤其是在发布到基本配置之后。#72637 (Miсhael Stetsyuk)。 - 将新的
MergeTreeIndexGranularityInternalArraysTotalSize
指标添加到system.metrics
。需要此指标来查找具有容易受到高影响的大型数据集的实例 - 为创建复制表添加重试。#72682 (Vitaly Baranov)。
- 将
total_bytes_with_inactive
添加到system.tables
以计算非活动部分的字节总数。#72690 (Kai Zhu)。 - 将 MergeTree 设置添加到
system.settings_changes
。#72694 (Raúl Marín)。 - 在
notEmpty
函数中支持 JSON 类型。#72741 (Pavel Kruglov)。 - 支持解析 GCS S3 错误
AuthenticationRequired
。#72753 (Vitaly Baranov)。 - 在函数
ifNull
和coalesce
中支持Dynamic
类型。#72772 (Pavel Kruglov)。 - 在函数
toFloat64
/touInt32
/etc. 中支持Dynamic
。#72989 (Pavel Kruglov)。 - 添加 S3 请求设置
http_max_fields
,http_max_field_name_size
,http_max_field_value_size
并在备份或还原期间解析 S3 API 响应时使用它们。#72778 (Vitaly Baranov)。 - 仅在最后一个使用此元数据的表被删除后,才在 Keeper 中删除 Storage S3(Azure)Queue 中的表元数据。#72810 (Kseniia Sumarokova)。
- 添加了
JoinBuildTableRowCount
/JoinProbeTableRowCount/JoinResultRowCount
配置文件事件。#72842 (Vladimir Cherkasov)。 - 在 MergeTree 排序键和跳过索引中支持子列。#72644 (Pavel Kruglov)。
Bug 修复(官方稳定版本中用户可见的错误行为)
- 修复 MergeTree 可能的相交部分(在将部分移动到分离目录的操作失败之后,可能是由于对象存储上的操作)。#70476 (Azat Khuzhin)。
- 修复表名过长时出现的错误检测。提供诊断信息,告知最大长度。添加新函数
getMaxTableNameLengthForDatabase
。#70810 (Yarik Briukhovetskyi)。 - 修复
clickhouse-library-bridge
崩溃后的僵尸进程(此程序允许运行不安全的库)。#71301 (MikhailBurdukov)。 - 修复当
plain_rewritable
磁盘创建目录失败时,事务回滚期间的 NoSuchKey 错误。#71439 (Julia Kartseva)。 - 修复
Pretty
JSON 格式中Dynamic
值的序列化。#71923 (Pavel Kruglov)。 - 在
File
/S3
/URL
/HDFS
/Azure
引擎的创建查询中添加推断的格式名称。以前,每次服务器重新启动时都会推断格式名称,如果删除指定的数据文件,则会导致服务器启动期间出错。#72108 (Pavel Kruglov)。 - 修复在使用旧分析器的 join on 表达式中使用 UDF 时出现的错误。#72179 (Raúl Marín)。
- 修复
StorageObjectStorage
中的一些小错误。需要默认启用use_hive_partitioning
。#72185 (Yarik Briukhovetskyi)。 - 修复了
min_age_to_force_merge_on_partition_only
设置在尝试重复合并已合并为单个 part 的相同分区时卡住,而没有合并具有多个 part 的分区的错误。 #72209 (Christoph Wurm)。 - 修复了在处理稀疏列时,罕见情况下
SimpleSquashingChunksTransform
中发生的崩溃。 #72226 (Vladimir Cherkasov)。 - 修复了
GraceHashJoin
中的数据竞争,该竞争可能导致连接输出中缺少某些行。 #72233 (Nikita Taranov)。 - 修复了物化
_block_number
列的ALTER DELETE
查询(如果启用了设置enable_block_number_column
)。 #72261 (Anton Popov)。 - 修复了并发调用
ColumnDynamic::dumpStructure()
时的数据竞争,例如在ConcurrentHashJoin
构造函数中。 #72278 (Nikita Taranov)。 - 修复了
ORDER BY ... WITH FILL
中重复列可能导致的LOGICAL_ERROR
。 #72387 (Vladimir Cherkasov)。 - 修复了应用
optimize_functions_to_subcolumns
后,几种情况下类型不匹配的问题。 #72394 (Anton Popov)。 - 使用
AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE
代替AWS_CONTAINER_AUTHORIZATION_TOKEN_PATH
。 修复了 #71074。 #72397 (Konstantin Bogdanov)。 - 修复了解析
BACKUP DATABASE db EXCEPT TABLES db.table
查询时失败的问题。 #72429 (Konstantin Bogdanov)。 - 不允许创建空的
Variant
类型。 #72454 (Pavel Kruglov)。 - 修复了
system.merges
中result_part_path
的无效格式。 #72567 (Konstantin Bogdanov)。 - 修复了解析只有一个元素的 glob (例如
{file}
) 时失败的问题。 #72572 (Konstantin Bogdanov)。 - 修复了在具有
ARRAY JOIN
的分布式查询情况下,为 follower 服务器生成查询的问题。 修复了 #69276。 #72608 (Dmitry Novik)。 - 修复了 DateTime64 IN DateTime64 返回空结果的错误。 #72640 (Yarik Briukhovetskyi)。
- 修复了在具有
flatten_nested=0
创建的表的 Replicated 数据库中添加新副本时,元数据不一致的问题。 #72685 (Alexander Tokmakov)。 - 修复了 Keeper 内部通信的高级 SSL 配置。 #72730 (Antonio Andelic)。
- 修复了在
tracked_files_limit
设置小于 s3 文件出现速率时,S3Queue 无序模式下 “No such key” 错误。 #72738 (Kseniia Sumarokova)。 - 修复了当本地用户不存在时,RemoteQueryExecutor 中抛出的异常。 #72759 (Andrey Zvonov)。
- 修复了物化
_block_number
列的 mutations 操作(如果启用了设置enable_block_number_column
)。 #72854 (Anton Popov)。 - 修复了备份/还原操作,当普通可重写磁盘备份中存在空文件时的问题。 #72858 (Kseniia Sumarokova)。
- 正确取消 DistributedAsyncInsertDirectoryQueue 中的 inserts 操作。 #72885 (Antonio Andelic)。
- 修复了解析不正确数据到稀疏列时发生的崩溃(当启用设置
enable_parsing_to_custom_serialization
时可能发生)。 #72891 (Anton Popov)。 - 修复了备份还原期间潜在的崩溃。 #72947 (Kseniia Sumarokova)。
- 修复了
parallel_hash
JOIN 方法中的错误,该错误可能在查询的ON
子句中具有带有不等式过滤器的复杂条件时出现。 #72993 (Nikita Taranov)。 - 在 JSON 解析期间使用默认格式设置,以避免反序列化损坏。 #73043 (Pavel Kruglov)。
- 修复了在不支持存储引擎的事务中发生的崩溃。 #73045 (Raúl Marín)。
- 修复了可能高估内存跟踪的问题(当
MemoryTracking
和MemoryResident
之间的差异持续增长时)。 #73081 (Azat Khuzhin)。 - 在 Tuple 解析期间检查重复的 JSON 键。 以前,这可能会导致解析期间出现逻辑错误
Invalid number of rows in Chunk
。 #73082 (Pavel Kruglov)。
构建/测试/打包改进
- 以前存储在
/utils
文件夹中并需要手动从源代码编译的所有小型实用程序,现在都是 ClickHouse 主捆绑包的一部分。 这关闭了: #72404。 #72426 (Nikita Mikhaylov)。 - 移除 22.3 版本中引入的
/etc/systemd/system/clickhouse-server.service
删除操作 #39323。 #72259 (Mikhail f. Shiryaev)。 - 拆分大型翻译单元,以避免因内存/CPU 限制而导致的编译失败。 #72352 (Yakov Olkhovskiy)。
- OSX: 使用 ICU 支持构建,从而启用排序规则、字符集转换和其他本地化功能。 #73083 (Raúl Marín)。
ClickHouse release 24.11, 2024-11-26
向后不兼容的变更
- 移除系统表
generate_series
和generateSeries
。 它们是在这里错误添加的: #59390。 #71091 (Alexey Milovidov)。 - 移除
StorageExternalDistributed
。 关闭了 #70600。#71176 (flynn)。 - Kafka、NATS 和 RabbitMQ 表引擎现在由
SOURCES
层级结构中自己的授权覆盖。 为任何创建使用这些引擎类型的表的非默认数据库用户添加授权。 #71250 (Christoph Wurm)。 - 在执行 mutation 查询之前,检查完整的 mutation 查询(包括子查询)。 这可以防止意外运行无效查询并构建阻塞有效 mutations 的 dead mutations。 #71300 (Christoph Wurm)。
- 将文件系统缓存设置
skip_download_if_exceeds_query_cache
重命名为filesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit
。 #71578 (Kseniia Sumarokova)。 - 移除
deltaSumTimestamp
中对Enum
以及UInt128
和UInt256
参数的支持。 移除deltaSumTimestamp
的第二个(“时间戳”)参数对Int8
、UInt8
、Int16
和UInt16
的支持。 #71790 (Alexey Milovidov)。 - 当使用 Dictionary 存储引擎、dictionary 表函数或直接从字典本身进行 SELECT 查询直接检索数据时,现在只需要对字典具有
SELECT
权限或dictGet
权限即可。 这与之前防止 ACL 绕过的尝试保持一致: https://github.com/ClickHouse/ClickHouse/pull/57362 和 https://github.com/ClickHouse/ClickHouse/pull/65359。 这也使后者向后兼容。 #72051 (Nikita Mikhaylov)。
实验性功能
- 实现
allow_feature_tier
作为全局开关,以禁用所有实验性/beta 功能。 #71841 #71145 (Raúl Marín)。 - 修复了由于 JSON 子列文件中未转义的特殊符号而可能导致的
No such file or directory
错误。 #71182 (Pavel Kruglov)。 - 支持从 String 类型 ALTER 为 JSON 类型。 此 PR 还将 JSON 和 Dynamic 类型的序列化更改为新的 V2 版本。 旧的 V1 版本仍然可以通过启用设置
merge_tree_use_v1_object_and_dynamic_serialization
来使用(可以在升级期间使用,以便能够回滚版本而不会出现问题)。 #70442 (Pavel Kruglov)。 - 实现从 Map/Tuple/Object 到新 JSON 的简单 CAST 转换,通过 JSON 字符串的序列化/反序列化。 #71320 (Pavel Kruglov)。
- 默认情况下,不允许在 ORDER BY/GROUP BY/PARTITION BY/PRIMARY KEY 中使用 Variant/Dynamic 类型,因为它可能导致意外结果。 #69731 (Pavel Kruglov)。
- 禁止在 min/max 函数中使用 Dynamic/Variant 类型,以避免混淆。 #71761 (Pavel Kruglov)。
新功能
- 添加了 SQL 语法来描述工作负载和资源管理。 https://clickhouse.ac.cn/docs/en/operations/workload-scheduling。 #69187 (Sergei Trifonov)。
- 一种新的数据类型
BFloat16
,表示具有 8 位指数、符号和 7 位尾数的 16 位浮点数。 这关闭了 #44206。 这关闭了 #49937。 #64712 (Alexey Milovidov)。 - 添加
CHECK GRANT
查询以检查当前用户/角色是否已被授予特定权限,以及内存中是否存在相应的表/列。 #68885 (Unalian)。 - 添加
iceberg[S3;HDFS;Azure]Cluster
,deltaLakeCluster
,hudiCluster
表函数。 #72045 (Mikhail Artemenko)。 - 添加在 http_handlers 中设置用户/密码的功能(用于
dynamic_query_handler
/predefined_query_handler
)。 #70725 (Azat Khuzhin)。 - 在 ORDER BY WITH FILL 运算符中添加对 staleness clause 的支持。 #71151 (Mikhail Artemenko)。
- 允许每种身份验证方法都有自己的过期日期,从用户实体中移除。 #70090 (Arthur Passos)。
- 添加了新函数
parseDateTime64
、parseDateTime64OrNull
和parseDateTime64OrZero
。 与现有函数parseDateTime
(及其变体) 相比,它们返回DateTime64
类型的值,而不是DateTime
类型。 #71581 (kevinyhzou)。
性能提升
- 优化了索引粒度值的内存使用,如果粒度对于 part 是常量。 添加了始终为 part 选择常量粒度的能力(设置
use_const_adaptive_granularity
),这有助于确保在内存中始终对其进行优化。 这有助于在大型工作负载(共享存储中数万亿行)中避免数据 part 的元数据(索引粒度值)不断增长的内存使用。 #71786 (Anton Popov)。 - 现在,当为并行处理在线程之间分发输入块时,我们不再为
join_algorithm = 'parallel_hash'
复制输入块的列。 #67782 (Nikita Taranov)。 - 优化了非相交 parts 的
Replacing
合并算法。 #70977 (Anton Popov)。 - 对于指标和 system.detached_parts,不要列出来自只读和 write-once 磁盘的 detached parts。 #71086 (Alexey Milovidov)。
- 默认情况下,不计算重型异步指标。 该功能在 #40332 中引入,但是拥有一个仅单个客户需要的重型后台作业并不好。 #71087 (Alexey Milovidov)。
- 对于
plain_rewritable
磁盘:在列出目录时,不要调用对象存储 API,因为这可能是低效的。 而是将文件名列表存储在内存中。 权衡是增加了初始加载时间和存储文件名称所需的内存。 #70823 (Julia Kartseva)。 - 通过减少临界区,提高了
system.query_metric_log
收集间隔的性能和准确性。 #71473 (Pablo Marcos)。 - 通过生成虚拟行进行顺序读取优化,因此在合并排序期间将读取更少的数据,当存在多个 parts 时尤其有用。 #62125 (Shichao Jin)。
- 添加了服务器设置
async_load_system_database
,允许服务器在系统数据库未完全加载的情况下启动。 如果系统表很多,这将有助于更快地启动 ClickHouse。 #69847 (Sergei Trifonov)。 - 为
clickhouse-compressor
添加了--threads
参数,允许并行压缩数据。 #70860 (Alexey Milovidov)。 - 添加了设置
prewarm_mark_cache
,该设置允许在 inserts、merges、parts 的 fetches 操作以及表的启动时将 marks 加载到 mark 缓存中。 #71053 (Anton Popov)。 - 缩小内存中 index_granularity 数组的大小,以减少 MergeTree 表引擎系列的内存占用。 #71595 (alesapin)。
- 关闭文件系统缓存设置
boundary_alignment
以进行非磁盘读取,这提高了从具有缓存的独立远程文件读取的性能。 #71827 (Kseniia Sumarokova)。 - 类似
SELECT * FROM table LIMIT ...
的查询过去会加载 part 索引,即使它们没有被使用。 #71866 (Alexander Gololobov)。 - 默认启用
parallel_replicas_local_plan
。 在查询发起者上构建完善的本地计划可以提高并行副本的性能,同时减少资源消耗,并为应用更多查询优化提供机会。 #70171 (Igor Nikonov)。
改进
- 允许将 clickhouse 与文件参数一起使用,例如
ch queries.sql
。 #71589 (Raúl Marín)。 Vertical
格式(当您以\G
结束查询时也会激活)获得了 Pretty 格式的功能,例如: - 在数字中高亮显示千位分组; - 打印可读的数字提示。 #71630 (Alexey Milovidov)。- 将外部用户角色从查询发起者推送到集群中的其他节点。 当只有发起者有权访问外部身份验证器(如 LDAP)时,这很有帮助。 #70332 (Andrey Zvonov)。
- 为聚合函数
any
添加了别名anyRespectNulls
、firstValueRespectNulls
和anyValueRespectNulls
。 还为聚合函数anyLast
添加了别名anyLastRespectNulls
和lastValueRespectNulls
。 这允许使用更自然的仅驼峰式语法,而不是混合的驼峰式/下划线语法,例如:SELECT anyLastRespectNullsStateIf
而不是anyLast_respect_nullsStateIf
。 #71403 (Peter Nguyen)。 - 添加了配置参数
date_time_utc
,使 JSON 日志格式支持 RFC 3339/ISO8601 格式的 UTC 日期时间。 #71560 (Ali)。 - 为 S3 端点添加了新的标头类型用于用户身份验证 (
access_header
)。 这允许获取具有最低优先级的 access header,它将被来自任何其他来源(例如,表架构或命名集合)的access_key_id
覆盖。 #71011 (MikhailBurdukov)。 - 带有常量数组和常量捕获参数的高阶函数将返回常量。 #58400 (Alexey Milovidov)。
- 查询计划步骤名称 (
EXPLAIN PLAN json=1
) 和管道处理器名称 (EXPLAIN PIPELINE compact=0,graph=1
) 现在都有一个唯一的 ID 作为后缀。 这允许将处理器分析器输出和 OpenTelemetry 跟踪与 explain 输出匹配。 #63518 (qhsong)。 - 添加了在写入 Azure Blob Storage 后检查对象是否存在的选项,这由设置
check_objects_after_upload
控制。 #64847 (Smita Kulkarni)。 clickhouse-local
默认使用 Atomic 数据库。 解决了 #50647 中的第 1 项和第 5 项。 关闭了 #44817。 #68024 (Alexey Milovidov)。- 异常会破坏 HTTP 协议,以便向客户端发出错误警报。 #68800 (Sema Checherinda)。
- 通过创建 replica_dir 并将副本标记为 DDLWorker 中的 active,报告运行分布式 DDL 查询的主机。 #69658 (tuanpach)。
- 如果 distributed_ddl_output_mode 设置为 *_only_active,则仅等待数据库 ON CLUSTER 查询的 active 副本。 #69660 (tuanpach)。
- 更好地处理 ON CLUSTER 备份和还原的错误和取消: - 如果备份或还原在一个主机上失败,则会自动在其他主机上取消 - 不会因为某些主机失败而其他主机继续工作而产生奇怪的错误 - 如果备份或还原在一个主机上取消,则会自动在其他主机上取消 - 修复了
test_disallow_concurrency
的问题 - 现在禁用并发必须更好地工作 - 备份和还原现在更耐 ZooKeeper 断开连接。 #70027 (Vitaly Baranov)。 - 支持
ALTER TABLE ... MODIFY/RESET SETTING ...
用于存储引擎 S3Queue 中的某些设置。 #70811 (Kseniia Sumarokova)。 - 添加了重新加载客户端证书的功能,与重新加载服务器证书的过程相同。 #70997 (Roman Antonov)。
- 使客户端历史记录大小可配置,并增加其默认大小。 #71014 (Jiří Kozlovský)。
- Boolean 类型支持 parquet 原生读取器。 #71055 (Arthur Passos)。
- 重试与 S3 交互时发生的更多错误,例如 “Malformed message”。 #71088 (Alexey Milovidov)。
- 降低有关 S3 的某些消息的日志级别。 #71090 (Alexey Milovidov)。
- 支持写入带有空格的 HDFS 文件。 #71105 (exmy)。
- 添加了限制复制表、字典和视图数量的设置。 #71179 (Kirill)。
- 如果前者可用,则使用
AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE
代替AWS_CONTAINER_AUTHORIZATION_TOKEN
。 修复了 #71074。 #71269 (Konstantin Bogdanov)。 - 从 ReplicatedMergeTree 重启线程中删除 metadata_version ZooKeeper 节点的创建。 我们需要创建此节点的唯一场景是用户从早于 20.4 的版本直接更新到晚于 24.10 的版本。 ClickHouse 不支持跨越一年以上的升级,因此我们应该抛出异常并要求用户逐步更新,而不是创建节点。 #71385 (Miсhael Stetsyuk)。
- 在高级仪表板中添加了每个主机的仪表板
Overview (host)
和Cloud overview (host)
。 #71422 (alesapin)。 clickhouse-local
默认使用隐式 SELECT,这允许将其用作计算器。 改进了隐式 SELECT 模式的语法高亮显示。 #71620 (Alexey Milovidov)。- 命令行应用程序即使对于多语句也会突出显示语法。 #71622 (Alexey Milovidov)。
- 命令行应用程序将在错误时返回非零退出代码。 在以前的版本中,
disks
应用程序在错误时返回零,其他应用程序对于错误 256 (PARTITION_ALREADY_EXISTS
) 和 512 (SET_NON_GRANTED_ROLE
) 返回零。 #71623 (Alexey Milovidov)。 - 当用户/组以 ID 形式给出时,
clickhouse su
失败。 此补丁修复了它以接受UID:GID
。 #71626 (Mikhail f. Shiryaev)。 - 允许通过设置
filesystem_cache_prefer_bigger_buffer_size
禁用文件系统缓存的内存缓冲区增加。 #71640 (Kseniia Sumarokova)。 - 为文件系统缓存中的后台下载最大文件段大小添加了单独的设置
background_download_max_file_segment_size
。 #71648 (Kseniia Sumarokova)。 - 稍微改进了 JSON 类型解析:如果 JSON 路径的当前块包含多种类型的值,请尝试按特殊的尽力而为的顺序尝试类型来选择最佳类型。 #71785 (Pavel Kruglov)。
- 以前从
system.asynchronous_metrics
读取会等待并发更新完成。 如果系统负载很重,这可能会花费很长时间。 通过此更改,始终可以读取先前收集的值。 #71798 (Alexander Gololobov)。 - S3Queue 和 AzureQueue: 将
polling_max_timeout_ms
设置为 10 分钟,polling_backoff_ms
设置为 30 秒。 #71817 (Kseniia Sumarokova)。 - 在
history
周期内更新HostResolver
三次。 #71863 (Sema Checherinda)。 - 在高级仪表板 HTML 页面上,从
system.dashboards
表中添加了仪表板的下拉选择器。 #72081 (Sergei Trifonov)。 - 授权后检查默认数据库是否存在。 修复了 #71097。 #71140 (Konstantin Bogdanov)。
Bug Fix (官方稳定版本中用户可见的错误行为)
- 在
ATTACH PART
查询期间重复数据删除的 parts 不再卡在带有attaching_
前缀的状态。 #65636 (Kirill)。 - 修复了 DateTime64 在
IN
函数中丢失精度的错误。 #67230 (Yarik Briukhovetskyi)。 - 修复了在使用
IGNORE/RESPECT NULLS
函数的ORDER BY ... WITH FILL
中可能出现的逻辑错误,关闭了 #57609。 #68234 (Vladimir Cherkasov)。 - 修复了在达到内存限制的情况下,格式为
Native
的异步 inserts 中罕见的逻辑错误。 #68965 (Anton Popov)。 - 修复了 CREATE TABLE 中 EPHEMERAL 列的 COMMENT。 #70458 (Yakov Olkhovskiy)。
- 修复了 LowCardinality(Nullable) 类型与 JSONExtract 函数一起使用时的逻辑错误。 #70549 (Pavel Kruglov)。
- 允许在存在相同 zk 路径的另一个副本时,系统删除副本的 zk 路径。 #70642 (MikhailBurdukov)。
- 修复了 AggregateFunctionGroupArraySorted 中的崩溃和内存泄漏问题。 #70820 (Michael Kolupaev)。
- 在 URL 引擎中添加了通过用户标头覆盖 Content-Type 的能力。 #70859 (Artem Iurin)。
- 修复了
StorageS3Queue
中的逻辑错误:“无法在 /processed 中创建持久节点,因为它已存在”。 #70984 (Kseniia Sumarokova)。 - 修复了在特定情况下,命名会话未关闭并永久挂起的问题。 #70998 (Márcio Martins)。
- 修复了投影轻量级删除的 rebuild 选项中未考虑 _row_exists 列的错误。 #71089 (Shichao Jin)。
- 修复了在 Oracle Linux UEK 6.10 上运行时的
AT_* is out of range
问题。 #71109 (Örjan Fors)。 - 修复了由于意外的竞争条件,导致 system.query_metric_log 中的值错误的问题。 #71124 (Pablo Marcos)。
- 修复了 quantileExactWeightedInterpolated 的聚合函数名称不匹配的问题。该错误是在 https://github.com/ClickHouse/ClickHouse/pull/69619 中引入的。抄送 @Algunenano。 #71168 (李扬)。
- 修复了函数比较中 Dynamic 类型的 bad_weak_ptr 异常。 #71183 (Pavel Kruglov)。
- 检查读取的 7z 文件是否在本地计算机上。 #71184 (Daniil Ivanik)。
- 修复了通过 HTTP 和异步插入在 Native 格式中忽略 format 设置的问题。 #71193 (Pavel Kruglov)。
- 如果系统表的名称以字面量形式出现,例如
SELECT * FROM users WHERE name = 'system.metrics' SETTINGS use_query_cache = true;
,则使用use_query_cache = 1
设置运行的 SELECT 查询不再被拒绝,现在可以正常工作。 #71254 (Robert Schulze)。 - 修复了如果 enable_filesystem_cache=1,但存储配置中的磁盘没有任何缓存配置,则内存使用量增加的错误。 #71261 (Kseniia Sumarokova)。
- 修复了从 Dynamic 列反序列化 LowCardinality 字典时可能出现的“无法读取所有数据”错误。 #71299 (Pavel Kruglov)。
- 修复了客户端并行输出格式的不完整清理问题。 #71304 (Raúl Marín)。
- 在命名集合中添加了缺失的转义字符。没有此修复,clickhouse-server 将无法启动。 #71308 (MikhailBurdukov)。
- 修复了通过 native 协议使用空块进行异步插入的问题。 #71312 (Anton Popov)。
- 修复了授予错误的通配符权限时 AST 格式不一致的问题 #71309。 #71332 (pufit)。
- 在数据 parts 析构函数中添加了 try/catch 以避免 std::terminate。 #71364 (alesapin)。
- 检查 JSON 类型提示中的可疑和实验性类型。 #71369 (Pavel Kruglov)。
- 也在非 Linux 操作系统上启动内存工作线程(修复了 #71051)。 #71384 (Alexandre Snarskii)。
- 修复了 Variant 列的 Chunk 中行数无效的错误。 #71388 (Pavel Kruglov)。
- 修复了旧版本 PostgreSQL 中不存在列 "attgenerated" 的错误,修复了 #60651。 #71396 (0xMihalich)。
- 为了避免服务器日志泛滥,现在将身份验证失败的尝试记录为
DEBUG
级别而不是ERROR
级别。 #71405 (Robert Schulze)。 - 修复了在
mongodb
表函数中传递错误参数(例如NULL
)时发生的崩溃。 #71426 (Vladimir Cherkasov)。 - 修复了 optimize_rewrite_array_exists_to_has 的崩溃问题。 #71432 (Raúl Marín)。
- 修复了 inserts 中设置
max_insert_delayed_streams_for_parallel_write
的用法。之前它的工作方式不正确,可能导致将数据写入多个分区的 inserts 中出现高内存使用率。 #71474 (Anton Popov)。 - 修复了在 arrayJoin 显然可以出现在
WHERE
条件中的情况下,可能出现的Argument for function must be constant
错误(旧分析器)。这是在 https://github.com/ClickHouse/ClickHouse/pull/65414 之后引入的回归问题。 #71476 (Nikolai Kochetov)。 - 防止在 SortCursor 中出现 0 列时的崩溃(旧分析器)。 #71494 (Raúl Marín)。
- 修复了由未初始化的 ORC 数据引起的 Date32 超出范围的问题。有关更多详细信息,请参阅 https://github.com/apache/incubator-gluten/issues/7823。 #71500 (李扬)。
- 修复了宽 part 中 Dynamic 和 JSON 类型列大小的计算问题。 #71526 (Pavel Kruglov)。
- 分析器修复了物化视图内部的查询使用带有 CTE 的 IN 语句时的问题。关闭了 #65598。 #71538 (Maksim Kita)。
- 避免在使用约束中的 UDF 时发生崩溃。 #71541 (Raúl Marín)。
- 在位移函数中,当超出范围时,返回 0 或默认字符而不是抛出错误。 #71580 (Pablo Marcos)。
- 修复了在使用带有某些引擎的物化视图时服务器崩溃的问题。 #71593 (Pervakov Grigorii)。
- 包含常量数组别名的嵌套数据结构的 Array join 导致空指针解引用。关闭了 #71677。 #71678 (Alexey Milovidov)。
- 修复了使用空元组进行 ALTER 操作时的 LOGICAL_ERROR。修复了 #71647。 #71679 (Amos Bird)。
- 在 NOT IN 运算符的情况下,不要转换分区列谓词中的常量集合。 #71695 (Eduard Karacharov)。
- 修复了 docker init 脚本失败的日志消息,使其更容易理解。 #71734 (Андрей)。
- 修复了从 LowCardinality(Nullable) 到 Dynamic 的 CAST 转换。之前,这可能导致错误
Bad cast from type DB::ColumnVector<int> to DB::ColumnNullable
。 #71742 (Pavel Kruglov)。 - 修复了 DateTime64 类型主键在 WHERE 条件下使用 toDayOfWeek 函数时出现的异常。 #71849 (Yakov Olkhovskiy)。
- 修复了稀疏列解析后默认值的填充。 #71854 (Anton Popov)。
- 修复了当输入是分布式表上的 ALIAS 时 GROUPING 函数的错误,关闭了 #68602。 #71855 (Vladimir Cherkasov)。
- 修复了使用
allow_experimental_join_condition
时可能发生的崩溃,关闭了 #71693。 #71857 (Vladimir Cherkasov)。 - 修复了使用
WITH TIES
子句的 select 语句可能返回行数不足的问题。 #71886 (wxybear)。 - 修复了当 arrayWithConstant 求值的列被错误地认为超出数组大小限制时,引起的 TOO_LARGE_ARRAY_SIZE 异常。 #71894 (Udi)。
clickhouse-benchmark
报告的查询时间超过一秒的查询指标错误。 #71898 (Alexey Milovidov)。- 修复了 clickhouse-client 中进度指示器和进度表之间的数据竞争。当使用 FROM INFILE 时,此问题可见。在 INSERT 查询期间拦截按键以切换进度表显示。 #71901 (Julia Kartseva)。
- 使用辅助 keeper 进行集群自动发现。 #71911 (Anton Ivashkin)。
- 修复了 system.s3/azure_queue_log 中的 rows_processed 列在 24.6 版本中损坏的问题。关闭了 #69975。 #71946 (Kseniia Sumarokova)。
- 修复了
s3
/s3Cluster
函数可能返回不完整结果或抛出异常的情况。这涉及到在 s3 uri 中使用 glob 模式(如pattern/*
),并且应该存在一个键为pattern/
的空对象(此类对象由 S3 控制台自动创建)。此外,设置s3_skip_empty_files
的默认值从false
更改为默认的true
。 #71947 (Nikita Taranov)。 - 修复了 clickhouse-client 语法高亮中的崩溃问题。关闭了 #71864。 #71949 (Nikolay Degterinsky)。
- 修复了
MergeTree
表中,当ORDER BY
中的二进制单调函数的第一个参数是常量时,出现的Illegal type
错误。修复了 #71941。 #71966 (Nikolai Kochetov)。 - 仅允许在子查询内部使用的 EXPLAIN AST 中使用 SELECT 查询。其他类型的查询会导致逻辑错误:“从 DB::ASTCreateQuery 到 DB::ASTSelectWithUnionQuery 的错误转换”或
Inconsistent AST formatting
。 #71982 (Pavel Kruglov)。 - 当通过
clickhouse-client
插入记录时,客户端将从服务器读取列描述。但是存在一个错误,我们以错误的顺序写入了描述,它应该是 [statistics, ttl, settings]。 #71991 (Han Fei)。 - 修复了启用
format_alter_commands_with_parentheses
时,MOVE PARTITION ... TO TABLE ...
alter 命令的格式化问题。 #72080 (János Benjamin Antal)。 - 修复了在具有并行副本的查询中 RIGHT / FULL JOIN 的问题。现在,RIGHT JOIN 可以与并行副本一起执行(右表读取是分布式的)。FULL JOIN 无法在节点之间并行化,只能本地执行。 #71162 (Igor Nikonov)。
- 修复了 Docker 容器中的 ClickHouse 由于受限的 syscalls 而在 stderr 中打印 "get_mempolicy: Operation not permitted" 的问题。 #70900 (filimonov)。
- 修复了 ZooKeeper 中 metadata_version 记录在重启线程而不是附加线程中的问题。 #70297 (Miсhael Stetsyuk)。
- 这是对“零拷贝”复制的修复,该复制不受支持并将被完全删除。当 ReplicatedMergeTree 中有节点正在使用 blob 进行零拷贝复制时,不要删除该 blob。 #71186 (Antonio Andelic)。
- 这是对“零拷贝”复制的修复,该复制不受支持并将被完全删除。在将 part 移动到零拷贝磁盘之前,获取零拷贝共享锁,以防止 Keeper 不可用时可能发生的数据丢失。 #71845 (Aleksei Filatov)。
ClickHouse 24.10 版本,2024-10-31
向后不兼容的变更
- 允许在带有
UNION
的查询链中,当子查询位于括号内时,在FORMAT
之前写入SETTINGS
。关闭了 #39712。更改了当一个查询在一个序列中指定了两次 SETTINGS 子句时的行为。最接近的 SETTINGS 子句将优先用于相应的子查询。在以前的版本中,最外层的 SETTINGS 子句可能会优先于内部的子句。 #68614 (Alexey Milovidov)。 - 现在默认允许对
[PRE]WHERE
子句中的过滤器条件进行重新排序。可以通过将allow_reorder_prewhere_conditions
设置为false
来禁用它。 #70657 (Nikita Taranov)。 - 移除了
idxd-config
库,该库具有不兼容的许可证。这也移除了实验性的 Intel DeflateQPL 编解码器。 #70987 (Alexey Milovidov)。
新特性
- 允许授予对通配符前缀的访问权限。
GRANT SELECT ON db.table_pefix_* TO user
。 #65311 (pufit)。 - 如果在查询运行时按下空格键,客户端将显示一个包含详细指标的实时表格。您可以使用 clickhouse-client 中的新选项
--progress-table
全局启用它;一个新的--enable-progress-table-toggle
与--progress-table
选项相关联,并通过按下 Control 键(空格键)来切换进度表的渲染。 #63689 (Maria Khristenko), #70423 (Julia Kartseva)。 - 允许使用来自 ETag + 文件路径的哈希作为缓存键,为对象存储表引擎和数据湖缓存读取的文件。 #70135 (Kseniia Sumarokova)。
- 支持使用查询创建表:
CREATE TABLE ... CLONE AS ...
。它克隆源表的 schema,然后将所有分区附加到新创建的表。此功能仅支持MergeTree
系列的表。关闭了 #65015。 #69091 (tuanpach)。 - 添加了一个新的系统表
system.query_metric_log
,其中包含来自表 system.events 的内存和指标值的历史记录,这些记录会定期刷新到磁盘。 #66532 (Pablo Marcos)。 - 可以使用隐式 SELECT 编写简单的 SELECT 查询,以启用计算器样式的表达式,例如
ch "1 + 2"
。这由一个新的设置implicit_select
控制。 #68502 (Alexey Milovidov)。 - 支持 clickhouse local 的
--copy
模式,作为格式转换的快捷方式 #68503。 #68583 (Denis Hananein)。 - 添加了一个内置的 HTML 页面,用于可视化 merges,该页面可在
/merges
路径下访问。 #70821 (Alexey Milovidov)。 - 添加了对
arrayUnion
函数的支持。 #68989 (Peter Nguyen)。 - 允许参数化 SQL 别名。 #50665 (Anton Kozlov)。
- 一个新的聚合函数
quantileExactWeightedInterpolated
,它是基于 quantileExactWeighted 的插值版本。有些人可能会想知道,既然我们已经有了quantileExactInterpolatedWeighted
,为什么还需要一个新的quantileExactWeightedInterpolated
。原因是新的函数比旧的更准确。这是为了与 spark 兼容。 #69619 (李扬)。 - 一个新的函数
arrayElementOrNull
。如果数组索引超出范围或未找到 Map 键,则返回NULL
。 #69646 (李扬)。 - 允许用户通过
config.xml
文件中的新字段message_regexp
和message_regexp_negative
指定正则表达式来过滤日志记录。日志记录应用于格式化的未着色文本,以获得最直观的开发者体验。 #69657 (Peter Nguyen)。 - 添加了
RIPEMD160
函数,该函数计算字符串的 RIPEMD-160 加密哈希值。示例:SELECT HEX(RIPEMD160('The quick brown fox jumps over the lazy dog'))
返回37F332F68DB77BD9D7EDD4969571AD671CF9DD3B
。 #70087 (Dergousov Maxim)。 - 支持读取
HDFS
上的Iceberg
表。 #70268 (flynn)。 - 支持 CTE 的
WITH ... INSERT
形式,因为之前我们只支持INSERT ... WITH ...
。 #70593 (Shichao Jin)。 - MongoDB 集成:支持所有 MongoDB 类型,支持 MongoDB 端的 WHERE 和 ORDER BY 语句,限制 MongoDB 不支持的表达式。请注意,新的集成默认情况下是禁用的,要使用它,请在服务器配置中将
<use_legacy_mongodb_integration>
设置为false
。 #63279 (Kirill Nikiforov)。 - 添加了一个新的函数
getSettingOrDefault
,用于返回默认值,并避免在当前 profile 中找不到自定义设置时抛出异常。 #69917 (Shankar)。
实验性功能
- 可刷新的物化视图已准备好用于生产环境。 #70550 (Michael Kolupaev)。Replicated 数据库现在支持可刷新的物化视图。 #60669 (Michael Kolupaev)。
- 并行副本已从实验性移至 beta 阶段。重新设计了控制并行副本算法行为的设置。快速回顾:ClickHouse 有四种不同的并行读取算法,涉及多个副本,这反映在设置
parallel_replicas_mode
中,它的默认值为read_tasks
。此外,还添加了切换设置enable_parallel_replicas
。 #63151 (Alexey Milovidov), (Nikita Mikhaylov)。 - 支持在大多数函数中使用
Dynamic
类型,方法是在Dynamic
内部的内部类型上执行它们。 #69691 (Pavel Kruglov)。 - 允许在
RowBinary
格式中,在设置input_format_binary_read_json_as_string/output_format_binary_write_json_as_string
下,将JSON
类型作为二进制字符串读取/写入。 #70288 (Pavel Kruglov)。 - 允许在 Native 格式中将
JSON
列序列化/反序列化为单个 String 列。对于输出,请使用设置output_format_native_write_json_as_string
。对于输入,请在列数据之前使用序列化版本1
。 #70312 (Pavel Kruglov)。 - 为 MergeTree 表引入了一种特殊的(实验性的)merge 选择器模式,该模式对于 parts 数量接近限制的分区更具侵略性。它由 MergeTree 级别的设置
merge_selector_use_blurry_base
控制。 #70645 (Nikita Mikhaylov)。 - 实现 Avro 的
Union
和 ClickHouse 的Variant
类型之间的通用 ser/de。解决了 #69713。 #69712 (Jiří Kozlovský)。
性能提升
- 重构
IDisk
和IObjectStorage
以获得更好的性能。来自plain
和plain_rewritable
对象存储的表将更快地初始化。 #68146 (Alexey Milovidov, Julia Kartseva)。当确定文件或目录是否存在于 plain rewritable 磁盘上时,不要调用 LIST 对象存储 API,因为它可能成本效益低下。 #70852 (Julia Kartseva)。减少 plain_rewritable 磁盘中对象存储 HEAD API 请求的数量。 #70915 (Julia Kartseva)。 - 添加了直接将数据解析到稀疏列的功能。 #69828 (Anton Popov)。
- 提高了解析具有大量缺失值的格式(例如
JSONEachRow
)的性能。 #69875 (Anton Popov)。 - 支持并行读取 parquet 行组以及在单线程模式下预取行组。 #69862 (LiuNeng)。
- 支持
pointInPolygon
的 minmax 索引。 #62085 (JackyWoo)。 - 在读取 Parquet 文件时使用 Bloom 过滤器。 #62966 (Arthur Passos)。
- 无锁部件重命名,以避免 INSERT 影响 SELECT(由于部件锁)(在
fsync_part_directory
的正常情况下,并行 INSERT 的 SELECT 的 QPS 提高了 2 倍,在重负载下,效果更明显)。注意,目前仅包括ReplicatedMergeTree
。 #64955 (Azat Khuzhin)。 - 在
materialize ttl
上遵守ttl_only_drop_parts
;仅读取必要的列以重新计算 TTL 并通过用空部件替换它们来删除部件。 #65488 (Andrey Zvonov)。 - 优化了 ThreadPool 中的线程创建,以最大程度地减少锁争用。线程创建现在在临界区之外执行,以避免在高负载条件下作业调度和线程管理中的延迟。这使得 ClickHouse 在高并发负载下响应更快。 #68694 (filimonov)。
- 允许从
ORC
读取LowCardinality
字符串列。 #69481 (李扬)。 - 在系统日志(例如
part_log
、query_views_log
、filesystem_cache_log
)中为ProfileEvents
使用LowCardinality
。 #70152 (Alexey Milovidov)。 - 提高
fromUnixTimestamp
/toUnixTimestamp
函数的性能。 #71042 (kevinyhzou)。 - 当从阻塞 I/O 读取时,不要为整个服务器禁用从页面缓存的非阻塞读取。当单个文件系统(例如 tmpfs)不支持
preadv2
系统调用而其他文件系统支持时,这会导致性能下降。 #70299 (Antonio Andelic)。 ALTER TABLE .. REPLACE PARTITION
不再等待发生在其他分区的 mutations/merges。 #59138 (Vasily Nemkov)。- 从 Keeper 同步 ACL 时,不要进行验证。它在创建期间进行验证。这应该没那么重要,但是有些安装有数万甚至更多的用户创建,并且不必要的哈希验证可能需要很长时间才能在服务器启动期间完成(它从 keeper 同步所有内容)。 #70644 (Raúl Marín)。
改进
CREATE TABLE AS
将复制PRIMARY KEY
、ORDER BY
和类似的子句(MergeTree
表的)。 #69739 (sakulali)。- 在 Keeper 中支持 64 位 XID。可以使用
use_xid_64
配置值启用它。 #69908 (Antonio Andelic)。 - 当没有为参数提供值时,Bool 设置的命令行参数设置为 true(例如
clickhouse-client --optimize_aggregation_in_order --query "SELECT 1"
)。 #70459 (davidtsuk)。 - 添加了用户级设置
min_free_disk_bytes_to_perform_insert
和min_free_disk_perform_to_throw_insert
,以防止在几乎已满的磁盘上进行插入。 #69755 (Marco Vilas Boas)。 - 设置的嵌入式文档将比网站上的文档更详细和完整。这是使网站文档始终从源代码自动生成的第一步。这具有长期的影响:- 它将保证包含每个设置;- 不会存在默认值过时的情况;- 我们可以为每个 ClickHouse 版本生成此文档;- 即使没有互联网访问,文档也可以由服务器本身显示。从源代码在网站上生成文档。 #70289 (Alexey Milovidov)。
- 允许在
replace
函数中使用空 needle,与 PostgreSQL 的行为相同。 #69918 (zhanglistar)。 - 允许在
replaceRegexp*
函数中使用空 needle。 #70053 (zhanglistar)。 data/database_name/
目录中表的符号链接是为表数据的实际路径创建的,具体取决于存储策略,而不是默认磁盘上的store/...
目录。 #61777 (Kirill)。- 从
JSON
解析Enum
字段时,包含整数的字符串将被解释为相应的Enum
元素。这解决了 #65119 的问题。 #66801 (scanhex12)。 - 允许
TRIM
-ingLEADING
或TRAILING
空字符串作为空操作。解决了 #67792 的问题。 #68455 (Peter Nguyen)。 - 提高
cast(timestamp as String)
与 Spark 的兼容性。 #69179 (Wenzheng Liu)。 - 当
enable_analyzer
设置为true
时,始终使用新的分析器来计算常量表达式。支持计算executable
表函数参数,而无需为常量表达式使用SELECT
查询。 #69292 (Dmitry Novik)。 - 添加设置
enable_secure_identifiers
以禁止使用特殊字符的标识符。 #69411 (tuanpach)。 - 添加
show_create_query_identifier_quoting_rule
以定义SHOW CREATE TABLE
查询结果中的标识符引用行为。可能的值:-user_display
:当标识符是关键字时。-when_necessary
:当标识符是{"distinct", "all", "table"}
之一,并且可能导致歧义时:列名、字典属性名。-always
:始终引用标识符。 #69448 (tuanpach)。 - 改进访问实体依赖项的恢复。 #69563 (Vitaly Baranov)。
- 如果您运行
clickhouse-client
或其他 CLI 应用程序,并且由于服务器过载而启动缓慢,并且您开始键入查询(例如SELECT
),则之前的版本将在打印问候消息之前显示终端回显内容的剩余部分,例如SELECTClickHouse local version 24.10.1.1.
而不是ClickHouse local version 24.10.1.1.
。现在已修复。这解决了 #31696 的问题。 #69856 (Alexey Milovidov)。 - 向
system.replicas
表添加新列readonly_duration
。需要能够在警报中区分实际的只读副本和 sentinel 副本。 #69871 (Miсhael Stetsyuk)。 - 将
join_output_by_rowlist_perkey_rows_threshold
设置类型更改为无符号整数。 #69886 (kevinyhzou)。 - 增强 OpenTelemetry span 日志记录以包含查询设置。 #70011 (sharathks118)。
- 如果 lambda 结果类型意外,则添加有关高阶数组函数的诊断信息。 #70093 (ttanay)。
- Keeper 改进:集群更改期间减少锁定。 #70275 (Antonio Andelic)。
- 向
SHOW GRANTS
命令添加WITH IMPLICIT
和FINAL
关键字。修复了隐式授权的一个小 bug:#70094。 #70293 (pufit)。 - 对于 MergeTree 设置,遵守
compatibility
。compatibility
值取自服务器启动时的default
profile,并且默认的 MergeTree 设置会相应更改。compatibility
设置的进一步更改不会影响 MergeTree 设置。 #70322 (Nikolai Kochetov)。 - 避免在服务器间通信期间发生错误时,用大型 HTTP 响应正文垃圾邮件日志。 #70487 (Vladimir Cherkasov)。
- 添加了一个新设置
max_parts_to_move
,以控制一次可以移动的最大部件数。 #70520 (Vladimir Cherkasov)。 - 限制某些日志消息的频率。 #70601 (Alexey Milovidov)。
- 带有
PART
限定符的CHECK TABLE
在客户端中格式不正确。 #70660 (Alexey Milovidov)。 - 支持使用 parquet native writer 写入列索引和偏移索引。 #70669 (LiuNeng)。
- 支持在 joda 语法中解析
DateTime64
的微秒和时区(“joda” 是一个流行的 Java 日期和时间库,“joda 语法”是该库的风格)。 #70737 (kevinyhzou)。 - 更改了一种方法来确定云存储是否支持批量删除。 #70786 (Vitaly Baranov)。
- 在 native reader 中支持 Parquet page v2。 #70807 (Arthur Passos)。
- 检查表是否同时设置了
storage_policy
和disk
。添加了当使用disk
设置时,检查新存储策略是否与旧存储策略兼容。 #70839 (Kirill)。 - 添加
system.s3_queue_settings
和system.azure_queue_settings
。 #70841 (Kseniia Sumarokova)。 - 函数
base58Encode
和base58Decode
现在接受FixedString
类型的参数。示例:SELECT base58Encode(toFixedString('plaintext', 9));
。 #70846 (Faizan Patel)。 - 将
partition
列添加到部件日志的每个条目类型。以前,它仅针对某些条目设置。这解决了 #70819 的问题。 #70848 (Alexey Milovidov)。 - 将
MergeStart
和MutateStart
事件添加到system.part_log
中,这有助于合并分析和可视化。 #70850 (Alexey Milovidov)。 - 添加有关合并的源部件数量的 profile 事件。它允许在生产环境中监控 merge tree 的扇出。 #70908 (Alexey Milovidov)。
- 重新启用后台下载到文件系统缓存。 #70929 (Nikita Taranov)。
- 添加一个新的合并选择器算法,名为
Trivial
,仅供专业用途。它比Simple
合并选择器更差。 #70969 (Alexey Milovidov)。 - 支持原子
CREATE OR REPLACE VIEW
。 #70536 (tuanpach) - 向聚合函数
windowFunnel
添加了strict_once
模式,以避免在事件匹配多个条件时多次计数一个事件,解决了 #21835 的问题。 #69738 (Vladimir Cherkasov)。
Bug 修复(官方稳定版本中用户可见的错误行为)
- 在全局上下文对象中应用配置更新。它修复了诸如 #62308 之类的问题。 #62944 (Amos Bird)。
- 修复
ReadSettings
未使用用户设置的值,因为仅使用了默认值。 #65625 (Kseniia Sumarokova)。 - 修复在使用有符号参数时
sumMapFiltered
中的类型不匹配问题。 #58408 (Chen768959)。 - 修复传递可选时区参数时,类似 toHour 的转换函数的单调性。 #60264 (Amos Bird)。
- 放宽
Merge
表的supportsPrewhere
检查。这修复了 #61064 的问题。它在 #60082 中被不必要地加强了。 #61091 (Amos Bird)。 - 修复
use_concurrency_control
设置处理,以正确执行concurrent_threads_soft_limit_num
限制。这默认启用并发控制,因为以前它是损坏的。 #61473 (Sergei Trifonov)。 - 修复在任何其他函数(如
NOT
)下进行IS NULL
检查时,不正确的JOIN ON
部分优化,这可能导致错误的结果。解决了 #67915 的问题。 #68049 (Vladimir Cherkasov)。 - 阻止使表的
CREATE
查询无效的ALTER
查询。 #68574 (János Benjamin Antal)。 - 修复元组和数组的
negate
(`-`) 和NOT
函数的不一致 AST 格式。 #68600 (Vladimir Cherkasov)。 - 修复在反序列化期间将不完整类型插入到
Dynamic
中的问题。这可能导致Parameter out of bound
错误。 #69291 (Pavel Kruglov)。 - 零拷贝复制,它是实验性的,不应在生产环境中使用:修复在使用零拷贝的复制 MergeTree 中
restore replica
后的无限循环。 #69293 (MikhailBurdukov)。 - 将存储
S3Queue
中processing_threads_num
的默认值返回为 cpu 核心数。 #69384 (Kseniia Sumarokova)。 - 当反/序列化嵌套重复的 protobuf 到嵌套列时,绕过 try/catch 流程(修复了 #41971 的问题)。 #69556 (Eliot Hautefeuille)。
- 修复在 PostgreSQL 引擎中插入到 FixedString 列期间发生的崩溃。 #69584 (Pavel Kruglov)。
- 修复执行
create view t as (with recursive 42 as ttt select ttt);
时发生的崩溃。 #69676 (Han Fei)。 - 修复了如果值类型为 DateTime64,
maxMapState
抛出 'Bad get' 的问题。 #69787 (Michael Kolupaev)。 - 通过覆盖
useDefaultImplementationForLowCardinalityColumns
以返回true
,修复LowCardinality
列的getSubcolumn
。 #69831 (Miсhael Stetsyuk)。 - 修复如果分布式表的 DROP 失败,则永久阻塞分布式发送的问题。 #69843 (Azat Khuzhin)。
- 修复包含带有 NaN 键的 WITH FILL 的不可取消查询。这解决了 #69261 的问题。 #69845 (Alexey Milovidov)。
- 修复具有旧兼容性值的分析器默认值。 #69895 (Raúl Marín)。
- 在 DROP 旧表期间,不要在 CREATE OR REPLACE VIEW 期间检查依赖项。以前,当重新创建的视图有依赖表时,CREATE OR REPLACE 查询失败。 #69907 (Pavel Kruglov)。
- Decimal 的一些东西。修复了 #69730 的问题。 #69978 (Arthur Passos)。
- 现在 DEFINER/INVOKER 将与参数化视图一起使用。 #69984 (pufit)。
- 修复视图定义者的解析。 #69985 (pufit)。
- 修复了时区可能会更改带有
Date
或Date32
参数的查询结果的 bug。 #70036 (Yarik Briukhovetskyi)。 - 修复了带有嵌套视图和
WHERE
条件的查询的Block structure mismatch
问题。修复了 #66209 的问题。 #70054 (Nikolai Kochetov)。 - 在评估
tuple
函数时,避免在不同的命名元组之间重用列。这修复了 #70022 的问题。 #70103 (Amos Bird)。 - 修复在替换范围中的文字时,错误的 LOGICAL_ERROR。 #70122 (Pablo Marcos)。
- 在 ALTER TABLE MODIFY COLUMN/QUERY 期间检查 Nullable(Nothing) 类型,以防止具有此类数据类型的表。 #70123 (Pavel Kruglov)。
- 对于非法查询
JOIN ... ON *
,提供正确的错误消息,解决了 #68650 的问题。 #70124 (Vladimir Cherkasov)。 - 修复使用跳过索引时的错误结果。 #70127 (Raúl Marín)。
- 修复 ColumnObject/ColumnTuple 解压缩方法中的数据竞争,这可能导致堆释放后使用。 #70137 (Pavel Kruglov)。
- 修复在使用 Dynamic 类型进行 ALTER COLUMN 时可能发生的挂起。 #70144 (Pavel Kruglov)。
- 现在 ClickHouse 将认为更多错误是可重试的,并且在这种错误情况下不会将数据部件标记为损坏。 #70145 (alesapin)。
- 在为 JSON 子列创建 Dynamic 类型期间,使用正确的
max_types
参数。 #70147 (Pavel Kruglov)。 - 修复了在使用 bcrypt 密码身份验证方法的用户的
system.query_log
中显示密码的问题。 #70148 (Nikolay Degterinsky)。 - 修复 native 接口的事件计数器 (InterfaceNativeSendBytes)。 #70153 (Yakov Olkhovskiy)。
- 修复可能与 JSON 列相关的崩溃。 #70172 (Pavel Kruglov)。
- 修复 arrayMin 和 arrayMax 的多个问题。 #70207 (Raúl Marín)。
- 在 JSON 类型解析器中遵守设置 allow_simdjson。 #70218 (Pavel Kruglov)。
- 修复在创建具有两个 select 和一个
INTERSECT
的物化视图时发生的空指针解引用,例如CREATE MATERIALIZED VIEW v0 AS (SELECT 1) INTERSECT (SELECT 1);
。 #70264 (Konstantin Bogdanov)。 - 不要使用启动脚本修改全局设置。以前,在启动脚本中更改设置会全局更改它。 #70310 (Antonio Andelic)。
- 修复减少 max_types 参数的
Dynamic
类型的 ALTER,这可能导致服务器崩溃。 #70328 (Pavel Kruglov)。 - 修复错误使用 WITH FILL 时发生的崩溃。 #70338 (Raúl Marín)。
- 修复
SYSTEM DROP FORMAT SCHEMA CACHE FOR Protobuf
中可能发生的释放后使用。 #70358 (Azat Khuzhin)。 - 修复 GROUP BY JSON 子对象子列时发生的崩溃。#70374 (Pavel Kruglov)。
- 如果 part 没有行,则不要为垂直合并预取 part。#70452 (Antonio Andelic)。
- 修复 WHERE 子句中使用 lambda 函数时发生的崩溃。#70464 (Raúl Marín)。
- 修复在数据库
Replicated
和辅助副本上不可用的表函数源的情况下,使用CREATE ... AS table_function(...)
创建表的问题。#70511 (Kseniia Sumarokova)。 - 忽略
wait_for_async_insert=1
的异步插入的所有输出。 关闭 #62644。 #70530 (Konstantin Bogdanov)。 - 在从 system.remote_data_paths 遍历影子目录时,忽略 frozen_metadata.txt 文件。#70590 (Aleksei Filatov)。
- 修复在内存未对齐的情况下创建有状态窗口函数的问题。#70631 (Raúl Marín)。
- 修复了在添加具有非空默认表达式的
Array
类型列之后,SELECT
查询和合并中罕见的崩溃问题。#70695 (Anton Popov)。 - 插入表函数 s3 将遵守查询设置。#70696 (Vladimir Cherkasov)。
- 修复在启用跳过不支持的字段时推断 protobuf 模式时的无限递归问题。#70697 (Raúl Marín)。
- 默认禁用 enable_named_columns_in_function_tuple 设置。#70833 (Raúl Marín)。
- 修复 S3Queue 表引擎设置 processing_threads_num 在从服务器上的 CPU 核心数推断时无效的问题。#70837 (Kseniia Sumarokova)。
- 规范化聚合状态中的命名元组参数。 修复了 #69732 问题。 #70853 (Amos Bird)。
- 修复了二级哈希表中由于负零导致的逻辑错误。 关闭了 #70973 问题。 #70979 (Alexey Milovidov)。
- 修复分布式和并行副本的
limit by
和limit with ties
功能。#70880 (Nikita Taranov)。
ClickHouse 24.9 版本,2024-09-26
向后不兼容的变更
- 支持命名元组的表达式,如
a[b].c
,以及来自任意表达式的命名下标,例如expr().name
。 这对于处理 JSON 非常有用。 关闭了 #54965 问题。 在以前的版本中,expr().name
形式的表达式被解析为tupleElement(expr(), name)
,并且查询分析器搜索的是列name
而不是相应的元组元素; 而在新版本中,它已更改为tupleElement(expr(), 'name')
。 在大多数情况下,以前的版本不起作用,但是可以想象一个非常不寻常的场景,这种更改可能会导致不兼容:如果您将元组元素的名称存储在列或别名中,该名称与元组元素的名称不同:SELECT 'b' AS a, CAST([tuple(123)] AS 'Array(Tuple(b UInt8))') AS t, t[1].a
。 您不太可能使用此类查询,但我们仍然必须将此更改标记为可能向后不兼容。 #68435 (Alexey Milovidov)。 - 当启用设置
print_pretty_type_names
时,它将在SHOW CREATE TABLE
语句、formatQuery
函数以及clickhouse-client
和clickhouse-local
的交互模式下以美观的形式打印Tuple
数据类型。 在以前的版本中,此设置仅应用于DESCRIBE
查询和toTypeName
。 关闭了 #65753 问题。 #68492 (Alexey Milovidov)。 - 在
Replicated
数据库中创建表时,不允许显式指定 UUID。 此外,也不允许为 Replicated 数据库中的 *MergeTree 表显式指定 Keeper 路径和副本名称。 它引入了一个新的设置database_replicated_allow_explicit_uuid
,并将database_replicated_allow_replicated_engine_arguments
的类型从 Bool 更改为 UInt64。#66104 (Alexander Tokmakov)。
新功能
- 允许用户拥有多种身份验证方法,而不是仅一种。 允许将身份验证方法重置为最近添加的方法。 如果您想在一段时间内运行 24.8 版本的实例和 24.9 版本的实例,最好将
max_authentication_methods_per_user
设置为 1,以避免潜在的不兼容性。#65277 (Arthur Passos)。 - 添加了对
ATTACH PARTITION ALL FROM
的支持。#61987 (Kirill Nikiforov)。 - 添加了
input_format_json_empty_as_default
设置,启用后,将 JSON 输入中的空字段视为默认值。 关闭了 #59339 问题。 #66782 (Alexis Arnaud)。 - 添加了函数
overlay
和overlayUTF8
,用于将字符串的一部分替换为另一个字符串。 示例:SELECT overlay('Hello New York', 'Jersey', 11)
返回Hello New Jersey
。 #66933 (李扬)。 - 添加了在分区中进行轻量级删除的支持:
DELETE FROM [db.]table [ON CLUSTER cluster] [IN PARTITION partition_expr] WHERE expr;
#67805 (sunny)。 - 实现了对不同域(例如秒和分钟)的
Interval
数据类型值进行比较,因此它们现在转换为最小超类型。#68057 (Yarik Briukhovetskyi)。 - 向默认值添加
create_if_not_exists
设置,以在 CREATE 语句期间使用IF NOT EXISTS
行为。#68164 (Peter Nguyen)。 - 使在 Azure 和本地读取
Iceberg
表成为可能。#68210 (Daniil Ivanik)。 - 查询缓存条目现在可以按标签删除。 例如,由
SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'abc'
创建的查询缓存条目现在可以通过SYSTEM DROP QUERY CACHE TAG 'abc'
删除。#68477 (Michał Tabaszewski)。 - 为命名集合添加存储加密。#68615 (Pablo Marcos)。
- 为
URL
表引擎添加虚拟列_headers
。 关闭了 #65026 问题。 #68867 (flynn)。 - 添加
system.projections
表以跟踪可用的投影。#68901 (Jordi Villar)。 - 添加了新函数
arrayZipUnaligned
,用于 Spark 兼容性(在 Spark 中名为arrays_zip
),它允许基于原始arrayZip
的未对齐数组。#69030 (李扬)。 - 为 keeper 客户端命令行应用程序添加了
cp
/mv
命令,该命令原子性地复制/移动节点。#69034 (Mikhail Artemenko)。 - 向函数
arrayAUC
添加参数scale
(默认值:true
),该参数允许跳过归一化步骤(问题 #69609)。 #69717 (gabrielmcg44)。
实验性功能
- 添加了一个设置
input_format_try_infer_variants
,当列/数组元素有多个可能的类型时,该设置允许在文本格式的模式推断期间推断Variant
类型。#63798 (Shaun Struwig)。 - 添加了聚合函数
distinctDynamicTypes
/distinctJSONPaths
/distinctJSONPathsAndTypes
,以便更好地内省 JSON 列类型内容。#68463 (Kruglov Pavel)。 - 新算法通过一致性哈希来确定并行副本之间标记分布的单位。 为不同的读取模式选择不同数量的标记,以提高性能。#68424 (Nikita Taranov)。
- 以前,并行副本公告处理中的部件去重逻辑的算法复杂度为 O(n^2),对于具有许多部件(或分区)的表,这可能会花费相当长的时间。 此更改使复杂度变为 O(n*log(n))。#69596 (Alexander Gololobov)。
- 可刷新的物化视图改进:追加模式(
... REFRESH EVERY 1 MINUTE APPEND ...
)以将行添加到现有表而不是覆盖整个表,重试(默认禁用,在查询的 SETTINGS 部分中配置),SYSTEM WAIT VIEW <name>
查询,等待当前正在运行的刷新,以及一些修复。#58934 (Michael Kolupaev)。 - 添加了
min_max
作为一种新的(实验性)统计信息类型。 它支持估计数字列上的范围谓词,例如x < 100
。#67013 (JackyWoo)。 - 改进了来自 Variant/Dynamic 列的 castOrDefault 函数,使其在内部类型完全不可转换时也能工作。#67150 (Kruglov Pavel)。
- 现在可以通过 MaterializedPostgreSQL 实现列子集的复制。 关闭了 #33748 问题。 #69092 (Kruglov Kirill)。
性能提升
- 实现了仅读取 Hive 分区所需的文件。#68963 (Yarik Briukhovetskyi)。
- 当表键在 LEFT 或 INNER 哈希连接中密集时,通过按键重新排列右表来提高 JOIN 性能。#60341 (kevinyhzou)。
- 通过惰性追加行列表来提高 ALL JOIN 性能。#63677 (kevinyhzou)。
- 在启动过程中异步加载文件系统缓存元数据,以加快重启速度(由设置
load_metadata_asynchronously
控制)。#65736 (Daniel Pozo Escalona)。 - 优化了函数
array
和map
,以更快地处理某些常见情况。#67707 (李扬)。 - 对 ORC 字符串读取进行简单的优化,特别是当列不包含 NULL 值时。#67794 (李扬)。
- 通过减少调度合并步骤的开销,提高了合并的整体性能。#68016 (Anton Popov)。
- 当未设置 profile、未设置凭据且 IMDS 不可用时(例如,当您在云外部的机器上查询公共存储桶时),加快对 S3 的请求速度。 关闭了 #52771 问题。 #68082 (Alexey Milovidov)。
- 反虚化
RowInputFormatWithNamesAndTypes
中的格式读取器,以提高一些性能。#68437 (李扬)。 - 当使用 group by 键聚合时,为
uniq
聚合函数添加并行合并,以最大限度地提高 CPU 利用率。#68441 (Jiebin Sun)。 - 添加设置
output_format_orc_dictionary_key_size_threshold
,允许用户为ORC
输出格式中的字符串列启用字典编码。 它有助于减小输出ORC
文件大小并显着提高读取性能。#68591 (李扬)。 - 引入新的 Keeper 请求 RemoveRecursive,该请求删除节点及其所有子树。#69332 (Mikhail Artemenko)。
- 通过并行向向量索引添加数据,加快插入到具有向量相似度索引的表中的性能。#69493 (flynn)。
- 通过使用自适应写入缓冲区大小来减少 JSON 插入的内存使用量。 宽部件中 JSON 列创建的许多文件包含少量数据,为它们分配 1MB 缓冲区没有意义。#69272 (Kruglov Pavel)。
- 避免在并发哈希连接线程池中返回线程,以避免查询过度生成线程。#69406 (Duc Canh Le)。
改进
- CREATE TABLE AS 现在复制 PRIMARY KEY、ORDER BY 和类似子句。 现在仅支持 MergeTree 系列的表引擎。#69076 (sakulali)。
- 加强了与解析小实体相关的代码库部分。 发现并修复了以下(次要)错误:- 如果
DeltaLake
表按 Bool 分区,则分区值始终被解释为 false; -ExternalDistributed
表仅使用提供的地址中的单个分片;max_threads
设置和类似的设置的值打印为'auto(N)'
而不是auto(N)
。#52503 (Alexey Milovidov)。 - 使用 cgroup 特定的指标进行 CPU 使用率核算,而不是系统级指标。#62003 (Nikita Taranov)。
- 远程 S3 磁盘的 IO 调度现在在 HTTP 套接字流级别(而不是整个 S3 请求)完成,以解决
bandwidth_limit
节流问题。#65182 (Sergei Trifonov)。 - 函数
upperUTF8
和lowerUTF8
以前只能将西里尔字符转换为大写/小写。 现在取消了此限制,并且任意语言的字符都可以转换为大写/小写。 示例:SELECT upperUTF8('Süden')
现在返回SÜDEN
。#65761 (李扬)。 - 当在具有投影的表上发生轻量级删除时,尽管用户可以选择抛出异常(默认情况下)或在发生轻量级删除时删除投影,但现在有第三种选择,即仍然进行轻量级删除,然后重建投影。#66169 (jsc0218)。
- 添加了两个选项(
dns_allow_resolve_names_to_ipv4
和dns_allow_resolve_names_to_ipv6
),以允许阻止连接 IP 族。#66895 (MikhailBurdukov)。 - 使 clickhouse-client 中的 Ctrl-Z 忽略行为可配置 (ignore_shell_suspend)。#67134 (Azat Khuzhin)。
- 改进 JSON 输出格式中的 UTF-8 验证。 确保在结果数据中存在某些字节序列的情况下生成有效的 JSON。#67938 (mwoenker)。
- 为合并和突变添加了配置文件事件,以便更好地进行内省。#68015 (Anton Popov)。
- ODBC:从服务器配置获取 http_max_tries。#68128 (Rodolphe Dugé de Bernonville)。
- 在 X.509 SubjectAltName 扩展中添加对用户身份验证的通配符支持。#68236 (Marco Vilas Boas)。
- 改进日期时间的模式推断。 现在仅当日期时间具有小数部分时才使用
DateTime64
,否则使用常规 DateTime。 现在 Date/DateTime 的推断更加严格,特别是当date_time_input_format='best_effort'
时,以避免从极端情况下的字符串推断日期时间。#68382 (Kruglov Pavel)。 - 从字典中删除旧的命名集合代码,并将其替换为新的代码,新代码允许在字典中使用 DDL 创建的命名集合。 关闭了 #60936 和 #36890 问题。 #68412 (Kseniia Sumarokova)。
- 对于外部 HTTP 身份验证器,默认使用 HTTP/1.1 而不是 HTTP/1.0。#68456 (Aleksei Filatov)。
- 为线程池内省添加了一组新的指标,提供了对线程池性能和行为的更深入了解。#68674 (filimonov)。
- 支持格式为
Values
的异步插入中的查询参数。#68741 (Anton Popov)。 - 支持
Date32
在dateTrunc
和toStartOfInterval
函数中使用。#68874 (LiuNeng)。 - 将
plan_step_name
和plan_step_description
列添加到system.processors_profile_log
。#68954 (Alexander Gololobov)。 - 在嵌入式字典中支持西班牙语。#69035 (Vasily Okunev)。
- 将 CPU 架构添加到简短的故障信息消息中。#69037 (Konstantin Bogdanov)。
- 如果在重试期间无法建立新的 Keeper 连接,查询将更快失败。#69148 (Raúl Marín)。
- 更新数据库工厂,以便用户定义的数据库引擎可以具有参数、设置和表覆盖(类似于 StorageFactory)。#69201 (NikBarykin)。
- 如果表具有 SETTINGS,则将所有外部表引擎和函数替换为 Null 引擎的恢复模式(
restore_replace_external_engines_to_null
,restore_replace_external_table_functions_to_null
设置)将失败。 现在,在这种情况下,它会从表定义中删除设置,并允许恢复此类表。#69253 (Ilya Yatsishin)。 - CLICKHOUSE_PASSWORD 在 clickhouse 镜像的入口点中针对 XML 正确转义。#69301 (aohoyd)。
- 允许
arrayZip
/arrayZipUnaligned
使用空参数,就像 concat 在 https://github.com/ClickHouse/ClickHouse/pull/65887 中所做的那样。 这是为了 Gluten CH 后端中的 Spark 兼容性。#69576 (李扬)。 - 为 Keeper 的内部通信支持更高级的 SSL 选项(例如,带有密码的私钥)。#69582 (Antonio Andelic)。
- 对于具有许多部件或分区的超大型表,索引分析可能会花费相当长的时间。 此更改应允许在该阶段终止重型查询。#69606 (Alexander Gololobov)。
- 屏蔽
gcs
表函数中的敏感信息。#69611 (Vitaly Baranov)。 - 为减少行数的合并重建投影。#62364 (cangyin)。
错误修复(官方稳定版本中用户可见的错误行为)
- 修复在实验性和不受支持的 MaterializedPostgreSQL 引擎中,当 pg dbname 包含“-”时附加表的问题。#62730 (takakawa)。
- 修复了在实验性和完全不受支持的 MaterializedPostgreSQL 引擎中,当 adnum 排序中断时,生成列的错误问题 #63161。 修复了在实验性和完全不受支持的 MaterializedPostgreSQL 中,当表中存在生成列时,id 列使用 nextval 表达式作为默认值的错误问题。 修复了删除包含 [a-z1-9-] 以外符号的发布时发生的错误。#67664 (Kruglov Kirill)。
- Storage Join 支持左表中的 Nullable 列,关闭 #61247 问题。 #66926 (vdimir)。
- 当
IN
运算符包含转换为 Decimal() 时,并行副本(也分发查询)的查询结果不正确。 该错误是随新分析器引入的。#67234 (Igor Nikonov)。 - 修复 alter modify order by 导致元数据不一致的问题。#67436 (iceFireser)。
- 修复了函数
fromModifiedJulianDay
的上限。它本应是9999-12-31
,但错误地设置为9999-01-01
。#67583 (PHO)。 - 修复了
IN
查询中索引不在元组开头时的问题。#67626 (Yarik Briukhovetskyi)。 - 修复了
RoleCache
中的过期问题。#67748 (Vitaly Baranov)。 - 修复了由于刷新到视图速度过慢导致窗口视图 (window view) 丢失块 (block) 的问题。#67983 (Raúl Marín)。
- 修复了由不正确的日期格式引起的 MSan 问题。#68105 (JackyWoo)。
- 修复了当文件中数据类型与请求类型显著不同时,Parquet 过滤中的崩溃问题(例如
... FROM file('a.parquet', Parquet, 'x String')
,但文件具有x Int64
)。在未修复此问题之前,请使用input_format_parquet_filter_push_down = 0
作为临时解决方案。#68131 (Michael Kolupaev)。 - 修复了在 #67091 中引入的
lag
/lead
函数的崩溃问题。#68262 (lgbo)。 - 尝试修复查询取消时 postgres 崩溃的问题。#68288 (Kseniia Sumarokova)。
- 在 https://github.com/ClickHouse/ClickHouse/pull/61984 之后,
schema_inference_make_columns_nullable=0
仍然可能使 Parquet/Arrow 格式的列变为Nullable
。此更改是向后不兼容的,用户注意到了行为的变化。此 PR 使schema_inference_make_columns_nullable=0
像以前一样工作(不会推断出 Nullable 列),并为此设置引入了新值auto
,该值仅在数据具有关于可空性的信息时才使列变为Nullable
。#68298 (Kruglov Pavel)。 - 修复了 #50868 问题。分布式查询中嵌套子查询返回的小 DateTime64 常量值被错误地转换为 Null,从而导致错误和可能的查询结果不正确。#68323 (Shankar)。
- 修复了查询
SYSTEM SYNC REPLICA
中缺少同步副本模式的问题。#68326 (Duc Canh Le)。 - 修复了键条件中的错误。#68354 (Han Fei)。
- 修复了在 LDAP 外部用户目录中使用的角色被删除或重命名时发生的崩溃问题。#68355 (Andrey Zvonov)。
- 修复了 system.view_refreshes 的 Progress 列值大于 1 的问题 #68377。#68378 (megao)。
- 正确处理正则表达式标志 (regexp flags)。#68389 (Han Fei)。
- PostgreSQL 风格的 cast 运算符 (
::
) 即使对于 SQL 风格的十六进制和二进制字符串字面量 (例如,SELECT x'414243'::String
) 也能正常工作。这解决了 #68324 问题。#68482 (Alexey Milovidov)。 - 对 https://github.com/ClickHouse/ClickHouse/pull/68131 的小补丁。#68494 (Chang chen)。
- 修复了 #68239 问题:SAMPLE n,其中 n 是整数。#68499 (Denis Hananein)。
- 修复了当两个分布 (distribution) 的大小不相等时 mann-whitney-utest 中的错误。#68556 (Han Fei)。
- 修复了在意外重启后,由于对 covered-by-broken part 的异常处理,导致 ReplicatedMergeTree 复制无法启动的问题。#68584 (baolin)。
- 修复了当函数
sipHash64Keyed
、sipHash128Keyed
或sipHash128ReferenceKeyed
应用于空数组或元组时出现的LOGICAL_ERROR
。#68630 (Robert Schulze)。 - 修复了全文本索引在索引多列时可能过滤掉错误列的问题,原因是它没有在不同列之间重置 row_id。重现步骤在 tests/queries/0_stateless/03228_full_text_with_multi_col.sql 中。没有此修复。#68644 (siyuan)。
- 修复了在创建 Replicated 表时副本名称 (replica_name) 中出现无效字符 '\t' 和 '\n',导致 LogEntry 中 'source replica' 解析不正确的问题。在问题 #68640 中提及。#68645 (Zhigao Hong)。
- 将虚拟列
_table
和_database
添加回分布式表。它们在 24.3 版本之前可用。#68672 (Anton Popov)。 - 修复了 Variant 列排列 (permutation) 期间可能出现的错误
Size of permutation (0) is less than required (...)
。#68681 (Kruglov Pavel)。 - 修复了使用新的 JSON 列时可能出现的错误
DB::Exception: Block structure mismatch in joined block stream: different columns:
。#68686 (Kruglov Pavel)。 - 修复了在函数
sipHash(64/128)Keyed
中使用数组作为键哈希映射时,物化常量键 (materialized constant keys) 的问题。#68731 (Salvatore Mesoraca)。 - 使
ColumnsDescription::toString
使用相同的IAST::FormatState object
格式化每个列。这导致写入磁盘和 ZooKeeper 的统一的列元数据。#68733 (Miсhael Stetsyuk)。 - 修复了分组集 (grouping sets) 的聚合数据合并问题。#68744 (Nikolai Kochetov)。
- 修复了逻辑错误,该错误发生在创建复制合并树 (replicated merge tree)、更改列,然后执行 modify statistics 时。#68820 (Han Fei)。
- 修复了分析器中从子查询解析动态子列的问题。#68824 (Kruglov Pavel)。
- 修复了 DeltaLake 中复杂类型元数据解析的问题。解决了 #68739 问题。#68836 (Kseniia Sumarokova)。
- 修复了在表元数据在插入之后但在刷新到表之前被更改(通过
ALTER ADD/MODIFY COLUMN
查询)的情况下,异步插入的问题。#68837 (Anton Popov)。 - 修复了在数组中传递空元组时出现的意外异常。修复了 #68618 问题。#68848 (Amos Bird)。
- 修复了解析纯元数据变更 (mutation) 命令的问题。#68935 (János Benjamin Antal)。
- 修复了在 anyHeavy 状态合并期间可能出现的错误结果。#68950 (Raúl Marín)。
- 修复了在启用设置
optimize_functions_to_subcolumns
的情况下写入物化视图 (Materialized Views) 的问题。#68951 (Anton Popov)。 - 不要在常量动态列 (const Dynamic column) 方法中使用序列化缓存 (serializations cache)。这可能导致在聚合期间使用未初始化的值,甚至出现竞争条件。#68953 (Kruglov Pavel)。
- 修复了解析错误,该错误发生在某些情况下在 JSON 类型解析期间应将 null 作为默认值插入时。#68955 (Kruglov Pavel)。
- 修复了在某些压缩响应中未发送
Content-Encoding
的问题。#64802。#68975 (Konstantin Bogdanov)。 - 在某些情况下,路径被错误地连接,其中包含
//
部分,使用路径规范化 (path normalization) 解决了此问题。#69066 (Yarik Briukhovetskyi)。 - 修复了当有空异步插入时出现的逻辑错误。#69080 (Han Fei)。
- 修复了在查询取消期间 clickhouse-client 中进度指示 (progress indication) 的数据竞争。#69081 (Sergei Trifonov)。
- 修复了一个错误,该错误导致向量相似度索引(目前为实验性功能)在与余弦距离 (cosine distance) 作为距离函数一起使用时未被利用。#69090 (flynn)。
- 此更改解决了一个问题,即在初始创建过程中服务器发生故障后尝试再次创建 Replicated 数据库可能会导致错误。#69102 (Miсhael Stetsyuk)。
- 当
input_format_csv_try_infer_numbers_from_strings = 1
时,不要从 CSV 中的 String 类型推断 Bool 类型,因为我们不允许从字符串读取 bool 值。#69109 (Kruglov Pavel)。 - 修复了当启用
--multiquery
时,客户端上 explain ast insert 查询的解析错误。#69123 (wxybear)。 - 子查询中的
UNION
子句在具有并行副本的查询中未被正确处理,并导致 LOGICAL_ERRORDuplicate announcement received for replica
。#69146 (Igor Nikonov)。 - 修复了在 s3Cluster 中传播结构参数 (structure argument) 的问题。以前,当将查询发送到 s3Cluster 中的副本时,列的
DEFAULT
表达式可能会丢失。#69147 (Kruglov Pavel)。 - 在从表达式转换为目标类型的过程中,尊重 Values 格式中的格式设置 (format settings)。#69149 (Kruglov Pavel)。
- 修复了只读用户 (readonly users) 的
clickhouse-client --queries-file
问题(之前会因Cannot modify 'log_comment' setting in readonly mode
而失败)。#69175 (Azat Khuzhin)。 - 修复了当 clickhouse-client 通过管道连接到提前终止的进程时的数据竞争。#69186 (vdimir)。
- 修复了 JSON/Dynamic 类型的 Fix uniq 和 GROUP BY 的不正确结果。#69203 (Kruglov Pavel)。
- 修复了异步插入的 INFILE 格式检测。如果格式未在 FORMAT 子句中显式定义,则可以从 INFILE 文件扩展名中检测到。#69237 (Julia Kartseva)。
- 在 此问题 之后,生产环境中有相当多的表副本,它们的
metadata_version
节点值既等于0
,又与相应表的metadata
节点版本不同。这导致alter
查询在这些副本上失败。#69274 (Miсhael Stetsyuk)。 - 将 Dynamic 类型标记为不安全的 primary key 类型,以避免 Fields 的问题。#69311 (Kruglov Pavel)。
- 改进了访问实体依赖项的恢复。#69346 (Vitaly Baranov)。
- 修复了当所有连接尝试都无法获取插入连接时出现的未定义行为。#69390 (Pablo Marcos)。
- 关闭了 #69135 问题。如果我们尝试为
cross
join 重用已连接的数据,但这在目前的 ClickHouse 中不可能发生。最好在reuseJoinedData
中保留have_compressed
。#69404 (lgbo)。 - 使
materialize()
函数在参数为稀疏列 (sparse column) 时返回完整列。#69429 (Alexander Gololobov)。 - 修复了函数
sqidDecode
的LOGICAL_ERROR
(#69450)。#69451 (Robert Schulze)。 - 针对 24.6 版本或使用复制数据库创建查询时 s3queue 问题的快速修复。#69454 (Kseniia Sumarokova)。
- 修复了由于
INSERT INTO ... SELECT
或CREATE TABLE AS SELECT
查询中的压缩 (squashing) 导致内存消耗过高的情况。#69469 (Yarik Briukhovetskyi)。 - 语句
SHOW COLUMNS
和SHOW INDEX
现在在表名中包含点号时也能正常工作。#69514 (Salvatore Mesoraca)。 - 现在禁止对溢出模式 (overflow mode) != 'throw' 的查询使用查询缓存。这防止了可能被截断和不正确的查询结果被存储在查询缓存中的情况。(问题 #67476)。#69549 (Robert Schulze)。
- 在移动到 prewhere 期间保持条件的原始顺序。以前,顺序可能会改变,并且当顺序很重要时,可能会导致查询失败。#69560 (Kruglov Pavel)。
- 修复 Keeper 在 ZNOAUTH 错误后的多请求预处理。#69627 (Antonio Andelic)。
- 修复了在 DatabaseReplicated 中使用带有 WHERE 子句的 TTL 创建新副本时可能发生的 METADATA_MISMATCH 错误。#69736 (Nikolay Degterinsky)。
- 修复了
StorageS3(Azure)Queue
设置tracked_file_ttl_sec
。我们使用键tracked_file_ttl_sec
将其写入 keeper,但读取时为tracked_files_ttl_sec
,这是一个拼写错误。#69742 (Kseniia Sumarokova)。 - 在 gethyperrectangleforrowgroup 中使用 tryconvertfieldtotype。#69745 (Miсhael Stetsyuk)。
- 回滚 “修复了没有列且没有自适应索引粒度 (adaptive index granularity) 的 prewhere (几乎没有任何东西)”。由于回滚的更改,当读取旧 CH 版本(大概是 2021 年或更早版本)生成的数据 part 时,可能会发生一些错误。#68897 (Alexander Gololobov)。
ClickHouse 24.8 LTS 版本,2024-08-20
向后不兼容的更改
clickhouse-client
和clickhouse-local
现在默认使用多查询模式(而不是单查询模式)。例如,clickhouse-client -q "SELECT 1; SELECT 2"
现在可以工作,而用户以前必须添加--multiquery
(或-n
)。--multiquery/-n
开关已过时。多查询语句中的 INSERT 查询根据其 FORMAT 子句进行特殊处理:如果 FORMAT 是VALUES
(最常见的情况),则 INSERT 语句的结尾由查询末尾的尾随分号;
表示。对于所有其他 FORMAT(例如CSV
或JSONEachRow
),INSERT 语句的结尾由查询末尾的两个换行符\n\n
表示。#63898 (FFish)。- 在以前的版本中,可以通过在数据类型名称后附加
WithDictionary
来使用LowCardinality
数据类型的替代语法。这是一个最初的工作实现,从未记录或公开。现在,它已被弃用。如果您使用了此语法,则必须 ALTER 您的表并将数据类型重命名为LowCardinality
。#66842 (Alexey Milovidov)。 - 修复了与分布式目标表一起使用的存储引擎
Buffer
的逻辑错误。这是一个向后不兼容的更改:如果表在查询中出现多次(例如,在自连接中),则使用Buffer
和分布式目标表的查询可能停止工作。#67015 (vdimir)。 - 在以前的版本中,使用接近于零的负参数调用基于 Gamma 函数的随机分布函数(例如 Chi-Squared、Student、Fisher)会导致长时间计算或无限循环。在新版本中,使用零或负参数调用这些函数将产生异常。这解决了 #67297 问题。#67326 (Alexey Milovidov)。
- 系统表
text_log
默认启用。这与以前的版本完全兼容,但您可能会注意到本地磁盘上的磁盘使用量略有增加(此系统表占用少量磁盘空间)。#67428 (Alexey Milovidov)。 - 在以前的版本中,如果要求生成非常大的数组,
arrayWithConstant
可能会很慢。在新版本中,每个数组限制为 1 GB。这解决了 #32754 问题。#67741 (Alexey Milovidov)。 - 修复了 REPLACE 修饰符的格式化(禁止省略括号)。#67774 (Azat Khuzhin)。
- 在 #68349 中反向移植:重新实现了
Dynamic
类型。现在,当达到动态数据类型的限制时,新类型不会强制转换为 String,而是以二进制格式存储在特殊的数据结构中,并带有二进制编码的数据类型。现在,任何曾经插入到Dynamic
列的类型都可以作为子列从中读取。#68132 (Kruglov Pavel)。
新功能
- 添加了一个新的
MergeTree
设置deduplicate_merge_projection_mode
,用于控制合并期间的 projection(对于特定引擎)和OPTIMIZE DEDUPLICATE
查询。支持的选项:throw
(在 projection 未完全支持 *MergeTree 引擎的情况下抛出异常)、drop
(如果 projection 本身无法一致合并,则在合并期间删除 projection)和rebuild
(从头开始重建 projection,这是一个繁重的操作)。#66672 (jsc0218)。 - 为 S3 表引擎添加了
_etag
虚拟列。修复了 #65312 问题。#65386 (skyoct)。 - 为查询缓存添加了标签(命名空间)机制。具有不同标签的相同查询被查询缓存视为不同的查询。示例:
SELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'abc'
和SELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'def'
现在创建不同的查询缓存条目。#68235 (sakulali)。 - 支持更多 JOIN strictness 变体 (
LEFT/RIGHT SEMI/ANTI/ANY JOIN
),其中不等式条件涉及左右表中的列。例如t1.y < t2.y
(请参阅设置allow_experimental_join_condition
)。#64281 (lgbo)。 - 为不同的引擎(
File
、URL
、S3
、AzureBlobStorage
、HDFS
)解释 Hive 风格的分区。Hive 风格的分区将数据组织到分区子目录中,从而可以有效地查询和管理大型数据集。目前,它仅创建具有适当名称和数据的虚拟列。后续 PR 将引入适当的数据过滤(性能加速)。#65997 (Yarik Briukhovetskyi)。 - 添加了用于 Spark 兼容性的函数
printf
(但您可以使用现有的format
函数)。#66257 (李扬)。 - 添加了选项
restore_replace_external_engines_to_null
和restore_replace_external_table_functions_to_null
,以将外部引擎和 table_engines 替换为Null
引擎,这对于测试可能很有用。它应该适用于 RESTORE 和显式表创建。#66536 (Ilya Yatsishin)。 - 添加了使用函数
readWKTLineString
读取WKT
格式的MULTILINESTRING
几何图形的支持。#67647 (Jacob Reckhard)。 - 添加了一个新的表函数
fuzzQuery
。此函数允许使用随机变化修改给定的查询字符串。示例:SELECT query FROM fuzzQuery('SELECT 1') LIMIT 5;
。#67655 (pufit)。 - 添加了一个查询
ALTER TABLE ... DROP DETACHED PARTITION ALL
,用于删除所有分离的分区 (detached partitions)。#67885 (Duc Canh Le)。 - 当启用新设置
rows_before_aggregation
时,将rows_before_aggregation_at_least
统计信息添加到查询响应中。此统计信息表示聚合之前读取的行数。在分布式查询的上下文中,当使用不带limit
的group by
或max
聚合函数时,rows_before_aggregation_at_least
可以反映查询命中的行数。#66084 (morning-color)。 - 支持对
Join
表执行OPTIMIZE
查询以减少其内存占用。#67883 (Duc Canh Le)。 - 如果在 URL 中添加
&run=1
,则允许在 play 中立即运行查询 #66457 (Aleksandr Musorin)。
实验性功能
- 实现新的
JSON
数据类型。#66444 (Kruglov Pavel)。 - 添加新的
TimeSeries
表引擎。#64183 (Vitaly Baranov)。 - 添加新的实验性
Kafka
存储引擎,以将偏移量存储在 Keeper 中,而不是依赖于将其提交到 Kafka。这使得提交到 ClickHouse 表的操作与从队列中的消费操作具有原子性。#57625 (János Benjamin Antal)。 - 使用自适应读取任务大小计算方法(自适应意味着它取决于读取的列大小)用于并行副本。#60377 (Nikita Taranov)。
- 添加了
count_min
(count-min sketches) 统计类型,它为类似col = 'val'
的等值谓词提供选择性估计。支持的数据类型包括字符串、日期、日期时间和数值类型。#65521 (JackyWoo)。
性能提升
- 默认启用设置
optimize_functions_to_subcolumns
。#68053 (Anton Popov)。 - 将
plain_rewritable
磁盘目录元数据存储在__meta
布局中,与对象存储中的 MergeTree 数据分开。将plain_rewritable
磁盘移动到扁平目录结构。#65751 (Julia Kartseva)。 - 通过提前为所有子列预留所需的内存,改进
String
/Array
/Map
/Variant
/Dynamic
类型的列压缩(发生在 INSERT 查询中的操作)。#67043 (Kruglov Pavel)。 - 加速
SYSTEM FLUSH LOGS
并在关闭时刷新日志。#67472 (Sema Checherinda)。 - 通过减少合并调度步骤的开销,提高了合并的整体性能。#68016 (Anton Popov)。
- 加速
DROP DATABASE
查询的表删除速度,将database_catalog_drop_table_concurrency
的默认值增加到 16。#67228 (Nikita Mikhaylov)。 - 避免在写入 ORC 时为数组列分配过多容量。数组列的性能提升了 15%。#67879 (李扬)。
- 显著加速非复制 MergeTree 的 mutations 操作 #66911 #66909 (Alexey Milovidov)。
改进
- 设置
allow_experimental_analyzer
重命名为enable_analyzer
。旧名称以别名的形式保留。这表明 Analyzer 不再处于 Beta 阶段,并已完全升级到生产环境。#66438 (Nikita Mikhaylov)。 - 改进日期时间模式推断。现在仅当日期时间具有小数部分时才使用 DateTime64,否则使用常规 DateTime。Date/DateTime 的推断现在更加严格,尤其是在
date_time_input_format='best_effort'
时,以避免在极端情况下从字符串推断日期时间。#68382 (Kruglov Pavel)。 - ClickHouse 服务器现在支持新的设置
max_keep_alive_requests
。对于服务器的 keep-alive HTTP 连接,它与keep_alive_timeout
协同工作 - 如果空闲超时未过期,但通过给定连接已完成超过max_keep_alive_requests
请求,服务器将关闭该连接。#61793 (Nikita Taranov)。 - 高级仪表板的各种改进。这关闭了 #67697。这关闭了 #63407。这关闭了 #51129。这关闭了 #61204。#67701 (Alexey Milovidov)。
- 创建 Distributed 表时,不再需要 REMOTE 的授权:Distributed 引擎的授权就足够了。#65419 (jsc0218)。
- 不要在 Docker 镜像中显式传递 keeper 的日志,以允许覆盖。#65564 (Azat Khuzhin)。
- 为
BACKUP
和RESTORE
查询引入了use_same_password_for_base_backup
设置,允许创建增量备份并从受密码保护的存档中恢复增量备份。#66214 (Samuele)。 - 忽略
ATTACH
查询的async_load_databases
(以前 ATTACH 可能在表附加之前返回)。#66240 (Azat Khuzhin)。 - 为拒绝的连接(资源不足的情况)添加了日志和指标。#66410 (Alexander Tokmakov)。
- 支持 MongoDB 引擎的正确
UUID
类型。#66671 (Azat Khuzhin)。 - 添加复制延迟和恢复时间指标。#66703 (Miсhael Stetsyuk)。
- 添加
DiskS3NoSuchKeyErrors
指标。#66704 (Miсhael Stetsyuk)。 - 确保
COMMENT
子句适用于所有表引擎。#66832 (Joe Lynch)。 - 函数
mapFromArrays
现在接受Map(K, V)
作为第一个参数,例如:SELECT mapFromArrays(map('a', 4, 'b', 4), ['aa', 'bb'])
现在可以工作并返回{('a',4):'aa',('b',4):'bb'}
。此外,如果第一个参数是 Array,它现在也可以是Array(Nullable(T))
或Array(LowCardinality(Nullable(T)))
类型,只要实际数组值不是NULL
。#67103 (李扬)。 - 从
~/.clickhouse-local
读取clickhouse-local
的配置。#67135 (Azat Khuzhin)。 - 将设置
input_format_orc_read_use_writer_time_zone
重命名为input_format_orc_reader_timezone
,并允许用户设置读取器时区。#67175 (kevinyhzou)。 - 降低 HTTP 连接在连接后立即被对等方重置时出现的
Socket is not connected
错误的级别,关闭 #34218。#67177 (vdimir)。 - 添加从配置加载
system.dashboards
的仪表板的功能(一旦设置,它们将覆盖默认的仪表板预设)。#67232 (Azat Khuzhin)。 - SQL 中的窗口函数传统上使用蛇形命名法。ClickHouse 使用
camelCase
,因此创建了新的别名denseRank()
和percentRank()
。这些新函数可以像原始的dense_rank()
和percent_rank()
函数一样调用。蛇形命名法和 camelCase 语法仍然可用。并且为每个函数添加了新的测试。这关闭了 #67042 。#67334 (Peter Nguyen)。 - 如果配置文件格式不是
.xml
、.yml
或.yaml
,则自动检测配置文件格式。如果文件以 < 开头,则可能是 XML,否则可能是 YAML。当从管道提供配置文件时,这很有用:clickhouse-server --config-file <(echo "hello: world")
。#67391 (sakulali)。 - 函数
formatDateTime
和formatDateTimeInJodaSyntax
现在将其 format 参数视为可选。如果未指定,则假定格式字符串为%Y-%m-%d %H:%i:%s
和yyyy-MM-dd HH:mm:ss
。示例:SELECT parseDateTime('2021-01-04 23:12:34')
现在返回 DateTime 值2021-01-04 23:12:34
(以前,这会抛出异常)。#67399 (Robert Schulze)。 - 如果 KeeperMap 中的 Keeper 请求因超时或连接丢失而发生,则自动重试。#67448 (Antonio Andelic)。
- 为 Aarch64 Linux 构建添加
-no-pie
,以允许在 ClickHouse 重启后正确地进行内省和符号化堆栈跟踪。#67916 (filimonov)。 - 为合并和突变添加了配置文件事件,以便更好地进行内省。#68015 (Anton Popov)。
- 删除非复制
MergeTree
的不必要日志。#68238 (Daniil Ivanik)。
构建/测试/打包改进
- 集成测试的 flaky 检查将不再多次运行每个测试用例,以查找测试中更多的问题并使其更可靠。它使用
pytest-repeat
库在同一环境下多次运行测试用例。在测试用例结束时清理表和其他实体以通过测试非常重要。重复运行比多次 pytest 运行速度快得多,因为它只需启动一次必要的容器。#66986 (Ilya Yatsishin)。 - 解除 CLion 与 ClickHouse 的使用限制。在以前的版本中,CLion 在每次按键时都会冻结一分钟。这关闭了 #66994。#66995 (Alexey Milovidov)。
- getauxval:由于较新 Linux 内核中较高的 ASLR 熵,避免在 sanitizer re-exec 下崩溃。#67081 (Raúl Marín)。
- 部分客户端代码被提取到单个文件中,即使对于调试版本,也对其应用了尽可能高的优化。这关闭了:#65745。#67215 (Nikita Mikhaylov)。
Bug 修复
- 仅与实验性的 Variant 数据类型相关。修复 Variant + AggregateFunction 类型的崩溃问题。#67122 (Kruglov Pavel)。
- 修复 DistributedAsyncInsert 在连接为空时的崩溃问题。#67219 (Pablo Marcos)。
- 修复
uniq
和uniqTheta
使用tuple()
参数时的崩溃问题。关闭 #67303。#67306 (flynn)。 - 修复 #66026。避免在
ReplaceTableNodeToDummyVisitor
中遍历未解析的表函数参数。#67522 (Dmitry Novik)。 - 修复
JSONMergePatch
函数中潜在的堆栈溢出。将此函数从jsonMergePatch
重命名为JSONMergePatch
,因为之前的名称是错误的。之前的名称仍然保留以实现兼容性。改进了函数中错误的诊断。这关闭了 #67304。#67756 (Alexey Milovidov)。 - 修复了由特制查询触发的 NULL 指针解引用,该查询通过 hopEnd、hopStart、tumbleEnd 和 tumbleStart 导致服务器崩溃。#68098 (Salvatore Mesoraca)。
- 修复了使用子查询进行过滤时,某些系统表中
Not-ready Set
的问题。#66018 (Michael Kolupaev)。 - 修复了
ALTER ADD COLUMN
查询后子列的读取问题。#66243 (Anton Popov)。 - 修复了发送到外部数据库(例如
PostgreSQL
)的查询中的布尔字面量。#66282 (vdimir)。 - 修复了带有别名 JOIN ON 表达式的查询的格式化问题,例如
... JOIN t2 ON (x = y) AS e ORDER BY x
应该格式化为... JOIN t2 ON ((x = y) AS e) ORDER BY x
。#66312 (vdimir)。 - 修复了 inter-server secret 的 cluster() 问题(保留之前的初始用户)。#66364 (Azat Khuzhin)。
- 修复了将带有 null 值的 Array 字段转换为 Array(Variant) 时可能出现的运行时错误。#66727 (Kruglov Pavel)。
- 修复了 Context::getDDLWorker 中偶尔出现的死锁。#66843 (Alexander Gololobov)。
- 修复了在不完整的 drop 操作后创建 KeeperMap 表的问题。#66865 (Antonio Andelic)。
- 修复了恢复到
s3_plain_rewritable
磁盘时出现的 broken part 错误。#66881 (Vitaly Baranov)。 - 在极少数情况下,ClickHouse 可能会因为磁盘上的一些意外 projections 而将 parts 视为 broken。现在已修复。#66898 (alesapin)。
- 修复了模式推断中无效的格式检测,该检测可能导致逻辑错误 Format不支持模式推断。#66899 (Kruglov Pavel)。
- 修复了使用并行副本取消查询时可能发生的死锁。#66905 (Nikita Taranov)。
- 即使设置了 database_replicated_allow_heavy_create,也禁止 create as select。这在 23.12 中是无条件禁止的,但在未发布的 24.7 版本中意外地允许了。#66980 (vdimir)。
- 当设置了
max_rows_to_read
限制时,从numbers
表读取数据可能会错误地抛出异常。这关闭了 #66992。#66996 (Alexey Milovidov)。 - 为 lagInFrame 和 leadInFrame 窗口函数添加正确的类型转换 - 修复了 msan 测试。#67091 (Yakov Olkhovskiy)。
- TRUNCATE DATABASE 过去会像 DROP DATABASE 查询一样停止复制,现在已修复。#67129 (Alexander Tokmakov)。
- 在
clickhouse-local
中使用单独的客户端上下文。#67133 (Vitaly Baranov)。 - 修复了从单分片的
Distriburted
表上的Merge
表读取数据时出现的错误Cannot convert column because it is non constant in source stream but must be constant in result.
。#67146 (Nikolai Kochetov)。 - 修正了禁用
enable_order_by_all
和并行副本(以及分布式查询)时ORDER BY all
的行为。#67153 (Igor Nikonov)。 - 修复了模式缓存中
input_format_max_bytes_to_read_for_schema_inference
的错误用法。#67157 (Kruglov Pavel)。 - 修复了在按单个可空键分组时,如果发出异常,则 count distinct 存在内存泄漏的问题。#67171 (Jet He)。
- 修复了将 OUTER JOIN 转换为 INNER JOIN 的优化中的错误。这关闭了 #67156。这关闭了 #66447。该错误是在 https://github.com/ClickHouse/ClickHouse/pull/62907 中引入的。#67178 (Maksim Kita)。
- 修复了错误
Conversion from AggregateFunction(name, Type) to AggregateFunction(name, Nullable(Type)) is not supported
。该错误是由optimize_rewrite_aggregate_function_with_if
优化引起的。修复了 #67112。#67229 (Nikolai Kochetov)。 - 修复了当使用空元组作为函数 IN 的 lhs 时查询挂起的问题。#67295 (Duc Canh Le)。
- 可以创建非常深的嵌套 JSON 数据,这会在跳过未知字段时触发堆栈溢出。这关闭了 #67292。#67324 (Alexey Milovidov)。
- 修复了在启动期间发生异常后附加 ReplicatedMergeTree 表的问题。#67360 (Antonio Andelic)。
- 修复了由在
Aggregator
中错误地从线程组分离而导致的段错误。#67385 (Antonio Andelic)。 - 修复了在 PK 中指定非确定性函数的又一种情况。#67395 (Nikolai Kochetov)。
- 修复了
bloom_filter
索引破坏带有轻微奇怪条件(例如(k=2)=(k=2)
或has([1,2,3], k)
)的查询的问题。#67423 (Michael Kolupaev)。 - 如果文件名/URI 不在存档中,则正确解析包含
::
的文件名/URI。#67433 (Antonio Andelic)。 - 修复了在 WriteBuffer 被取消的情况下,
WriteBufferFromS3
中等待任务的问题。#67459 (Kseniia Sumarokova)。 - 保护临时 part 目录在 RESTORE 期间不被删除。#67491 (Vitaly Baranov)。
- 修复了嵌套短路函数的执行。#67520 (Kruglov Pavel)。
- 修复了
Logical error: Expected the argument №N of type T to have X rows, but it has 0
错误。该错误可能发生在GROUP BY
中带有常量表达式的远程查询中(使用新的 analyzer)。#67536 (Nikolai Kochetov)。 - 修复了在 tuple 上使用 NULL 值进行 join 的问题:某些使用新 analyzer 并在
JOIN ON
部分的 tuple 中包含NULL
的查询返回了不正确的结果。#67538 (vdimir)。 - 修复了在完全不可驱逐缓存的情况下,
FileCache::freeSpaceRatioKeepingThreadFunc()
的冗余重新调度。#67540 (Kseniia Sumarokova)。 - 修复了通过 HTTP 接口插入到流式引擎(Kafka、RabbitMQ、NATS)的问题。#67554 (János Benjamin Antal)。
- 修复了函数
toStartOfWeek
在使用小的DateTime64
值时返回错误结果的问题。#67558 (Yarik Briukhovetskyi)。 - 修复了使用递归 CTE 创建视图的问题。#67587 (Yakov Olkhovskiy)。
- 修复了文件系统缓存中
Logical error: 'file_offset_of_buffer_end <= read_until_position'
错误。关闭 #57508。#67623 (Kseniia Sumarokova)。 - 修复了 #62282。删除了对
convertFieldToString()
的调用,并添加了特定于数据类型的序列化代码。当参数值为返回数据类型实例的函数或表达式时,参数化视图替换对于多种数据类型被破坏。#67654 (Shankar)。 - 修复了
percent_rank
的崩溃问题。percent_rank
的默认帧类型已更改为range unbounded preceding and unbounded following
。考虑了IWindowFunction
的默认窗口帧,现在 SQL 中没有窗口帧定义的窗口函数可以正确地放入不同的WindowTransfomer
中。#67661 (lgbo)。 - 修复了重新加载带有 UNION 的 SQL UDF 的问题。以前,重启服务器可能会使 UDF 无效。#67665 (Antonio Andelic)。
- 修复了在使用实验性 Variant 类型并在函数 if 中对 Tuples 和 Maps 启用设置
use_variant_as_common_type
时可能出现的逻辑错误 “Unexpected return type from if”。#67687 (Kruglov Pavel)。 - 由于 Linux 内核中的一个 bug,查询可能会在
TimerDescriptor::drain
中挂起。这关闭了 #37686。#67702 (Alexey Milovidov)。 - 修复了
RESTORE ON CLUSTER
命令的完成问题。#67720 (Vitaly Baranov)。 - 修复了在加载时出现 CANNOT_SCHEDULE_TASK 错误时字典挂起的问题。#67751 (Azat Khuzhin)。
- 带有 bloom filter 索引的查询,例如
SELECT count() FROM t WHERE cast(c = 1 or c = 9999 AS Bool) SETTINGS use_skip_indexes=1
现在可以正常工作。#67781 (jsc0218)。 - 修复了某些不带键和过滤器的聚合查询中错误的聚合结果,关闭 #67419。#67804 (vdimir)。
- 验证 ALTER ADD/MODIFY COLUMN 中的实验性/可疑数据类型。#67911 (Kruglov Pavel)。
- 修复了分布式查询中常量折叠后的 DateTime64 解析问题,关闭 #66773。#67920 (vdimir)。
- 修复了谓词中存在非确定性函数时
count()
结果错误的问题。#67922 (János Benjamin Antal)。 - 修复了在使用 CPU 数量受限的容器化环境中,最大线程软限制的计算问题。#67963 (Robert Schulze)。
- 现在,如果 projection 在磁盘上不存在但在
checksums.txt
中存在,ClickHouse 不会将 part 视为 broken。#68003 (alesapin)。 - 修复了使用新 analyzer 进行 mutations 时跳过未触及的 part 的问题。以前,在启用 analyzer 的情况下,即使 mutation 根据谓词不影响该 part,mutation 也可能重写 part 中的数据。#68052 (Anton Popov)。
- 删除一个错误的优化,该优化会删除使用
OFFSET
的子查询中的排序。修复了 #67906。#68099 (Graham Campbell)。 - 尝试修复聚合 projection 优化中
Block structure mismatch in AggregatingStep stream: different types
的问题。#68107 (Nikolai Kochetov)。 - 尝试修复查询取消时 postgres 崩溃的问题。#68288 (Kseniia Sumarokova)。
- 修复了查询
SYSTEM SYNC REPLICA
中缺少同步副本模式的问题。#68326 (Duc Canh Le)。
ClickHouse 24.7 版本发布,2024-07-30
向后不兼容变更
- 禁止对使用复制数据库执行
CREATE MATERIALIZED VIEW ... ENGINE Replicated*MergeTree POPULATE AS SELECT ...
操作。 #63963 (vdimir)。 clickhouse-keeper-client
将仅接受字符串字面量形式的路径,例如ls '/hello/world'
,而不再接受裸字符串,例如ls /hello/world
。 #65494 (Alexey Milovidov)。- 指标
KeeperOutstandingRequets
已重命名为KeeperOutstandingRequests
。 #66206 (Robert Schulze)。 - 从
system.functions
表中移除is_deterministic
字段。 #66630 (Alexey Milovidov)。 - 函数
tuple
现在将尝试在查询中构造命名元组(由enable_named_columns_in_function_tuple
控制)。引入函数tupleNames
以从元组中提取名称。 #54881 (Amos Bird)。 - 更改了物化视图的去重工作方式。修复了很多类似的情况:- 在目标表上:数据被分割成 2 个或更多块,当这些块并行插入时,会被认为是重复的。 - 在 MV 目标表上:相等的块被去重,这种情况发生在 MV 由于执行聚合而经常为不同的输入数据产生相等的数据时。 - 在 MV 目标表上:来自不同 MV 的相等块被去重。 #61601 (Sema Checherinda)。
- 函数
bitShiftLeft
和bitShitfRight
对于超出范围的位移位置会返回错误 #65838 (Pablo Marcos)。
新功能
- 为
full_sorting_join
算法添加ASOF JOIN
支持。 #55051 (vdimir)。 - 在
clickhouse-client
中支持 JWT 身份验证(仅在 ClickHouse Cloud 中可用)。 #62829 (Konstantin Bogdanov)。 - 添加 SQL 函数
changeYear
、changeMonth
、changeDay
、changeHour
、changeMinute
、changeSecond
。例如,SELECT changeMonth(toDate('2024-06-14'), 7)
返回日期2024-07-14
。 #63186 (cucumber95)。 - 引入启动脚本,允许在启动阶段执行预配置的查询。 #64889 (pufit)。
- 在客户端配置中支持 accept_invalid_certificate,以允许客户端通过安全 TCP 连接到使用自签名证书运行的服务器 - 可以用作相应的
openSSL
客户端设置verificationMode=none
+invalidCertificateHandler.name=AcceptCertificateHandler
的简写形式。 #65238 (peacewalker122)。 - 添加 system.error_log,其中包含来自表 system.errors 的错误值的历史记录,定期刷新到磁盘。 #65381 (Pablo Marcos)。
- 添加聚合函数
groupConcat
。与arrayStringConcat( groupArray(column), ',')
大致相同。可以接收 2 个参数:字符串分隔符和要处理的元素数量。 #65451 (Yarik Briukhovetskyi)。 - 添加 AzureQueue 存储。 #65458 (Kseniia Sumarokova)。
- 添加一个新设置以禁用/启用将页索引写入 parquet 文件。 #65475 (lgbo)。
- 引入
logger.console_log_level
服务器配置以控制控制台的日志级别(如果启用)。 #65559 (Azat Khuzhin)。 - 使用表函数
file
自动将通配符*
附加到目录路径的末尾。 #66019 (Zhidong (David) Guo)。 - 在非交互模式下为客户端添加
--memory-usage
选项。 #66393 (vdimir)。 - 为 clickhouse-disks 创建一个交互式客户端,从本地目录添加本地磁盘。 #64446 (Daniil Ivanik)。
- 当对带有投影的表执行轻量级删除时,用户可以选择抛出异常(默认)或删除投影 #65594 (jsc0218)。
- 添加包含所有已分离表的主要信息的系统表。 #65400 (Konstantin Morozov)。
实验性功能
- 更改
Variant
数据类型的二进制序列化:添加compact
模式,以避免对于具有单个变体或仅具有 NULL 值的粒度多次写入相同的鉴别符。添加 MergeTree 设置use_compact_variant_discriminators_serialization
,默认启用。请注意,Variant 类型仍处于实验阶段,序列化中的向后不兼容更改是可以接受的。 #62774 (Kruglov Pavel)。 - 支持 clickhouse-keeper 的磁盘后端存储。 #56626 (Han Fei)。
- 重构 JSONExtract 函数,支持更多类型,包括实验性的 Dynamic 类型。 #66046 (Kruglov Pavel)。
- 为
Variant
和Dynamic
子列支持 null map 子列。 #66178 (Kruglov Pavel)。 - 修复从更改后的
Memory
表读取Dynamic
子列的问题。之前,如果通过 alter 更改 Memory 表中 Dynamic 类型的max_types
参数,则后续的子列读取可能会返回错误的结果。 #66066 (Kruglov Pavel)。 - 在使用自定义键并行副本时,添加对
cluster_for_parallel_replicas
的支持。它允许您将并行副本与带有 MergeTree 表的自定义键一起使用。 #65453 (Antonio Andelic)。
性能提升
- 将整数转字符串算法替换为更快的算法(从修改后的 amdn/itoa 到修改后的 jeaiii/itoa)。 #61661 (Raúl Marín)。
- 现在收集并缓存由 join(
parallel_hash
算法)创建的哈希表的大小。此信息将用于为后续查询执行预分配哈希表中的空间,并节省哈希表调整大小的时间。 #64553 (Nikita Taranov)。 - 通过使用缓冲,优化了带有
ORDER BY
主键和WHERE
条件(具有高选择性)的查询。它由设置read_in_order_use_buffering
控制(默认启用),并可能增加查询的内存使用量。 #64607 (Anton Popov)。 - 提高加载
plain_rewritable
元数据的性能。 #65634 (Alexey Milovidov)。 - 在只读磁盘上附加表将使用更少的资源,因为它不会加载过时的 parts。 #65635 (Alexey Milovidov)。
- 为 Set 索引支持 minmax 超矩形。 #65676 (AntiTopQuark)。
- 卸载过时 parts 的主索引以减少总内存使用量。 #65852 (Anton Popov)。
- 如果模式是简单的(即不包含元字符、模式类、标志、分组字符等),则函数
replaceRegexpAll
和replaceRegexpOne
现在会快得多。(感谢 Taiyang Li)。 #66185 (Robert Schulze)。 - s3 请求:减少查询的重试时间,增加备份的重试次数。查询为 8.5 分钟和 100 次重试,备份恢复为 1.2 小时和 1000 次重试。 #65232 (Sema Checherinda)。
- 支持查询计划 LIMIT 优化。支持 PostgreSQL 存储和表函数的 LIMIT 下推。 #65454 (Maksim Kita)。
- 改进了 ZooKeeper 负载均衡。即使
fallback_session_lifetime
已设置,当前会话也不会过期,直到最佳节点变得可用。添加了对 AZ 感知负载均衡的支持。 #65570 (Alexander Tokmakov)。 - DatabaseCatalog 通过使用最多 database_catalog_drop_table_concurrency 线程来更快地删除表。 #66065 (Sema Checherinda)。
改进
- 改进了 ZooKeeper 负载均衡。即使
fallback_session_lifetime
已设置,当前会话也不会过期,直到最佳节点变得可用。添加了对 AZ 感知负载均衡的支持。 #65570 (Alexander Tokmakov)。 - 设置
optimize_trivial_insert_select
默认禁用。在大多数情况下,它应该是有益的。但是,如果您发现 INSERT SELECT 变慢或内存使用量增加,您可以重新启用它或SET compatibility = '24.6'
。 #58970 (Alexey Milovidov)。 - 如果
clickhouse-client
或clickhouse-local
崩溃,则打印堆栈跟踪和诊断信息。 #61109 (Alexander Tokmakov)。 SHOW INDEX | INDEXES | INDICES | KEYS
的结果以前按主键列名排序。由于这不直观,因此结果现在按主键列在主键中的位置排序。 #61131 (Robert Schulze)。- 更改了物化视图的去重工作方式。修复了很多类似的情况:- 在目标表上:数据被分割成 2 个或更多块,当这些块并行插入时,会被认为是重复的。 - 在 MV 目标表上:相等的块被去重,这种情况发生在 MV 由于执行聚合而经常为不同的输入数据产生相等的数据时。 - 在 MV 目标表上:来自不同 MV 的相等块被去重。 #61601 (Sema Checherinda)。
- 支持读取分区数据 DeltaLake 数据。通过读取元数据而不是数据来推断 DeltaLake 模式。 #63201 (Kseniia Sumarokova)。
- 在可组合协议中,TLS 层仅接受
certificateFile
和privateKeyFile
参数。 https://clickhouse.ac.cn/docs/en/operations/settings/composable-protocols. #63985 (Anton Ivashkin)。 - 添加了 profile event
SelectQueriesWithPrimaryKeyUsage
,指示有多少 SELECT 查询使用主键来评估 WHERE 子句。 #64492 (0x01f)。 StorageS3Queue
相关修复和改进。根据服务器上的物理 cpu 核心数推断s3queue_processing_threads_num
的默认值(而不是之前的默认值 1)。将s3queue_loading_retries
的默认值设置为 10。修复了system.s3queue
的异常列中可能出现的模糊“Uncaught exception”。在MEMORY_LIMIT_EXCEEDED
异常时,不增加重试计数。将文件提交移动到完全完成插入表后的阶段,以避免在未插入时提交文件。添加设置s3queue_max_processed_files_before_commit
、s3queue_max_processed_rows_before_commit
、s3queue_max_processed_bytes_before_commit
、s3queue_max_processing_time_sec_before_commit
,以更好地控制提交和刷新时间。 #65046 (Kseniia Sumarokova)。- 在参数化视图函数中支持别名(仅限新分析器)。 #65190 (Kseniia Sumarokova)。
- 更新为在 azureBlobStorage 的日志中屏蔽帐户密钥。 #65273 (SmitaRKulkarni)。
- 当过滤器表达式是
PARTITION BY
表达式的一部分时,对IN
谓词进行分区裁剪。 #65335 (Eduard Karacharov)。 arrayMin
/arrayMax
可以应用于所有可比较的数据类型。 #65455 (pn)。- 改进了 cgroups v2 的内存核算,以排除页面缓存占用的量。 #65470 (Nikita Taranov)。
- 当将 chunks 序列化以插入到 EmbeddedRocksDB 表时,不要为每一行创建格式设置。 #65474 (Duc Canh Le)。
- 将
clickhouse-local
提示符缩减为仅:)
。getFQDNOrHostName()
在 macOS 上花费的时间太长,并且我们不希望clickhouse-local
的提示符中出现主机名。 #65510 (Konstantin Bogdanov)。 - 避免在低端虚拟机上打印来自 jemalloc 的关于每个 CPU arena 的消息。 #65532 (Alexey Milovidov)。
- 默认禁用文件系统缓存后台下载。当我们修复可能导致“内存超出限制”的问题时,将重新启用它,因为如果我们使用后台下载线程,则内存释放是在查询上下文之外完成的(而缓冲区是在查询上下文中分配的)。此外,我们需要添加一个单独的设置来定义后台工作线程的最大下载大小(目前它受 max_file_segment_size 限制,这可能太大)。 #65534 (Kseniia Sumarokova)。
- 为配置添加新选项
<config_reload_interval_ms>
,允许指定 clickhouse 重新加载配置的频率。 #65545 (alesapin)。 - 实现 ClickHouse 数据类型的二进制编码,并在文档中添加其规范。在动态二进制序列化中使用它,允许在设置下在 RowBinaryWithNamesAndTypes 和 Native 格式中使用它。 #65546 (Kruglov Pavel)。
- 服务器设置
compiled_expression_cache_size
和compiled_expression_cache_elements_size
现在显示在system.server_settings
中。 #65584 (Robert Schulze)。 - 添加基于 x509 SubjectAltName 扩展的用户身份识别支持。 #65626 (Anton Kozlov)。
clickhouse-local
将遵循配置文件中的max_server_memory_usage
和max_server_memory_usage_to_ram_ratio
。它还将默认将最大内存使用量设置为系统内存的 90%,就像clickhouse-server
所做的那样。 #65697 (Alexey Milovidov)。- 添加一个脚本以将文件备份到 ClickHouse。 #65699 (Alexey Milovidov)。
- PostgreSQL 源支持查询取消。 #65722 (Maksim Kita)。
- 使
allow_experimental_analyzer
由分布式查询的发起者控制。这确保了混合版本集群中操作期间的兼容性和正确性。 #65777 (Nikita Mikhaylov)。 - 在 Keeper 中遵循 cgroup CPU 限制。 #65819 (Antonio Andelic)。
- 允许将
concat
函数与空参数一起使用:) select concat();
。 #65887 (李扬)。 - 允许在
clickhouse-local
中控制命名集合。 #65973 (Alexey Milovidov)。 - 改进 Azure 相关的 profile events。 #65999 (alesapin)。
- 支持按 writer 的时区读取 ORC 文件。 #66025 (kevinyhzou)。
- 添加设置以控制到 PostgreSQL 的连接。设置
postgresql_connection_attempt_timeout
指定传递给连接 URL 的connect_timeout
参数的值。设置postgresql_connection_pool_retries
指定建立到 PostgreSQL 端点的连接的重试次数。 #66232 (Dmitry Novik)。 - 减少
system.processors_profile_log
中input_wait_elapsed_us
/elapsed_us
的不准确性。 #66239 (Azat Khuzhin)。 - 改进文件系统缓存的 ProfileEvents。 #66249 (zhukai)。
- 添加设置以忽略复制存储的命名集合管理的查询中的
ON CLUSTER
子句。 #66288 (MikhailBurdukov)。 - 函数
generateSnowflakeID
现在允许将机器 ID 指定为参数,以防止大型集群中的冲突。 #66374 (ZAWA_ll)。 - 禁用在交互模式下按
Ctrl+Z
挂起。这是一个常见的陷阱,并且对于几乎所有用户来说都不是预期的行为。我想只有少数极端高级用户可能会喜欢将终端应用程序挂起到后台,但我一个都不认识。 #66511 (Alexey Milovidov)。 - 添加选项以验证字典中主键的类型。如果没有此选项,对于简单布局,任何列类型都将隐式转换为 UInt64。 #66595 (MikhailBurdukov)。
Bug Fix (官方稳定版本中用户可见的错误行为)
- 检查 CREATE/REPLACE/RENAME/EXCHANGE 查询中的循环依赖,如果存在循环依赖,则抛出异常。以前,这种循环依赖可能导致服务器启动期间的死锁。还修复了依赖项创建中的一些错误。 #65405 (Kruglov Pavel)。
- 修复函数调用中
LowCardinality
列的意外大小。 #65298 (Raúl Marín)。 - 修复 maxIntersections 中的崩溃。 #65689 (Raúl Marín)。
- 修复用户定义中的
VALID UNTIL
子句在重启后重置的问题。 #66409 (Nikolay Degterinsky)。 - 修复
SHOW MERGES
中的剩余时间列。 #66735 (Alexey Milovidov)。 Query was cancelled
可能在 clickhouse-client 中打印两次。此行为已修复。 #66005 (Nikita Mikhaylov)。- 修复了将 MySQL NULL 字段映射到 ClickHouse 非 NULL 字段时,使用
MaterializedMySQL
(这是一个不受支持的实验性功能)和 TABLE OVERRIDE 导致的崩溃。 #54649 (Filipp Ozinov)。 - 修复了
PREWHERE
表达式未读取任何列且表没有自适应索引粒度(非常旧的表)时的逻辑错误。 #59173 (Alexander Gololobov)。 - 修复取消查询时取消缓冲区的错误。 #64478 (Sema Checherinda)。
- 修复了从元数据填充 parts 列(当 columns.txt 不存在时)。 #64757 (Azat Khuzhin)。
- 修复
ALTER TABLE ... ON CLUSTER ... MODIFY SQL SECURITY
的崩溃。 #64957 (pufit)。 - 修复销毁 AccessControl 时的崩溃:添加显式关闭。 #64993 (Vitaly Baranov)。
- 递归地消除
uniq*
函数参数中的单射函数。这以前可以正常工作,但在新的分析器中被破坏了。 #65140 (Duc Canh Le)。 - 修复了带有 CTE 的查询中意外的 projection 名称。 #65267 (wudidapaopao)。
- 当通过直接查询或
Dictionary
表引擎访问字典时,需要dictGet
权限。 #65359 (Joe Lynch)。 - 修复了使用增量备份的用户特定 S3 身份验证。 #65481 (Antonio Andelic)。
- 在启用
read-in-order
优化的情况下,禁用带有FINAL
的查询的non-intersecting-parts
优化。这可能会导致不正确的查询结果。作为一种解决方法,请在此修复合并之前禁用do_not_merge_across_partitions_select_final
和split_parts_ranges_into_intersecting_and_non_intersecting_final
。 #65505 (Nikolai Kochetov)。 - 修复了当列表批次中的所有文件都被过滤掉时,出现异常
blob metadata 的索引越界
的问题。 #65523 (Kseniia Sumarokova)。 - 修复了投影重复数据删除合并时出现的 NOT_FOUND_COLUMN_IN_BLOCK 错误。 #65573 (Yakov Olkhovskiy)。
- 修复了 MergeJoin 中的错误。稀疏序列化中的列可能被视为其嵌套类型的列,即使没有执行所需的转换。 #65632 (Nikita Taranov)。
- 修复了兼容性级别 '23.4' 未正确应用的问题。 #65737 (cw5121)。
- 修复了带有可为空字段的 odbc 表的问题。 #65738 (Rodolphe Dugé de Bernonville)。
- 修复了
TCPHandler
中的数据竞争,这可能在发生致命错误时发生。 #65744 (Kseniia Sumarokova)。 - 修复了函数
parseDateTime
中使用%F
和%D
占位符时出现的无效异常。 #65768 (Antonio Andelic)。 - 对于从
PostgreSQL
读取数据的查询,如果 ClickHouse 查询已完成,则取消内部PostgreSQL
查询。否则,ClickHouse
查询在内部PostgreSQL
查询完成之前无法取消。 #65771 (Maksim Kita)。 - 修复了旧分析器和 dictGetOrDefault 一起使用时短路逻辑中的错误。 #65802 (jsc0218)。
- 修复了导致带有 TTL 的 EmbeddedRocksDB 写入损坏 SST 文件的错误。 #65816 (Duc Canh Le)。
- 函数
bitTest
、bitTestAll
和bitTestAny
现在在指定的位索引越界时返回错误 #65818 (Pablo Marcos)。 - 设置
join_any_take_last_row
在任何带有哈希连接的查询中都受支持。 #65820 (vdimir)。 - 更好地处理涉及
IS NULL
检查的连接条件(例如,ON (a = b AND (a IS NOT NULL) AND (b IS NOT NULL) ) OR ( (a IS NULL) AND (b IS NULL) )
被重写为ON a <=> b
),修复了当存在IS NULL
以外的条件时出现的不正确优化。 #65835 (vdimir)。 - 修复了 S3Queue 中不断增长的内存使用量。 #65839 (Kseniia Sumarokova)。
- 修复了
arrayAUC
中的平局处理,以匹配 sklearn。 #65840 (gabrielmcg44)。 - 修复了 MySQL 服务器协议 TLS 连接的潜在问题。 #65917 (Azat Khuzhin)。
- 修复了 MySQL 客户端协议 TLS 连接的潜在问题。 #65938 (Azat Khuzhin)。
- 修复了使用零超时处理
SSL_ERROR_WANT_READ
/SSL_ERROR_WANT_WRITE
的问题。 #65941 (Azat Khuzhin)。 - 在模式推断缓存中添加了缺失的设置
input_format_csv_skip_first_lines/input_format_tsv_skip_first_lines/input_format_csv_try_infer_numbers_from_strings/input_format_csv_try_infer_strings_from_quoted_tuples
,因为它们可能会更改结果模式。它可以防止在这些设置更改时模式推断结果不正确。 #65980 (Kruglov Pavel)。 - s3 引擎和 s3 表函数中的列 _size 表示存档内部文件的大小,而不是存档本身的大小。 #65993 (Daniil Ivanik)。
- 修复了解析器中动态子列的解析问题,避免在读取动态子列时读取整个列。 #66004 (Kruglov Pavel)。
- 修复了使用替换覆盖的 from_env 的配置合并。 #66034 (Azat Khuzhin)。
- 修复了关闭期间
GRPCServer
中可能发生的挂起。 #66061 (Vitaly Baranov)。 - 修复了函数
has
中使用非常量LowCardinality
参数的几个案例。 #66088 (Anton Popov)。 - 修复了
groupArrayIntersect
。它在merge()
函数中存在不正确的行为。此外,还修复了数字和通用数据的deserialise()
中的行为。 #66103 (Yarik Briukhovetskyi)。 - 修复了
unbin
/unhex
实现中的缓冲区溢出错误。 #66106 (Nikita Taranov)。 - 禁用了在 #64760 中引入的
merge-filters
优化。如果优化合并了两个过滤器表达式并且没有应用短路评估,则可能会导致异常。 #66126 (Nikolai Kochetov)。 - 修复了服务器无法解析带有负块大小数组编码的 Avro 文件的问题,Avro 规范现在允许这样做。 #66130 (Serge Klochkov)。
- 修复了 ZooKeeper 客户端中的一个错误:会话在从 ZooKeeper 接收到硬件错误后可能会陷入无法使用的状态。例如,这可能是由于 ClickHouse Keeper 中的“软内存限制”引起的。 #66140 (Alexander Tokmakov)。
- 修复了 SumIfToCountIfVisitor 和有符号整数中的问题。 #66146 (Raúl Marín)。
- 修复了分布式查询结果中数据丢失的罕见情况。 #66174 (vdimir)。
- 修复了 StorageDeltaLake 中元数据字段的解析顺序。 #66211 (Kseniia Sumarokova)。
- 对于
distributed_ddl_output_mode
的none_only_active
模式,不要抛出TIMEOUT_EXCEEDED
。 #66218 (Alexander Tokmakov)。 - 修复了当无法使用索引时
system.numbers_mt
的限制处理。 #66231 (János Benjamin Antal)。 - 修复了 ClickHouse 服务器如何检测 cgroups v2 指定的最大可用 CPU 核心数的问题,如果服务器在 Docker 等容器中运行。更详细地说,容器通常在根 cgroup 中运行其进程,该 cgroup 具有空名称。在这种情况下,ClickHouse 忽略了 cgroups v2 设置的 CPU 限制。 #66237 (filimonov)。
- 修复了约束中使用带有
IN
的子查询时出现的Not-ready set
错误。 #66261 (Nikolai Kochetov)。 - 修复了复制到 S3 或 AzureBlobStorage 时的错误报告。 #66295 (Vitaly Baranov)。
- 防止 watchdog 保留未链接(轮换)日志文件的描述符。 #66334 (Aleksei Filatov)。
- 修复了 logicalexpressionoptimizerpass 丢失常量逻辑类型的错误。 #66344 (pn)。
- 修复了
group_by_use_nulls=true
和新分析器出现的Column identifier is already registered
错误。 #66400 (Nikolai Kochetov)。 - 修复了由于过于激进的过滤器下推,导致连接和过滤表外部引擎(如 PostgreSQL)的查询可能产生不正确结果的问题。从现在开始,在与外部表进行外连接的情况下,where 部分的条件将不会发送到外部数据库。 #66402 (vdimir)。
- 为交叉连接添加了缺失的列物化。 #66413 (lgbo)。
- 修复了在新分析器启用的情况下,对于
GROUP BY
键中带有常量表达式的查询,出现Cannot find column
错误的问题。 #66433 (Nikolai Kochetov)。 - 避免了在 Npy 格式导入过程中由于错误的数组嵌套级别可能发生的逻辑错误,修复了其他类型错误的测试。 #66461 (Yarik Briukhovetskyi)。
- 修复了谓词中存在非确定性函数时
count()
结果错误的问题。 #66510 (Duc Canh Le)。 - 正确跟踪
Allocator::realloc
的内存。 #66548 (Antonio Andelic)。 - 修复了哈希空元组时读取未初始化内存的问题。 #66562 (Alexey Milovidov)。
- 修复了带有
WINDOW
的查询的无效结果。当PARTITION
列具有稀疏序列化并且窗口函数并行执行时,可能会发生这种情况。 #66579 (Nikolai Kochetov)。 - 修复了在本地存储中删除命名集合的问题。 #66599 (János Benjamin Antal)。
- 修复了
column_length
未在ColumnTuple::insertManyFrom
中更新的问题。 #66626 (lgbo)。 - 修复了对于表达式
(column IS NULL).
的查询,出现的Unknown identifier
和Column is not under aggregate function
错误。该错误由 #65088 触发,仅在使用禁用分析器的情况下。 #66654 (Nikolai Kochetov)。 - 修复了当标量子查询用作 IN 的第一个参数时(使用新分析器),出现的
Method getResultType is not supported for QUERY query node
错误。 #66655 (Nikolai Kochetov)。 - 修复了读取变体子列期间可能发生的 PARAMETER_OUT_OF_BOUND 错误。 #66659 (Kruglov Pavel)。
- 修复了删除列后合并卡住的罕见情况。 #66707 (Raúl Marín)。
- 修复了从远程源插入选择时
isUniqTypes
断言失败的问题。 #66722 (Sema Checherinda)。 - 修复了 PrometheusRequestHandler 中的逻辑错误。 #66621 (Vitaly Baranov)。
- 修复了 fuzzer 发现的
indexHint
函数案例。 #66286 (Anton Popov)。 - 修复了 'create table b empty as a' 的 AST 格式化。 #64951 (Michael Kolupaev)。
ClickHouse 24.6 版本,2024-07-01
向后不兼容的变更
- 默认启用异步加载数据库和表。请参阅 config.xml 中的
async_load_databases
设置。虽然此更改完全兼容,但可能会引入行为上的差异。当async_load_databases
设置为 false 时(如之前的版本中),服务器在加载完所有表之前不会接受连接。当async_load_databases
设置为 true 时(如新版本中),服务器可以在所有表加载完成之前接受连接。如果查询访问尚未加载的表,它将等待表的加载,这可能需要相当长的时间。如果服务器是大型分布式系统负载均衡器的一部分,则可能会改变服务器的行为。在第一种情况下,负载均衡器可能会收到连接拒绝并快速故障转移到另一台服务器。在第二种情况下,负载均衡器可以连接到仍在加载表的服务器,并且查询将具有更高的延迟。此外,如果大量查询在等待状态下累积,则可能会导致“惊群效应”问题,即它们同时开始处理。这可能只对高负载的分布式后端产生影响。您可以将async_load_databases
的值设置为 false 以避免此问题。 #57695 (Alexey Milovidov)。 - 设置
replace_long_file_name_to_hash
默认对MergeTree
表启用。 #64457 (Anton Popov)。此设置完全兼容,升级期间无需任何操作。从 23.9 开始的所有版本都支持新的数据格式。启用此设置后,您将无法再降级到 23.8 或更早版本。 - 一些无效查询将在解析期间更早地失败。注意:禁用了对内联 KQL 表达式(实验性的 Kusto 语言)的支持,当它们被放入
kql
表函数而没有字符串文字时,例如kql(garbage | trash)
而不是kql('garbage | trash')
或kql($$garbage | trash$$)
。此功能是意外引入的,不应存在。 #61500 (Alexey Milovidov)。 - 重做了存储
S3Queue
的Ordered
模式下的并行处理。如果您使用了设置s3queue_processing_threads_num
或s3queue_total_shards_num
,则此 PR 对于 Ordered 模式是向后不兼容的。设置s3queue_total_shards_num
已删除,之前只允许在s3queue_allow_experimental_sharded_mode
下使用,现在已弃用。添加了一个新设置 -s3queue_buckets
。 #64349 (Kseniia Sumarokova)。 - 添加了新函数
snowflakeIDToDateTime
、snowflakeIDToDateTime64
、dateTimeToSnowflakeID
和dateTime64ToSnowflakeID
。与现有函数snowflakeToDateTime
、snowflakeToDateTime64
、dateTimeToSnowflake
和dateTime64ToSnowflake
不同,新函数与函数generateSnowflakeID
兼容,即它们接受由generateSnowflakeID
生成的 snowflake ID,并生成与generateSnowflakeID
类型相同的 snowflake ID(即UInt64
)。此外,与generateSnowflakeID
一样,新函数默认使用 UNIX 纪元(即 1970-01-01)。如果需要,可以传递不同的纪元,例如 Twitter/X 的纪元 2010-11-04,即自 UNIX 纪元以来的 1288834974657 毫秒。旧的转换函数已被弃用,将在过渡期后删除:要继续使用它们,请启用设置allow_deprecated_snowflake_conversion_functions
。 #64948 (Robert Schulze)。
新功能
- 允许在 ClickHouse Keeper 中存储命名集合。 #64574 (Kseniia Sumarokova)。
- 支持空元组。 #55061 (Amos Bird)。
- 添加 Hilbert 曲线编码和解码函数。 #60156 (Artem Mustafin)。
- 添加了对
hilbertEncode
进行索引分析的支持。 #64662 (Artem Mustafin)。 - 添加了使用函数
readWKTLineString
读取 WKT 格式的LINESTRING
几何图形的支持。 #62519 (Nikita Mikhaylov)。 - 允许从不同的磁盘附加 part。 #63087 (Unalian)。
- 添加了新的 SQL 函数
generateSnowflakeID
,用于生成 Twitter 风格的 Snowflake ID。 #63577 (Danila Puzov)。 - 添加了
merge_workload
和mutation_workload
设置,用于调节资源如何在合并、mutation 和其他工作负载之间被利用和共享。 #64061 (Sergei Trifonov)。 - 添加了对使用
=
运算符比较IPv4
和IPv6
类型 的支持。 #64292 (Francisco J. Jurado Moreno)。 - 支持二进制数学函数(pow、atan2、max2、min2、hypot)中的 decimal 参数。 #64582 (Mikhail Gorshkov)。
- 添加了 SQL 函数
parseReadableSize
(以及OrNull
和OrZero
变体)。 #64742 (Francisco J. Jurado Moreno)。 - 添加了服务器设置
max_table_num_to_throw
和max_database_num_to_throw
,以限制CREATE
查询中的数据库或表数量。 #64781 (Xu Jia)。 - 为类似文件的存储(s3/file/hdfs/url/azureBlobStorage)添加了
_time
虚拟列。 #64947 (Ilya Golshtein)。 - 引入了新函数
base64URLEncode
、base64URLDecode
和tryBase64URLDecode
。 #64991 (Mikhail Gorshkov)。 - 添加了新函数
editDistanceUTF8
,它计算两个 UTF8 字符串之间的 编辑距离。 #65269 (LiuNeng)。 - 添加了
http_response_headers
配置,以支持自定义 HTTP 处理程序中的自定义响应标头。 #63562 (Grigorii)。 - 添加了一个新的表函数
loop
,以支持在无限循环中返回查询结果。 #63452 (Sariel)。这对于测试很有用。 - 在
system.query_log
中引入了两个额外的列:used_privileges
和missing_privileges
。used_privileges
填充了在查询执行期间检查的权限,missing_privileges
包含缺少的必需权限。 #64597 (Alexey Katsman)。 - 添加了一个设置
output_format_pretty_display_footer_column_names
,启用后,对于长表(默认 50 行),将在表尾显示列名,行数的阈值由output_format_pretty_display_footer_column_names_min_rows
控制。 #65144 (Shaun Struwig)。
实验性功能
- 引入了“不同值的数量”类型的统计信息。 #59357 (Han Fei)。
- 支持带有 ReplicatedMergeTree 的统计信息。 #64934 (Han Fei)。
- 如果为
Replicated
数据库配置了“副本组”,则自动创建一个包含来自所有组的副本的集群。 #64312 (Alexander Tokmakov)。 - 添加了设置
parallel_replicas_custom_key_range_lower
和parallel_replicas_custom_key_range_upper
,以控制当使用范围过滤器时,动态分片并行副本如何并行化查询。 #64604 (josh-hildred)。
性能提升
- 添加了在插入期间重新洗牌行的能力,以优化大小,而不会违反
PRIMARY KEY
设置的顺序。它由设置optimize_row_order
控制(默认关闭)。 #63578 (Igor Markelov)。 - 添加了一个原生 parquet 读取器,可以直接将 parquet 二进制文件读取到 ClickHouse 列中。它由设置
input_format_parquet_use_native_reader
控制(默认禁用)。 #60361 (ZhiHong Zhang)。 - 当查询过滤器能够从 MergeTree 表中选择精确范围时,支持部分平凡计数优化。 #60463 (Amos Bird)。
- 通过在单个转换中收集多个线程的块,减少多线程
INSERT
的最大内存使用量。 #61047 (Yarik Briukhovetskyi)。 - 通过使用固定内存分配,避免分配额外的缓冲区,从而减少使用 Azure 对象存储时的内存使用量。 #63160 (SmitaRKulkarni)。
- 减少
ColumnNullable::size
中的虚函数调用次数。 #60556 (HappenLee)。 - 当正则表达式参数为单字符时,加速
splitByRegexp
。 #62696 (Robert Schulze)。 - 通过跟踪使用的最小和最大键值,加速 8 位和 16 位键的聚合。这可以减少需要验证的单元格数量。 #62746 (Jiebin Sun)。
- 当左侧为
LowCardinality
,右侧为常量集时,优化运算符 IN。 #64060 (Zhiguo Zhou)。 - 使用线程池来初始化和销毁
ConcurrentHashJoin
内的哈希表。 #64241 (Nikita Taranov)。 - 优化了带有稀疏列的表中的垂直合并。 #64311 (Anton Popov)。
- 在垂直合并期间启用了从远程文件系统预取数据。这提高了数据存储在远程文件系统上的表中的垂直合并的延迟。 #64314 (Anton Popov)。
- 减少
ColumnSparse::filter
的冗余isDefault
调用,以提高性能。 #64426 (Jiebin Sun)。 - 通过发出多个异步 getChildren 请求,加速
find_super_nodes
和find_big_family
keeper-client 命令。 #64628 (Alexander Gololobov)。 - 改进了可为空数字类型参数的函数
least
/greatest
。 #64668 (KevinyhZou)。 - 允许合并查询计划的两个连续过滤步骤。如果过滤器条件可以从父步骤下推,则可以改进过滤器下推优化。 #64760 (Nikolai Kochetov)。
- 移除了垂直 final 实现中的不良优化,并默认重新启用垂直 final 算法。 #64783 (Duc Canh Le)。
- 从过滤器表达式中删除 ALIAS 节点。这稍微提高了带有
PREWHERE
的查询的性能(使用新的分析器)。 #64793 (Nikolai Kochetov)。 - 重新启用了 OpenSSL 会话缓存。 #65111 (Robert Schulze)。
- 添加了设置以禁用插入时物化跳过索引和统计信息 (
materialize_skip_indexes_on_insert
和materialize_statistics_on_insert
)。 #64391 (Anton Popov)。 - 使用分配的内存大小来计算行组大小,并降低单线程模式下 Parquet 写入器的峰值内存使用量。 #64424 (LiuNeng)。
- 改进稀疏列的迭代器,减少
size
的调用次数。 #64497 (Jiebin Sun)。 - 更新条件,以便为备份到 Azure blob storage 使用服务器端复制。 #64518 (SmitaRKulkarni)。
- 优化了具有大量跳过索引的表的垂直合并的内存使用量。 #64580 (Anton Popov)。
改进
- 现在在系统表之上执行
SHOW CREATE TABLE
将显示每个表独有的超级有用的注释,这将解释为什么需要此表。 #63788 (Nikita Mikhaylov)。 - 函数
round()
、roundBankers()
、floor()
、ceil()
和trunc()
的第二个参数(scale)现在可以是非 const 的。 #64798 (Mikhail Gorshkov)。 - 添加新磁盘时,热重载
Distributed
表的存储策略。 #58285 (Duc Canh Le)。 - 避免在饱和服务中调度线程时,MergeTree 索引分析期间可能发生的死锁。 #59427 (Sean Haynes)。
- 修复了 S3 代理支持和隧道传输的几个次要的极端情况。 #63427 (Arthur Passos)。
- 提高 io_uring 重新提交的可见性。重命名 profile event
IOUringSQEsResubmits
->IOUringSQEsResubmitsAsync
并添加一个新的IOUringSQEsResubmitsSync
。 #63699 (Tomer Shafir)。 - 添加了一个新的设置
metadata_keep_free_space_bytes
,用于在元数据存储磁盘上保留可用空间。 #64128 (MikhailBurdukov)。 - 添加指标以跟踪
plain_rewritable
元数据存储创建和删除的目录数量,以及本地到远程内存映射中的条目数量。 #64175 (Julia Kartseva)。 - 查询缓存现在将具有不同设置的相同查询视为不同的查询。这提高了在不同设置(例如
limit
或additional_table_filters
)会影响查询结果的情况下的鲁棒性。 #64205 (Robert Schulze)。 - 支持对象存储中非标准的错误代码
QpsLimitExceeded
作为可重试的错误。 #64225 (Sema Checherinda)。 - 如果表的 ZooKeeper 路径已存在,则禁止将 MergeTree 表转换为 Replicated 表。 #64244 (Kirill)。
- 添加了一个新的设置
input_format_parquet_prefer_block_bytes
来控制平均输出块字节数,并将input_format_parquet_max_block_size
的默认值修改为 65409。 #64427 (LiuNeng)。 - 允许为
no_proxy
环境变量和 ClickHouse 代理配置中指定的主机绕过代理。 #63314 (Arthur Passos)。 - 始终以全局线程池中足够的线程数启动 Keeper。 #64444 (Duc Canh Le)。
- 用户配置中的设置不影响对象存储之上
MergeTree
的合并和 mutations。 #64456 (alesapin)。 - 支持对象存储中非标准的错误代码
TotalQpsLimitExceeded
作为可重试的错误。 #64520 (Sema Checherinda)。 - 更新了开源和 ClickHouse Cloud 版本的 Advanced Dashboard,以包含“最大并发网络连接数”图表。 #64610 (Thom O'Connor)。
- 改进
zeros_mt
和generateRandom
的进度报告。 #64804 (Raúl Marín)。 - 添加了一个异步指标
jemalloc.profile.active
,以显示采样当前是否处于活动状态。这是一个除了 prof.active 之外的激活机制;调用线程进行采样时,两者都必须处于活动状态。 #64842 (Unalian)。 - 移除
allow_experimental_join_condition
作为重要标记。此标记可能阻止混合版本集群中的分布式查询成功执行。 #65008 (Nikita Mikhaylov)。 - 添加了服务器异步指标
DiskGetObjectThrottler*
和DiskGetObjectThrottler*
,反映了使用s3_max_get_rps
和s3_max_put_rps
磁盘设置定义的每秒请求速率限制,以及当前可发送而不会达到磁盘限制的请求数。指标是为每个配置了限制的磁盘定义的。 #65050 (Sergei Trifonov)。 - 初始化
Poco::ThreadPool
的全局跟踪收集器(Keeper 等需要)。 #65239 (Kseniia Sumarokova)。 - 在使用
bcrypt_hash
创建用户时添加验证。 #65242 (Raúl Marín)。 - 为
PREWHERE
期间/之后读取的行数添加 profile events。 #64198 (Nikita Taranov)。 - 在带有并行副本的
EXPLAIN PLAN
中打印查询。 #64298 (vdimir)。 - 将
allow_deprecated_functions
重命名为allow_deprecated_error_prone_window_functions
。 #64358 (Raúl Marín)。 - 在
file
表函数中也遵守文件描述符的max_read_buffer_size
设置。 #64532 (Azat Khuzhin)。 - 即使对于物化视图,也禁用不支持的存储的事务。 #64918 (alesapin)。
- 在新分析器中禁止
QUALIFY
子句。旧分析器忽略QUALIFY
,因此可能导致 mutations 中意外的数据删除。 #65356 (Dmitry Novik)。
Bug Fix(官方稳定版本中用户可见的错误行为)
- 修复了 Apache ORC 库中的一个 bug:修复了在所有平台上写入无符号类型以及 ARM 上的 Int8 时 ORC 统计信息的计算。 #64563 (Michael Kolupaev)。
- 恢复了 ClickHouse 如何工作和解释 CSV 格式元组的行为。此更改有效地还原了 https://github.com/ClickHouse/ClickHouse/pull/60994,并使其仅在以下几个设置下可用:
output_format_csv_serialize_tuple_into_separate_columns
、input_format_csv_deserialize_separate_columns_into_tuple
和input_format_csv_try_infer_strings_from_quoted_tuples
。 #65170 (Nikita Mikhaylov)。 - 修复了一个权限错误,在该错误中,特定情况下的用户可以在默认数据库上提升其权限,而无需必要的授权。 #64769 (pufit)。
- 修复了 UniqInjectiveFunctionsEliminationPass 和 uniqCombined 的崩溃问题。 #65188 (Raúl Marín)。
- 修复了 ClickHouse Keeper 中的一个 bug,该 bug 会导致在关闭会话期间出现摘要不匹配。 #65198 (Aleksei Filatov)。
- 为 Distinct combinator 使用正确的内存对齐方式。以前,当使用 combinator 时,由于无效的内存分配可能会发生崩溃。 #65379 (Antonio Andelic)。
- 修复了
DISTINCT
和窗口函数的崩溃问题。 #64767 (Igor Nikonov)。 - 修复了 'set' 跳过索引不适用于 IN 和 indexHint() 的问题。 #62083 (Michael Kolupaev)。
- 支持在参数化视图值分配期间执行函数。 #63502 (SmitaRKulkarni)。
- 修复了 Parquet 内存跟踪。 #63584 (Michael Kolupaev)。
- 修复了读取
Tuple(Map(LowCardinality(String), String), ...)
类型的列。 #63956 (Anton Popov)。 - 修复了不同类型(表达式和函数)的循环别名的
Cyclic aliases
错误。 #63993 (Nikolai Kochetov)。 - 此修复将为查询管道中每个单独的视图使用具有正确 definer 的适当重新定义的上下文。 #64079 (pufit)。
- 修复分析器:使用 INTERPOLATE 时,“未找到列”错误已修复。 #64096 (Yakov Olkhovskiy)。
- 修复了使用与包含该文件的磁盘不同的凭据创建到 S3 存储桶的备份。 #64153 (Antonio Andelic)。
- 查询缓存现在将针对不同数据库的两个相同查询视为不同的查询。以前的行为可能被用于绕过读取表的缺失权限。 #64199 (Robert Schulze)。
- 修复了 StatusFile 中 ~WriteBufferFromFileDescriptor 中未捕获异常时可能发生的中止。 #64206 (Kruglov Pavel)。
- 修复了带有
ARRAY JOIN
的分布式查询的duplicate alias
错误。 #64226 (Nikolai Kochetov)。 - 修复了从字符串到整数的意外 accurateCast。 #64255 (wudidapaopao)。
- 修复了 CNF 简化,以防任何 OR 组包含互斥的原子。 #64256 (Eduard Karacharov)。
- 修复了查询树大小验证。 #64377 (Dmitry Novik)。
- 修复了带有
PREWHERE
的Buffer
表的Logical error: Bad cast
错误。 #64388 (Nikolai Kochetov)。 - 当
blob_storage_log
存储在对象存储上时,防止递归日志记录。 #64393 (vdimir)。 - 修复了带有默认表达式的表的
CREATE TABLE AS
查询。 #64455 (Anton Popov)。 - 修复了在具有可空键的表上使用 ORDER BY ... NULLS FIRST / LAST 时
optimize_read_in_order
的行为。 #64483 (Eduard Karacharov)。 - 修复了对
GLOBAL IN.
的别名的查询的Expression nodes list expected 1 projection names
和Unknown expression or identifier
错误。 #64517 (Nikolai Kochetov)。 - 修复了
GROUP BY
键中带有常量 CTE 的分布式查询中的Cannot find column
错误。 #64519 (Nikolai Kochetov)。 - 修复了从备份还原因创建具有尚未还原的 definer 的 MV 而被阻止时的崩溃循环。 #64595 (pufit)。
- 修复了当格式化程序生成奇数个字符且最后一个字符为
0
时函数formatDateTimeInJodaSyntax
的输出。例如,SELECT formatDateTimeInJodaSyntax(toDate('2012-05-29'), 'D')
现在正确返回150
,而不是之前的15
。 #64614 (LiuNeng)。 - 如果已使用
-If
combinator,则不要重写聚合。 #64638 (Dmitry Novik)。 - 修复了 float 的类型推断(在小缓冲区的情况下,即
--max_read_buffer_size 1
)。 #64641 (Azat Khuzhin)。 - 修复了可能导致带有表达式的 TTLs 无法正常工作的 bug。 #64694 (alesapin)。
- 修复了删除始终为 true 的
WHERE
和PREWHERE
表达式(对于新分析器)。 #64695 (Nikolai Kochetov)。 - 修复了当按
startsWith
、endsWith
、match
、multiSearchAny
的结果进行过滤时,基于令牌的文本索引(ngrambf
、full_text
)过度消除 part 的问题。 #64720 (Eduard Karacharov)。 - 修复了
UTF8::computeWidth
函数中 ANSI CSI 转义的不正确行为。 #64756 (Shaun Struwig)。 - 修复了跨子查询错误删除
ORDER BY
/LIMIT BY
的情况。 #64766 (Raúl Marín)。 - 修复了(实验性的)不相等连接,其中子查询用于混合连接条件中的集合。 #64775 (lgbo)。
- 修复了
plain_rewritable
磁盘上的本地缓存崩溃问题。 #64778 (Julia Kartseva)。 - Keeper 修复:在
mntr
命令中为zk_latest_snapshot_size
返回正确的值。 #64784 (Antonio Andelic)。 - 修复了通过
Nested
列使用ARRAY JOIN
的分布式查询中的Cannot find column
错误。修复了 #64755。 #64801 (Nikolai Kochetov)。 - 修复了 slru 缓存策略中的内存泄漏。 #64803 (Kseniia Sumarokova)。
- 修复了在几种查询中可能出现的不正确的内存跟踪:从 S3 读取任何数据的查询、通过 http 协议的查询、异步插入。 #64844 (Anton Popov)。
- 修复了当物化视图的列类型与源表不同时,从带有
PREWHERE
的物化视图读取时出现的Block structure mismatch
错误。修复了 #64611。 #64855 (Nikolai Kochetov)。 - 修复了在表具有带有子查询的 TTL + 数据库已复制 + 并行副本 + 分析器的情况下罕见的崩溃。这非常罕见,但请不要将带有子查询的 TTLs 用于生产环境。 #64858 (alesapin)。
- 修复了在删除大批量数据时,
blob_storage_log
中重复Delete
事件的问题。 #64924 (vdimir)。 - 修复了在服务器启动后,当配置包含来自 [Zoo]Keeper 的内容时,可能发生的来自 [Zoo]Keeper 的
Session moved to another server
错误。 #64986 (Alexander Tokmakov)。 - 修复了在 https://github.com/ClickHouse/ClickHouse/pull/54211 中对于参数化 VIEWs 损坏的
ALTER MODIFY COMMENT
查询。 #65031 (Nikolay Degterinsky)。 - 修复了启用
cluster_secure_connection
参数时 DatabaseReplicated 中的host_id
。以前,即使启用了该参数,DatabaseReplicated 创建的集群内的所有连接也不是安全的。 #65054 (Nikolay Degterinsky)。 - 修复了 StorageMerge 的
PREWHERE
优化后出现的Not-ready Set
错误。 #65057 (Nikolai Kochetov)。 - 避免写入类似文件的存储中已完成的缓冲区。 #65063 (Kruglov Pavel)。
- 修复了循环别名情况下可能存在的无限查询持续时间。修复了 #64849。 #65081 (Nikolai Kochetov)。
- 修复了带有
INTERPOLATE (alias)
的远程查询的Unknown expression identifier
错误(新分析器)。修复了 #64636。 #65090 (Nikolai Kochetov)。 - 修复了将算术运算推出聚合的问题。在新分析器中,优化仅应用一次。 #65104 (Dmitry Novik)。
- 修复了新分析器中的聚合函数名称重写。 #65110 (Dmitry Novik)。
- 在从客户端套接字读取(部分)请求正文时发生接收超时的情况下,响应 5xx 而不是 200 OK。 #65118 (Julian Maicher)。
- 修复了对冲请求可能发生的崩溃。 #65206 (Azat Khuzhin)。
- 修复了 Hashed 和 Hashed_Array 字典短路评估中的 bug,该 bug 可能会读取未初始化的数字,从而导致各种错误。 #65256 (jsc0218)。
- 此 PR 确保在 IN 运算符的类型转换过程中始终可以看到常量(IN 运算符的第二个参数)的类型。否则,丢失类型信息可能会导致某些转换失败,例如从 DateTime 到 Date 的转换。这修复了 (#64487)。 #65315 (pn)。
构建/测试/打包改进
- 添加对 LLVM XRay 的支持。 #64592 #64837 (Tomer Shafir)。
- 将 s3/hdfs/azure 存储实现统一到一个使用 IObjectStorage 的类中。*Cluster、数据湖和 Queue 存储也是如此。 #59767 (Kseniia Sumarokova)。
- 重构数据 part 写入器,以消除对 MergeTreeData 和 DataPart 的依赖。 #63620 (Alexander Gololobov)。
- 重构
KeyCondition
和键分析,以改进 PartitionPruner 和简单的计数优化。这与 #60463 分开。 #61459 (Amos Bird)。 - 引入断言以验证所有函数都使用正确大小的列调用。 #63723 (Raúl Marín)。
- 使
network
服务在使用rc
init 脚本启动 ClickHouse 服务器守护程序时成为必需项。 #60650 (Chun-Sheng, Li)。 - 减小一些慢速测试的大小。 #64387 #64452 (Raúl Marín)。
- 使用 keeper-bench 重放 ZooKeeper 日志。 #62481 (Antonio Andelic)。
ClickHouse 版本 24.5,2024-05-30
向后不兼容的更改
- 将“倒排索引”重命名为“全文索引”,这是一个技术性较低/更用户友好的名称。这也更改了内部表元数据,并会破坏带有现有(实验性)倒排索引的表。请务必在升级前删除此类索引,并在升级后重新创建它们。 #62884 (Robert Schulze)。
- 函数
neighbor
、runningAccumulate
、runningDifferenceStartingWithFirstValue
、runningDifference
已弃用(因为它容易出错)。应使用正确的窗口函数来代替。要重新启用它们,请设置allow_deprecated_error_prone_window_functions = 1
或设置compatibility = '24.4'
或更低版本。 #63132 (Nikita Taranov)。 - 如果列数很多,但许多数据库或表未被授予
SHOW TABLES
权限,则从system.columns
查询将更快。请注意,在以前的版本中,如果您向单个列授予SHOW COLUMNS
权限,而未向相应的表授予SHOW TABLES
权限,则system.columns
表将显示这些列,但在新版本中,它将完全跳过该表。删除了减慢查询速度的跟踪日志消息“Access granted”和“Access denied”。 #63439 (Alexey Milovidov)。
新功能
- 添加了
Form
格式,用于在application/x-www-form-urlencoded
格式中读取/写入单个记录。 #60199 (Shaun Struwig)。 - 添加了在 CROSS JOIN 中进行压缩的可能性。 #60459 (p1rattttt)。
- 如果大小超过限制,则添加了在临时文件中执行
CROSS JOIN
的可能性。 #63432 (p1rattttt)。 - 支持使用不等条件进行 join,这些条件涉及左右表中的列。例如
t1.y < t2.y
。要启用此功能,请SET allow_experimental_join_condition = 1
。 #60920 (lgbo)。 - 现在,Map 可以使用
Float32
、Float64
、Array(T)
、Map(K, V)
和Tuple(T1, T2, ...)
作为键。关闭了 #54537。 #59318 (李扬)。 - 通过创建和摄取 SST 文件而不是依赖 rocksdb 内置 memtable,将批量加载引入
EmbeddedRocksDB
。这有助于提高导入速度,特别是对于长时间运行的插入 StorageEmbeddedRocksDB 表的查询。此外,还引入了EmbeddedRocksDB
表设置。 #59163 #63324 (Duc Canh Le)。 - 用户现在可以使用设置
input_format_tsv_crlf_end_of_line
通过 TSV 格式解析 CRLF。关闭了 #56257。 #59747 (Shaun Struwig)。 - 一个新的设置
input_format_force_null_for_omitted_fields
,强制将省略字段的值设置为 NULL。 #60887 (Constantine Peresypkin)。 - 早期我们的 S3 存储和 s3 表函数不支持从归档容器文件(如 tarball、zip、7z)中选择数据。现在它们允许遍历 S3 中归档文件内部的文件。 #62259 (Daniil Ivanik)。
- 支持条件函数
clamp
。 #62377 (skyoct)。 - 添加
NPy
输出格式。 #62430 (豪肥肥)。 Raw
格式作为TSVRaw
的同义词。 #63394 (Unalian)。- 添加了一个新的 SQL 函数
generateUUIDv7
,用于生成版本 7 UUID,也称为基于时间戳的 UUID,带有随机组件。还添加了一个新函数UUIDToNum
,用于从 UUID 中提取字节,以及一个新的函数UUIDv7ToDateTime
,用于从 UUID 版本 7 中提取时间戳组件。 #62852 (Alexey Petrunyaka)。 - 在 Linux 和 MacOS 上,如果程序的 stdout 重定向到带有压缩扩展名的文件,则使用相应的压缩方法而不是不压缩(使其行为类似于
INTO OUTFILE
)。 #63662 (v01dXYZ)。 - 更改关于附加表数量过多的警告,以区分表、视图和字典。 #64180 (Francisco J. Jurado Moreno)。
- 在 ClickHouse 服务器中为
azureBlobStorage
函数提供支持,以使用 Azure 工作负载标识向 Azure Blob 存储进行身份验证。如果在配置中设置了use_workload_identity
参数,则使用 工作负载标识 进行身份验证。 #57881 (Vinay Suryadevara)。 - 在
system.parts_columns
表中添加 TTL 信息。 #63200 (litlig)。
实验性功能
- 实现了
Dynamic
数据类型,允许在其中存储任何类型的值,而无需预先知道所有类型。Dynamic
类型在设置allow_experimental_dynamic_type
下可用。参考:#54864。 #63058 (Kruglov Pavel)。 - 允许创建
MaterializedMySQL
数据库,而无需连接到 MySQL。 #63397 (Kirill)。 - 如果某些 DDL 任务连续失败超过
max_retries_before_automatic_recovery
次(默认为 100 次),并且出现相同的错误,则自动将 Replicated 数据库的副本标记为丢失并开始恢复。此外,修复了一个错误,该错误可能导致在条目执行的早期阶段抛出异常时跳过 DDL 条目。 #63549 (Alexander Tokmakov)。 - 在
StorageS3Queue
的s3queue_tracked_file_ttl_sec
和s3queue_traked_files_limit
中统计失败的文件。 #63638 (Kseniia Sumarokova)。
性能改进
- 减少文件系统缓存中的争用(第 4 部分)。允许通过在后台执行额外的驱逐(由
keep_free_space_size(elements)_ratio
控制)来保持文件系统缓存未满。这允许释放来自查询的空间预留压力(在tryReserve
方法上)。此外,这是以尽可能无锁的方式完成的,例如,不应阻止正常的缓存使用。 #61250 (Kseniia Sumarokova)。 - 在
INSERT
期间跳过合并新创建的 projection 块。 #59405 (Nikita Taranov)。 - 如果输入字符串都是 ascii 字符,则“asciily”处理字符串函数
...UTF8
。灵感来自 https://github.com/apache/doris/pull/29799。整体速度提升 1.07 倍~1.62 倍。请注意,在某些情况下,峰值内存使用量已减少。 #61632 (李扬)。 - 改进了 StorageS3 中选择 (
{}
) glob 的性能。 #62120 (Andrey Zvonov)。 - HostResolver 为每个 IP 地址记录多次。如果远程主机有多个 IP,并且由于某些原因(例如防火墙规则),允许访问某些 IP,而禁止访问其他 IP,则只有第一个被禁止的 IP 记录被标记为失败,并且在每次尝试中,这些 IP 都有机会被选中(并再次失败)。即使修复此问题,每 120 秒 DNS 缓存也会被删除,并且 IP 可能会再次被选中。 #62652 (Anton Ivashkin)。
- 添加了一个新的配置
prefer_merge_sort_block_bytes
,用于控制内存使用量,并在合并时列数很多的情况下将排序速度提高 2 倍。 #62904 (LiuNeng)。 clickhouse-local
将启动更快。在以前的版本中,它错误地没有删除临时目录。现在它会删除了。这关闭了 #62941。 #63074 (Alexey Milovidov)。- 针对新分析器的微优化。 #63429 (Raúl Marín)。
- 如果将
DateTime
与DateTime64
进行比较,索引分析将起作用。这关闭了 #63441。 #63443 #63532 (Alexey Milovidov)。 - 通过删除垃圾数据,稍微加快了
set
类型索引的速度(大约 1.5 倍)。 #64098 (Alexey Milovidov)。 - 在写入文件系统缓存时,删除数据复制操作。 #63401 (Kseniia Sumarokova)。
- 现在,使用 Azure Blob 存储的备份将使用 multicopy。 #64116 (alesapin)。
- 允许即使容器不同,也对 Azure 使用 native copy。 #64154 (alesapin)。
- 最终为 Azure 启用 native copy。 #64182 (alesapin)。
改进
- 允许使用
clickhouse-local
及其快捷方式clickhouse
和ch
,并将查询或查询文件作为位置参数。示例:ch "SELECT 1"
,ch --param_test Hello "SELECT {test:String}"
,ch query.sql
。这关闭了 #62361。 #63081 (Alexey Milovidov)。 - 为本地和 Azure (azure_blob_storage) 对象存储启用 plain_rewritable 元数据。 #63365 (Julia Kartseva)。
- 支持英文样式的 Unicode 引号,例如 “Hello”、“world”。这在一般情况下值得怀疑,但在文字处理器(如 Google 文档)中键入查询时很有帮助。这关闭了 #58634。 #63381 (Alexey Milovidov)。
- 允许在 INSERT 查询的列列表中使用尾随逗号。例如:
INSERT INTO test (a, b, c, ) VALUES ...
。 #63803 (Alexey Milovidov)。 - 为
Regexp
格式提供更好的异常消息。 #63804 (Alexey Milovidov)。 - 允许在
Values
格式中使用尾随逗号。例如,允许以下查询:INSERT INTO test (a, b, c) VALUES (4, 5, 6,);
。 #63810 (Alexey Milovidov)。 - 使 rabbitmq nack 损坏的消息。关闭了 #45350。 #60312 (Kseniia Sumarokova)。
- 修复了在解释调试信息时,异步堆栈展开(例如在使用采样查询分析器时)中的崩溃。这关闭了 #60460。 #60468 (Alexey Milovidov)。
- 针对 s3 错误 'no key',为磁盘和存储情况提供不同的消息。 #61108 (Sema Checherinda)。
- 进度条将适用于来自
system.zeros
、system.zeros_mt
的带有 LIMIT 的简单查询(它已经适用于system.numbers
和system.numbers_mt
)以及generateRandom
表函数。作为奖励,如果记录总数大于max_rows_to_read
限制,它将更早地抛出异常。这关闭了 #58183。 #61823 (Alexey Milovidov)。 - 支持 YAML 配置中的“Merge Key”(这是 YAML 的一个奇怪功能,请忽略)。 #62685 (Azat Khuzhin)。
- 当非确定性函数与 Replicated 源一起使用时,增强错误消息。 #62896 (Grégoire Pineau)。
- 修复来自
remote
的 Distributed over Distributed 的 interserver secret。 #63013 (Azat Khuzhin)。 - 支持 YAML 文件的
include_from
。但是,您最好使用config.d
#63106 (Eduard Karacharov)。 - 从 skim 建议中选择后,在终端中保留先前的数据。 #63261 (FlameFactory)。
- 字段的宽度(在 Pretty 格式或
visibleWidth
函数中)现在正确地忽略 ANSI 转义序列。 #63270 (Shaun Struwig)。 - 在适当的时候,通过更准确的错误代码来更新错误代码
NUMBER_OF_ARGUMENTS_DOESNT_MATCH
的使用。 #63406 (Yohann Jardin)。 os_user
和client_hostname
现在为 clickhouse-client 中用于命令行建议的查询正确设置。这关闭了 #63430。 #63433 (Alexey Milovidov)。- 如果
max_block_size
为零,则自动将其更正为默认值。 #63587 (Antonio Andelic)。 - 向 trace_log 添加 build_id ALIAS 列,以便在检测到二进制文件更改时自动重命名。这是为了解决 #52086。 #63656 (Zimu Li)。
- 为对象存储磁盘启用 truncate 操作。 #63693 (MikhailBurdukov)。
- 关键字列表的加载现在取决于服务器修订版本,并且对于旧版本的 ClickHouse 服务器将被禁用。抄送 @azat。 #63786 (Nikita Mikhaylov)。
- Clickhouse 磁盘必须读取服务器设置才能获得实际的元数据格式版本。 #63831 (Sema Checherinda)。
- 当 stdout 不是 TTY 时,禁用 pretty 格式限制(
output_format_pretty_max_rows
/output_format_pretty_max_value_width
)。 #63942 (Azat Khuzhin)。 - 当 ClickHouse 在 AWS Lambda 内部使用时,异常处理现在可以工作。作者:Alexey Coolnev。 #64014 (Alexey Milovidov)。
- 对于通过 HTTP 传递的无效压缩数据,抛出
CANNOT_DECOMPRESS
而不是CORRUPTED_DATA
。 #64036 (vdimir)。 - Pretty 格式中单个大数字的提示现在适用于 Nullable 和 LowCardinality。这关闭了 #61993。 #64084 (Alexey Milovidov)。
- 在零件索引过滤周围添加指标、日志和线程名称。 #64130 (Alexey Milovidov)。
- 在
ATTACH
上忽略allow_suspicious_primary_key
,并在ALTER
上进行验证。 #64202 (Azat Khuzhin)。
构建/测试/打包改进
- ClickHouse 是使用 clang-18 构建的。已启用 clang-tidy-18 中的许多新检查。 #60469 (Alexey Milovidov)。
- 实验性地支持 loongarch64 作为 ClickHouse 的新平台。 #63733 (qiangxuhui)。
- Dockerfile 已由 docker 官方库在 https://github.com/docker-library/official-images/pull/15846 中审核。 #63400 (Mikhail f. Shiryaev)。
- 有关每个翻译单元中每个符号的信息将在 CI 数据库中为 CI 中的每个构建收集。这关闭了 #63494。 #63495 (Alexey Milovidov)。
- 更新 Apache Datasketches 库。它解决了 #63858。 #63923 (Alexey Milovidov)。
- 在交叉编译二进制文件时,为 aarch64 linux 启用 GRPC 支持。 #64072 (alesapin)。
- 修复 aarch64 上 SIGSEGV 的 unwind 问题(由于信号堆栈过小)。 #64058 (Azat Khuzhin)。
Bug 修复
- 默认禁用
enable_vertical_final
设置。此功能不应使用,因为它存在 bug:#64543。 #64544 (Alexander Tokmakov)。 - 修复了使用多个分片时进行备份的问题。 #57684 (Vitaly Baranov)。
- 修复了从 CREATE 查询的列列表中将 projections/indexes/primary key 传递到 MV 的内部表的问题。 #59183 (Azat Khuzhin)。
- 修复了 boundRatio 不正确的合并问题。 #60532 (Tao Wang)。
- 修复了在 const low-cardinality 列上调用某些函数时发生的崩溃。 #61966 (Michael Kolupaev)。
- 修复了当表不使用自适应粒度时,带有 FINAL 的查询给出错误结果的问题。 #62432 (Duc Canh Le)。
- 改进了 cgroups v2 对内存控制器支持的检测。 #62903 (Robert Schulze)。
- 修复了客户端中外部表的后续使用问题。 #62964 (Azat Khuzhin)。
- 修复了 untuple 和未解析 lambda 导致的崩溃。 #63131 (Raúl Marín)。
- 修复了服务器过早监听连接的问题。 #63181 (alesapin)。
- 修复了在 DROP PART 命令后重新启动时,parts 交叉的问题。 #63202 (Han Fei)。
- 在启动期间正确加载 SQL 安全默认设置。 #63209 (pufit)。
- JOIN 过滤器下推过滤器 join 修复。 #63234 (Maksim Kita)。
- 修复了 AzureObjectStorage::listObjects 中的无限循环。 #63257 (Julia Kartseva)。
- CROSS join 忽略 join_algorithm 设置。 #63273 (vdimir)。
- 修复了 finalize WriteBufferToFileSegment 和 StatusFile。 #63346 (vdimir)。
- 修复了在极少数情况下,ALTER 之后 SELECT 查询期间的逻辑错误。 #63353 (alesapin)。
- 修复了带有
session_timezone
的X-ClickHouse-Timezone
标头。 #63377 (Andrey Zvonov)。 - 修复了在使用 WITH ROLLUP 和 LowCardinality 类型进行分组时出现的调试断言。 #63398 (Raúl Marín)。
- group_by_use_nulls 的小修复。 #63405 (vdimir)。
- 修复了在 projection 从表元数据中删除但 part 仍具有 projection 的情况下,projection part 的备份/恢复问题。 #63426 (Kseniia Sumarokova)。
- 修复了 mysql 字典源。 #63481 (vdimir)。
- 在没有数据的情况下,在 AsyncInsertFlush 上插入 QueryFinish。 #63483 (Raúl Marín)。
- 修复:system.query_log 中 used_dictionaries 为空。 #63487 (Eduard Karacharov)。
- 使
MergeTreePrefetchedReadPool
更安全。 #63513 (Antonio Andelic)。 - 修复了启用 sentry 时退出时发生的崩溃(由于 openssl 在 sentry 之前被销毁)。 #63548 (Azat Khuzhin)。
- 修复 Array 和 Map 支持以及 Keyed hashing #63628 (Salvatore Mesoraca)。
- 修复 Parquet 的过滤器下推,可能也修复了 StorageMerge 的过滤器下推 #63642 (Michael Kolupaev)。
- 防止在 zookeeper 路径已存在时转换为 Replicated 引擎 #63670 (Kirill)。
- Analyzer: 视图仅读取必要的列 #63688 (Maksim Kita)。
- Analyzer: 禁止 WINDOW 重定义 #63694 (Dmitry Novik)。
- flatten_nested 在实验性的 Replicated 数据库中被破坏了。 #63695 (Nikolai Kochetov)。
- 修复 #63653 #63722 (Nikolai Kochetov)。
- 允许从 Array(Nothing) 转换为 Map(Nothing, Nothing) #63753 (Nikolai Kochetov)。
- 修复 partial_merge join 中的 ILLEGAL_COLUMN 错误 #63755 (vdimir)。
- 修复:移除窗口函数中多余的 distinct #63776 (Igor Nikonov)。
- 修复 SYSTEM UNLOAD PRIMARY KEY 可能导致的崩溃 #63778 (Raúl Marín)。
- 修复具有重复循环别名的查询。 #63791 (Nikolai Kochetov)。
- 使
TokenIterator
像其应该的那样懒加载 #63801 (Alexey Milovidov)。 - 添加
endpoint_subpath
S3 URI 设置 #63806 (Julia Kartseva)。 - 修复
ParallelReadBuffer
中的死锁 #63814 (Antonio Andelic)。 - JOIN 过滤器下推等效列修复 #63819 (Maksim Kita)。
- 在使用 Lazy 数据库的 DROP 操作后,从所有磁盘中删除数据。 #63848 (MikhailBurdukov)。
- 修复使用并行副本和新分析器从 MV 读取数据时结果不正确的问题 #63861 (Nikita Taranov)。
- 修复 keeper-client 的
find_super_nodes
和find_big_family
命令 #63862 (Alexander Gololobov)。 - 更新 lambda 执行名称 #63864 (Nikolai Kochetov)。
- 修复 CPU/Real profiler 导致的 SIGSEGV #63865 (Azat Khuzhin)。
- 修复
EXPLAIN CURRENT TRANSACTION
查询 #63926 (Anton Popov)。 - 修复分析器:存在无限递归... #63930 (Yakov Olkhovskiy)。
- 允许
plain_rewritable
磁盘的某些 ALTER TABLE 命令 #63933 (Julia Kartseva)。 - 递归 CTE 分布式修复 #63939 (Maksim Kita)。
- Analyzer: 修复 COLUMNS 解析 #63962 (Dmitry Novik)。
- LIMIT BY 和 skip_unused_shards 与分析器一起使用 #63983 (Nikolai Kochetov)。
- 一些垃圾代码的修复(实验性的 Kusto) #63992 (Yong Wang)。
- 以更安全的方式反序列化不受信任的二进制输入 #64024 (Robert Schulze)。
- 修复对于非 MergeTree 系列表的 Distributed 表,当设置
final
= 1 时的查询分析问题。 #64037 (Nikolai Kochetov)。 - 为 recoverLostReplica 添加缺失的设置 #64040 (Raúl Marín)。
- 修复使用分析器的 SQL 安全访问检查 #64079 (pufit)。
- 修复分析器:DAG 应该只使用插值表达式 #64096 (Yakov Olkhovskiy)。
- 修复 azure 备份以 1 MiB (读取缓冲区大小) 而不是
max_upload_part_size
(在非原生复制情况下) 写入 multipart blocks 的问题 #64117 (Kseniia Sumarokova)。 - 在备份复制期间正确回退 #64153 (Antonio Andelic)。
- 防止 CREATE TABLE as Materialized View 时出现 LOGICAL_ERROR #64174 (Raúl Marín)。
- 查询缓存:将针对不同数据库的相同查询视为不同查询 #64199 (Robert Schulze)。
- 忽略 Keeper 的
text_log
#64218 (Antonio Andelic)。 - 修复 Buffer 表使用 prewhere 时的逻辑错误:Bad cast。 #64388 (Nikolai Kochetov)。
ClickHouse 24.4 版本,2024-04-30
升级说明
clickhouse-odbc-bridge
和clickhouse-library-bridge
现在是单独的软件包。 这关闭了 #61677。 #62114 (Alexey Milovidov)。- 不允许将 max_parallel_replicas (用于实验性的从副本并行读取) 设置为
0
,因为这没有意义。 关闭了 #60140。 #61201 (Kruglov Pavel)。 - 移除对
INSERT WATCH
查询(已弃用的LIVE VIEW
功能的一部分)的支持。 #62382 (Alexey Milovidov)。 - 移除了
optimize_monotonous_functions_in_order_by
设置。 #63004 (Raúl Marín)。 - 从
Replicated
数据库引擎中移除实验性标签。 现在它处于 Beta 阶段。 #62937 (Justin de Guzman)。
新功能
- 支持递归 CTE。 #62074 (Maksim Kita)。
- 支持
QUALIFY
子句。 关闭了 #47819。 #62619 (Maksim Kita)。 - 表引擎现在是可授权的,并且不会影响现有用户的行为。 #60117 (jsc0218)。
- 添加了一个可重写的 S3 磁盘,该磁盘支持 INSERT 操作,并且不需要本地存储的元数据。 #61116 (Julia Kartseva)。 主要用例是用于系统表。
- 在客户端输入时的语法高亮将工作在语法级别(之前,它工作在词法分析器级别)。 #62123 (Alexey Milovidov)。
- 支持同时删除多个表,例如
DROP TABLE a, b, c
;。 #58705 (zhongyuankai)。 - 现在支持通过
ALTER MODIFY SETTING
修改内存表设置。 示例:ALTER TABLE memory MODIFY SETTING min_rows_to_keep = 100, max_rows_to_keep = 1000;
。 #62039 (zhongyuankai)。 - 为 HTTP 接口添加了
role
查询参数。 它的工作方式类似于SET ROLE x
,在语句执行之前应用角色。 这允许克服 HTTP 接口的限制,因为不允许使用多个语句,并且不可能同时发送SET ROLE x
和语句本身。 可以通过这种方式设置多个角色,例如,?role=x&role=y
,这将等效于SET ROLE x, y
。 #62669 (Serge Klochkov)。 - 添加
SYSTEM UNLOAD PRIMARY KEY
以释放表的 primary key 的内存使用。 #62738 (Pablo Marcos)。 - 向
system.text_log
添加了value1
,value2
, ...,value10
列。 这些列包含用于格式化消息的值。 #59619 (Alexey Katsman)。 - 添加了持久虚拟列
_block_offset
,它存储在插入时分配的块中的原始行号。 可以通过 MergeTree 设置enable_block_offset_column
启用_block_offset
列的持久性。 添加了虚拟列_part_data_version
,它包含最小块号或 part 的 mutation 版本。 持久虚拟列_block_number
不再被认为是实验性的。 #60676 (Anton Popov)。 - 添加了一个设置
input_format_json_throw_on_bad_escape_sequence
,禁用它可以允许在 JSON 输入格式中保存错误的转义序列。 #61889 (Kruglov Pavel)。
性能提升
- 使用等效集合改进了 JOIN 过滤器下推。 #61216 (Maksim Kita)。
- 如果 JOIN 之后的过滤器始终过滤默认值,则将 OUTER JOIN 转换为 INNER JOIN 的优化。 可以使用设置
query_plan_convert_outer_join_to_inner_join
控制优化,默认启用。 #62907 (Maksim Kita)。 - AWS S3 的改进。 客户端必须向服务器发送标头 'Keep-Alive: timeout=X'。 如果客户端收到来自服务器的带有该标头的响应,则客户端必须使用来自服务器的值。 此外,对于客户端来说,最好不要使用即将过期的连接,以避免连接关闭竞争。 #62249 (Sema Checherinda)。
- 减少 SELECT 的 mutations 开销 (v2)。 #60856 (Azat Khuzhin)。
- PODArray 中更频繁调用的函数现在被强制内联。 #61144 (李扬)。
- 通过在读取所有必需的列时跳过对象的其余部分来加速 JSON 解析。 #62210 (lgbo)。
- 改进从 file/s3/hdfs/url/... 表函数中的文件进行简单 insert select 操作。 添加单独的 max_parsing_threads 设置以控制并行解析中使用的线程数。 #62404 (Kruglov Pavel)。
- 函数
to_utc_timestamp
和from_utc_timestamp
现在速度快了约 2 倍。 #62583 (KevinyhZou)。 - 当输入主要包含不可解析的值时,函数
parseDateTimeOrNull
,parseDateTimeOrZero
,parseDateTimeInJodaSyntaxOrNull
和parseDateTimeInJodaSyntaxOrZero
现在运行速度显着加快 (10 倍 - 1000 倍)。 #62634 (LiuNeng)。 - 当查询缓存包含大量条目(例如超过 100,000)时,针对
system.query_cache
的 SELECT 查询现在明显更快。 #62671 (Robert Schulze)。 - 文件系统缓存中减少争用 (第 3 部分):执行从文件系统中删除操作,而无需锁定空间预留尝试。 #61163 (Kseniia Sumarokova)。
- 加速文件系统缓存的动态调整大小。 #61723 (Kseniia Sumarokova)。
- 具有
INVALIDATE_QUERY
的字典源不会在启动时重新加载两次。 #62050 (vdimir)。 - 修复了一个问题,当在涉及 primary key 的布尔表达式后添加多余的
= 1
或= 0
时,primary index 未被使用。 例如,SELECT * FROM <table> WHERE <primary-key> IN (<value>) = 1
和SELECT * FROM <table> WHERE <primary-key> NOT IN (<value>) = 0
都会执行全表扫描,而 primary index 可以被使用。 #62142 (josh-hildred)。 - 从
system.remote_data_paths
返回 chunk 流,而不是将整个结果累积到一个大的 chunk 中。 这允许消耗更少的内存,显示中间进度并取消查询。 #62613 (Alexander Gololobov)。
实验性功能
- 支持 Azure Blob Storage 的并行写入缓冲区,可通过设置
azure_allow_parallel_part_upload
管理。 #62534 (SmitaRKulkarni)。 - 用户空间页面缓存现在可以与静态 web 存储 (
disk(type = web)
) 一起使用。 使用客户端设置use_page_cache_for_disks_without_file_cache=1
启用。 #61911 (Michael Kolupaev)。 - 不要将 Bool 和数字变体视为
Variant
类型中的可疑类型。 #61999 (Kruglov Pavel)。 - 实现从 String 到
Variant
的更好转换,使用解析方式。 #62005 (Kruglov Pavel)。 - 支持 JSONExtract 函数中的
Variant
类型。 #62014 (Kruglov Pavel)。 - 将
Variant
类型标记为可比较的,以便可以在 primary key 中使用它。 #62693 (Kruglov Pavel)。
改进
- 为了方便起见,
SELECT * FROM numbers()
的工作方式将与SELECT * FROM system.numbers
相同 - 没有限制。 #61969 (YenchangChan)。 - 为 Kafka 配置引入单独的 consumer/producer 标签。 这避免了来自 librdkafka (一个有很多 bug 的糟糕的 C 库) 的警告,即为 producer 实例指定了 consumer 属性,反之亦然 (例如
Configuration property session.timeout.ms is a consumer property and will be ignored by this producer instance
)。 关闭了: #58983。 #58956 (Aleksandr Musorin)。 - 函数
date_diff
和age
现在以纳秒而不是微秒精度计算结果。 它们现在还提供nanosecond
(或nanoseconds
或ns
) 作为unit
参数的可能值。 #61409 (Austin Kothig)。 - 为
date_trunc
添加了纳秒、微秒、毫秒单位。 #62335 (Misz606)。 - 在证书重新加载期间重新加载证书链。 #61671 (Pervakov Grigorii)。
- 尝试通过在副本路径存在活动副本时不允许附加表来防止错误 #60432。 #61876 (Arthur Passos)。
- 实现对
clickhouse-local
的input
的支持。 #61923 (Azat Khuzhin)。 - 具有严格模式
ANY
的Join
表引擎在重新加载后是一致的。 当插入多个具有相同键的行时,第一个行将具有更高的优先级(之前,在表加载时是随机选择的)。 关闭 #51027。 #61972 (vdimir)。 - 从 Apache Arrow schema 自动推断 Nullable 列类型。 #61984 (Maksim Kita)。
- 允许取消聚合期间聚合状态的并行合并。 示例:
uniqExact
。 #61992 (Maksim Kita)。 - 使用
system.keywords
填充建议,并在内部所有地方使用它们。 #62000 (Nikita Mikhaylov)。 ReplicatedMergeTree
的OPTIMIZE FINAL
现在将等待当前活动的合并完成,然后重新尝试调度最终合并。 这将使其更符合普通的MergeTree
行为。 #62067 (Nikita Taranov)。- 当从 hive 文本文件读取数据时,它将使用 hive 文本文件的第一行来调整输入字段的数量,有时第一行的字段数与定义的 hive 表不匹配,例如 hive 表被定义为具有 3 列,如
test_tbl(a Int32, b Int32, c Int32)
,但文本文件的第一行只有 2 个字段,在这种情况下,输入字段将被调整为 2,如果文本文件的下一行有 3 个字段,则第三个字段将无法读取,但设置为默认值 0,这是不正确的。 #62086 (KevinyhZou)。 CREATE AS
复制表的注释。 #62117 (Pablo Marcos)。- 向表 zookeeper 添加查询进度。 #62152 (JackyWoo)。
- 添加了在服务器范围内启用 trace collector (Real 和 CPU) 的能力。 #62189 (alesapin)。
- 添加了设置
lightweight_deletes_sync
(默认值:2 - 同步等待所有副本)。 它类似于设置mutations_sync
,但仅影响 lightweight deletes 的行为。 #62195 (Anton Popov)。 - 在解析自定义设置的值时区分布尔值和整数:
SET custom_a = true; SET custom_b = 1;
。 #62206 (Vitaly Baranov)。 - 支持通过 AWS Private Link Interface endpoints 进行 S3 访问。 关闭了 #60021, #31074 和 #53761。 #62208 (Arthur Passos)。
- 如果目录不存在,则不要在 clickhouse-client 中为 UDF 创建目录。 这关闭了 #59597。 #62366 (Alexey Milovidov)。
- 查询缓存现在不再缓存针对系统表的查询结果 (
system.*
,information_schema.*
,INFORMATION_SCHEMA.*
)。 #62376 (Robert Schulze)。 MOVE PARTITION TO TABLE
查询可能会被延迟,或者可能抛出TOO_MANY_PARTS
异常,以避免超出 part 数量的限制。 与INSERT
查询应用相同的设置和限制(请参阅max_parts_in_total
,parts_to_delay_insert
,parts_to_throw_insert
,inactive_parts_to_throw_insert
,inactive_parts_to_delay_insert
,max_avg_part_size_for_too_many_parts
,min_delay_to_insert_ms
和max_delay_to_insert
设置)。 #62420 (Sergei Trifonov)。- 将 macOS 上的默认安装目录从
/usr/bin
更改为/usr/local/bin
。 这是必要的,因为 Apple 的 System Integrity Protection 在 macOS El Capitan (2015) 中引入,阻止写入/usr/bin
,即使使用sudo
也是如此。 #62489 (haohang)。 - 使 transform 始终返回第一个匹配项。 #62518 (Raúl Marín)。
- 向系统表
blob_storage_log
添加了缺失的hostname
列。 #62456 (Jayme Bird)。 - 为了与其他系统表保持一致,
system.backup_log
现在具有列event_time
。 #62541 (Jayme Bird)。 - 表
system.backup_log
现在具有 "default" 排序键,即event_date, event_time
,与其他_log
表引擎相同。 #62667 (Nikita Mikhaylov)。 - 在执行
RESTORE
时避免评估表 DEFAULT 表达式。 #62601 (Vitaly Baranov)。 - S3 存储和备份也需要与 s3 磁盘相同的默认 keep alive 设置。 #62648 (Sema Checherinda)。
- 将 librdkafka (那个臭名昭著的 C 库,有很多 bug) 的客户端标识符添加到日志消息中,以便能够区分来自单个表的不同消费者的日志消息。 #62813 (János Benjamin Antal)。
- 允许在 Replicated 数据库 ZooKeeper 路径中使用特殊宏
{uuid}
和{database}
。 #62818 (Vitaly Baranov)。 - 允许 HTTP 请求中使用具有不同身份验证方案的 quota key。 #62842 (Kseniia Sumarokova)。
- 减少
clickhouse client
和clickhouse local
中命令行参数--help
的详细程度。 之前的输出现在由--help --verbose
生成。 #62973 (Yarik Briukhovetskyi)。 log_bin_use_v1_row_events
已在 MySQL 8.3 中移除,我们为实验性的MaterializedMySQL
引擎对此进行了调整 #60479。 #63101 (Eugene Klimov)。 作者:Nikolay Yankin。
构建/测试/打包改进
- Vendor in Rust 依赖项,以便 Rust 代码(我们将其用于 hype 和 lulz 的次要功能)可以以一种理智的方式构建,类似于 C++。 #62297 (Raúl Marín)。
- ClickHouse 现在使用 OpenSSL 3.2 而不是 BoringSSL。 #59870 (Robert Schulze)。 请注意,OpenSSL 通常具有较差的工程文化(例如,非零数量的 sanitizer 报告,我们不得不进行修补,带有生成文件的复杂构建系统等),但具有更好的兼容性。
- 在压力测试中以 1/2 的概率忽略 DROP 查询,在 Memory/JOIN 表的升级检查中使用 TRUNCATE 而不是忽略 DROP。 #61476 (Kruglov Pavel)。
- 从 Keeper Docker 镜像中删除 /etc/clickhouse-keeper 和 /var/log/clickhouse-keeper 的卷。 #61683 (Tristan)。
- 添加针对所有不再与默认启用的分析器相关的问题的测试。 关闭:#55794 关闭:#49472 关闭:#44414 关闭:#13843 关闭:#55803 关闭:#48308 关闭:#45535 关闭:#44365 关闭:#44153 关闭:#42399 关闭:#27115 关闭:#23162 关闭:#15395 关闭:#15411 关闭:#14978 关闭:#17319 关闭:#11813 关闭:#13210 关闭:#23053 关闭:#37729 关闭:#32639 关闭:#9954 关闭:#41964 关闭:#54317 关闭:#7520 关闭:#36973 关闭:#40955 关闭:#19687 关闭:#23104 关闭:#21584 关闭:#23344 关闭:#22627 关闭:#10276 关闭:#19687 关闭:#4567 关闭:#17710 关闭:#11068 关闭:#24395 关闭:#23416 关闭:#23162 关闭:#25655 关闭:#11757 关闭:#6571 关闭:#4432 关闭:#8259 关闭:#9233 关闭:#14699 关闭:#27068 关闭:#28687 关闭:#28777 关闭:#29734 关闭:#61238 关闭:#33825 关闭:#35608 关闭:#29838 关闭:#35652 关闭:#36189 关闭:#39634 关闭:#47432 关闭:#54910 关闭:#57321 关闭:#59154 关闭:#61014 关闭:#61950 关闭:#55647 关闭:#61947。 #62185 (Nikita Mikhaylov)。
- 从分析器不再相关或已修复的问题中添加更多测试。 关闭:#58985 关闭:#59549 关闭:#36963 关闭:#39453 关闭:#56521 关闭:#47552 关闭:#56503 关闭:#59101 关闭:#50271 关闭:#54954 关闭:#56466 关闭:#11000 关闭:#10894 关闭:https://github.com/ClickHouse/ClickHouse/issues/448 关闭:#8030 关闭:#32139 关闭:#47288 关闭:#50705 关闭:#54511 关闭:#55466 关闭:#58500 关闭:#39923 关闭:#39855 关闭:#4596 关闭:#47422 关闭:#33000 关闭:#14739 关闭:#44039 关闭:#8547 关闭:#22923 关闭:#23865 关闭:#29748 关闭:#4222。 #62457 (Nikita Mikhaylov)。
- 修复了动态链接 OpenSSL 时的构建错误(注意:这通常不受支持,仅 IBM 的 s390x 平台需要)。 #62888 (Harry Lee)。
Bug 修复(官方稳定版本中用户可见的错误行为)
- 修复撤销仲裁插入事务时的逻辑错误。 #61953 (Han Fei)。
- 修复使用带有 FILTER 子句的 COUNT(*) 时的解析器错误 #61357 (Duc Canh Le)。
- 修复
group_by_use_nulls
+ grouping sets + 分析器 + materialize/constant 中的逻辑错误 #61567 (Kruglov Pavel)。 - 在删除已移动的 parts 之前取消 merges #61610 (János Benjamin Antal)。
- 修复 Apache Arrow 中的中止问题 #61720 (Kruglov Pavel)。
- 在与特定磁盘对应的正确路径中搜索
convert_to_replicated
标志 #61769 (Kirill)。 - 修复 distributed_foreground_insert/distributed_background_insert_batch 可能存在的连接数据竞争问题 #61867 (Azat Khuzhin)。
- 将 CANNOT_PARSE_ESCAPE_SEQUENCE 错误标记为解析错误,以便能够在行输入格式中跳过它 #61883 (Kruglov Pavel)。
- 修复在使用 http_wait_end_of_query 时在 HTTP 输出格式中写入异常消息的问题 #61951 (Kruglov Pavel)。
- 正确修复 LowCardinality 与 JSONExtact 函数一起使用的问题 #61957 (Nikita Mikhaylov)。
- 如果行策略没有表达式,则在 Engine Merge 中发生崩溃 #61971 (Ilya Golshtein)。
- 修复 WriteBufferAzureBlobStorage 析构函数未捕获异常的问题 #61988 (SmitaRKulkarni)。
- 修复为 ReplicatedMergeTree 创建没有列定义的表的问题 #62040 (Azat Khuzhin)。
- 修复复合分片键的 optimize_skip_unused_shards_rewrite_in 问题 #62047 (Azat Khuzhin)。
- ReadWriteBufferFromHTTP 在重定向时设置正确的 header host #62068 (Sema Checherinda)。
- 修复外部表无法解析 Bool 数据类型的问题 #62115 (Duc Canh Le)。
- 分析器:修复查询参数解析问题 #62186 (Dmitry Novik)。
- 修复只读模式下恢复 parts 的问题 #62207 (Vitaly Baranov)。
- 修复包含 SQL UDF 的索引定义中的崩溃问题 #62225 (vdimir)。
- 修复使用分析器时 generateRandom 的 NULL 随机种子问题。 #62248 (Nikolai Kochetov)。
- 正确处理 Distinct Transfom 中的常量列 #62250 (Antonio Andelic)。
- 修复带有 FINAL 修饰符的查询的 Parts Splitter #62268 (Nikita Taranov)。
- 分析器:修复参数化视图别名解析问题 #62274 (Dmitry Novik)。
- 分析器:修复来自父作用域的名称解析问题 #62281 (Dmitry Novik)。
- 修复带有 nullable 非原生数字列的 argMax #62285 (Raúl Marín)。
- 修复在 Ordinary 数据库中备份和还原物化视图的问题 #62295 (Vitaly Baranov)。
- 修复 Context 中标量的数据竞争问题 #62305 (Kruglov Pavel)。
- 修复物化视图中的主键问题 #62319 (Murat Khairulin)。
- 对于不支持的表,不要构建多线程插入管道 #62333 (vdimir)。
- 修复分析器中分布式查询中的位置参数问题 #62362 (flynn)。
- 修复分析器中 Merge 引擎中来自 additional_table_filters 的过滤器下推问题 #62398 (Kruglov Pavel)。
- 修复带有分析器的 GLOBAL IN 表查询。 #62409 (Nikolai Kochetov)。
- 在分区写入期间,尊重 s3/hdfs/azure 引擎中的设置 truncate_on_insert/create_new_file_on_insert #62425 (Kruglov Pavel)。
- 修复 AzureBlobStorage 的备份还原路径 #62447 (SmitaRKulkarni)。
- 修复 SimpleSquashingChunksTransform #62451 (Nikita Taranov)。
- 修复嵌套 lambda 的捕获。 #62462 (Nikolai Kochetov)。
- 避免读取带有递归类型的 protobuf 时发生崩溃 #62506 (Raúl Marín)。
- 修复将分区从一个位置移动到自身位置的错误 #62524 (helifu)。
- 修复 LIMIT 中的标量子查询 #62567 (Nikolai Kochetov)。
- 修复实验性和不受支持的 Hive 引擎中的段错误,我们无论如何都不喜欢它 #62578 (Nikolay Degterinsky)。
- 修复 groupArraySorted 中的内存泄漏 #62597 (Antonio Andelic)。
- 修复 largestTriangleThreeBuckets 中的崩溃问题 #62646 (Raúl Marín)。
- 修复更大分辨率的 tumble[Start,End] 和 hop[Start,End] #62705 (Jordi Villar)。
- 修复 argMin/argMax 组合器状态 #62708 (Raúl Marín)。
- 修复由于缓存锁争用优化而导致缓存中的临时数据失败的问题 #62715 (Kseniia Sumarokova)。
- 修复函数
mergeTreeIndex
中的崩溃问题 #62762 (Anton Popov)。 - 修复:更新:嵌套物化列:大小检查修复 #62773 (Eliot Hautefeuille)。
- 修复 CTE 中带有分析器的 FINAL 修饰符未被遵守的问题 #62811 (Duc Canh Le)。
- 修复函数
formatRow
与JSON
格式和 HTTP 接口一起使用时的崩溃问题 #62840 (Anton Popov)。 - Azure:修复从 endpoint 对象构建最终 url 的问题 #62850 (Daniel Pozo Escalona)。
- 修复 GCD 编解码器 #62853 (Nikita Taranov)。
- 修复 hyperrectangle 中的 LowCardinality(Nullable) 键 #62866 (Amos Bird)。
- 修复当输入值超出 UInt32 时 joda 语法中的 fromUnixtimestamp #62901 (KevinyhZou)。
- 禁用 sum(nullable) 的 optimize_rewrite_aggregate_function_with_if #62912 (Raúl Marín)。
- 修复具有不同源表列类型的 StorageBuffer 的 PREWHERE 问题。 #62916 (Nikolai Kochetov)。
- 修复缓存中的临时数据错误地处理缓存密钥目录创建失败的问题 #62925 (Kseniia Sumarokova)。
- gRPC:修复 IPv6 对等连接上的崩溃问题 #62978 (Konstantin Bogdanov)。
- 修复复制拉取期间可能出现的 CHECKSUM_DOESNT_MATCH(和其他错误)问题 #62987 (Azat Khuzhin)。
- 修复缓存中的临时数据中未捕获异常导致的终止问题 #62998 (Kseniia Sumarokova)。
- 修复 optimize_rewrite_aggregate_function_with_if 隐式转换问题 #62999 (Raúl Marín)。
- 修复 ~RestorerFromBackup 中的未处理异常 #63040 (Vitaly Baranov)。
- 不要从辅助查询的 GROUP BY 键中删除服务器常量。 #63047 (Nikolai Kochetov)。
- 修复对函数 abs 单调性的错误判断 #63097 (Duc Canh Le)。
- 在 MongoDB 引擎中为 SSL 握手设置服务器名称 #63122 (Alexander Gololobov)。
- 对于 MongoDB wire 协议版本检查,使用用户指定的数据库而不是 "config" #63126 (Alexander Gololobov)。
ClickHouse 24.3 LTS 版本,2024-03-27
升级说明
- 设置
allow_experimental_analyzer
默认启用,它将查询分析切换到新的实现,该实现具有更好的兼容性和更完整的功能。 “分析器” 功能被认为是 beta 版本而不是实验性版本。 您可以通过将compatibility
设置为24.2
或禁用allow_experimental_analyzer
设置来恢复旧的行为。 观看 YouTube 上的视频。 - ClickHouse 允许 String 数据类型中使用任意二进制数据,这通常是 UTF-8。 Parquet/ORC/Arrow String 仅支持 UTF-8。 这就是为什么您可以选择使用哪个 Arrow 的数据类型来用于 ClickHouse String 数据类型 - String 或 Binary。 这由设置
output_format_parquet_string_as_string
,output_format_orc_string_as_string
,output_format_arrow_string_as_string
控制。 虽然 Binary 会更正确和兼容,但在大多数情况下,默认使用 String 将符合用户期望。 Parquet/ORC/Arrow 支持多种压缩方法,包括 lz4 和 zstd。 ClickHouse 支持每一种压缩方法。 一些较差的工具缺乏对更快的lz4
压缩方法的支持,这就是为什么我们默认设置zstd
。 这由设置output_format_parquet_compression_method
,output_format_orc_compression_method
和output_format_arrow_compression_method
控制。 我们将 Parquet 和 ORC 的默认值更改为zstd
,但 Arrow 除外(它强调低级别用法)。 #61817 (Alexey Milovidov)。 与 Geet Patel 共同创作。 - 在新版本的 ClickHouse 中,如果所有参数均为 Float64,则函数
geoDistance
、greatCircleDistance
和greatCircleAngle
将使用 64 位双精度浮点数据类型进行内部计算和返回类型。 这解决了 #58476。 在以前的版本中,该函数始终使用 Float32。 您可以通过将geo_distance_returns_float64_on_float64_arguments
设置为false
或将compatibility
设置为24.2
或更早版本来切换到旧的行为。 #61848 (Alexey Milovidov)。 与 Geet Patel 共同创作。 - 过时的内存数据 parts 自 23.5 版本起已被弃用,自 23.10 版本起不再支持。 现在剩余的代码已删除。 继续 #55186 和 #45409。 您不太可能使用内存数据 parts,因为它们仅在 23.5 版本之前可用,并且仅当您通过为 MergeTree 表指定相应的 SETTINGS 手动启用它们时才可用。 要检查您是否具有内存数据 parts,请运行以下查询:
SELECT part_type, count() FROM system.parts GROUP BY part_type ORDER BY part_type
。 要禁用内存数据 parts 的使用,请执行ALTER TABLE ... MODIFY SETTING min_bytes_for_compact_part = DEFAULT, min_rows_for_compact_part = DEFAULT
。 从旧的 ClickHouse 版本升级之前,请先检查您是否没有内存数据 parts。 如果存在内存数据 parts,请先禁用它们,然后等待直到没有内存数据 parts,然后继续升级。 #61127 (Alexey Milovidov)。 - 将
system.zookeeper
表中的列名从duration_ms
更改为duration_microseconds
,以反映持续时间以微秒分辨率为单位的实际情况。 #60774 (Duc Canh Le)。 - 如果同时启用了查询级别设置
async_insert
和deduplicate_blocks_in_dependent_materialized_views
,则拒绝传入的 INSERT 查询。 此行为由设置throw_if_deduplication_in_dependent_materialized_views_enabled_with_async_insert
控制,默认情况下启用。 这是 https://github.com/ClickHouse/ClickHouse/pull/59699 的延续,需要解除阻止 https://github.com/ClickHouse/ClickHouse/pull/59915。 #60888 (Nikita Mikhaylov)。 - 实用程序
clickhouse-copier
已移至 GitHub 上的单独存储库:https://github.com/ClickHouse/copier。 它不再包含在捆绑包中,但仍可作为单独下载项使用。 这关闭了:#60734 这关闭了:#60540 这关闭了:#60250 这关闭了:#52917 这关闭了:#51140 这关闭了:#47517 这关闭了:#47189 这关闭了:#46598 这关闭了:#40257 这关闭了:#36504 这关闭了:#35485 这关闭了:#33702 这关闭了:#26702。 - 为了提高与 MySQL 的兼容性,兼容性别名
locate
现在默认接受参数(needle, haystack[, start_pos])
。 可以通过设置function_locate_has_mysql_compatible_argument_order = 0
来恢复之前的行为(haystack, needle, [, start_pos])
。 #61092 (Robert Schulze)。 - 默认情况下,禁止在
MergeTree
表的ORDER BY
中使用SimpleAggregateFunction
(就像禁止AggregateFunction
一样,但禁止它们是因为它们不可比较)(使用allow_suspicious_primary_key
以允许它们)。 #61399 (Azat Khuzhin)。 Ordinary
数据库引擎已弃用。 如果您的服务器正在使用它,您将在 clickhouse-client 中收到警告。 这关闭了 #52229。 #56942 (shabroo)。
新功能
- 支持以
tar
格式(除了zip
格式之外)读取和写入备份。 #59535 (josh-hildred)。 - 实现了对 S3 Express 存储桶的支持。 #59965 (Nikita Taranov)。
- 允许从不同的磁盘附加 parts(使用复制而不是硬链接)。 #60112 (Unalian)。
- 大小受限的
Memory
表:由其设置min_bytes_to_keep
、max_bytes_to_keep
、min_rows_to_keep
和max_rows_to_keep
控制。 #60612 (Jake Bamrah)。 - 分离了等待和执行查询的数量限制。 添加了新的服务器设置
max_waiting_queries
,用于限制由于async_load_databases
而等待的查询数量。 现有执行查询数量的限制不再计算等待查询。 #61053 (Sergei Trifonov)。 - 添加了一个表
system.keywords
,其中包含来自解析器的所有关键字。 主要需要并用于更好的模糊测试和语法突出显示。 #51808 (Nikita Mikhaylov)。 - 添加对
ATTACH PARTITION ALL
的支持。 #61107 (Kirill Nikiforov)。 - 添加新函数
getClientHTTPHeader
。 这解决了 #54665 问题。 与 @lingtaolf 共同完成。 #61820 (Alexey Milovidov)。 - 添加
generate_series
作为表函数(PostgreSQL 的兼容性别名,对应现有的numbers
函数)。 此函数生成包含自然数等差数列的表。 #59390 (divanik)。 - 为
topK
/topkWeighed
添加支持模式,该模式返回值的计数及其误差。 #54508 (UnamedRus)。 - 添加函数
toMillisecond
,该函数返回DateTime
或DateTime64
类型值的毫秒部分。 #60281 (Shaun Struwig)。 - 允许为 clickhouse-server 配置 HTTP 重定向处理程序。 例如,您可以将
/
重定向到 Play UI。 #60390 (Alexey Milovidov)。
性能提升
- 优化函数
dotProduct
以省略不必要的且昂贵的内存复制。 #60928 (Robert Schulze)。 - 256 位整数的打印速度提升 30 倍。 #61100 (Raúl Marín)。
- 如果表的主键包含大多无用的列,则不要将其保存在内存中。 这由新设置
primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns
控制,默认值为0.9
,这意味着:对于复合主键,如果某一列的值在至少 0.9 的时间内发生变化,则其后的列将不会被加载。 #60255 (Alexey Milovidov)。 - 提高涉及多个
Nullable
列时序列化聚合方法的性能。 #55809 (Amos Bird)。 - 延迟构建 JSON 输出,以提高 ALL JOIN 的性能。 #58278 (LiuNeng)。
- 使与外部服务(如 AWS S3)的 HTTP/HTTPS 连接在所有用例中可重用。 即使响应为 3xx 或 4xx。 #58845 (Sema Checherinda)。
- 改进聚合函数
argMin
/argMax
/any
/anyLast
/anyHeavy
,以及ORDER BY {u8/u16/u32/u64/i8/i16/u32/i64) LIMIT 1
查询。 #58640 (Raúl Marín)。 - 列过滤器的微小优化。 在某些情况下,峰值内存可以减少到原来的 44%。 #59698 (李扬)。
- 当结果类型的底层类型为数字时,以列式方式执行
multiIf
函数。 #60384 (李扬)。 - 更快的(几乎快 2 倍)互斥锁。 #60823 (Azat Khuzhin)。
- 当分布式查询完成时,并行耗尽多个连接。 #60845 (lizhuoyu5)。
- 优化 Nullable 数字或 Nullable 字符串列之间的数据移动,从而改善一些微基准测试。 #60846 (李扬)。
- 文件系统缓存的操作将减少锁竞争的影响。 #61066 (Alexey Milovidov)。
- 通过防止错误的编译器优化来优化数组 JOIN 和其他 JOIN。 关闭 #61074。 #61075 (李扬)。
- 如果包含语法错误的查询包含带有正则表达式的
COLUMNS
匹配器,则每次在解析器的回溯期间都会编译该正则表达式,而不是只编译一次。 这是一个根本性的错误。 编译后的正则表达式被放入 AST 中。 但 AST 中的字母 A 代表 "abstract"(抽象),这意味着它不应包含重量级对象。 AST 的部分可以在解析期间创建和丢弃,包括大量的回溯。 这导致解析端速度变慢,并因此允许只读用户进行 DoS 攻击。 但主要问题是它阻碍了模糊测试的进展。 #61543 (Alexey Milovidov)。 - 添加新的分析器通道以优化单个值的 IN 运算符。 #61564 (LiuNeng)。
- DNSResolver 混洗解析后的 IP 集合,这是均匀利用 AWS S3 的多个端点所必需的。 #60965 (Sema Checherinda)。
实验性功能
- 支持 Azure blob 存储的并行读取。 这提高了实验性 Azure 对象存储的性能。 #61503 (SmitaRKulkarni)。
- 为 Azure blob 存储添加类似于 S3 的异步 WriteBuffer。 这提高了实验性 Azure 对象存储的性能。 #59929 (SmitaRKulkarni)。
- 使用托管身份进行备份 IO,当使用 Azure Blob Storage 时。 添加一个设置以阻止 ClickHouse 尝试创建不存在的容器,这需要在存储帐户级别具有权限。 #61785 (Daniel Pozo Escalona)。
- 添加设置
parallel_replicas_allow_in_with_subquery = 1
,允许 IN 子查询与并行副本一起工作。 #60950 (Nikolai Kochetov)。 - 零拷贝复制的更改:当删除表时,必须删除与表相关的所有零拷贝锁。 包含这些锁的目录也必须删除。 #57575 (Sema Checherinda)。
改进
- 使用
MergeTree
作为默认表引擎。 #60524 (Alexey Milovidov) - 默认启用
output_format_pretty_row_numbers
。 这对于可用性更好。 #61791 (Alexey Milovidov)。 - 在之前的版本中,Pretty 格式中的某些数字不够美观。 #61794 (Alexey Milovidov)。
- 如果 Pretty 格式中的长值是结果集中的单个值,例如在
SHOW CREATE TABLE
查询的结果中,则不会被截断。 #61795 (Alexey Milovidov)。 - 与
clickhouse-local
类似,clickhouse-client
将接受--output-format
选项作为--format
选项的同义词。 这解决了 #59848 问题。 #61797 (Alexey Milovidov)。 - 如果 stdout 是终端且未指定输出格式,则
clickhouse-client
和类似工具将默认使用PrettyCompact
,类似于交互模式。clickhouse-client
和clickhouse-local
将以统一的方式处理输入和输出格式的命令行参数。 这解决了 #61272 问题。 #61800 (Alexey Milovidov)。 - 在 Pretty 格式中使用下划线数字组以提高可读性。 这由新设置
output_format_pretty_highlight_digit_groups
控制。 #61802 (Alexey Milovidov)。 - 添加通过
SYSTEM FLUSH DISTRIBUTED
覆盖初始 INSERT 设置的功能。 #61832 (Azat Khuzhin)。 - 默认启用处理器性能分析(排序、聚合等的时间消耗/输入和输出字节数)。 #61096 (Azat Khuzhin)。
- 在文件系统数据库中支持没有格式扩展名的文件。 #60795 (Kruglov Pavel)。
- 使所有格式名称不区分大小写,例如 Tsv、TSV、tsv,甚至 rowbinary。 #60420 (豪肥肥)。 如果您能继续正确书写,例如
JSON
😇,而不是Json
🤮,我将不胜感激,但如果您喜欢其他拼写方式,我们也不介意。 - 为
distributed_ddl_output_mode
设置添加none_only_active
模式。 #60340 (Alexander Tokmakov)。 - 高级仪表板的多行图表颜色略有改善。 #60391 (Alexey Milovidov)。
- 高级仪表板现在在滚动时始终显示控件。 这允许您在不向上滚动的情况下添加新图表。 #60692 (Alexey Milovidov)。
- 在为物化视图运行
MODIFY COLUMN
查询时,检查内部表的结构以确保每列都存在。 #47427 (sunny)。 - 字符串类型和枚举类型可以在同一上下文中使用,例如:数组、UNION 查询、条件表达式。 这解决了 #60726 问题。 #60727 (Alexey Milovidov)。
- 允许在查询处理的外部数据结构中声明枚举(这是一个您可以为查询提供的即时临时表)。 #57857 (Duc Canh Le)。
- 在选择要合并的分区时,考虑轻量级删除的行,以便更好地估计结果分区磁盘大小。 #58223 (Zhuo Qiu)。
- 为更多系统表的列添加注释。 https://github.com/ClickHouse/ClickHouse/pull/58356 的延续。 #59016 (Nikita Mikhaylov)。
- 现在我们可以在 PREWHERE 中使用虚拟列。 这对于非 const 虚拟列(如
_part_offset
)很有价值。 #59033 (Amos Bird)。 改进了虚拟列的整体可用性。 现在允许在PREWHERE
中使用虚拟列(对于非 const 虚拟列(如_part_offset
)很有价值)。 现在,内置文档可用于虚拟列,作为DESCRIBE
查询中启用设置describe_include_virtual_columns
的列的注释。 #60205 (Anton Popov)。 - 对象存储不再使用常量密钥,而是生成密钥来确定删除对象的能力。 #59495 (Sema Checherinda)。
- 允许使用 "local" 作为对象存储类型,而不是 "local_blob_storage"。 #60165 (Kseniia Sumarokova)。
- 在
DETACH
/服务器关闭和SYSTEM FLUSH DISTRIBUTED
时并行刷新 Distributed 引擎的挂起 INSERT 块(只有当表具有多磁盘策略时,并行才会工作(就像现在 Distributed 引擎中的所有内容一样))。 #60225 (Azat Khuzhin)。 - 添加一个设置以强制为合并操作使用读取穿透缓存。 #60308 (Kseniia Sumarokova)。
- MySQL 兼容性协议的改进。 问题 #57598 提到了关于事务处理的变体行为。 当没有活动事务时发出的 COMMIT/ROLLBACK 被报告为错误,这与 MySQL 的行为相反。 #60338 (PapaToemmsn)。
- 函数
substring
现在有一个新的别名byteSlice
。 #60494 (Robert Schulze)。 - 将服务器设置
dns_cache_max_size
重命名为dns_cache_max_entries
以减少歧义。 #60500 (Kirill Nikiforov)。 SHOW INDEX | INDEXES | INDICES | KEYS
不再按主键列排序(这是违反直觉的)。 #60514 (Robert Schulze)。- Keeper 改进:在启动期间检测到无效快照时中止,以避免数据丢失。 #60537 (Antonio Andelic)。
- 将 tzdata 更新到 2024a。 #60768 (Raúl Marín)。
- Keeper 改进:在 Keeper 的设置中支持
leadership_expiry_ms
。 #60806 (Brokenice0415)。 - 始终推断 JSON 格式中的指数数字,而与设置
input_format_try_infer_exponent_floats
无关。 添加设置input_format_json_use_string_type_for_ambiguous_paths_in_named_tuples_inference_from_objects
,允许对命名元组从 JSON 对象推断中的模糊路径使用 String 类型,而不是抛出异常。 #60808 (Kruglov Pavel)。 - 添加通常在 MySQL 语法中使用的
START TRANSACTION
语法支持,解决 https://github.com/ClickHouse/ClickHouse/discussions/60865 问题。 #60886 (Zach Naimon)。 - 为全排序合并连接算法添加一个标志,将 null 视为最大/最小。 因此,该行为可以与其他 SQL 系统(如 Apache Spark)兼容。 #60896 (loudongfeng)。
- 支持在
clickhouse-client
和clickhouse-local
中通过文件扩展名检测输出格式。 #61036 (豪肥肥)。 - 当 Linux 的 CGroups 值更改时,在运行时更新内存限制。 #61049 (Han Fei)。
- 添加函数
toUInt128OrZero
,这是由于错误而遗漏的(该错误与 https://github.com/ClickHouse/ClickHouse/pull/945 有关)。 兼容性别名FROM_UNIXTIME
和DATE_FORMAT
(它们不是 ClickHouse 原生的,仅为了 MySQL 兼容性而存在)已设为不区分大小写,正如 SQL 兼容性别名所期望的那样。 #61114 (Alexey Milovidov)。 - 改进了访问检查,允许在目标用户也没有撤销权限的情况下撤销未拥有的权限。 示例:
GRANT SELECT ON *.* TO user1; REVOKE SELECT ON system.* FROM user1;
。 #61115 (pufit)。 - 修复带有
Nullable
列的has()
函数(修复 #60214)。 #61249 (Mikhail Koviazin)。 - 现在可以在配置替换中为子树
<include from_zk="/path" merge="true">
指定属性merge="true"
。 如果指定此属性,clickhouse 将子树与现有配置合并,否则默认行为是将新内容附加到配置。 #61299 (alesapin)。 - 为虚拟内存映射添加异步指标:
VMMaxMapCount
和VMNumMaps
。 关闭 #60662 问题。 #61354 (Tuan Pham Anh)。 - 在创建临时数据的所有位置使用
temporary_files_codec
设置,例如外部内存排序和外部内存 GROUP BY。 之前它仅在partial_merge
JOIN 算法中有效。 #61456 (Maksim Kita)。 - 添加新设置
max_parser_backtracks
,允许限制查询解析的复杂性。 #61502 (Alexey Milovidov)。 - 减少文件系统缓存动态调整大小期间的争用。 #61524 (Kseniia Sumarokova)。
- 禁用 StorageS3 队列的分片模式,因为它将被重写。 #61537 (Kseniia Sumarokova)。
- 修复拼写错误:从
use_leagcy_max_level
到use_legacy_max_level
。 #61545 (William Schoeffel)。 - 删除
system.blob_storage_log
中的一些重复条目。 #61622 (YenchangChan)。 - 添加
current_user
函数作为 MySQL 的兼容性别名。 #61770 (Yarik Briukhovetskyi)。 - 修复混合 x86-64 / ARM 集群中浮点聚合函数状态不一致的问题 #60610 (Harry Lee)。
构建/测试/打包改进
- 实时查询分析器现在可在 AArch64 上运行。 在以前的版本中,它仅在程序没有在 syscall 内部花费时间时才有效。 #60807 (Alexey Milovidov)。
- ClickHouse 版本已添加到 docker 标签中。 关闭 #54224 问题。 #60949 (Nikolay Monkov)。
- 将
prqlc
升级到 0.11.3。 #60616 (Maximilian Roos)。 - 在
clickhouse-local
中添加通用查询文本模糊器。 #61508 (Alexey Milovidov)。
Bug 修复(官方稳定版本中用户可见的错误行为)
- 修复 MergeTree 的 finished_mutations_to_keep=0(如文档所述,0 表示保留所有内容) #60031 (Azat Khuzhin)。
- FINAL 优化存在问题,以下是作者的描述:“PartsSplitter 对同一分区无效的范围”。 #60041 (Maksim Kita)。
- Apache Hive 存在问题,它是实验性的,不受支持。 #60262 (shanfengp)。
- 实验性并行副本的改进:如果并行副本发生更改,则强制重新分析 #60362 (Raúl Marín)。
- 修复将纯元数据类型与新的磁盘配置选项一起使用的问题 #60396 (Kseniia Sumarokova)。
- 尝试修复 mapContainsKeyLike 中逻辑错误 'Cannot capture column because it has incompatible type' #60451 (Kruglov Pavel)。
- 避免为 CREATE TABLE 计算标量子查询。 #60464 (Nikolai Kochetov)。
- 修复由于错误而跳过大量行时并行解析中的死锁 #60516 (Kruglov Pavel)。
- 实验性 KQL(Kusto)支持存在问题:修复
max_query_size_for_kql_compound_operator
: #60534 (Yong Wang)。 - Keeper 修复:在等待提交日志时添加超时 #60544 (Antonio Andelic)。
- 不要为日期类型输出数字提示 #60577 (Raúl Marín)。
- 修复从带有过滤器中非确定性函数的 MergeTree 读取数据的问题 #60586 (Kruglov Pavel)。
- 修复错误的兼容性设置值类型的逻辑错误 #60596 (Kruglov Pavel)。
- fix(prql):健壮的 panic 处理程序 #60615 (Maximilian Roos)。
- 修复十进制和日期参数的
intDiv
函数 #60672 (Yarik Briukhovetskyi)。 - 修复:在 alter modify 查询中展开 CTE #60682 (Yakov Olkhovskiy)。
- 修复非 Atomic/Ordinary 数据库引擎(即 Memory)的 system.parts 表 #60689 (Azat Khuzhin)。
- 修复参数化视图的 "metadata 文件中无效的存储定义" 问题 #60708 (Azat Khuzhin)。
- 修复 CompressionCodecMultiple 中的缓冲区溢出 #60731 (Alexey Milovidov)。
- 从 SQL/JSON 中删除无意义的内容 #60738 (Alexey Milovidov)。
- 删除聚合函数 quantileGK 中的错误断言 #60740 (李扬)。
- 通过将流设置为 1 来修复 insert-select + insert_deduplication_token 错误 #60745 (Jordi Villar)。
- 防止在不支持的多部分上传操作上设置自定义元数据标头 #60748 (Francisco J. Jurado Moreno)。
- 修复 toStartOfInterval 函数 #60763 (Andrey Zvonov)。
- 修复 arrayEnumerateRanked 函数中的崩溃 #60764 (Raúl Marín)。
- 修复在 INSERT SELECT JOIN 中使用 input() 函数时的崩溃 #60765 (Kruglov Pavel)。
- 修复子查询中 allow_experimental_analyzer 值不同时发生的崩溃 #60770 (Dmitry Novik)。
- 删除从 S3 读取数据时的递归 #60849 (Antonio Andelic)。
- 修复 HashedDictionaryParallelLoader 中错误可能导致的卡顿 #60926 (vdimir)。
- 修复使用 Replicated 数据库的异步 RESTORE(实验性功能) #60934 (Antonio Andelic)。
- 修复通过原生协议异步插入到
Log
表的死锁 #61055 (Anton Popov)。 - 修复 RangeHashedDictionary 的 dictGetOrDefault 中默认参数的延迟执行 #61196 (Kruglov Pavel)。
- 修复 groupArraySorted 中的多个错误 #61203 (Raúl Marín)。
- 修复独立二进制文件的 Keeper 重新配置 #61233 (Antonio Andelic)。
- 修复 S3 引擎中 session_token 的使用 #61234 (Kruglov Pavel)。
- 修复聚合函数
uniqExact
可能返回不正确结果的问题 #61257 (Anton Popov)。 - 修复 show database 命令中的错误 #61269 (Raúl Marín)。
- 修复 RabbitMQ 存储与 MATERIALIZED 列的逻辑错误 #61320 (vdimir)。
- 修复 CREATE OR REPLACE DICTIONARY 命令 #61356 (Vitaly Baranov)。
- 修复带有外部 ON CLUSTER 的 ATTACH 查询 #61365 (Nikolay Degterinsky)。
- 修复可空键的连续键优化 #61393 (Anton Popov)。
- 修复 actions dag 分裂问题 #61458 (Raúl Marín)。
- 修复完成失败的 RESTORE 操作 #61466 (Vitaly Baranov)。
- 在使用兼容性设置时正确禁用 async_insert_use_adaptive_busy_timeout #61468 (Raúl Marín)。
- 允许在 restore 池中排队 #61475 (Nikita Taranov)。
- 修复使用 UUID 读取 system.parts 时出现的不一致性问题。 #61479 (Dan Wu)。
- 修复 ALTER QUERY MODIFY SQL SECURITY #61480 (pufit)。
- 修复窗口视图(实验性功能)中的崩溃问题 #61526 (Alexey Milovidov)。
- 修复
repeat
函数处理非原生整数的问题 #61527 (Antonio Andelic)。 - 修复客户端的
-s
参数 #61530 (Mikhail f. Shiryaev)。 - 修复 arrayPartialReverseSort 中的崩溃问题 #61539 (Raúl Marín)。
- 修复使用常量位置的字符串搜索 #61547 (Antonio Andelic)。
- 修复 addDays 在使用 DateTime64 时导致错误的问题 #61561 (Shuai li)。
- 禁止 JSONExtract 的 LowCardinality 输入类型 #61617 (Julia Kartseva)。
- 修复
system.part_log
对于具有重复数据删除功能的异步插入的问题 #61620 (Antonio Andelic)。 - 修复 system.parts 的
Non-ready set
异常。 #61666 (Nikolai Kochetov)。 - 修复 REPLACE_RANGE 的 actual_part_name 问题 (
Entry actual part isn't empty yet
) #61675 (Alexander Tokmakov)。 - 修复
multiSearchAllPositionsCaseInsensitiveUTF8
中针对不正确的 UTF-8 的 sanitizer 报告 #61749 (pufit)。 - 修复 RANGE 帧不支持 Nullable 列的问题。 #61766 (YuanLiu)。
ClickHouse 24.2 版本发布,2024-02-29
向后不兼容的变更
- 验证嵌套类型中可疑/实验性类型。 之前,我们没有验证嵌套类型(如 Array/Tuple/Map)中的此类类型(JSON 除外)。 #59385 (Kruglov Pavel)。
- 为线程数和块大小添加健全性检查。 #60138 (Raúl Marín)。
- 默认情况下,不要推断指数表示法中的浮点数。 添加设置
input_format_try_infer_exponent_floats
,这将恢复之前的行为(默认禁用)。 关闭 #59476。 #59500 (Kruglov Pavel)。 - 允许 alter 操作被括号包围。 括号的发出可以通过
format_alter_operations_with_parentheses
配置来控制。 默认情况下,在格式化的查询中,括号会被发出,因为我们将格式化的 alter 操作作为元数据存储在某些地方(例如:mutations)。 新语法澄清了一些 alter 操作以列表结尾的查询。 例如:ALTER TABLE x MODIFY TTL date GROUP BY a, b, DROP COLUMN c
在旧语法中无法正确解析。 在新语法中,查询ALTER TABLE x (MODIFY TTL date GROUP BY a, b), (DROP COLUMN c)
是显而易见的。 较旧的版本无法读取新语法,因此如果在单个集群中混合使用较新和较旧版本的 ClickHouse,则使用新语法可能会导致问题。 #59532 (János Benjamin Antal)。 - 修复物化视图的安全问题,该问题允许用户在没有所需权限的情况下插入表。 此修复验证用户不仅有权插入物化视图,还有权插入所有底层表。 这意味着以前可以正常工作的一些查询现在可能会失败,并显示
Not enough privileges
错误。 为了解决这个问题,此版本为视图引入了一个新的 SQL 安全功能 https://clickhouse.ac.cn/docs/en/sql-reference/statements/create/view#sql_security。 #54901 #60439 (pufit)。
新功能
- 添加了新语法,允许在 View/Materialized View 中指定 definer 用户。 这允许从视图执行 selects/inserts,而无需底层表的显式授权。 因此,View 将封装授权。 #54901 #60439 (pufit)。
- 如果在
file/s3/hdfs/url/azureBlobStorage
引擎中文件格式未知,则在模式推断期间尝试自动检测文件格式。 关闭 #50576。 #59092 (Kruglov Pavel)。 - 实现异步插入超时自动调整。 引入以下设置:async_insert_poll_timeout_ms、async_insert_use_adaptive_busy_timeout、async_insert_busy_timeout_min_ms、async_insert_busy_timeout_max_ms、async_insert_busy_timeout_increase_rate、async_insert_busy_timeout_decrease_rate。 #58486 (Julia Kartseva)。
- 允许为最大连续登录失败次数设置配额。 #54737 (Alexey Gerasimchuck)。
- 一个新的聚合函数
groupArrayIntersect
。 跟进: #49862。 #59598 (Yarik Briukhovetskyi)。 AzureBlobStorage
的备份和恢复支持。 解决 #50747。 #56988 (SmitaRKulkarni)。- 用户现在可以使用
format_schema_rows_template
在查询中直接指定模板字符串,作为format_template_row
的替代方案。 关闭 #31363。 #59088 (Shaun Struwig)。 - 实现了将不同类型的 MergeTree 表自动转换为复制引擎的功能。 在表的数据目录 (
/clickhouse/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/
) 中创建空的convert_to_replicated
文件,该表将在下次服务器启动时自动转换。 #57798 (Kirill)。 - 添加了查询
ALTER TABLE table FORGET PARTITION partition
,用于删除与空分区相关的 ZooKeeper 节点。 #59507 (Sergei Trifonov)。 这是一个专家级功能。 - 支持 NATS 表引擎的 JWT 凭据文件。 #59543 (Nickolaj Jepsen)。
- 实现了
system.dns_cache
表,这对于调试 DNS 问题很有用。 #59856 (Kirill Nikiforov)。 - 编解码器
LZ4HC
将接受新的 2 级,它比之前的最低级别 3 更快,但压缩率较低。 在以前的版本中,LZ4HC(2)
及更低级别与LZ4HC(3)
相同。 作者: Cyan4973。 #60090 (Alexey Milovidov)。 - 实现了
system.dns_cache
表,这对于调试 DNS 问题很有用。 新的服务器设置 dns_cache_max_size。 #60257 (Kirill Nikiforov)。 - 支持
merge
表函数的单参数版本,如merge(['db_name', ] 'tables_regexp')
。 #60372 (豪肥肥)。 - 支持负位置参数。 关闭 #57736。 #58292 (flynn)。
- 支持在配置中使用
user
键为特定的 S3 设置指定一组允许的用户。 #60144 (Antonio Andelic)。 - 添加了表函数
mergeTreeIndex
。 它表示MergeTree
表的索引和标记文件的内容。 它可用于内省。 语法:mergeTreeIndex(database, table, [with_marks = true])
,其中database.table
是具有MergeTree
引擎的现有表。 #58140 (Anton Popov)。
实验性功能
- 添加了函数
seriesOutliersDetectTukey
,以使用 Tukey 的围栏算法检测序列数据中的异常值。 #58632 (Bhavna Jindal)。 请注意,行为将在下一个补丁版本中更改。 - 添加函数
variantType
,该函数为每一行返回带有变体类型名称的 Enum。 #59398 (Kruglov Pavel)。 - 支持并行副本的
LEFT JOIN
、ALL INNER JOIN
和简单子查询(仅限分析器)。 新设置parallel_replicas_prefer_local_join
选择本地JOIN
执行(默认)与GLOBAL JOIN
。 所有表都应存在于cluster_for_parallel_replicas
中的每个副本上。 新设置min_external_table_block_size_rows
和min_external_table_block_size_bytes
用于压缩为临时表发送的小块(仅限分析器)。 #58916 (Nikolai Kochetov)。 - 允许在添加或恢复新副本期间在
Replicated
数据库中并发创建表。 #59277 (Konstantin Bogdanov)。 - 为
Variant
值实现比较运算符,并将正确的 Field 插入到Variant
列中。 默认情况下不允许创建具有相似变体类型的Variant
类型(允许使用设置allow_suspicious_variant_types
)。 关闭 #59996。 关闭 #59850。 #60198 (Kruglov Pavel)。 - 禁用带有 CTE 的并行副本 JOIN(非分析器) #59239 (Raúl Marín)。
性能提升
- 主键将使用更少的内存。 #60049 (Alexey Milovidov)。
- 改进主键和某些其他操作的内存使用量。 #60050 (Alexey Milovidov)。
- 表的主键将在首次访问时延迟加载到内存中。 这由新的 MergeTree 设置
primary_key_lazy_load
控制,默认情况下该设置处于启用状态。 这提供了几个优点:- 对于未使用的表,不会加载主键;- 如果内存不足,则会在首次使用时而不是在服务器启动时抛出异常。 这提供了一些缺点:- 加载主键的延迟将在首次查询时而不是在接受连接之前支付; 这理论上可能会引入惊群效应问题。 这关闭了 #11188。 #60093 (Alexey Milovidov)。 - 用于向量搜索的向量化距离函数。 #58866 (Robert Schulze)。
- 向量化函数
dotProduct
,它对向量搜索很有用。 #60202 (Robert Schulze)。 - 为
dictGetOrDefault
函数添加短路能力。 关闭 #52098。 #57767 (jsc0218)。 - Keeper 改进:仅缓存由
latest_logs_cache_size_threshold
和commit_logs_cache_size_threshold
控制的特定数量的内存日志。 #59460 (Antonio Andelic)。 - Keeper 改进:进一步减小数据节点的大小。 #59592 (Antonio Andelic)。
- 继续优化当结果类型为
Float*/Decimal*/*Int*
时if
函数的分支未命中,跟进 https://github.com/ClickHouse/ClickHouse/pull/57885。 #59148 (李扬)。 - 当输入类型为
Map
时优化if
函数,速度提升高达约 10 倍。 #59413 (李扬)。 - 通过实现严格别名化来提高
Int8
类型的性能(我们已经为UInt8
和所有其他整数类型实现了严格别名化)。 #59485 (Raúl Marín)。 - 通过减少分支未命中来优化 bigint 和 big decimal 类型的条件 sum/avg 的性能。 #59504 (李扬)。
- 提高具有活动 mutations 的 SELECT 查询的性能。 #59531 (Azat Khuzhin)。
- 使用 AVX2 优化函数
isNotNull
。 #59621 (李扬)。 - 提高 ASOF JOIN 在排序或几乎排序数据上的性能。 #59731 (Maksim Kita)。
- 之前的默认值
async_insert_max_data_size
等于 1 MB,这显得太小了。 新的值将为 10 MiB。 #59536 (Nikita Mikhaylov)。 - 在执行 RESTORE 命令时,使用多线程从备份中读取表的元数据。 #60040 (Vitaly Baranov)。
- 现在,如果
StorageBuffer
有多个分片 (num_layers
> 1),则后台刷新将为所有分片同时在多个线程中发生。 #60111 (alesapin)。
改进
- 当输出格式为
Pretty
格式且块由超过一百万的单个数值组成时,将在表格右侧打印可读的数字。 #60379 (rogeryk)。 - 添加了设置
split_parts_ranges_into_intersecting_and_non_intersecting_final
和split_intersecting_parts_ranges_into_layers_final
。 这些设置用于禁用针对带有FINAL
的查询的优化,仅用于调试。 #59705 (Maksim Kita)。 实际上不仅如此 - 它们还可以降低内存使用量,但会牺牲性能。 - 将设置
extract_kvp_max_pairs_per_row
重命名为extract_key_value_pairs_max_pairs_per_row
。 问题(设置名称中不必要的缩写)在 https://github.com/ClickHouse/ClickHouse/pull/43606 中引入。 修复此设置的文档。 #59683 (Alexey Milovidov)。 #59960 (jsc0218)。 - 在具有
DEFAULT
或MATERIALIZED
表达式的列上运行ALTER COLUMN MATERIALIZE
现在可以精确地遵循语义。 #58023 (Duc Canh Le)。 - 为 mutations 期间的错误启用了指数退避逻辑。 这将减少 CPU 使用率、内存使用率和日志文件大小。 #58036 (MikhailBurdukov)。
- 添加了改进以计数
InitialQuery
Profile Event。 #58195 (Unalian)。 - 允许在
storage_configuration
中定义volume_priority
。 #58533 (Andrey Zvonov)。 - 在
T64
编解码器中添加对Date32
类型的支持。 #58738 (Hongbin Ma)。 - 允许在具有多个项目的类型中使用尾随逗号。 #59119 (Aleksandr Musorin)。
- Distributed 表引擎的设置现在可以在服务器配置文件中指定(类似于 MergeTree 设置),例如
<distributed> <flush_on_detach>false</flush_on_detach> </distributed>
。 #59291 (Azat Khuzhin)。 - 在读取
system.zookeeper
时重试断开连接和过期的会话。 这有助于从system.zookeeper
表中读取许多行,尤其是在存在故障注入断开连接的情况下。 #59388 (Alexander Gololobov)。 - 当
input_format_values_interpret_expressions=0
时,不要将前导零的数字解释为八进制数。 #59403 (Joanna Hulboj)。 - 在启动时和配置文件更改时,ClickHouse 会更新其总内存跟踪器的硬内存限制。 这些限制基于各种服务器设置和 cgroups 限制(在 Linux 上)计算得出。 以前,设置
/sys/fs/cgroup/memory.max
(对于 cgroups v2)是硬编码的。 因此,为嵌套组(层次结构)配置的 cgroup v2 内存限制(例如/sys/fs/cgroup/my/nested/group/memory.max
)被忽略了。 现在已修复。 v1 内存限制的行为保持不变。 #59435 (Robert Schulze)。 - 添加了新的 profile events,用于观察在
INSERT
期间计算 PK/projections/二级索引所花费的时间。 #59436 (Nikita Taranov)。 - 允许使用设置
s3queue_last_processed_path
在创建时为有序模式的 S3Queue 定义起始点。 #59446 (Kseniia Sumarokova)。 - 使系统表的注释也在
clickhouse-local
的system.tables
中可用。 #59493 (Nikita Mikhaylov)。 system.zookeeper
表:以前,整个结果都累积在内存中并作为一个大块返回。 此更改应有助于减少从system.zookeeper
读取大量行时的内存消耗,允许显示中间进度(到目前为止已读取多少行),并避免在结果集很大时遇到连接超时。 #59545 (Alexander Gololobov)。- 现在,仪表板可以理解 URL 的 #hash 的压缩和未压缩状态(向后兼容性)。 #59124 的延续。 #59548 (Amos Bird)。
- 将 Intel QPL(由编解码器
DEFLATE_QPL
使用)从 v1.3.1 升级到 v1.4.0。 此外,修复了轮询超时机制的错误,因为我们观察到在某些情况下超时无法正常工作,如果发生超时,IAA 和 CPU 可能会同时处理缓冲区。 到目前为止,我们最好确保 IAA 编解码器状态不是 QPL_STS_BEING_PROCESSED,然后回退到 SW 编解码器。 #59551 (jasperzhu)。 - 不要在 ClickHouse Cloud 中显示有关服务器版本的警告,因为 ClickHouse Cloud 会自动处理无缝升级。 #59657 (Alexey Milovidov)。
- 自解压后,临时二进制文件将被移动而不是复制。 #59661 (Yakov Olkhovskiy)。
- 修复 Apple macOS 上的堆栈展开。 这关闭了 #53653。 #59690 (Nikita Mikhaylov)。
- 即使使用者将
max_parser_depth
设置错误配置为非常高的值,也要检查解析器中的堆栈溢出。 这关闭了 #59622。 #59697 (Alexey Milovidov)。 #60434 - 统一 Kafka 存储中 XML 和 SQL 创建的命名集合行为。 #59710 (Pervakov Grigorii)。
- 如果
merge_max_block_size_bytes
足够小,并且表包含宽行(字符串或元组),则后台合并可能会陷入无限循环。 此行为已修复。 跟进 https://github.com/ClickHouse/ClickHouse/pull/59340。 #59812 (Nikita Mikhaylov)。 - 如果 CREATE TABLE 显式包含 uuid,则允许在 replica_path 中使用 uuid。 #59908 (Azat Khuzhin)。
- 在
system.tables
系统表中添加 ReplicatedMergeTree 表的metadata_version
列。 #59942 (Maksim Kita)。 - Keeper 改进:仅为 Prometheus 发送 Keeper 相关的指标/事件。 #59945 (Antonio Andelic)。
- 即使在升级后系统表的结构发生更改,仪表板也将显示不同 ClickHouse 版本之间的指标。 #59967 (Alexey Milovidov)。
- 允许从文件加载 AZ 信息。 #59976 (Konstantin Bogdanov)。
- Keeper 改进: 为磁盘相关操作添加失败重试机制。 #59980 (Antonio Andelic).
- 添加新的配置设置
backups.remove_backup_files_after_failure
:<clickhouse> <backups> <remove_backup_files_after_failure>true</remove_backup_files_after_failure> </backups> </clickhouse>
。 #60002 (Vitaly Baranov). - 复制 S3 文件,当 GCP 返回
Internal Error
错误码且 HTTP 错误代码为GATEWAY_TIMEOUT
时,回退到缓冲区复制。 #60164 (Maksim Kita). - 为
ULIDStringToDateTime
增加短路执行优化。 #60211 (Juan Madurga). - 为表
system.backups
和system.backup_log
添加了query_id
列。为error
列添加了错误堆栈跟踪信息。 #60220 (Maksim Kita). - 通过 MySQL 端口的连接现在会自动运行设置
prefer_column_name_to_alias = 1
,以支持开箱即用的 QuickSight。此外,设置mysql_map_string_to_text_in_show_columns
和mysql_map_fixed_string_to_text_in_show_columns
现在默认启用,也仅影响 MySQL 连接。这提高了与更多 BI 工具的兼容性。 #60365 (Robert Schulze). - 修复了 JavaScript 代码中的竞争条件,该条件导致图表在彼此之上重复出现。 #60392 (Alexey Milovidov).
构建/测试/打包改进
- 添加了带有内省功能的覆盖率收集的构建和测试。是 #56102 的延续。 #58792 (Alexey Milovidov).
- 当设置 CMake 交叉编译工具链变量时,更新
corrosion-cmake
中的 Rust 工具链。 #59309 (Aris Tritas). - 为 ASTLiterals 添加了一些模糊测试。 #59383 (Raúl Marín).
- 如果您希望在每次 ClickHouse 容器启动时都运行 initdb 脚本,您应该初始化环境变量 CLICKHOUSE_ALWAYS_RUN_INITDB_SCRIPTS。 #59808 (Alexander Nikolaev).
- 移除禁用通用 ClickHouse 组件(如 server/client/...)的能力,但保留一些需要额外库的组件(如 ODBC 或 keeper)。 #59857 (Azat Khuzhin).
- 查询模糊器将在查询内部模糊测试 SETTINGS。 #60087 (Alexey Milovidov).
- 添加了对使用 clang-19 (master) 构建 ClickHouse 的支持。 #60448 (Alexey Milovidov).
Bug Fix (官方稳定版本中用户可见的错误行为)
- 修复了 TTL WHERE 中的 "Non-ready set" 错误。 #57430 (Nikolai Kochetov).
- 修复了
quantilesGK
函数中的一个错误 #58216 (李扬). - 修复了 Decimal 参数的
intDiv
的错误行为 #59243 (Yarik Briukhovetskyi). - 修复了使用 FixedString 输入的
translate
函数 #59356 (Raúl Marín). - 修复了 Keeper 中的摘要计算 #59439 (Antonio Andelic).
- 修复了没有调试符号的二进制文件的堆栈跟踪 #59444 (Azat Khuzhin).
- 修复了列特定设置情况下的
ASTAlterCommand::formatImpl
... #59445 (János Benjamin Antal). - 修复了 Analyzer 中
SELECT * FROM [...] ORDER BY ALL
的问题 #59462 (zhongyuankai). - 修复了分布式查询取消期间可能发生的未捕获异常 #59487 (Azat Khuzhin).
- 使 MAX 对复杂类型使用与 permutation 相同的规则 #59498 (Raúl Marín).
- 修复了传递
update_insert_deduplication_token_in_dependent_materialized_views
时的边界情况 #59544 (Jordi Villar). - 修复了在空值上使用 arrayElement / map 的错误结果 #59594 (Raúl Marín).
- 修复了合并空状态时 topK 中的崩溃问题 #59603 (Raúl Marín).
- 修复了带有常量分片键的分布式表 #59606 (Vitaly Baranov).
- 修复了 WingFuzz 发现的 KQL 问题 #59626 (Yong Wang).
- 修复了 AsynchronousBoundedReadBuffer 的错误 "Read beyond last offset" #59630 (Vitaly Baranov).
- 在 RewriteSumFunctionWithSumAndCountVisitor 中维护函数别名 #59658 (Raúl Marín).
- 修复了非初始查询的查询开始时间 #59662 (Raúl Marín).
- 验证
minmax
跳数索引的参数类型 #59733 (Anton Popov). - 修复了使用 FixedString 输入的 leftPad / rightPad 函数 #59739 (Raúl Marín).
- 修复了函数
countMatches
中的 AST 模糊器问题 #59752 (Robert Schulze). - RabbitMQ: 修复了既没有 acked 也没有 nacked 消息的问题 #59775 (Kseniia Sumarokova).
- 修复了 StorageURL 在单线程中执行部分查询执行的问题 #59833 (Michael Kolupaev).
- S3Queue: 修复了未初始化的值 #59897 (Kseniia Sumarokova).
- 修复了解析由括号包围的分区表达式的问题 #59901 (János Benjamin Antal).
- 修复了通过 HTTP 的 JSONColumnsWithMetadata 格式中的崩溃问题 #59925 (Kruglov Pavel).
- 如果 Analyzer 中返回值不同,则不要将 sum 重写为 count #59926 (Azat Khuzhin).
- UniqExactSet 读取崩溃修复 #59928 (Maksim Kita).
- ReplicatedMergeTree 无效的 metadata_version 修复 #59946 (Maksim Kita).
- 修复了
StorageDistributed
中的数据竞争 #59987 (Nikita Taranov). - Docker: 在启用选项而不是禁用时运行 init 脚本 #59991 (jktng).
- 修复了使用单引号 INSERT 到
SQLite
的问题 (通过用引号转义单引号而不是反斜杠) #60015 (Azat Khuzhin). - 修复了
arrayFold
中的几个逻辑错误 #60022 (Raúl Marín). - 修复了 optimize_uniq_to_count 移除列别名的问题 #60026 (Raúl Marín).
- 修复了在删除时 S3Queue 表可能出现的异常 #60036 (Kseniia Sumarokova).
- 修复了带有单个字面量的 NOT 的格式化问题 #60042 (Raúl Marín).
- 在 DDLLogEntry 中使用来自上下文的 max_query_size,而不是硬编码的 4096 #60083 (Kruglov Pavel).
- 修复了包含名为
table
的表的查询的不一致格式化。修复了当UNION ALL
,INTERSECT
和EXCEPT
的结构不是线性时,它们的错误格式化。这关闭了 #52349。修复了SYSTEM
查询的错误格式化,包括SYSTEM ... DROP FILESYSTEM CACHE
,SYSTEM ... REFRESH/START/STOP/CANCEL/TEST VIEW
,SYSTEM ENABLE/DISABLE FAILPOINT
。修复了参数化 DDL 查询的格式化。修复了DESCRIBE FILESYSTEM CACHE
查询的格式化。修复了SET param_...
(设置参数的查询) 的错误格式化。修复了CREATE INDEX
查询的错误格式化。修复了CREATE USER
和类似查询的不一致格式化。修复了CREATE SETTINGS PROFILE
的不一致格式化。修复了ALTER ... MODIFY REFRESH
的错误格式化。修复了如果帧偏移是表达式,则窗口函数的不一致格式化。修复了如果在实现运算符的函数 (例如plus
) 之后使用RESPECT NULLS
和IGNORE NULLS
,则它们的不一致格式化。修复了SYSTEM SYNC REPLICA ... LIGHTWEIGHT FROM ...
的愚蠢格式化。修复了带有GROUP BY GROUPING SETS ... WITH ROLLUP/CUBE/TOTALS
的无效查询的不一致格式化。修复了GRANT CURRENT GRANTS
的不一致格式化。修复了CREATE TABLE (... COLLATE)
的不一致格式化。此外,我修复了子查询中EXPLAIN
的不正确格式化 (#60102)。修复了 lambda 函数的不正确格式化 (#60012)。添加了检查,因此将来不可能忽略这些可憎之物。 #60095 (Alexey Milovidov). - 修复了子查询中 explain 的不一致格式化 #60102 (Alexey Milovidov).
- 修复了带有 Nullable 的 cosineDistance 崩溃问题 #60150 (Raúl Marín).
- 允许将字符串表示形式中的布尔值强制转换为 true 布尔值 #60160 (Robert Schulze).
- 修复了
system.s3queue_log
#60166 (Kseniia Sumarokova). - 修复了带有可空聚合函数名称的 arrayReduce #60188 (Raúl Marín).
- 隐藏
S3Queue
的敏感信息 #60233 (Kseniia Sumarokova). - 修复了 http 异常代码。 #60252 (Austin Kothig).
- S3Queue: 修复了一个 bug (也修复了不稳定的 test_storage_s3_queue/test.py::test_shards_distributed) #60282 (Kseniia Sumarokova).
- 修复了带有 IPv6 的哈希函数中 use-of-uninitialized-value 和无效结果的问题 #60359 (Kruglov Pavel).
- 修复了带有 null 参数的 OptimizeDateOrDateTimeConverterWithPreimageVisitor #60453 (Raúl Marín).
- 修复了一个小 bug,该 bug 阻止了从 KQL 或 PRQL 方言客户端发送的分布式表查询在副本上执行。 #59674. #60470 (Alexey Milovidov) #59674 (Austin Kothig).
ClickHouse 24.1 版本,2024-01-30
向后不兼容的变更
- 设置
print_pretty_type_names
默认开启。您可以将其关闭以保持旧的行为,或者SET compatibility = '23.12'
。 #57726 (Alexey Milovidov). - MergeTree 设置
clean_deleted_rows
已弃用,不再起作用。默认情况下不允许OPTIMIZE
的CLEANUP
关键字 (除非启用allow_experimental_replacing_merge_with_cleanup
)。 #58316 (Alexander Tokmakov). - 函数
reverseDNSQuery
不再可用。这关闭了 #58368。 #58369 (Alexey Milovidov). - 启用各种更改以改进配置文件中的访问控制。这些更改会影响行为,您可以查看
access_control_improvements
部分中的config.xml
。如果您不确定,请保持配置文件中的值与先前版本中的值相同。 #58584 (Alexey Milovidov). - 改进了
sumMapFiltered
与 NaN 值一起运算的操作。 NaN 值现在被放置在末尾 (而不是随机位置),并且被认为与任何值都不同。-0
现在也被视为等于0
;由于 0 值被丢弃,-0
值也被丢弃。 #58959 (Raúl Marín). - 函数
visibleWidth
将按照文档中的描述运行。在以前的版本中,它只是像lengthUTF8
函数一样计算字符串序列化后的代码点,但没有考虑零宽度和组合字符、全角字符、制表符和删除符。现在行为已相应更改。如果您想保持旧的行为,请将function_visible_width_behavior
设置为0
,或将compatibility
设置为23.12
或更低版本。 #59022 (Alexey Milovidov). Kusto
方言已被禁用,直到这两个 bug 被修复: #59037 和 #59036。 #59305 (Alexey Milovidov)。任何使用Kusto
的尝试都将导致异常。- 更高效的
FINAL
修饰符实现不再保证保留顺序,即使max_threads = 1
。如果您依赖以前的行为,请将enable_vertical_final
设置为 0 或将compatibility
设置为23.12
。
新功能
- 实现了 Variant 数据类型,它表示其他数据类型的联合。类型
Variant(T1, T2, ..., TN)
意味着此类型的每一行都具有类型T1
或T2
或 ... 或TN
或其中任何一个类型的值 (NULL
值)。Variant 类型在设置allow_experimental_variant_type
下可用。参考: #54864。 #58047 (Kruglov Pavel). - 某些设置 (目前为
min_compress_block_size
和max_compress_block_size
) 现在可以在列级别指定,在列级别它们优先于相应的表级别设置。示例:CREATE TABLE tab (col String SETTINGS (min_compress_block_size = 81920, max_compress_block_size = 163840)) ENGINE = MergeTree ORDER BY tuple();
。 #55201 (Duc Canh Le). - 添加了
quantileDD
聚合函数以及相应的quantilesDD
和medianDD
。它基于 DDSketch https://www.vldb.org/pvldb/vol12/p2195-masson.pdf。 ### 用户界面更改的文档条目。 #56342 (Srikanth Chekuri). - 允许配置任何类型的对象存储和任何类型的元数据类型。 #58357 (Kseniia Sumarokova).
- 为
distributed_ddl_output_mode
添加了null_status_on_timeout_only_active
和throw_only_active
模式,允许避免等待非活动副本。 #58350 (Alexander Tokmakov). - 添加了函数
arrayShingles
来计算子数组,例如arrayShingles([1, 2, 3, 4, 5], 3)
返回[[1,2,3],[2,3,4],[3,4,5]]
。 #58396 (Zheng Miao). - 添加了字符串相似度函数
punycodeEncode
,punycodeDecode
,idnaEncode
和idnaDecode
,这些函数对于根据 IDNA 标准将国际域名转换为 ASCII 表示形式非常有用。 #58454 (Robert Schulze). - 添加了字符串相似度函数
dramerauLevenshteinDistance
,jaroSimilarity
和jaroWinklerSimilarity
。 #58531 (Robert Schulze). - 添加了两个设置
output_format_compression_level
来更改输出压缩级别,以及output_format_compression_zstd_window_log
来显式设置压缩窗口大小,并在输出压缩方法为zstd
时启用 zstd 压缩的长距离模式。应用于INTO OUTFILE
以及写入表函数file
,url
,hdfs
,s3
和azureBlobStorage
时。 #58539 (Duc Canh Le). - 如果输出不是终端,则自动禁用 Pretty 格式中的 ANSI 转义序列。为设置
output_format_pretty_color
添加了新的auto
模式。 #58614 (Shaun Struwig). - 添加了解码 Sqids 的函数
sqidDecode
。 #58544 (Robert Schulze). - 允许在 JSON 输入格式中将 Bool 值读取为 String。这在默认启用的设置
input_format_json_read_bools_as_strings
下完成。 #58561 (Kruglov Pavel). - 添加了函数
seriesDecomposeSTL
,它将时间序列分解为季节、趋势和残差分量。 #57078 (Bhavna Jindal). - 为 MaterializedMySQL 引入了 MySQL Binlog Client:一个 binlog 连接用于多个数据库。 #57323 (Val Doroshchuk).
- Intel QuickAssist Technology (QAT) 提供硬件加速的压缩和加密。ClickHouse 获得了一种新的压缩编解码器
ZSTD_QAT
,它利用 QAT 进行 zstd 压缩。该编解码器使用 Intel 的 QATlib 和 Inte 的 QAT ZSTD 插件。目前,只有压缩可以在硬件中加速 (如果 QAT 无法初始化,则会启动软件回退),解压缩始终在软件中运行。 #57509 (jasperzhu). - 实现了为 s3 磁盘生成对象存储键的新方法。现在可以在磁盘描述中使用
key_template
选项以re2
正则表达式语法定义格式。 #57663 (Sema Checherinda). - 表 system.dropped_tables_parts 包含 system.dropped_tables 表 (已删除但尚未移除的表) 的 parts。 #58038 (Yakov Olkhovskiy).
- 添加了设置
max_materialized_views_size_for_table
以限制附加到表的物化视图的数量。 #58068 (zhongyuankai). clickhouse-format
改进: 支持带有VALUES
的 INSERT 查询;支持注释 (使用--comments
输出它们);支持--max_line_length
选项以仅格式化多行中的长查询。 #58246 (vdimir).- 在
clickhouse-local
中附加所有系统表,包括system.parts
。这关闭了 #58312。 #58359 (Alexey Milovidov). - 在函数
transform
中支持Enum
数据类型。这关闭了 #58241。 #58360 (Alexey Milovidov). - 添加表
system.database_engines
。 #58390 (Bharat Nallan)。允许在代码库中独立注册数据库引擎。 #58365 (Bharat Nallan)。允许独立注册解释器。 #58443 (Bharat Nallan). - 为
SYSTEM SYNC REPLICA LIGHTWEIGHT
查询添加了FROM <Replicas>
修饰符。使用FROM
修饰符可确保我们仅等待指定源副本以及 ZooKeeper 中不存在或具有空 source_replica 的任何副本的获取和删除范围。 #58393 (Jayme Bird). - 添加了设置
update_insert_deduplication_token_in_dependent_materialized_views
。此设置允许在依赖的物化视图中插入期间使用表标识符更新插入重复数据删除令牌。关闭了 #59165。 #59238 (Maksim Kita). - 添加了语句
SYSTEM RELOAD ASYNCHRONOUS METRICS
,它更新异步指标。主要用于测试和开发。 #53710 (Robert Schulze).
性能改进
- 为更好的并行性和缓存局部性重写了并行副本的协调。它已在数百个副本上进行了线性可扩展性测试。它还获得了按顺序读取的支持。 #57968 (Nikita Taranov).
- 使用原生 ClickHouse 缓冲区替换了基于 HTTP 出站缓冲。为接口添加了字节计数指标。 #56064 (Yakov Olkhovskiy).
uniqExact
的大型聚合状态将在分布式查询中并行合并。 #59009 (Nikita Taranov).- 降低了从
MergeTree
表读取数据后的内存使用量。 #59290 (Anton Popov). - 降低了垂直合并中的内存使用量。 #59340 (Anton Popov).
- 避免了 Keeper 启动期间更多情况下的巨大内存消耗。 #58455 (Antonio Andelic).
- Keeper 改进: 减少 Keeper 存储节点时的内存使用量。 #59002 (Antonio Andelic).
- 更缓存友好的 final 实现。关于行为更改的说明:以前,使用
FINAL
修饰符且以单流读取(例如max_threads = 1
)的查询在没有显式提供的ORDER BY
子句的情况下生成排序后的输出。当enable_vertical_final = true
时(默认情况下是这样)不再保证这一点。 #54366 (Duc Canh Le). - 绕过了
ReadBufferFromIStream
中的额外复制,例如,用于从 S3 读取数据。 #56961 (Nikita Taranov). - 优化当输入为 Array(Map)/Array(Array(Num)/Array(Array(String))/Array(BigInt)/Array(Decimal) 时的数组元素函数。之前的实现会进行不必要的内存分配。当输入类型为 Array(Map) 时,优化速度最高可达 ~6 倍。 #56403 (李扬).
- 在从紧凑部件中读取多个子列时,仅读取列一次。 #57631 (Kruglov Pavel).
- 重写
sum(column + constant)
函数的 AST(抽象语法树)。这作为一个分析器的优化步骤提供。 #57853 (Jiebin Sun). - 函数
match
的求值现在使用跳跃索引ngrambf_v1
和tokenbf_v1
。 #57882 (凌涛). - 函数
match
的求值现在使用倒排索引。 #58284 (凌涛). - MergeTree 的
FINAL
不会比较来自同一非 L0 分区中的行。 #58142 (Duc Canh Le). - 加速 iota 调用(用连续数字填充数组)。 #58271 (Raúl Marín).
- 加速非数值类型的 MIN/MAX 函数。 #58334 (Raúl Marín).
- 使用 BMI2/SSE 内联函数优化过滤器组合(例如在多阶段 PREWHERE 中)。 #58800 (Zhiguo Zhou).
- 在
clickhouse-local
中减少使用一个线程。 #58968 (Alexey Milovidov). - 提升当类型为 Nullable 时,
multiIf
函数的性能。 #57745 (KevinyhZou). - 添加
SYSTEM JEMALLOC PURGE
用于清除未使用的 jemalloc 页面,SYSTEM JEMALLOC [ ENABLE | DISABLE | FLUSH ] PROFILE
用于在启用性能分析器时控制 jemalloc 配置文件。在 Keeper 中添加与 jemalloc 相关的 4LW 命令:jmst
用于导出 jemalloc 统计信息,jmfp
、jmep
、jmdp
用于在启用性能分析器时控制 jemalloc 配置文件。 #58665 (Antonio Andelic). - 降低备份到 S3 的内存消耗。 #58962 (Vitaly Baranov).
改进
- 为系统表的所有列添加了注释(简要描述)。原因如下: - 我们经常使用系统表,有时开发人员很难理解特定列的用途和含义。 - 我们经常更改(添加新的或修改现有的)系统表,而它们的文档总是过时。例如,看一下
system.parts
的文档页面。它缺少很多列 - 我们希望最终直接从 ClickHouse 生成文档。 #58356 (Nikita Mikhaylov). - 允许
PASTE JOIN
的子查询不使用别名。 #58654 (Yarik Briukhovetskyi). - 在 macOS 上启用
MySQL
/MariaDB
集成。这关闭了 #21191。 #46316 (Alexey Milovidov) (Robert Schulze). - 默认禁用
max_rows_in_set_to_optimize_join
设置。 #56396 (vdimir). - 添加
<host_name>
配置参数,允许在 ON CLUSTER DDL 查询和 Replicated 数据库引擎中避免解析主机名。这减轻了集群定义更改时队列卡住的可能性。关闭了 #57573。 #57603 (Nikolay Degterinsky). - 将文件系统缓存的
load_metadata_threads
增加到 16。这将使服务器启动更快。 #57732 (Alexey Milovidov). - 添加限制 merges/mutations 的能力 (
max_mutations_bandwidth_for_server
/max_merges_bandwidth_for_server
)。 #57877 (Azat Khuzhin). - 将系统表
system.server_settings
中未文档化的(布尔型)列is_hot_reloadable
替换为 (Enum8) 列changeable_without_restart
,其可能值为No
、Yes
、IncreaseOnly
和DecreaseOnly
。同时文档化了该列。 #58029 (skyoct). - 集群发现支持设置用户名和密码,关闭了 #58063。 #58123 (vdimir).
- 在
ALTER TABLE ... PART
中支持查询参数。 #58297 (Azat Khuzhin). - 动态地为 Kafka 表创建消费者(但保留一段时间 -
kafka_consumers_pool_ttl_ms
,自上次使用后),这应该解决system.kafka_consumers
的统计信息问题(当没有人从 Kafka 表读取数据时,消费者不会被消费,这会导致活动内存泄漏和缓慢的表 detach),并且此 PR 再次默认启用system.kafka_consumers
的统计信息。 #58310 (Azat Khuzhin). sparkBar
作为sparkbar
的别名。 #58335 (凌涛).- 避免在上传到
GCS
后发送ComposeObject
请求。 #58343 (Azat Khuzhin). - 正确处理配置文件 XML 中名称中带有点的键。 #58354 (Azat Khuzhin).
- 使函数
format
在常量参数上返回常量。这关闭了 #58355。 #58358 (Alexey Milovidov). - 添加设置
max_estimated_execution_time
以区分max_execution_time
和max_estimated_execution_time
。 #58402 (Zhang Yifan). - 当使用无效的数据库引擎名称时,提供提示。 #58444 (Bharat Nallan).
- 添加设置以更好地控制 Arrow 字典中索引的类型。默认使用有符号整数类型作为索引,如 Arrow 建议的那样。关闭了 #57401。 #58519 (Kruglov Pavel).
- 实现 #58575:在运行 Docker 镜像时支持
CLICKHOUSE_PASSWORD_FILE
环境变量。 #58583 (Eyal Halpern Shalev). - 当执行某些需要大量流来读取数据的查询时,之前会抛出错误
"Paste JOIN requires sorted tables only"
。现在在这种情况下,流的数量会调整为 1。 #58608 (Yarik Briukhovetskyi). - 改进 INVALID_IDENTIFIER 错误的提示信息。 #58703 (Yakov Olkhovskiy).
- 改进了在 normalizeQuery 中对有符号数值字面量的处理。 #58710 (Salvatore Mesoraca).
- 支持 MySQL 的 Point 数据类型。 #58721 (Kseniia Sumarokova).
- 当比较 Float32 列和一个常量字符串时,将字符串读取为 Float32(而不是 Float64)。 #58724 (Raúl Marín).
- 提高 S3 兼容性,添加 ECloud EOS 存储支持。 #58786 (xleoken).
- 允许
KILL QUERY
取消备份/恢复操作。此 PR 还使正在运行的备份和恢复操作在system.processes
中可见。此外,服务器配置中现在有一个新设置 -shutdown_wait_backups_and_restores
(默认=true),它使服务器在关闭时要么等待所有正在运行的备份和恢复操作完成,要么直接取消它们。 #58804 (Vitaly Baranov). - Avro 格式支持 ZSTD 编解码器。关闭了 #58735。 #58805 (flynn).
- MySQL 接口增加了对
net_write_timeout
和net_read_timeout
设置的支持。net_write_timeout
被转换为 ClickHouse 原生的send_timeout
设置,类似地,net_read_timeout
被转换为receive_timeout
。修复了一个问题,即只有当整个语句为大写时,才能设置 MySQLsql_select_limit
设置。 #58835 (Serge Klochkov). - 改进了当创建字典和表时名称冲突的异常信息。 #58841 (Yarik Briukhovetskyi).
- 确保对于自定义(从 SQL 创建的)磁盘,服务器配置中指定了
filesystem_caches_path
(所有文件系统缓存的通用目录前缀)或custom_cached_disks_base_directory
(仅从自定义磁盘创建的文件系统缓存的通用目录前缀)。custom_cached_disks_base_directory
对于自定义磁盘的优先级高于filesystem_caches_path
,后者在前一个不存在时使用。文件系统缓存设置path
必须位于该目录内,否则将抛出异常,阻止磁盘的创建。这不会影响在旧版本上创建且服务器已升级的磁盘 - 那么将不会抛出异常以允许服务器成功启动)。custom_cached_disks_base_directory
已添加到默认服务器配置中,路径为/var/lib/clickhouse/caches/
。关闭了 #57825。 #58869 (Kseniia Sumarokova). - MySQL 接口增加了对
SHOW WARNINGS
/SHOW COUNT(*) WARNINGS
查询的兼容性,尽管返回的结果始终为空集。 #58929 (Serge Klochkov). - 在执行并行分布式
INSERT SELECT
时跳过不可用的副本。 #58931 (Alexander Tokmakov). - 在 JSON 中启用结构化日志格式时,显示文字描述的日志级别。 #58936 (Tim Liou).
- MySQL 接口通过数据类型别名增加了对
CAST(x AS SIGNED)
和CAST(x AS UNSIGNED)
语句的支持:SIGNED
代表 Int64,UNSIGNED
代表 UInt64。这提高了与 BI 工具(如 Looker Studio)的兼容性。 #58954 (Serge Klochkov). - 将 Docker 容器中的工作目录更改为数据路径。 #58975 (cangyin).
- 为 Azure Blob Storage 添加了设置
azure_max_unexpected_write_error_retries
,也可以从 azure 部分的配置中设置。 #59001 (SmitaRKulkarni). - 允许服务器在存在损坏的数据湖表的情况下启动。关闭了 #58625。 #59080 (Kseniia Sumarokova).
- 允许在
Iceberg
表引擎中忽略模式演变,并使用用户在创建表时指定的模式或在创建表时从元数据解析的最新模式读取所有数据。这是通过默认禁用的设置iceberg_engine_ignore_schema_evolution
实现的。请注意,启用此设置可能会导致不正确的结果,因为在模式演变的情况下,所有数据文件都将使用相同的模式读取。 #59133 (Kruglov Pavel). - 禁止在只读/一次写入存储上执行可变操作(
INSERT
/ALTER
/OPTIMIZE
/...),并使用适当的TABLE_IS_READ_ONLY
错误(以避免残留)。避免在CREATE
/ATTACH
时在一次写入磁盘(format_version.txt
)上留下残留。忽略ReplicatedMergeTree
的DROP
操作(与MergeTree
相同)。修复了对s3_plain
的迭代(MetadataStorageFromPlainObjectStorage::iterateDirectory
)。请注意,只读磁盘是web
,一次写入磁盘是s3_plain
。 #59170 (Azat Khuzhin). - 修复了实验性
_block_number
列中的一个错误,该错误可能导致在复杂的ALTER
和merge
组合期间出现逻辑错误。修复了 #56202。替换了 #58601。 #59295 (alesapin). - Play UI 能够理解何时在 JSON 中返回异常。针对 #52853 的调整。 #59303 (Alexey Milovidov).
/binary
HTTP 处理程序允许在查询字符串中指定用户、主机以及可选的密码。 #59311 (Alexey Milovidov).- 支持压缩内存表的备份。这关闭了 #57893。 #59315 (Alexey Milovidov).
- 在
BACKUP
和RESTORE
查询中支持FORMAT
子句。 #59338 (Vitaly Baranov). - 函数
concatWithSeparator
现在支持任意参数类型(而不仅仅是String
和FixedString
参数)。例如,SELECT concatWithSeparator('.', 'number', 1)
现在返回number.1
。 #59341 (Robert Schulze).
构建/测试/打包 改进
- 改进 clickhouse 二进制文件的别名(现在
ch
/clickhouse
是clickhouse-local
或clickhouse
,取决于参数),并为新别名添加 bash 补全。 #58344 (Azat Khuzhin). - 在 CI 中添加设置更改检查,以检查所有设置更改是否都反映在设置更改历史记录中。 #58555 (Kruglov Pavel).
- 在有状态测试中使用直接从 S3 附加的表。 #58791 (Alexey Milovidov).
- 将整个
fuzzer.log
保存为存档,而不是最后 10 万行。tail -n 100000
通常会删除包含表定义的行。例如:。 #58821 (Dmitry Novik). - 在 macOS Aarch64 上启用 Rust(这将为客户端添加使用 skim 的模糊搜索和 PRQL 语言,尽管我不认为有人会在 darwin 上托管 ClickHouse,所以我认为这主要是为了客户端中的模糊搜索)。 #59272 (Azat Khuzhin).
- 修复混合 x86_64 和 ARM 集群中的聚合问题 #59132 (Harry Lee).
Bug 修复(官方稳定版本中用户可见的错误行为)
- 为嵌套的 LowCardinality 添加 join 键转换 #51550 (vdimir).
- 如果 flatten_nested=1,则仅扁平化真正的 Nested 类型,而不是所有 Array(Tuple) #56132 (Kruglov Pavel).
- 修复了在插入期间,投影和
aggregate_functions_null_for_empty
设置的一个错误。 #56944 (Amos Bird). - 修复了由于过时的 profile UUID 导致的潜在异常 #57263 (Vasily Nemkov).
- 修复了在 StreamingFormatExecutor 中使用读取缓冲区的问题 #57438 (Kruglov Pavel).
- 在推送到视图期间,忽略目标表已删除的 MV(物化视图) #57520 (Kruglov Pavel).
- 消除 ALTER_METADATA 和 MERGE_PARTS 之间可能存在的竞争 #57755 (Azat Khuzhin).
- 修复了在使用 rollup 的 group by 中表达式顺序错误 #57786 (Chen768959).
- 修复已过时的 “零拷贝” 复制功能:修复了在删除具有损坏的 detached parts 的副本后丢失 blob 的问题 #58333 (Alexander Tokmakov).
- 允许用户在 user_files_path 中使用符号链接 #58447 (Duc Canh Le).
- 修复了当 graphite 表没有聚合函数时发生的崩溃 #58453 (Duc Canh Le).
- 延迟从 StorageKafka 读取数据,以允许在物化视图中进行多次读取 #58477 (János Benjamin Antal).
- 修复了一个愚蠢的 parts 相交的情况 #58482 (Alexander Tokmakov).
- 禁用仅 LIMIT 查询的 MergeTreePrefetchedReadPool #58505 (Maksim Kita).
- 在恢复期间启用普通数据库 #58520 (Jihyuk Bok).
- 修复了 Apache Hive 线程池读取 ORC/Parquet/... 的问题 #58537 (sunny).
- 隐藏
system.backup_log
的base_backup_name
列中的凭据 #58550 (Daniel Pozo Escalona). toStartOfInterval
函数对毫秒 - 微秒值的四舍五入 #58557 (Yarik Briukhovetskyi).- 在 ConcurrentHashJoin 中禁用
max_joined_block_rows
#58595 (vdimir). - 修复了旧分析器中使用 nullable 的 join #58596 (vdimir).
makeDateTime64
: 允许非 const fraction 参数 #58597 (Robert Schulze).- 修复了在符号化内联帧期间可能发生的 NULL 解引用 #58607 (Azat Khuzhin).
- 改进了在重新创建用户或角色切换时查询缓存条目的隔离性 #58611 (Robert Schulze).
- 修复了在进行投影优化时,分区键分析损坏的问题 #58638 (Amos Bird).
- 查询缓存:修复每个用户的配额 #58731 (Robert Schulze).
- 修复了并行窗口函数中的流分区 #58739 (Dmitry Novik).
- 修复了在 addBatchLookupTable8 中抛出异常时,双重销毁调用的问题 #58745 (Raúl Marín).
- 在 Keeper 关闭期间,不要处理请求 #58765 (Antonio Andelic).
- 修复了
SlabsPolygonIndex::find
中的空指针解引用 #58771 (Yarik Briukhovetskyi). - 修复了 LowCardinality(Nullable) 列的 JSONExtract 函数 #58808 (vdimir).
- 修复了通过 CREATE 和 DROP 创建大量表时,意外累积内存使用量的问题。 #58831 (Maksim Kita).
- mv 中的多读取文件日志存储 #58877 (János Benjamin Antal).
- 对 s3 的访问密钥 ID 的限制。 #58900 (MikhailBurdukov).
- 修复了在 clickhouse-local 加载建议时可能发生的崩溃 #58907 (Kruglov Pavel).
- 修复了当使用
indexHint
时发生的崩溃 #58911 (Dmitry Novik). - 修复了 StorageURL 在服务器重启时忘记标头的问题 #58933 (Michael Kolupaev).
- 分析器:修复了使用插入块替换存储的问题 #58958 (Yakov Olkhovskiy).
- 修复了 ReadBufferFromZipArchive 中的 seek 操作 #58966 (Michael Kolupaev).
- 修复了实验性倒排索引(请勿在生产环境中使用):倒排索引的
DROP INDEX
现在会从持久性存储中删除所有相关文件 #59040 (mochi). - 修复了 query_factories_info 上的数据竞争 #59049 (Kseniia Sumarokova).
- 禁用 “重定向过多” 错误重试 #59099 (skyoct).
- 修复了未启动数据库的关闭死锁 #59137 (Sergei Trifonov).
- 修复:分布式查询中的 LIMIT BY 和 LIMIT #59153 (Igor Nikonov).
- 修复了
toString
中 nullable 时区导致的崩溃 #59190 (Yarik Briukhovetskyi). - 修复了 iceberg 元数据在遇到错误文件路径时中止的问题 #59275 (Kruglov Pavel).
- 修复了 Rust 目标的 select 中的架构名称 #59307 (p1rattttt).
- 修复了当从
system.tables
查询时,IN 子句中带有子查询导致的 “not-ready set” 逻辑错误。 #59351 (Nikolai Kochetov).