v24.12 云版本更新日志
本页列出 v24.12 版本中与 ClickHouse Cloud 服务相关的变更。
向后不兼容的变更
- 函数
greatest和least现在会忽略 NULL 输入值,而此前只要有一个参数为 NULL 就会返回 NULL。例如,SELECT greatest(1, 2, NULL)现在返回 2。此行为与 PostgreSQL 保持一致。#65519 (kevinyhzou)。 - 默认情况下,不再允许在 ORDER BY/GROUP BY/PARTITION BY/PRIMARY KEY 中使用 Variant/Dynamic 类型,因为这可能导致意外结果。#69731 (Pavel Kruglov)。
- 移除系统表
generate_series和generateSeries。它们是误加的,详见:#59390。#71091 (Alexey Milovidov)。 - 移除
StorageExternalDistributed。修复并关闭 #70600。#71176 (flynn)。 - 服务器配置(users.xml)中的设置现在同样适用于客户端。这对于格式相关设置(例如
date_time_output_format)很有用。#71178 (Michael Kolupaev)。 - 修复由于 JSON 子列文件中未转义的特殊符号而可能出现的
No such file or directory错误。#71182 (Pavel Kruglov)。 - 表引擎 Kafka、NATS 和 RabbitMQ 现在在
SOURCES层级下由各自独立的权限控制。请为以这些引擎类型创建表的所有非默认数据库用户添加相应的权限。#71250 (Christoph Wurm)。 - 在执行变更查询(mutation)前检查完整的查询(包括子查询)。这可以防止误执行无效查询,并积累会阻塞有效变更的失效 mutation。#71300 (Christoph Wurm)。
- 将文件系统缓存设置
skip_download_if_exceeds_query_cache重命名为filesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit。#71578 (Kseniia Sumarokova)。 - 禁止在 min/max 函数中使用 Dynamic/Variant 类型,以避免混淆。#71761 (Pavel Kruglov)。
- 移除对
deltaSumTimestamp中Enum以及UInt128和UInt256参数的支持。移除对deltaSumTimestamp第二个(“timestamp”)参数类型为Int8、UInt8、Int16和UInt16的支持。#71790 (Alexey Milovidov)。 - 当 ClickHouse 被用作字典的数据源时,新增对源查询的校验。#72548 (Alexey Katsman)。
新功能
- 实现
SYSTEM LOAD PRIMARY KEY命令,用于为指定表的所有数据片段加载主键索引;如果未指定表,则为所有表加载主键索引。这将有助于进行基准测试,并在查询执行期间避免额外的延迟。#66252 (ZAWA_ll)。 - 新增语句
SYSTEM LOAD PRIMARY KEY,用于加载指定表中所有数据片段的主键索引;如果未指定表,则加载所有表的主键索引。该语句可用于基准测试,并有助于在查询执行过程中避免额外延迟。#67733 (ZAWA_ll)。 - 添加
CHECK GRANT查询,用于检查当前用户/角色是否已被授予特定权限,以及相应的表/列在内存中是否存在。#68885 (Unalian)。 - 添加了用于描述工作负载和资源管理的 SQL 语法。https://clickhouse.com/docs/en/operations/workload-scheduling。#69187(Sergei Trifonov)。
- Iceberg 数据存储 格式为用户提供了丰富的选项,用于修改表的模式。在此 pull request 中,实现了对 Iceberg 格式表的读取,支持更改列顺序、列名以及简单类型扩展。#69445(Daniil Ivanik)。
- 允许每种身份验证方法拥有各自的过期时间,并从用户实体中移除该字段。 #70090 (Arthur Passos).
- 将查询发起者的外部用户角色推送到集群中的其他节点。当只有发起者能够访问外部身份验证服务(例如 LDAP)时,这一特性尤其有用。 #70332 (Andrey Zvonov).
- 支持通过
ALTER将 String 转换为 JSON。此 PR 还将 JSON 和 Dynamic 类型的序列化更改为新的 V2 版本。旧的 V1 版本仍然可以通过启用设置merge_tree_use_v1_object_and_dynamic_serialization来使用(可在升级过程中启用,以便在需要时无障碍回滚版本)。#70442 (Pavel Kruglov). - 添加函数
toUnixTimestamp64Second,用于将DateTime64转换为具有固定秒级精度的Int64数值,使得在日期早于 1970 年 1 月 1 日星期四 00:00:00 UTC 时可以返回负值。 #70597 (zhanglistar). - 添加名为
enforce_index_structure_match_on_partition_manipulation的新设置,以便在源表中的 projection 和二级索引是目标表中对应项子集的情况下允许执行 attach 操作。关闭 #70602。#70603(zwy991114)。 - 函数
cast的输出与 Apache Spark 不同,这会导致 Gluten 项目中的差异,参见 https://github.com/apache/incubator-gluten/issues/7602。此 PR 新增了对 Spark 文本输出格式的支持功能,默认关闭。#70957(zhanglistar)。 - 为 S3 端点新增了一种用于用户认证的请求头类型(
access_header)。这样可以设置一个优先级最低的访问请求头,其值会被来自任意其他来源(例如表结构或命名集合)的access_key_id覆盖。#71011 (MikhailBurdukov)。 - 实现了设置层级的初始版本。 #71145 (Raúl Marín).
- 为使用 FILL 运算符的 ORDER BY 添加对 staleness 子句的支持。#71151 (Mikhail Artemenko)。
- 通过对 JSON 字符串进行序列化/反序列化,实现将 Map/Tuple/Object 简单 CAST 为新的 JSON。#71320(Pavel Kruglov)。
- 为聚合函数
any新增了别名anyRespectNulls、firstValueRespectNulls和anyValueRespectNulls。同时为聚合函数anyLast新增了别名anyLastRespectNulls和lastValueRespectNulls。这样就可以使用更自然的纯驼峰命名,而不必使用驼峰加下划线混合的语法,例如:使用SELECT anyLastRespectNullsStateIf,而不是anyLast_respect_nullsStateIf。#71403(Peter Nguyen)。 - 添加了配置参数
date_time_utc,使 JSON 日志格式支持使用 RFC3339/ISO8601 格式的 UTC 日期时间。#71560(Ali)。 - 在查询计划中新增了一个选项,用于选择连接中哪一侧作为内部(构建)表。该行为由
query_plan_join_swap_table控制,可以设置为auto。在此模式下,ClickHouse 会尝试选择行数最少的表。#71577 (Vladimir Cherkasov)。 - 当数据部分的索引粒度值为常量时,对其内存使用进行了优化。新增支持始终为数据部分选择固定粒度(设置
use_const_adaptive_granularity),从而确保其在内存中的表示始终经过优化。在大规模工作负载场景下(共享存储中包含数万亿行),这有助于避免数据部分的元数据(索引粒度值)内存使用持续增长。#71786(Anton Popov)。 - 将
allowed_feature_tier作为全局开关,用于禁用所有实验/测试版功能。#71841(Raúl Marín)。 - 新增
iceberg[S3;HDFS;Azure]Cluster、deltaLakeCluster、hudiCluster表函数。 #72045 (Mikhail Artemenko)。 - 为
ALTER USER {ADD|MODIFY|DROP SETTING}、ALTER USER {ADD|DROP PROFILE}以及ALTER ROLE和ALTER PROFILE添加相同的语法支持。#72050(pufit)。 - 新增
arrayPrAUC函数,用于计算精确率-召回率(Precision Recall)曲线的 AUC(曲线下面积)。 #72073 (Emmanuel)。 - 为
MergeTree表的主索引添加了缓存功能(可通过表设置use_primary_key_cache启用)。如果主索引同时启用了延迟加载和缓存,则会按需将其加载到缓存中(类似于 mark 缓存),而不是一直将其保留在内存中。为数据分片在插入 / 合并 / 获取以及表重启时添加了主索引预热功能(可通过设置prewarm_primary_key_cache启用)。 #72102 (Anton Popov). - 为数组类型添加
indexOfAssumeSorted函数。在按非递减顺序排序的数组上优化查找。#72517 (Eric Kurbanov). - 允许在聚合函数
groupConcat中将分隔符作为可选的第二个参数使用。 #72540 (Yarik Briukhovetskyi). - 新增设置
http_response_headers,允许你自定义 HTTP 响应头。比如,你可以让浏览器直接渲染存储在数据库中的图片。这一改动关闭了 #59620。#72656(Alexey Milovidov)。 - 新增函数
fromUnixTimestamp64Second,用于将 Int64 类型的 Unix 时间戳值转换为 DateTime64。 #73146 (Robert Schulze)。
性能优化
- 新增 2 个设置项
short_circuit_function_evaluation_for_nulls和short_circuit_function_evaluation_for_nulls_threshold,用于在数据块中 NULL 值比例超过指定阈值时,以短路方式对Nullable列执行函数。这意味着函数只会在非 NULL 值的行上执行。该机制仅适用于这样一类函数:当某行至少有一个参数为 NULL 时,该行的返回值为 NULL。 #60129 (李扬). - 对于对象存储磁盘,
clickhouse disks remove --recursive的内存使用已减少。#67323 (Kirill)。 - 现在,在使用
join_algorithm='parallel_hash'将输入块在多个线程之间分发以进行并行处理时,将不再复制其列。#67782 (Nikita Taranov)。 - 为更多表达式启用 JIT 编译:
abs/bitCount/sign/modulo/pmod/isNull/isNotNull/assumeNotNull/to(U)Int*/toFloat*,比较函数(=、<、>、>=、<=),逻辑函数(and、or)。 #70598 (李扬). - 现在,当
join_algorithm设置为default时,将会优先使用parallel_hash算法(如果适用)。当parallel_hash无法使用时,仍会回退到之前的两个备选算法(direct和hash)。#70788 (Nikita Taranov)。 - 为互不相交的 part 优化了
Replacing合并算法。#70977 (Anton Popov)。 - 在 metrics 和 system.detached_parts 中不再列出来自只读和一次写入磁盘的 detached parts。 #71086 (Alexey Milovidov)
- 默认情况下不要计算开销巨大的异步指标。该功能在 #40332 中引入,但仅为单个客户的需求而运行一个高负载的后台任务并不合适。#71087(Alexey Milovidov)。
- 通过缩小临界区来提高 system.query_metric_log 采集间隔的性能和准确性。 #71473 (Pablo Marcos).
- 添加选项,以从
WHERE和ON表达式中提取公共子表达式,从而减少连接期间使用的哈希表数量。可以通过将optimize_extract_common_expressions设置为 1 来启用。#71537(János Benjamin Antal)。 - 允许在包含
LowCardinality(String)的SELECT查询中使用索引。#71598 (Yarik Briukhovetskyi). - 在使用并行副本执行查询且启用本地计划时,在 worker 上跳过索引分析。协调者将基于自身(即查询发起方)上的索引分析为各个 worker 选择要读取的范围。 #72109 (Igor Nikonov).
- 从 https://github.com/ClickHouse/ClickHouse/pull/57631 恢复在 Compact 部分中读取单个列的子列时的优化。该优化曾被意外删除。#72285(Pavel Kruglov)。
- 通过在比较器中对调用进行去虚拟化,加速对
LowCardinality(String)列的排序。#72337 (Alexander Gololobov). - 针对某些简单数据类型优化 argMin/Max 函数。 #72350 (alesapin)。
- 优化内存追踪器中的锁机制,使用共享锁以减少锁竞争。#72375 (Jiebin Sun)。
- 新增设置
use_async_executor_for_materialized_views。采用异步且可能是多线程的方式执行物化视图查询,可以加速 INSERT 期间的视图处理,但也会消耗更多内存。#72497 (alesapin)。 - 设置
max_size_to_preallocate_for_aggregation、max_size_to_preallocate_for_joins的默认值进一步提高到了10^12,因此该优化将在更多场景中生效。 #72555 (Nikita Taranov). - 提升了聚合函数状态反序列化的性能(在数据类型
AggregateFunction和分布式查询中)。略微提升了RowBinary格式的解析性能。#72818 (Anton Popov)。
改进
- 使用常量数组和常量捕获参数的高阶函数将返回常量。 #58400 (Alexey Milovidov)。
- 通过生成虚拟行来优化顺序读取,从而在归并排序期间减少读取的数据量,在存在多个 part 时尤其有用。#62125 (Shichao Jin)。
- 查询计划步骤名称(
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)。 - 修复 HashTable destroyElements 中 use-after-dtor 逻辑的问题。 #65279 (cangyin).
- 在
clickhouse-local中默认使用Atomic数据库。处理 #50647 中的第 1 和第 5 条。关闭 #44817。#68024(Alexey Milovidov)。 - 写入缓冲区必须显式取消或结束。异常会打破 HTTP 协议,以提醒客户端发生错误。#68800 (Sema Checherinda).
- 通过创建 replica_dir 并在 DDLWorker 中将副本标记为活跃状态来报告正在运行的 DDLWorker 主机。 #69658 (Tuan Pham Anh).
-
- 重构
DDLQueryStatusSource:- 将DDLQueryStatusSource重命名为DistributedQueryStatusSource,并将其设为基类 - 创建两个子类DDLOnClusterQueryStatusSource和ReplicatedDatabaseQueryStatusSource,从DDLQueryStatusSource派生,用于分别从DDL On Cluster和Replicated数据库查询 DDL 任务的状态。2. 在DDLOnClusterQueryStatusSource中支持停止等待离线主机。#69660 (Tuan Pham Anh)。
- 重构
- 添加了新的取消逻辑:
CancellationChecker会为每个已开始的查询检查超时时间,并在超时后立即停止它们。 #69880 (Yarik Briukhovetskyi)。 - 移除
allow_experimental_join_condition设置,从而默认允许非等值条件。#69910(Vladimir Cherkasov)。 - 默认启用
parallel_replicas_local_plan。在查询发起端构建完整的本地计划,可以在更少资源消耗的情况下提升并行副本(parallel replicas)的性能,并为应用更多查询优化提供空间。#70171 (Igor Nikonov)。 - 在
http_handlers(用于dynamic_query_handler/predefined_query_handler)中新增设置用户名/密码的功能。#70725 (Azat Khuzhin)。 - 在 S3Queue 存储中为部分设置添加对
ALTER TABLE ... MODIFY/RESET SETTING ...的支持。 #70811 (Kseniia Sumarokova). - 在列出目录时不要调用对象存储 API,因为这在成本上可能并不划算。相反,应将文件名列表存储在内存中。相应的权衡是初始加载时间会增加,并且需要更多内存来存储文件名。#70823(Julia Kartseva)。
- 为
clickhouse-compressor添加--threads参数,以便并行压缩数据。 #70860 (Alexey Milovidov). - 使 Replxx 客户端的历史记录容量可配置。#71014(Jiří Kozlovský)。
- 新增了设置
prewarm_mark_cache,用于在插入、合并、拉取分片以及表启动时,将 marks 预加载到 mark cache 中。#71053 (Anton Popov). - 为 Parquet 原生读取器添加对布尔类型的支持。#71055(Arthur Passos)。
- 在与 S3 交互时,对更多类型的错误进行重试,例如 “Malformed message”。 #71088 (Alexey Milovidov)。
- 降低部分与 S3 相关消息的日志级别。 #71090 (Alexey Milovidov).
- 支持写入包含空格的 HDFS 文件。 #71105 (exmy).
system.session_log已经做得相当不错了。这也就关闭了 #51760。#71150(Alexey Milovidov)。- 修复了在使用并行副本的查询中执行 RIGHT / FULL join 的问题。现在,RIGHT join 可以使用并行副本执行(右表读取会被分发到各个副本)。FULL join 无法在节点之间并行化,只能在本地执行。#71162(Igor Nikonov)。
- 新增了用于限制复制表、字典和视图数量的设置。 #71179 (Kirill).
- 修复 #71227。#71286(Arthur Passos)。
- 根据服务器/用户内存使用情况,自动将
GROUP BY/ORDER BY切换为基于磁盘的外部执行。通过max_bytes_ratio_before_external_group_by/max_bytes_ratio_before_external_sort查询设置进行控制。#71406(Azat Khuzhin)。 - 将按主机的仪表板
Overview (host)和Cloud overview (host)添加到高级仪表板中。 #71422 (alesapin). - 函数
translate现在在from参数所包含的字符多于to参数时支持删除多余字符。例如:SELECT translate('clickhouse', 'clickhouse', 'CLICK')现在返回CLICK。#71441(shuai.xu)。 - 新增了函数
parseDateTime64、parseDateTime64OrNull和parseDateTime64OrZero。与现有函数parseDateTime(及其变体)相比,它们返回的是DateTime64类型的值,而不是DateTime。 #71581 (kevinyhzou). - 将内存中的
index_granularity数组缩减到实际所需大小,以减少 MergeTree 系列表引擎的内存占用。#71595 (alesapin)。 - 命令行应用程序现在会对语法进行高亮显示,即使是多语句时也是如此。#71622 (Alexey Milovidov)。
- 命令行应用在发生错误时会返回非零退出码。在之前的版本中,
disks应用在出错时返回零,其他应用在错误码 256(PARTITION_ALREADY_EXISTS)和 512(SET_NON_GRANTED_ROLE)时也返回零。#71623(Alexey Milovidov)。 Vertical格式(当你在查询结尾使用\G时也会启用)具备 Pretty 格式的特性,例如:- 高亮显示数字中的千位分组;- 显示易读的数字提示。#71630 (Alexey Milovidov)。- 允许通过设置
filesystem_cache_prefer_bigger_buffer_size来禁用文件系统缓存的内存缓冲区扩容。 #71640 (Kseniia Sumarokova). - 在 filesystem cache 中为后台下载的最大文件段大小新增单独设置
background_download_max_file_segment_size。 #71648 (Kseniia Sumarokova). - 将
enable_http_compression的默认值从 0 修改为 1。修复 #71591。#71774(Peter Nguyen)。 - 支持使用 ALTER 将 Object 转换为 JSON。 #71784 (Pavel Kruglov)。
- 略微改进的 JSON 类型解析:如果当前 JSON 路径对应的块中包含多种类型的值,则会按照特定的优先顺序依次尝试各类型,从中选择最合适的类型。#71785(Pavel Kruglov)。
- 此前,从
system.asynchronous_metrics读取时会阻塞,直到并发更新完成。如果系统处于高负载状态,这可能会耗费较长时间。通过此更改,现在始终可以读取先前已收集的值。#71798 (Alexander Gololobov)。 - 将
polling_max_timeout_ms设置为 10 分钟,将polling_backoff_ms设置为 30 秒。#71817(Kseniia Sumarokova)。 - 诸如 'SELECT - FROM t LIMIT 1' 之类的查询过去会加载数据分片索引,即使这些索引实际上未被使用。 #71866 (Alexander Gololobov)。
- 在旧的兼容性设置下,Allow_reorder_prewhere_conditions 默认为启用状态。 #71867 (Raúl Marín)。
- 在使用
bitmapTransform函数且参数类型合法时,不要在system.errors表中递增ILLEGAL_TYPE_OF_ARGUMENT计数器。#71971 (Dmitry Novik)。 - 当直接从字典检索数据时(无论是使用 Dictionary 存储、字典表函数,还是直接对该字典执行 SELECT 查询),现在只需要对该字典具有
SELECT权限或dictGet权限即可。此变更与之前为防止绕过 ACL 所做的尝试保持一致:https://github.com/ClickHouse/ClickHouse/pull/57362 和 https://github.com/ClickHouse/ClickHouse/pull/65359。同时,它也使后者实现了向后兼容。#72051(Nikita Mikhaylov)。 - 在高级仪表板的 HTML 页面上,新增了一个用于从
system.dashboards表中选择仪表板的下拉选择器。#72081 (Sergei Trifonov)。 - 在为分布式
INSERT ... SELECT构建执行计划时遵从prefer_locahost_replica设置。 #72190 (filimonov). - 该问题在此处进行了描述。Azure Iceberg Writer 创建的 Iceberg 元数据文件(以及 manifest 文件)不符合规范。在此 PR 中,我增加了使用 v2 读取器尝试读取 v1 Iceberg 格式元数据的逻辑(因为它们就是以这种方式写的),并在未在 manifest 文件中创建相应字段时抛出错误。#72277(Daniil Ivanik)。
- 将 JSON/Dynamic/Variant 类型从实验特性提升至 Beta 阶段。#72294(Pavel Kruglov)。
- 现在允许在查询中使用
UNION [ALL]来执行CREATE MATERIALIZED VIEW。其行为与带有JOIN的物化视图相同:只有SELECT表达式中的第一张表会作为插入触发器起作用,所有其他表都会被忽略。#72347 (alesapin)。 - 在插入批次中分区键仅有一个值的情况下,加速对 MergeTree 的写入。#72348 (alesapin).
- 将新的 MergeTreeIndexGranularityInternalArraysTotalSize 指标添加到 system.metrics 中。此指标用于查找具有大型数据集且容易触发高内存使用问题的实例。#72490 (Miсhael Stetsyuk)。
- 当查询使用
Format Null时,现在会识别单词Null的所有写法。此前,其他形式(例如NULL)虽然不会导致抛出异常,但在这些情况下实际上也并未真正使用Null格式。#72658(Nikita Taranov)。 - 允许在
set中使用不在Enum中的未知值。修复 #72662。#72686(zhanglistar)。 - 在 system.tables 中新增 total_bytes_with_inactive,用于统计非活动部分的总字节数。#72690(Kai Zhu)。
- 将 MergeTreeSettings 添加到 system.settings_changes。#72694(Raúl Marín)。
- 为 Enum 数据类型添加对字符串匹配运算符(如 LIKE)的支持,修复 #72661。#72732(zhanglistar)。
- 在 notEmpty 函数中支持 JSON 类型。#72741 (Pavel Kruglov).
- 支持解析 GCS S3 错误
AuthenticationRequired。#72753 (Vitaly Baranov)。 - 在 ifNull 和 coalesce 函数中支持 Dynamic 类型。 #72772 (Pavel Kruglov)。
- 新增
JoinBuildTableRowCount/JoinProbeTableRowCount/JoinResultRowCountprofile 事件。#72842(Vladimir Cherkasov)。 - 在 toFloat64/touInt32 等函数中增加对 Dynamic 的支持。 #72989 (Pavel Kruglov).
Bug 修复(官方稳定版本中用户可见的错误行为)
- 在执行
ATTACH PART查询时,被去重的分片不再会一直带着attaching_前缀。#65636 (Kirill)。 - 修复了在使用
IN函数时 DateTime64 精度丢失的缺陷。#67230 (Yarik Briukhovetskyi). - 修复在
ORDER BY ... WITH FILL中使用IGNORE/RESPECT NULLS函数时可能存在的逻辑错误,并关闭 #57609。#68234(Vladimir Cherkasov)。 - 修复了在使用
Native格式进行异步插入且达到内存限制时出现的罕见逻辑错误。 #68965 (Anton Popov). - 修复 CREATE TABLE 中 EPHEMERAL 列的 COMMENT。#70458 (Yakov Olkhovskiy).
- 修复
JSONExtract在与 LowCardinality(Nullable) 一起使用时的逻辑错误。#70549(Pavel Kruglov)。 - 修复了表名过长时的行为问题。#70810 (Yarik Briukhovetsky)。
- 在 URL 引擎中新增支持通过用户自定义请求头覆盖 Content-Type。 #70859 (Artem Iurin).
- 修复
StorageS3Queue中的逻辑错误 “Cannot create a persistent node in /processed since it already exists”。#70984(Kseniia Sumarokova)。 - 修复在 projection 轻量级删除的重建选项中未考虑 _row_exists 列的 Bug。 #71089 (Shichao Jin)。
- 修复由于意外的竞态条件导致
system.query_metric_log中出现错误值的问题。#71124(Pablo Marcos)。 - 修复聚合函数 quantileExactWeightedInterpolated 的名称不匹配问题。该问题是在 https://github.com/ClickHouse/ClickHouse/pull/69619 中引入的。cc @Algunenano。#71168(李扬)。
- 修复在函数比较中使用 Dynamic 时触发的 bad_weak_ptr 异常。 #71183 (Pavel Kruglov).
- 在使用零拷贝复制的 ReplicatedMergeTree 中,当有节点正在使用某个 blob 时,不要删除该 blob。 #71186 (Antonio Andelic)。
- 修复在通过 HTTP 和异步插入(Async Inserts)使用 Native 格式时忽略 format 设置的问题。 #71193 (Pavel Kruglov).
- 使用
use_query_cache = 1设置运行的 SELECT 查询,如果系统表名称作为字面量出现,将不再被拒绝执行,例如SELECT - FROM users WHERE name = 'system.metrics' SETTINGS use_query_cache = true;现在可以正常工作。#71254(Robert Schulze)。 - 修复在启用 enable_filesystem_cache=1 且存储配置中的磁盘未配置任何缓存时导致内存使用增加的问题。#71261 (Kseniia Sumarokova).
- 修复在从 Dynamic 列反序列化 LowCardinality 字典时可能出现的 “Cannot read all data” 错误。#71299 (Pavel Kruglov).
- 修复在客户端中并行输出格式清理不彻底的问题。#71304 (Raúl Marín).
- 在具名集合中补上了遗漏的反转义处理。否则 clickhouse-server 将无法启动。#71308 (MikhailBurdukov).
- 修复通过原生协议进行的包含空数据块的异步插入问题。#71312(Anton Popov)。
- 修复在授予错误的通配符权限时导致的 AST 格式不一致问题 #71309。#71332(pufit)。
- 在 JSON 类型提示中检查可疑和实验性类型。#71369 (Pavel Kruglov)。
- 修复在包含 Variant 列的 Chunk 中行数无效的错误。 #71388 (Pavel Kruglov).
- 修复在向
mongodb表函数传递错误参数(例如NULL)时引发的崩溃。#71426(Vladimir Cherkasov)。 - 修复启用 optimize_rewrite_array_exists_to_has 时导致的崩溃。#71432 (Raúl Marín).
- 修复在为 palin_rewritable 磁盘创建目录失败后回滚事务时会出现的 NoSuchKey 错误。#71439 (Julia Kartseva)。
- 修复了在插入操作中对设置
max_insert_delayed_streams_for_parallel_write的使用。此前该设置行为不正确,在向多个分区写入数据的插入操作中可能导致较高的内存占用。#71474 (Anton Popov). - 修复在
arrayJoin似乎可以出现在WHERE条件中的情况下,旧版分析器可能出现的错误Argument for function must be constant。该问题是 https://github.com/ClickHouse/ClickHouse/pull/65414 之后引入的回归。#71476(Nikolai Kochetov)。 - 修复旧版分析器在列数为 0 时 SortCursor 崩溃的问题。 #71494 (Raúl Marín).
- 修复由未初始化的 ORC 数据导致的 date32 越界问题。更多详情请参阅 https://github.com/apache/incubator-gluten/issues/7823。#71500(李扬)。
- 修复在宽部分中对 Dynamic 和 JSON 类型列进行大小统计时的问题。 #71526 (Pavel Kruglov).
- 修复当物化视图中的查询在 CTE 中使用 IN 时,分析器出现的问题。关闭 #65598。#71538(Maksim Kita)。
- 在 bitShift 函数中发生越界时,返回 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).
- 修复从 LowCardinality(Nullable) 向 Dynamic 进行 CAST 的行为。此前可能会导致错误
Bad cast from type DB::ColumnVector<int> to DB::ColumnNullable。 #71742 (Pavel Kruglov). - 修复在
WHERE条件中对DateTime64类型主键调用toDayOfWeek时出现的异常。#71849(Yakov Olkhovskiy)。 - 修复了在解析为稀疏列后填充默认值的逻辑。#71854 (Anton Popov).
- 修复在分布式表中当输入为 ALIAS 时 GROUPING 函数报错的问题,关闭 #68602。#71855(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)。
- 修复在 Pretty JSON 格式中对 Dynamic 值的序列化。#71923 (Pavel Kruglov).
- 修复 24.6 版本中损坏的 system.s3/azure_queue_log 表的 rows_processed 列。关闭 #69975。#71946(Kseniia Sumarokova)。
- 修复了在使用
s3/s3Cluster函数时可能返回不完整结果或抛出异常的问题。该问题出现在在 s3 URI 中使用通配符模式(如pattern/*),且存在键为pattern/的空对象(此类对象会由 S3 Console 自动创建)时。与此同时,将设置项s3_skip_empty_files的默认值从false更改为true。 #71947 (Nikita Taranov). - 修复 clickhouse-client 语法高亮导致的崩溃问题。关闭 #71864。#71949(Nikolay Degterinsky)。
- 修复在
ORDER BY中针对MergeTree表使用二元单调函数且第一个参数为常量时出现的Illegal type错误。修复了 #71941。#71966(Nikolai Kochetov)。 - 仅允许在子查询中使用的 EXPLAIN AST 中包含 SELECT 查询。其他类型的查询会导致逻辑错误:'Bad cast from type DB::ASTCreateQuery to DB::ASTSelectWithUnionQuery' 或
Inconsistent AST formatting。 #71982 (Pavel Kruglov). - 当使用
clickhouse-client插入一条记录时,客户端会从服务端读取列描述。但由于一个 bug,我们以错误的顺序写入了这些描述,正确顺序应为 [statistics, ttl, settings]。#71991(Han Fei)。 - 在启用
format_alter_commands_with_parentheses时,修正MOVE PARTITION ... TO TABLE ...ALTER 命令的格式。#72080(János Benjamin Antal)。 - 在 File/S3/URL/HDFS/Azure 引擎的
CREATE查询中添加自动推断得到的格式名称。此前,每次服务器重启时都会重新推断格式名称,如果指定的数据文件已被删除,则会导致服务器启动失败。#72108(Pavel Kruglov)。 - 修复了一个 bug:
min_age_to_force_merge_on_partition_only会卡住,一再尝试对已经合并为单个 part 的同一分区继续执行合并,而不去合并仍包含多个 part 的其他分区。#72209(Christoph Wurm)。 - 修复了
SimpleSquashingChunksTransform在处理稀疏列时极少数情况下发生崩溃的问题。#72226 (Vladimir Cherkasov). - 修复了
GraceHashJoin中的数据竞争问题,该问题可能导致连接输出中缺少某些行。 #72233 (Nikita Taranov). - 修复了在启用
enable_block_number_column设置时,包含物化_block_number列的ALTER DELETE查询的问题。#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). - 修复解析
BACKUP DATABASE db EXCEPT TABLES db.table查询时的失败问题。 #72429 (Konstantin Bogdanov). - 不再允许创建空 Variant。 #72454 (Pavel Kruglov).
- 修复
system.merges中result_part_path的无效格式问题。#72567(Konstantin Bogdanov)。 - 修复仅包含一个元素的 glob 模式的解析。#72572 (Konstantin Bogdanov)。
- 在包含 ARRAY JOIN 的分布式查询中,修复 follower 服务器上的查询生成。修复了 #69276。#72608(Dmitry Novik)。
- 修复一个错误:在 DateTime64 中使用 DateTime64 时不返回任何结果。 #72640 (Yarik Briukhovetskyi).
- 修复在 S3Queue 的 Unordered 模式下,当
tracked_files_limit设置值小于 S3 文件生成速率时会触发的“No such key”错误。#72738 (Kseniia Sumarokova)。 - 如果 mark cache 很大,清空它可能会花费较长时间。如果在此期间一直持有 context mutex,会阻塞许多其他操作,甚至在释放之前都无法建立新的客户端连接。而且为实现同步其实没必要一直持有该 mutex,只需通过 shared_ptr 获取对该 cache 的本地引用就足够了。#72749(Alexander Gololobov)。
- 在其中一个测试实例上,PK cache 严重低估了自身大小。具体来说,LowCardinality 列没有将字典的大小计入其中。修复方法是改为使用 column->allocatedBytes(),再加上一些对缓存条目大小的额外开销预估。 #72750 (Alexander Gololobov)。
- 修复在本地不存在该用户时 RemoteQueryExecutor 抛出异常的问题。 #72759 (Andrey Zvonov).
- 修复了在启用
enable_block_number_column设置时,包含物化_block_number列的 mutation 的问题。 #72854 (Anton Popov). - 修复在备份中存在空文件时使用普通可重写磁盘进行备份/恢复的功能。#72858 (Kseniia Sumarokova).
- 正确取消 DistributedAsyncInsertDirectoryQueue 中的插入操作。 #72885 (Antonio Andelic).
- 修复了在将错误数据解析到稀疏列时的崩溃问题(在启用
enable_parsing_to_custom_serialization设置时可能发生)。#72891 (Anton Popov)。 - 修复在恢复备份过程中可能发生的崩溃。#72947 (Kseniia Sumarokova).
- 修复了当查询的
ON子句中包含包括不等式过滤在内的复杂条件时,parallel_hashJOIN 方法可能出现的错误。 #72993 (Nikita Taranov). - 在进行 JSON 解析时使用默认的格式设置,以避免反序列化出错。#73043(Pavel Kruglov)。
- 修复在使用不受支持的存储时导致事务崩溃的问题。 #73045 (Raúl Marín).
- 在解析 Tuple 时新增对重复 JSON 键的检查。此前这可能在解析过程中导致逻辑错误
Invalid number of rows in Chunk。#73082 (Pavel Kruglov)。