全部产品
Search
文档中心

云数据库 ClickHouse:25.10企业版发布详情

更新时间:Feb 26, 2026

本文介绍云数据库ClickHouse25.10企业版发布的功能详情。

重要变更

  • 添加对在云数据库ClickHouse中查询Apache Paimon的支持。

  • JOIN性能优化。

  • 查询性能优化(parallel replicas支持从projection读取、Query Condition Cache优化等)。

非兼容变更

数据格式和schema变更

  • 更改默认的schema_inference_make_columns_nullable设置,以遵守Parquet/ORC/Arrow元数据中的列Nullable信息,而不是将所有内容都设为Nullable。文本格式没有变化。

  • 默认情况下禁用在JSON格式中对64位整数加引号。

  • 在JSON中推断不同类型值的数组时,使用Array(Dynamic)而不是未命名的Tuple。要使用之前的行为,请禁用设置input_format_json_infer_array_of_dynamic_from_array_of_different_types

  • 默认情况下,在Parquet输出格式中将Enum类型的值写入为带有ENUM逻辑类型的BYTE_ARRAY

查询和函数变更

  • Query result cache忽略log_comment设置,因此仅更改查询的log_comment不再强制cache miss。如果用户有意通过改变log_comment来分段缓存,此更改会改变该行为,因此向后不兼容。请使用设置query_cache_tag来实现此目的。

  • 在之前的版本中,与运算符实现函数同名的表函数的查询格式不一致。EXPLAIN SYNTAX查询将不会格式化运算符,新行为更好地反映了解释语法的目的。clickhouse-formatformatQuery等工具在查询以函数形式包含它们时,不会将函数格式化为运算符。

  • 禁用IPv4/IPv6的无意义二进制操作:禁用IPv4/IPv6与非整数类型的加/减运算。之前它允许与浮点类型的操作,并对某些其他类型(如DateTime)抛出逻辑错误。

  • 将函数searchAnysearchAll重命名为hasAnyTokenshasAllTokens,以便与现有函数hasToken更好地保持一致。

数据类型变更

禁止在JOIN键中使用Dynamic类型。当Dynamic类型与非Dynamic类型比较时可能导致意外结果。建议将Dynamic列转换为所需类型。

存储和索引变更

  • 弃用设置allow_dynamic_metadata_for_data_lakes。现在所有Iceberg表在执行每个查询之前都会尝试从存储中获取最新的表schema。

  • 倒排文本索引从头开始重新设计,以便能够扩展到不适合RAM的数据集。

  • storage_metadata_write_full_object_key服务器设置默认开启,且不能再关闭。

  • 从filesystem cache中删除cache_hits_thresholdcache_hits_threshold是在添加SLRU缓存策略之前添加的,不需要同时支持两者。

  • 添加对hive分区样式写入的支持并重构读取实现(hive分区列不再是虚拟列)。

  • 默认启用MergeTree设置write_marks_for_substreams_in_compact_parts。这显著提升了从新创建的Compact部分读取子列的性能。版本低于25.5的服务器将无法读取新的Compact部分。

  • 禁止在SummingMergeTree中对明确列出的求和列执行RENAME COLUMNDROP COLUMN操作。

设置和配置变更

  • replicated_deduplication_window_seconds从1周减少到1小时,以便在插入率较低时在zookeeper上存储更少的znode。

  • 将设置query_plan_use_new_logical_join_step重命名为query_plan_use_logical_join_step

  • 新语法允许tokenizer参数更具表现力。

  • min_free_disk_ratio_to_perform_insertmin_free_disk_bytes_to_perform_insert设置的两个细微变化:使用未保留的字节而不是可用字节来确定是否应拒绝插入。这在后台合并和mutation的保留相对于配置的阈值较小时可能不重要,但似乎更正确。不要将这些设置应用于系统表。理由是我们仍然希望像query_log这样的表被更新。这对调试有很大帮助。写入系统表的数据通常比实际数据小,因此在合理的min_free_disk_ratio_to_perform_insert阈值下它们应该能够持续更长时间。

Keeper变更

为Keeper的内部复制启用async模式。Keeper将保持与以前相同的行为,并可能提高性能。如果您从23.9之前的版本更新,需要先更新到23.9以上版本,然后再更新到25.10以上版本。您也可以在更新前将keeper_server.coordination_settings.async_replication设置为0,并在更新完成后启用它。

新特性

函数

  • 添加naiveBayesClassifier函数,使用基于ngrams的Naive Bayes对文本进行分类。

  • 添加函数arrayExcept,将一个数组作为集合从另一个数组中减去。

  • 新增conv函数用于在不同进制之间转换数字,当前支持2-36进制。

  • 添加studentTTestOneSample聚合函数。

  • 添加isValidASCII函数来检查字符串是否只包含ASCII字符。

  • 聚合函数timeSeriesChangesToGridtimeSeriesResetsToGrid。行为类似于timeSeriesRateToGrid,接受开始时间戳、结束时间戳、步长和回看窗口的参数,以及时间戳和值的两个参数,但每个窗口至少需要1个样本而不是2个。计算PromQL的changes/resets,计算在由参数定义的时间网格中每个时间戳的指定窗口内样本值变化或减少的次数。返回类型是Array(Nullable(Float64))

  • 聚合函数quantilePrometheusHistogram,接受直方图bucket的上界和累积值作为参数,并在找到分位数位置的bucket的上界和下界之间执行线性插值。行为类似于经典直方图上的PromQL histogram_quantile()函数。

  • 添加了startsWithendsWith函数的优化不区分大小写变体:startsWithCaseInsensitiveendsWithCaseInsensitivestartsWithCaseInsensitiveUTF8endsWithCaseInsensitiveUTF8

  • extractKeyValuePairs函数引入新参数unexpected_quoting_character_strategy,用于控制意外遇到quoting_character时的处理方式。

  • 之前,函数countMatches会在第一个空匹配处停止计数,即使模式接受它。为了解决这个问题,countMatches现在在发生空匹配时通过前进一个字符来继续执行。希望保留旧行为的用户可以启用设置count_matches_stop_at_empty_match

系统表

  • 添加新系统表database_replicas,包含有关数据库副本的信息。

  • 添加新的system.aggregated_zookeeper_log表。该表包含按session id、父路径和操作类型分组的ZooKeeper操作的统计信息(例如操作数、平均延迟、错误),并定期刷新到磁盘。

  • 添加系统表iceberg_metadata_log以在SELECT语句期间检索Iceberg元数据文件。

  • system.warnings表添加cpu和memory的警告。

  • Delta lake元数据文件的系统表。

  • 添加新系统表system.dead_letter_queue以保存来自Kafka等引擎的错误传入消息。

  • 添加system.zookeeper_connection_log系统表以存储有关ZooKeeper连接的历史信息。

  • 添加了新的系统表system.codecs以查看可用的codec。

  • 引入system.completions表。

表引擎和存储

  • 支持表引擎Alias。

  • 现在可以通过为NATS引擎指定新设置nats_streamnats_consumer来使用NATS JetStream消费消息。

  • Iceberg和delta lake表使用磁盘配置。这允许使用现有磁盘指定用户表。添加设置allowed_disks_for_table_engines,允许特定磁盘用于Iceberg。示例:CREATE TABLE test ENGINE = Iceberg('path/inside/disk') SETTING datalake_disk_name = '<some_user_disk>';

  • 添加新表设置min_level_for_wide_part,允许指定将part创建为wide part的最小级别。

  • 所有表均支持_table虚拟列,不仅仅是Merge类型表。

  • 为类型为Float32Float64的列添加SZ3作为有损但有误差界限的压缩codec。

  • 添加了对MergeTree系列表的轻量级更新支持。轻量级更新可以通过新语法使用:UPDATE <table> SET col1 = val1, col2 = val2, ... WHERE <condition>。通过轻量级更新添加了轻量级删除的实现,可以通过设置lightweight_delete_mode = 'lightweight_update'启用。

  • 在MergeTree系列表中支持_part_granule_offset虚拟列。该列指示每行在其数据部分内所属的granule/mark的从零开始的索引。

Iceberg和data lakes

  • 添加对在云数据库ClickHouse中查询Apache Paimon的支持。此集成将使云数据库ClickHouse用户能够直接与Paimon的data lake存储交互。

  • Iceberg表引擎的ALTER UPDATE

  • 在Iceberg schema演化中支持复杂类型。

  • insert查询引入Iceberg写入功能。

  • 支持Iceberg表引擎的位置删除。

  • 通过字段ID读取Iceberg数据文件。

  • Iceberg写入用于create。

  • Glue catalog的写入支持。

  • Iceberg Rest catalog的写入支持。

  • 将所有iceberg位置删除文件合并到数据文件中。这将减少iceberg存储中parquet文件的数量和大小。语法:OPTIMIZE TABLE table_name

  • 支持Iceberg的DROP TABLE(从REST/Glue catalog中删除+删除表的元数据)。

  • 支持Iceberg以merge-on-read格式的ALTER DELETE mutation。

  • 支持写入DeltaLake。

  • 在元数据(manifest条目)中写入更多Iceberg统计信息(列大小、下限和上限)以进行min-max修剪。

  • 支持为简单类型在Iceberg中添加/删除/修改列。

索引和统计

  • 新的sparse_gram bloom filter索引,用于查找长子字符串。

  • 添加了在MergeTree表中的所有合适列上自动创建统计信息的能力。添加了表级设置auto_statistics_types,存储要创建的统计信息类型的逗号分隔列表(例如auto_statistics_types = 'minmax, uniq, countmin')。

SQL和查询功能

  • 添加LIMIT BY ALL语法支持。类似于GROUP BY ALLORDER BY ALLLIMIT BY ALL会自动扩展以使用SELECT子句中的所有非聚合表达式作为LIMIT BY键。例如,SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY ALL等同于SELECT id, name, count(*) FROM table GROUP BY id LIMIT 1 BY id, name。此功能简化了当您想要按所有选定的非聚合列进行限制而无需显式列出它们时的查询。

  • 在查询设置中将裸设置名称视为等于1(例如SELECT ... SETTINGS use_query_cache等同于use_query_cache = 1)。

  • 允许用户使用与临时表相同的语法创建临时视图。

  • 添加对负数LIMIT和负数OFFSET的支持。

  • 支持DESCRIBE SELECT而不仅仅是DESCRIBE (SELECT ...)

  • 支持编写USE DATABASE {name}

  • 为parallel replicas实现了从projection读取。添加了新设置parallel_replicas_support_projection来控制是否启用projection支持。为了简化实现,仅在parallel_replicas_local_plan处于活动状态时才启用projection支持。

服务器配置和工作负载管理

  • 新配置选项:logger.startupLevellogger.shutdownLevel允许在云数据库ClickHouse启动和关闭期间分别覆盖日志级别。

  • 添加了一种方法,使用服务器配置“resources_and_workloads”部分在SQL中提供WORKLOADRESOURCE定义。

  • 服务器设置cpu_slot_preemption为工作负载启用抢占式CPU调度,并确保工作负载之间CPU时间的max-min公平分配。添加了用于CPU限流的新工作负载设置:max_cpusmax_cpu_sharemax_burst_cpu_seconds

  • 现在支持工作负载设置max_waiting_queries。它可用于限制查询队列的大小。如果达到限制,所有后续查询将以SERVER_OVERLOADED错误终止。

  • 在配置的查询数或时间阈值后断开TCP连接。

系统命令

  • 添加SYSTEM RECONNECT ZOOKEEPER命令以强制zookeeper断开连接并重新连接。

  • 通过设置max_named_collection_num_to_warnmax_named_collection_num_to_throw限制命名集合的数量。添加新指标NamedCollection和错误TOO_MANY_NAMED_COLLECTIONS

Keeper

在Keeper客户端中添加cp-cprmv-mvr命令的递归变体。

协议和客户端支持

  • 通过添加arrowflight表引擎实现对ArrowFlight RPC协议的支持。

  • 添加PostgreSQL协议COPY命令支持。

  • 支持mysql协议的C#客户端。

  • mysql_portpostgresql_port强制使用安全连接。

格式

  • 添加format_schema_source设置,定义format_schema的来源。

  • 添加Hash作为新的输出格式。它为结果的所有列和行计算单个哈希值。这对于计算结果的“指纹”很有用,例如在数据传输成为瓶颈的用例中。

实验性功能

  • 函数searchAllsearchAny可以在没有文本列的列之上工作。在这些情况下,它们使用默认tokenizer。

  • 实现QBit数据类型,以bit-sliced格式存储向量,以及L2DistanceTransposed函数,允许通过参数控制精度-速度权衡的近似向量搜索。

  • 添加Ytsaurus表引擎和表函数。

  • 添加函数searchAnysearchAll,这些是搜索文本索引的通用工具。

  • 文本索引现在支持string tokenizer。

  • text索引的默认索引粒度值更改为64。

性能优化

查询执行和优化

  • 通过重构Query Condition Cache (QCC)与索引分析的顺序和集成来改进查询性能。QCC过滤现在在主键和skip索引分析之前应用,减少了不必要的索引计算。索引分析已扩展以支持多个范围过滤器,其过滤结果现在存储回QCC。这显著加快了索引分析主导执行时间的查询——特别是依赖skip索引(例如vector或inverted索引)的查询。

  • 一系列微优化以加速小查询。

  • 在native协议中压缩日志和profile事件。在具有100+个副本的集群上,未压缩的profile事件占用1~10 MB/秒,在慢速互联网连接上进度条会很慢。

  • 改进func(primary_column) = 'xx'column in (xxx)等条件的pre where优化。

  • 避免使用uuid过滤器对system.tables进行全扫描(如果您只有来自日志或zookeeper路径的UUID,这可能很有用)。

  • -If聚合函数组合器进行了简单优化。

  • 添加了新逻辑(由设置enable_producing_buckets_out_of_order_in_aggregation控制,默认启用),允许在内存高效聚合期间无序发送一些bucket。

  • 使TOTALS步骤之后的pipeline多线程化。

  • 当聚合查询仅包含对NOT NULL列的单个COUNT()函数时,在哈希表探测期间完全内联聚合逻辑。

  • 当通过多个string或number列进行group by时,按列计算序列化键。

  • -If组合器实现addManyDefaults

JOIN优化

  • 提供了关于下推析取JOIN谓词的逻辑。

  • 实现了JOIN重写:

    1. 如果过滤条件对匹配或非匹配行始终为false,则将LEFT ANY JOINRIGHT ANY JOIN转换为SEMI/ANTI JOIN。此优化由新设置query_plan_convert_any_join_to_semi_or_anti_join控制。

    2. 如果过滤条件对一侧的非匹配行始终为false,则将FULL ALL JOIN转换为LEFT ALLRIGHT ALL JOIN。

  • 在具有大量不匹配行的LEFT/RIGHT join情况下,HashJoin性能略有优化。

  • Join重排序现在使用统计信息。可以通过设置allow_statistics_optimize = 1query_plan_optimize_join_order_limit = 10来启用该功能。

  • 在join优化期间跳过运行时哈希表统计信息重新计算。添加了新的profile事件JoinOptimizeMicrosecondsQueryPlanOptimizeMicroseconds

  • 在某些情况下,为了稍微更好的join性能,内联AddedColumns::appendFromBlock

  • 添加新设置min_joined_block_size_rows(类似于min_joined_block_size_bytes;默认为65409)以控制JOIN输入和输出块的最小块大小(以行为单位)(如果join算法支持)。

  • 通过在只有一个键列的典型情况下删除对哈希映射的额外循环来优化HashJoin的性能。

  • 来自具有多个析取的JOIN情况应用了null_mapJoinMask的优化。

  • 对于join标志使用普通的std::vector<std::atomic_bool>

  • 在哈希JOIN主循环之外处理max_joined_block_rows

  • HashJoin使用lazy输出模式时,不要提前为结果列预分配内存。

  • 如果右侧由join键列在功能上确定,所有LEFT/INNER JOIN将自动转换为RightAny

  • 改进了在Join模式下应用patch部分的性能。

字符串和函数优化

  • 通过使用StringZilla库(在可用时使用SIMD CPU指令)改进大小写敏感字符串搜索的性能(例如过滤操作,如WHERE URL LIKE '%google%')。

  • 通过使用新的默认设置optimize_rewrite_like_perfect_affix改进带前缀或后缀的LIKE的性能。

  • 改进了函数tokenshasAllTokenshasAnyTokens的性能。

MergeTree和存储优化

  • 为MergeTree表中的顶级String列添加可选的.size子列序列化,以改进压缩并启用高效的子列访问。

  • 当表具有类型为SimpleAggregateFunction(anyLast)的列时,使用FINAL从聚合合并树表中选择时减少内存分配和内存复制。

  • 改进了执行轻量级删除后垂直合并的性能。

  • 通过优化MarkRanges(使用devector代替deque)改进了表中有大量part的快速查询的性能。

  • 为MergeTreeLazy读取器启用在缓存中保存marks并避免直接IO。

  • 具有is_deleted列的ReplacingMergeTree表上带有FINAL子句的SELECT查询现在执行得更快,因为从2个现有优化改进了并行化。

聚合和GROUP BY优化

  • 修复在通过多个string/number列进行分组时由大序列化键引起的性能下降。

  • RadixSort:帮助编译器使用SIMD,CPU更好地进行预取。

分布式查询改进

  • 引入了一个选项,将块的(反)压缩和(反)序列化卸载到pipeline线程中,而不是与网络连接关联的单个线程。

  • 在每个分片上独立执行INSERT SELECT的模式下,默认启用并行分布式INSERT SELECT

  • 在native协议中压缩日志和profile事件。

  • 修复了parallel replicas的最小任务大小计算。

索引改进

  • 改进了为主要包含非频繁token的文档构建文本索引的性能。

  • 由于减少了存储读取和CPU使用,使用向量相似性索引的向量搜索查询以更低的延迟完成。

  • filterPartsByQueryConditionCache中遵守merge_tree_min_{rows,bytes}_for_seek

  • 首先处理更高粒度的min-max索引。

  • bloom filter索引现在用于has([c1, c2, ...], column)等条件。

  • 按文件大小递增顺序处理索引。

  • 之前,文本索引数据将被分成多个段(每个段大小默认为256 MiB)。

子查询优化

  • 通过使用等价类删除冗余的JOIN操作,优化相关子查询的生成计划。

  • 当相关子查询作为函数EXISTS的参数出现时,仅读取所需的列。

存储引擎改进

  • 修复Redis和KeeperMap存储的按键过滤。

  • ATTACH PARTITION不再导致所有缓存被删除。

  • 避免在创建存储快照数据时持有锁。

  • 删除临时部分可能需要一段时间(特别是对于S3)。

格式改进

  • 新的parquet阅读器实现。它通常更快,支持页面级过滤器下推和PREWHERE

  • 通过在没有解析错误时重用序列化器,改进了ProtobufSingle输入格式的性能。

数据类型和序列化优化

  • 通过为MergeTree中的JSON共享数据实现新的序列化,显著提高了从MergeTree读取JSON子列的性能。

  • 通过简化代码优化字符串反序列化。

Pipeline和执行改进

  • 在pipeline构建期间最小化端口头中的内存复制。

  • 改进pipeline构建的性能。

  • 优化MergeTreeReadersChain::getSampleBlock。

  • 在我们只进行此实体化以返回单行的情况下,优化常量的实体化。

内存和资源优化

  • 调整一些jemalloc配置以提高性能。

  • 在ProfileEvents的Counter中添加对齐以减少false sharing。

  • 减少CompressedReadBufferBase::readCompressedData中不必要的memcpy调用。

改进

查询优化和执行

  • mannWhitneyUTest在两个样本都只包含相同值时不再抛出异常。

  • 添加了实验性的join顺序优化,可以自动重新排序JOIN以获得更好的性能(由query_plan_optimize_join_order_limit设置控制)。

  • 支持在读取期间使用skip索引过滤数据部分以减少不必要的索引读取。

  • 重写磁盘对象存储事务在元数据事务提交时删除先前的远程blob。

  • 使S3重试策略可配置。

  • 修复了当优化前后结果类型的LowCardinality不同时冗余相等表达式的优化pass。

  • 特殊列可用于指示oneof部分的存在。

  • 当为新Kafka表引擎指定不正确的设置时,现在会向用户提供更清晰的说明。

  • 当HTTP客户端除了Expect: 100-continue之外还设置标头X-ClickHouse-100-Continue: defer时,云数据库ClickHouse在配额验证通过之前不会向客户端发送100 Continue响应。

  • 不再可能为Time类型指定时区。

  • 通过使用system.completions而不是发出多个系统表查询,客户端自动完成更快、更一致。

  • 简化(并避免了一些错误)与以best_effort格式解析Time[64]相关的逻辑。

  • 通过在运行时从右子树构建bloom过滤器并将此过滤器传递给左子树中的扫描来加速某些JOIN查询。

  • 创建物化视图时可以在TO之后使用查询参数。

  • 使用S3存储的DATABASE ENGINE = Backup时在日志中掩码S3凭据。

  • 更新jemalloc到更新版本。改进基于jemalloc内部工具的分配分析。

  • 添加deltaLakeAzureCluster函数(类似于cluster的deltaLakeAzure)和deltaLakeS3Cluster(deltaLakeCluster的别名)函数。

  • 重命名InterpreterSystemQuery::dropReplicaImpl为InterpreterSystemQuery::dropStorageReplica。

  • 修复包含materialize函数的TTL的不一致格式化。

  • 在S3对象存储中遇到可重试错误时减慢S3客户端线程。

  • 将设置allow_experimental_variant/dynamic/json和enable_variant/dynamic/json标记为过时。现在无条件启用所有三种类型。

  • 改进S3(Azure)Queue表引擎,使其能够在不出现潜在重复的情况下在zookeeper连接丢失后存活。

  • Iceberg表状态不再存储在存储对象中。

  • 添加设置query_condition_cache_selectivity_threshold(默认值:1.0),将低选择性谓词的扫描结果排除在插入查询条件缓存之外。

  • http_handlers中支持按完整URL字符串(full_url指令)过滤(包括schema和host:port)。

  • 为Delta Lake写入功能添加实验性设置allow_experimental_delta_lake_writes,默认禁用。

  • 修复init.d脚本中systemd的检测(修复“Install packages”检查)。

  • 添加新的startup_scripts_failure_reason维度指标。

  • Iceberg写入中的多个数据文件。

  • Iceberg写入中分区的更多类型。

  • 允许为Iceberg表的分区省略identity()函数。

  • 添加仅为特定channel启用JSON日志记录的能力。

  • 为Delta Lake中插入的数据文件添加行/字节限制。

  • 允许在WHERE中使用native数字。

  • 修复对具有损坏元数据的Catalog执行SYSTEM DROP REPLICA时的错误。

  • 将设置evaluation_time重命名为promql_evaluation_time

  • Iceberg drop中删除文件的设置。

  • 减少Iceberg写入中的内存使用。

  • 使today()函数不区分大小写。

  • 使timeSeries*()函数中的staleness窗口左开右闭。

  • 添加FailedInternal*Query profile事件。

  • 在S3Queue有序模式下使bucket锁成为持久模式。

  • 修复通过配置文件添加时名称中带点的用户的处理。

  • 为查询中的内存使用添加异步指标(QueriesMemoryUsageQueriesPeakMemoryUsage)。

  • 可以使用clickhouse-benchmark --precise标志进行更精确的QPS和其他每间隔指标报告。

  • 修复误导性的“specified upload does not exist”错误。

  • 限制EXPLAIN查询中的查询计划描述。

  • 添加调整待处理信号的能力。

  • Data lakes的分布式insert/select。

  • 改进Keeper中RemoveRecursive请求的性能。

  • 在JSON类型输出期间删除PrettyJSONEachRow中的额外空格。

  • 将复制去重窗口增加到10000。

  • 现在我们为plain rewriteable磁盘在删除目录时写入prefix.path的blob大小。

  • 使yesterday()函数不区分大小写。

  • 支持针对远程ClickHouse实例(包括ClickHouse Cloud)的.xml性能测试。

  • 在已知会分配大量内存(>16MiB)的某些地方尊重内存限制。

  • 防止非布尔设置在查询中不设置值。

  • 支持格式名称的提示。

  • 当没有projection时,远程副本跳过索引分析。

  • 如果设置network_compression_method不是支持的通用codec,则抛出异常。

  • 系统表system.query_cache现在返回所有查询结果缓存条目。

  • arrowFlight()表函数中添加对身份验证和SSL的支持。

  • S3表引擎和s3表函数添加新参数storage_class_name

  • 允许为ytsaurus表禁用utf8编码。

  • 支持data lakes磁盘的Azure。

  • 添加新的dictionary_block_frontcoding_compression文本索引参数。

  • 为parseDateTime函数启用短路求值。

  • 支持alter table ... materialize statistics all将实体化表的所有统计信息。

  • 默认禁用s3_slow_all_threads_after_retryable_error

  • 添加新的system.aggregated_zookeeper_log表。

  • 将表函数arrowflight重命名为arrowFlight

  • 更新clickhouse-benchmark以接受在cli标志中使用-代替_

  • 添加会话设置以从插入时的实体化中排除skip索引列表。

  • 使刷新到system.crash_log的信号处理同步。

  • 在system.parts_columns中添加新列statistics

  • 添加设置inject_random_order_for_select_without_order_by

  • 在Iceberg写入中支持其他格式(ORC、Avro)。

  • 改进joinGet错误消息。

  • 根据设置从所有线程压缩数据后再插入到物化视图。

  • 此patch添加了在写入tx期间检查任意Keeper节点stat的能力。

  • 将繁重的ytsaurus请求重定向到繁重的代理。

  • 此patch修复了unlink/rename/removeRecursive/removeDirectory等操作的回滚。

  • 添加了keeper_server.tcp_nodelay配置参数。

  • clickhouse-benchmarks中支持--connection

  • 现在设置max_insert_threads将对Iceberg表生效。

  • PrometheusMetricsWriter添加直方图和维度指标。

  • 函数hasToken现在对空token返回零匹配。

  • ArrayMapmapKeysmapValues)值添加文本索引支持。

  • 添加新的ZooKeeperSessionExpired指标。

  • 为服务器端(native)复制到备份目标使用具有备份特定设置的S3存储客户端。

  • 修复在使用实验性make_distributed_plan进行查询计划序列化期间对设置max_joined_block_size_rowsmax_joined_block_size_bytes的不正确处理。

  • 设置enable_http_compression现在是默认的。

  • 添加了新设置keeper_hosts

  • 添加ALTER TABLE REWRITE PARTS

  • 为系统仪表板添加fromto值。

  • 为Iceberg SELECT中的性能跟踪添加更多信息。

  • 添加新的joined_block_split_single_row设置。

  • 文件系统缓存改进:在并发保留缓存空间的线程之间重用缓存优先级迭代器。

  • 添加限制Keeper请求的能力。

  • 修复clickhouse-benchmark,默认情况下不在错误消息中包含堆栈跟踪。

  • 当marks在缓存中时,避免使用线程池异步marks加载。

  • Ytsaurus:允许使用列子集创建table/table functions/dictionaries。

  • 从现在开始,system.zookeeper_connection_log默认启用。

  • 使TCP和HTTP行为在传递重复外部表时保持一致。

  • 删除用于读取Arrow/ORC/Parquet的自定义MemoryPools。

  • 允许创建不带参数的Replicated数据库。

  • 添加对连接到clickhouse-keeper的tls端口的支持。

  • 添加了新的profile事件来跟踪由于超出内存限制而拒绝后台合并的次数。

  • generateSerialID函数添加可选的start_value参数。

  • 为CREATE/ALTER TABLE列默认表达式验证启用analyzer。

  • 内部查询计划改进:对CROSS JOIN使用JoinStepLogical。

  • 完全支持运算符IS NOT DISTINCT FROM (<=>)。

  • 默认启用全局采样分析器。

  • 修复了对具有Alias引擎的表的EXCHANGE TABLES操作的支持。

  • 添加设置temporary_files_buffer_size

  • 添加了对使用parallel replicas直接从文本索引读取的支持。

  • 现在函数generateSerialID支持具有系列名称的非常量参数。

  • 用于分布式处理的Datalakes catalogs数据库。

  • 使函数lag不区分大小写以与MySQL兼容。

  • 添加配置keeper_server.coordination_settings.check_node_acl_on_remove

  • 使用Vertical格式时,JSON列现在会美化打印。

  • clickhouse-client文件(例如查询历史)存储在XDG Base Directories规范描述的位置。

  • 修复由于GLOBAL IN导致的内存泄露。

  • 为hasAny/hasAllTokens添加重载以接受字符串输入。

  • 在此patch之后,启发式to_remove_small_parts_at_right将在计算合并范围分数之前执行。

  • clickhouse-keeper的postinstall脚本添加步骤。

  • 仅在粘贴时在Web UI中检查凭据。

  • 违反约束时限制异常消息长度。

bug修复

查询执行修复

  • 对于复制数据库和内部复制表,ALTER查询的结果仅在发起者节点上验证。这将修复已提交的ALTER查询可能在其他节点上卡住的情况。

  • 限制BackgroundSchedulePool中每种类型任务的数量。避免所有槽位被一种类型的任务占用而其他任务饿死的情况。也避免任务相互等待时的死锁。这由background_schedule_pool_max_parallel_tasks_per_type_ratio服务器设置控制。

  • 修复GeoParquet导致客户端协议错误的问题。

  • 修复在发起者节点上解析子查询中主机相关函数(如shardNum())的问题。

  • 恢复数据库副本时正确关闭表。不正确的关闭会导致在数据库副本恢复期间某些表引擎出现LOGICAL_ERROR。

  • 在为数据库名称生成拼写错误更正提示期间检查访问权限。

  • 修复了在各种日期时间相关函数中对带小数秒的纪元前日期的不正确处理,例如parseDateTime64BestEffortchange{Year,Month,Day}makeDateTime64。之前亚秒部分是从秒中减去而不是添加。

  • 多项hive相关修复:LowCardinality支持、虚拟列处理、空格式处理等。

  • 防止对IN函数的第一个参数进行不必要的优化,这有时会在使用数组映射时导致错误。

  • iceberg源ID和parquet名称之间的映射未根据parquet文件写入时的schema进行调整。此PR处理与每个iceberg数据文件相关的schema,而不是当前的schema。

  • 修复与打开文件分开读取文件大小的问题。

  • ClickHouse Keeper不再在内核级别禁用IPv6的系统上启动失败(例如,带有ipv6.disable=1的RHEL)。

  • 为globalJoin中的parallel replicas添加TableFunctionRemote支持。

  • 修复OrcSchemaReader::initializeIfNeeded()中的空指针。

  • 添加检查以仅在相关子查询使用外部查询的列时才允许FROM子句中的相关子查询。

  • 修复使用子列更新列的alter update,该子列在其他列的物化表达式中使用。

  • 禁止更改其子列在PK或分区表达式中使用的列。

  • 修复在同一ALTER语句中列状态更改时ALTER COLUMN IF EXISTS命令失败的问题。

  • 修复在存储DeltaLake中使用非默认列映射模式读取子列的问题。

  • 修复在JSON内部带有Enum提示的路径使用错误默认值的问题。

  • DataLake hive catalog url解析与输入清理。

  • 修复文件系统缓存动态调整大小期间的逻辑错误。

  • 为DatabaseReplicatedSettings中的logs_to_keep使用NonZeroUInt64

  • 如果使用设置index_granularity_bytes = 0创建表(例如ReplacingMergeTree),带有skip索引的FINAL查询会抛出异常。该异常现已修复。

  • 删除UB并修复Iceberg分区表达式解析的问题。

  • 修复推断超出支持范围的日期时的Date/DateTime/DateTime64。

  • 修复在一个INSERT中const和non-const块的崩溃情况。

  • 从SQL创建磁盘时,将/etc/metrika.xml中的includes作为默认值处理。

  • 修复从String到JSON的accurateCastOrNull/accurateCastOrDefault。

  • 在iceberg引擎中支持不带'/'的目录。

  • 修复使用replaceRegex、FixedString haystack和空needle时的崩溃。

  • 修复ALTER UPDATE Nullable(JSON)期间的崩溃。

  • 修复system.tables中缺少的列definer。

  • 修复从LowCardinality(Nullable(T))到Dynamic的转换。

  • 修复写入DeltaLake期间的逻辑错误。

  • 修复从Azure blob存储的plain_rewritable磁盘读取空blob时的416 The range specified is invalid for the current size of the resource错误。

  • 修复GROUP BY Nullable(JSON)。

  • 修复物化视图中的错误:如果MV被创建、删除,然后使用相同名称再次创建,则可能无法工作。

  • 从*cluster函数读取时,如果所有副本都不可用则失败。

  • 修复由于Buffer表导致的MergesMutationsMemoryTracking泄漏,并修复从Kafka(和其他)流式传输的query_views_log

  • 删除alias存储的引用表后修复show tables。

  • 修复启用send_chunk_header且通过HTTP协议调用UDF时缺少chunk头的问题。

  • 修复启用jemalloc profile刷新时可能的死锁。

  • 修复在DeltaLake表引擎中读取子列的问题。

  • 正确处理loopback主机ID以避免处理DDL任务时的冲突。

  • 修复具有numeric/decimal列的PostgreSQL数据库引擎表的detach/attach。

  • 修复getSubcolumnType中使用未初始化内存的问题。

  • 函数searchAnysearchAll在使用空needles调用时现在返回true(即"匹配所有内容")。之前它们返回false

  • 修复当第一个bucket没有值时函数timeSeriesResampleToGridWithStaleness()的问题。

  • 修复由merge_tree_min_read_task_size设置为0引起的崩溃。

  • 读取时从Iceberg元数据获取每个数据文件的格式(之前是从表参数获取)。

  • 修复某些有效用户提交到AggregateFunction(quantileDD)列的数据可能导致合并无限递归的崩溃。

  • 修复Backup db引擎在零大小part文件的查询上引发异常的问题。

  • 修复启用send_chunk_header且通过HTTP协议调用UDF时缺少chunk头的问题。

  • 修复由于keeper会话过期导致的S3Queue逻辑错误"Expected current processor {} to be equal to {}"。

  • 插入和修剪中的可空性错误。

  • 如果禁用Iceberg元数据缓存,不要禁用文件系统缓存。

  • 修复parquet读取器v3中的'Deadlock in Parquet::ReadManager (single-threaded)'错误。

  • 修复ArrowFlight的listen_host中对IPv6的支持。

  • 修复ArrowFlight处理器中的关闭问题。

  • 修复describe_compact_output=1的分布式查询。

  • 修复窗口定义解析和应用查询参数。

  • 修复在使用PARTITION BY但没有分区通配符创建表时的异常Partition strategy wildcard can not be used without a '_partition_id' wildcard.,这在25.8之前的版本中可以工作。

  • 修复并行查询尝试获取单个锁时的LogicalError。

  • 修复在RowBinary输入格式中将NULL写入JSON共享数据的问题,并在ColumnObject中添加一些额外的验证。

  • 在作为cluster表函数创建的表中支持JSON/Dynamic类型。

  • 修复带limit的空Tuple排列。

  • 不要为持久处理节点使用单独的keeper节点。

  • 修复TimeSeries引擎表破坏Replicated数据库中新副本创建的问题。

  • 修复在任务缺少某些Keeper节点的情况下查询system.distributed_ddl_queue的问题。

  • 修复在解压缩块末尾的查找。

  • 处理Iceberg Iterator异步执行期间抛出的异常。

  • 修复保存大型预处理XML配置的问题。

  • 修复system.iceberg_metadata_log表中日期字段的填充。

  • 修复带WHERETTL的无限重新计算。

  • 修复在CTE中计算的函数在查询中非确定性的结果。

  • 修复主键列上使用pointInPolygon时EXPLAIN中的LOGICAL_ERROR。

  • 修复带ROLLUPCUBE修饰符的uniqExact函数可能的不正确结果。

  • 修复名称中带有百分号编码序列的data lake表。

  • 修复当parallel_replicas_for_cluster_functions设置为1时使用url()表函数解析表schema的问题。

  • 将PREWHERE拆分为多个步骤后正确转换输出。

  • 修复带ON CLUSTER子句的轻量级更新。

  • 修复某些带有String参数的聚合函数状态的兼容性。

  • 修复在使用optimize_functions_to_subcolumnsOUTER JOIN中nullable列上的不正确IS NULL行为。

  • 修复OpenAI的模型名称未传递的问题。

  • EmbeddedRocksDB:路径必须在user_files内。

  • 修复25.1之前创建的KeeperMap表在DROP查询后在ZooKeeper中留下数据的问题。

  • 修复读取parquet时的maps和arrays字段ID。

  • 修复在lazy materialization中读取带有数组大小子列的数组。

  • 修复max_temporary_data_on_disk_size限制跟踪中临时数据释放的不正确计数。

  • 函数checkHeaders现在正确验证提供的headers并拒绝禁止的headers。

  • 使toDatetoDate32对所有数值类型的行为相同。修复从int16转换期间的Date32下溢检查。

  • 修复带有Dynamic参数的CASE函数。

  • 修复具有多个JOIN的查询使用parallel replicas时的逻辑错误,特别是LEFT/INNER JOIN之后的RIGHT JOIN。

  • 在schema推断缓存中遵守设置input_format_try_infer_variants

  • 使pathStartsWith仅匹配前缀下的路径。

  • 修复从CSV中的空字符串读取空数组。

  • 修复非相关EXISTS可能的错误结果。它在execute_exists_as_scalar_subquery=1时被破坏,这在25.8中引入并影响25.8

  • 修复_row_number虚拟列和iceberg positioned deletes中的逻辑错误。

  • 修复由于混合const和non-const块导致的JOIN中的"Too large size passed to allocator" LOGICAL_ERROR

  • 如果未配置iceberg_metadata_log但用户尝试获取调试iceberg元数据信息,则抛出错误。

  • 修复从另一个MergeTree表读取的子查询的轻量级更新。

  • 修复move-to-prewhere优化,该优化在存在行策略时不起作用。

  • 修复对数据部分中缺少的具有默认表达式的列应用patches。

  • 修复EmbeddedRocksDB升级。

  • 修复从对象存储直接读取文本索引的问题。

  • 防止创建具有不存在引擎的权限。

  • 仅忽略s3_plain_rewritable的未找到错误。

  • 修复具有YTSaurus源和*range_hashed布局的字典。

  • 修复创建空元组数组。

  • 在临时表创建期间检查非法列。

  • 永远不要在格式头中放置hive分区列。

  • 修复使用文本格式时在DeltaLake中从格式准备读取的问题。

  • 修复Buffer表的select和insert的访问验证。

  • 禁止为S3表创建数据跳过索引。

  • 避免异步日志记录的跟踪内存泄露(可能有显著漂移,10小时约100GiB)和text_log(几乎相同的漂移)。

  • 修复了一个错误,如果视图被异步删除且服务器在完成后台清理之前重新启动,可能会导致使用View或Materialized View的SELECT设置覆盖全局服务器设置。

  • 计算内存过载警告时排除用户空间页面缓存字节(如果可能)。

  • 修复CSV反序列化期间不正确的类型顺序导致LOGICAL_ERROR的错误。

  • 修复可执行字典的command_read_timeout的不正确处理。

  • 修复使用新analyzer时WHERE子句中过滤替换列时的不正确SELECT * REPLACE行为。

  • 修复在Distributed上使用Merge时的两级聚合。

  • 修复未使用右行列表时HashJoin算法中输出块的生成。

  • 如果应用索引分析后没有数据要读取,则可能会错误选择Parallel replicas读取模式。

  • 修复Glue中timestamp / timestamptz列的处理。

  • 修复在PostgreSQL接口中写入布尔值的问题。

  • 修复带有CTE的insert select查询中的未知表错误。

  • 修复从无法在Nullable内部的Variants读取null map子列。

  • 修复在集群的辅助节点上完全删除数据库失败时的错误处理。

  • 修复几个skip索引错误。

  • 在AzureBlobStorage中,更新为首先尝试native复制,并在'Unauthorized'错误时进行读写。

  • 如果ArrowStream文件具有非唯一字典,云数据库ClickHouse会崩溃。

  • 修复最后一个块为空时带有projection的合并。

  • 如果参数类型不允许在GROUP BY中,则不要从GROUP BY中删除单射函数。

  • 修复在查询中使用session_timezone设置时基于datetime的键的不正确granules/分区消除。

  • 在PostgreSQL接口中查询后返回受影响的行数。

  • 限制对PASTE JOIN使用过滤器下推,因为它可能导致不正确的结果。

  • 在授权检查引入的评估之前应用URI规范化。

  • 修复当新analyzer中ARRAY JOIN COLUMNS()不匹配任何列时的逻辑错误。

  • 修复“High ClickHouse memory usage”警告(排除页面缓存)。

  • 修复设置了列TTLMergeTree表中可能的数据损坏。

  • 修复使用空元组参数调用时mortonEncodehilbertEncode函数的崩溃。

  • 现在,在集群中存在不活动副本的情况下,ON CLUSTER查询将花费更少的时间。

  • 现在DDL worker从副本集清理过时的主机。这将减少ZooKeeper中存储的元数据量。

  • 在发生错误时正确撤销移动目录操作。

  • 修复ColumnLowCardinalityis_shared标志的传播。

  • 修复工作负载设置max_cpu_share。现在可以在不设置max_cpus工作负载设置的情况下使用它。

  • 修复带有子查询的非常繁重的mutation可能在准备阶段卡住的错误。

  • 现在相关子查询将与对象存储一起工作。

  • 访问system.projectionssystem.data_skipping_indices时避免尝试初始化DataLake数据库。

  • 现在只有在明确启用show_data_lake_catalogs_in_system_tables时,datalakes catalog才会显示在系统内省表中。

  • 修复DatabaseReplicated以遵守interserver_http_host配置。

  • 在定义Projection的上下文中明确禁用位置参数。

  • 修复countMatches函数中的二次复杂度。

  • 使KeeperMap表的ALTER COLUMN ... COMMENT命令被复制。

  • 修复Database Replicated中物化视图的错误循环依赖情况。

  • 修复当group_by_overflow_mode设置为any时稀疏列的聚合。

  • 修复使用query_plan_use_logical_join_step=0和多个FULL JOIN USING子句时的"column not found"错误。

  • 节点数>10的大型集群在恢复时失败的概率很高。修复使控制尝试的设置动态化。

  • 此PR仅用于兼容23.8及之前版本。

  • 修复将大值转换为DateTime时accurateCast错误消息中的UBSAN整数溢出。

  • 修复tuple类型的coalescing merge tree。

  • 禁止对iceberg_format_version=1进行删除。

  • 此patch修复了任意深度文件夹的plain-rewritable磁盘的移动操作。

  • 修复*cluster函数的SQL SECURITY DEFINER。

  • 修复由并发mutation底层const PREWHERE列引起的潜在崩溃。

  • 修复从文本索引读取和启用查询条件缓存(启用设置use_skip_indexes_on_data_readuse_query_condition_cache)的问题。

  • Poco::Net::HTTPChunkedStreamBuf::readFromDevice抛出的Poco::TimeoutException异常会导致SIGABRT崩溃。

  • 修复在配置重新加载后云数据库ClickHouse首次连接时附加到system.zookeeper_connection_log的问题。

  • 修复了一个错误,即在使用时区时,使用date_time_overflow_behavior = 'saturate'将DateTime64转换为Date可能导致超出范围值的不正确结果。

  • 第N次尝试修复启用缓存的s3表引擎的“having zero bytes error”。

  • 修复loop表函数的select访问验证。

  • 当异步日志记录失败时捕获异常以防止程序中止。