适用于 Cloud 的 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 的失效 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).
缺陷修复(官方稳定版本中用户可见的异常行为)
- 在执行
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).
- 修复在对 LowCardinality(Nullable) 使用 JSONExtract 时的逻辑错误。 #70549 (Pavel Kruglov).
- 修复了表名过长时的处理逻辑。#70810 (Yarik Briukhovetskyi)。
- 在 URL 引擎中支持通过用户请求头覆盖 Content-Type。 #70859 (Artem Iurin)。
- 修复
StorageS3Queue中出现的逻辑错误:“Cannot create a persistent node in /processed since it already exists”。#70984(Kseniia Sumarokova)。 - 修复在投影轻量级删除的 rebuild 选项中未考虑 _row_exists 列的错误。 #71089 (Shichao Jin).
- 修复由于意外竞态条件导致
system.query_metric_log中错误值的问题。#71124 (Pablo Marcos)。 - 修复
quantileExactWeightedInterpolated聚合函数名称不匹配的问题。此 bug 最初在 https://github.com/ClickHouse/ClickHouse/pull/69619 中引入。cc @Algunenano。#71168(李扬)。 - 修复在函数比较中使用 Dynamic 时出现的 bad_weak_ptr 异常。#71183 (Pavel Kruglov).
- 在启用零拷贝复制的 ReplicatedMergeTree 中,如果仍有节点在使用某个 blob,请勿删除该 blob。 #71186 (Antonio Andelic).
- 修复通过 HTTP 和异步插入使用 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 中出现的 “Invalid number of rows in 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(李扬)。
- 修复在 wide part 中计算 Dynamic 和 JSON 类型列大小的错误。 #71526 (Pavel Kruglov).
- 修复了在 materialized view 中的查询使用带有 CTE 的 IN 子句时分析器出现的问题。关闭 #65598。#71538(Maksim Kita)。
- 在越界的情况下,
bitShift函数不再抛出错误,而是返回 0 或默认字符。 #71580 (Pablo Marcos). - 修复在使用某些引擎的 materialized view 时出现的服务器崩溃问题。#71593(Pervakov Grigorii)。
- 对包含常量数组别名的嵌套数据结构执行 ARRAY JOIN 时,会导致空指针解引用。此修复关闭了 #71677。#71678(Alexey Milovidov)。
- 修复在对空 tuple 执行 ALTER 时的 LOGICAL_ERROR。这修复了 #71647。#71679(Amos Bird)。
- 在使用 NOT IN 运算符时,不要转换分区列谓词中的常量 Set。 #71695 (Eduard Karacharov).
- 修复从 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)。
- 修复了使用
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 列。Closes #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 引擎的创建查询中添加推断得到的格式名称。此前,每次服务器重启时都会重新推断格式名称,如果指定的数据文件已被删除,就会在服务器启动期间导致错误。#72108 (Pavel Kruglov)。
- 修复一个问题:
min_age_to_force_merge_on_partition_only会卡住在同一个分区上,反复尝试合并一个已经被合并为单个分区片段的分区,而不会去合并那些仍然包含多个分区片段的分区。 #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)。 - 如果标记缓存很大,清空它可能会花费较长时间。如果在此期间一直持有上下文互斥锁,将会阻塞许多其他操作,甚至在互斥锁释放前都无法建立新的客户端连接。而且,用于同步实际上并不需要持有这个互斥锁,通过
shared_ptr持有对缓存的本地引用就足够了。#72749(Alexander Gololobov)。 - 在其中一个测试实例上,PK 缓存对自身大小的估算严重偏低。具体来说,LowCardinality 列没有将字典大小计算在内。修复方法是改为使用 column->allocatedBytes(),并在此基础上再估算一些缓存条目大小的额外开销。#72750(Alexander Gololobov)。
- 修复 RemoteQueryExecutor 在本地不存在该用户时抛出异常的问题。 #72759 (Andrey Zvonov).
- 修复了在启用
enable_block_number_column设置时,对带有物化_block_number列的变更的处理问题。#72854 (Anton Popov). - 修复在备份中存在空文件时,使用普通可重写磁盘进行备份/恢复的问题。 #72858 (Kseniia Sumarokova).
- 在 DistributedAsyncInsertDirectoryQueue 中正确取消插入操作。 #72885 (Antonio Andelic).
- 修复了在将错误数据解析到稀疏列时可能发生的崩溃问题(当启用
enable_parsing_to_custom_serialization设置时可能出现)。#72891 (Anton Popov). - 修复在备份恢复过程中可能发生的崩溃。#72947 (Kseniia Sumarokova).
- 修复了
parallel_hashJOIN 方法中的一个错误,该错误可能在查询的ON子句包含不等式过滤条件的复杂条件时出现。 #72993 (Nikita Taranov). - 在进行 JSON 解析时使用默认格式设置,以避免反序列化失败。 #73043 (Pavel Kruglov).
- 修复在不支持事务的存储上执行事务时发生的崩溃问题。 #73045 (Raúl Marín).
- 在解析
Tuple时检查是否存在重复的 JSON 键。之前这可能会在解析过程中导致逻辑错误Invalid number of rows in Chunk。 #73082 (Pavel Kruglov).