本文介绍云数据库ClickHouse24.12企业发布的功能详情。
新特性
支持通过
SYSTEM LOAD PRIMARY KEY
命令,加载指定表(或所有表)所有分区的主索引,有助于基准测试和避免查询执行时的额外延迟。新增
CHECK GRANT
查询,用于检查当前用户/角色是否拥有特定权限,以及对应表/列是否存在于内存中。新增工作负载和资源管理的SQL语法描述。
实现Iceberg格式表的读取功能,支持列顺序、列名变更及简单类型扩展。
允许每种认证方式设置独立过期时间,并从用户实体中移除相关设置。
支持将外部用户角色从查询发起节点推送到集群其他节点(适用于仅发起节点可访问外部认证服务如LDAP的情况)。
支持从String类型ALTER到JSON类型,同时将JSON和Dynamic类型的序列化升级为V2版本(可通过设置
merge_tree_use_v1_object_and_dynamic_serialization
回退到V1版本)。新增
toUnixTimestamp64Second
函数,将DateTime64转换为固定秒精度的Int64值(支持1970年1月1日前的负值)。新增设置
enforce_index_structure_match_on_partition_manipulation
,允许当源表的投影和二级索引是目标表子集时执行ATTACH操作。新增Spark文本输出格式支持(默认关闭)。
S3端点新增access_header认证头类型(优先级最低,可被其他配置覆盖)。
初步实现设置分层功能。
支持ORDER BY WITH FILL中的staleness子句。
实现Map/Tuple/Object到JSON的简单CAST转换(通过JSON字符串序列化/反序列化)。
为聚合函数any/anyLast新增camelCase风格别名(如anyLastRespectNulls)。
新增配置参数
date_time_utc
,支持JSON日志使用RFC 3339/ISO8601格式的UTC时间。新增设置
query_plan_join_swap_table
,可选择作为内表(构建表)的连接侧(auto模式下自动选择行数较少的表)。优化索引粒度值的内存使用(当分区粒度恒定时),新增设置
use_const_adaptive_granularity
确保内存优化。实现全局开关
allowed_feature_tier
以禁用所有实验性/测试功能。新增iceberg/deltaLake/hudi的Cluster表函数。
支持ALTER USER/ROLE/PROFILE的SETTING/PROFILE修改语法。
新增
arrayPrAUC
函数(计算精确召回曲线下面积)。为MergeTree表实现 primary index 缓存(通过
use_primary_key_cache
启用),支持按需加载(类似标记缓存)和预热(通过prewarm_primary_key_cache
)。新增数组函数
indexOfAssumeSorted
(针对非递减排序数组优化搜索)。聚合函数
groupConcat
支持分隔符作为第二可选参数。新增设置
http_response_headers
支持自定义HTTP响应头。新增
fromUnixTimestamp64Second
函数(将Int64时间戳转为DateTime64)。
性能优化
新增设置
short_circuit_function_evaluation_for_nulls
,当Nullable列中NULL值比例超过阈值时,函数仅对非NULL行执行。优化对象存储磁盘的
--recursive
删除操作内存使用。使用
join_algorithm='parallel_hash'
时避免为并行处理复制输入块列。为更多表达式启用JIT编译(如abs/bitCount/比较函数/逻辑函数等)。
当
join_algorithm
设为default时优先考虑parallel_hash算法。优化非相交分区的Replacing合并算法。
通过减少临界区提升system.query_metric_log收集性能。
新增设置
optimize_extract_common_expressions
支持从WHERE/ON条件提取公共表达式以减少连接时的哈希表数量。支持对LowCardinality(String)使用索引。
在并行副本查询中,工作节点跳过索引分析(由协调节点完成)。
优化Compact Part单列子列读取优化。
优化LowCardinality(String)列排序性能。
优化简单数据类型的argMin/Max函数性能。
优化内存跟踪器的共享锁争用。
新增设置
use_async_executor_for_materialized_views
支持物化视图异步多线程执行(提升INSERT性能但增加内存消耗)。提高聚合和连接预分配内存的默认阈值(至10^12)。
优化聚合函数状态(AggregateFunction数据类型和分布式查询中)的反序列化性能,略微提升RowBinary格式解析性能。
非兼容变更
函数
greatest
和least
现在会忽略NULL输入值,而此前只要有一个参数为NULL就会返回NULL。例如SELECT greatest(1, 2, NULL)
现在返回2,该行为与PostgreSQL保持一致。默认禁止在ORDER BY/GROUP BY/PARTITION BY/PRIMARY KEY中使用Variant/Dynamic类型,因其可能导致意外结果。
移除系统表
generate_series
和generateSeries
(此前被错误添加)。修复JSON子列文件中因特殊符号未转义导致的“文件不存在”错误。
Kafka、NATS和RabbitMQ表引擎现在归入SOURCES层级中的独立权限项,需为非默认数据库用户添加这些引擎的创建权限。
在执行query前全面检查mutation查询(包括子查询),防止意外执行无效的查询或mutation。
重命名文件系统缓存设置
skip_download_if_exceeds_query_cache
为filesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit
。禁止在min/max函数中使用Dynamic/Variant类型以避免混淆。
移除deltaSumTimestamp函数对Enum、UInt128和UInt256参数的支持,同时移除其对第二参数("timestamp")的Int8/UInt8/Int16/UInt16支持。
新增字典源查询验证功能(当ClickHouse作为字典数据源时)。
改进
含常量数组的高阶函数将返回常量值。
通过虚拟行生成优化有序读取(特别适用于多分区场景)。
查询计划步骤名和流水线处理器名现在包含唯一ID后缀(便于与性能分析工具关联)。
显式取消或终结写缓冲区,异常时通过HTTP协议中断通知客户端。
移除allow_experimental_join_condition设置,默认允许非等值连接条件。
默认启用parallel_replicas_local_plan(在查询发起节点构建完整本地计划提升性能)。
http_handlers支持设置用户/密码(用于dynamic_query_handler/predefined_query_handler)。
S3Queue存储支持ALTER TABLE MODIFY/RESET SETTING修改特定设置。
列表目录时不调用对象存储API(改为内存存储文件名列表,权衡初始加载时间和内存占用)。
新增设置
prewarm_mark_cache
支持在插入/合并/获取分区时预热标记缓存。Parquet原生阅读器支持布尔类型。
增加S3错误重试类型(如“Malformed message”)。
降低部分S3相关日志级别。
支持写入含空格路径的HDFS文件。
修复并行副本查询中的RIGHT/FULL连接(RIGHT表现在可分布式读取)。
新增复制表/字典/视图的数量限制设置。
自动根据内存使用情况启用GROUP BY/ORDER BY外部排序(通过max_bytes_ratio_before_external_group_by/sort控制)。
函数translate支持字符删除(当from参数比to参数长时)。
新增parseDateTime64系列函数(返回DateTime64类型)。
收缩MergeTree系列引擎的index_granularity数组内存占用。
命令行应用支持多语句语法高亮。
命令行应用在错误时返回非零退出码。
Vertical格式(\G结尾时激活)新增Pretty格式特性(如数字千分位分隔)。
允许通过filesystem_cache_prefer_bigger_buffer_size禁用文件系统缓存内存缓冲增长。
新增background_download_max_file_segment_size设置控制文件系统缓存后台下载分段大小。
默认启用HTTP压缩(enable_http_compression=1)。
支持从Object类型ALTER到JSON类型。
改进JSON类型解析:当路径对应多类型值时按最佳匹配顺序尝试。
读取system.asynchronous_metrics不再等待并发更新完成。
设置polling_max_timeout_ms=10分钟,polling_backoff_ms=30秒。
简单查询(如
SELECT - FROM t LIMIT 1
)不再加载分区索引。默认启用allow_reorder_prewhere_conditions(旧兼容设置下)。
字典直查时只需SELECT或dictGet权限(修复ACL绕过问题)。
高级仪表盘页面新增system.dashboards表的选择器。
分布式INSERT...SELECT时尊重prefer_locahost_replica设置。
将JSON/Dynamic/Variant类型从实验功能升级为Beta。
允许在物化视图查询中使用UNION(仅第一个表会触发插入)。
优化单分区键值批插入的MergeTree写入性能。
新增system.metrics指标MergeTreeIndexGranularityInternalArraysTotalSize(用于检测高内存使用问题)。
识别Format Null查询中的所有Null拼写变体。
允许Enum类型的set中存在未知值。
新增system.tables的total_bytes_with_inactive列统计非活跃分区大小。
将MergeTreeSettings加入system.settings_changes。
支持Enum类型的字符串搜索操作(如like)。
支持JSON类型的notEmpty函数。
支持解析GCS S3的AuthenticationRequired错误。
支持Dynamic类型在ifNull和coalesce函数中使用。
新增JoinBuildTableRowCount/JoinProbeTableRowCount/JoinResultRowCount性能事件。
支持Dynamic类型在toFloat64/toUInt32等函数中使用。
bug修复
修复ATTACH PART查询中重复分区卡在attaching_状态的问题。
修复DateTime64在IN函数中丢失精度的问题。
修复ORDER BY ... WITH FILL中IGNORE/RESPECT NULLS函数的逻辑错误。
修复Native格式异步插入达到内存限制时的逻辑错误。
修复EPHEMERAL列CREATE TABLE注释问题。
修复JSONExtract与LowCardinality(Nullable)的类型错误。
修复表名过长时的行为问题。
URL引擎支持通过用户头覆盖Content-Type。
修复StorageS3Queue“无法在/processed创建持久节点”错误。
修复轻量级删除投影重建时未考虑_row_exists列的问题。
修复system.query_metric_log因竞态条件导致的值错误。
修复quantileExactWeightedInterpolated函数名不匹配问题。
修复Dynamic类型比较函数中的bad_weak_ptr异常。
零拷贝复制下存在使用节点时不删除blob。
修复HTTP和异步插入中Native格式设置被忽略的问题。
修复use_query_cache=1时含系统表字面量的查询被拒绝问题。
修复未配置缓存的磁盘存储内存增长问题。
修复Dynamic列反序列化LowCardinality字典时的“无法读取所有数据”错误。
修复客户端并行输出格式清理不完整问题。
修复命名集合中的转义缺失问题(可能导致服务无法启动)。
修复原生协议空块的异步插入问题。
修复错误通配符授权时的AST格式化不一致问题。
修复含Variant列的Chunk行数错误。
修复mongodb表函数参数错误(如NULL)时的崩溃。
修复optimize_rewrite_array_exists_to_has导致的崩溃。
修复palin_rewritable磁盘创建目录失败时的事务回滚错误。
修复max_insert_delayed_streams_for_parallel_write在写入多分区时的高内存使用问题。
修复WHERE条件中出现arrayJoin时的“函数参数必须为常量”错误(旧分析器)。
修复SortCursor在0列时的崩溃(旧分析器)。
修复ORC数据未初始化导致的date32越界问题。
修复Dynamic和JSON类型在wide部分的大小统计。
修复物化视图内查询使用CTE的IN子句时的分析器问题。
修复bitShift函数越界时返回0或默认字符(而非抛出异常)。
修复特定引擎物化视图的服务器崩溃问题。
修复含常量数组别名的嵌套结构体ARRAY JOIN空指针解引用。
修复空元组ALTER时的LOGICAL_ERROR。
修复NOT IN操作符下分区列谓词的常量集合转换问题。
修复LowCardinality(Nullable)到Dynamic的CAST错误。
修复DateTime64主键上toDayOfWeek在WHERE条件中的异常。
修复稀疏列解析后的默认值填充问题。
修复分布式表ALIAS输入时GROUPING函数错误。
修复WITH TIES子句可能返回不足行数的问题。
修复arrayWithConstant评估误判数组大小限制导致的TOO_LARGE_ARRAY_SIZE异常。
修复clickhouse-client进度指示器与进度表的数据竞争(使用FROM INFILE时可见)。
修复Pretty JSON格式中Dynamic值的序列化问题。
修复s3/s3Cluster函数在glob模式(如pattern/*)下遇到空对象(如pattern/)时返回不完整结果或异常的问题。
修复clickhouse-client语法高亮崩溃问题。
修复ORDER BY中首参数为常量的二进制单调函数的“Illegal type”错误。
限制EXPLAIN AST子查询中仅允许SELECT查询(其他类型会导致逻辑错误)。
修复format_alter_commands_with_parentheses启用时MOVE PARTITION的格式化问题。
为File/S3/URL/HDFS/Azure引擎的创建查询添加推断格式名(防止服务重启时因数据文件删除导致的错误)。
修复min_age_to_force_merge_on_partition_only对已合并为单分区的重复操作问题。
修复稀疏列处理时SimpleSquashingChunksTransform的罕见崩溃问题。
修复GraceHashJoin的数据竞争导致连接结果缺行问题。
修复启用enable_block_number_column时的ALTER DELETE查询问题。
修复ColumnDynamic::dumpStructure()并发调用(如ConcurrentHashJoin构造时)的数据竞争。
修复ORDER BY ... WITH FILL中重复列的LOGICAL_ERROR问题。
修复optimize_functions_to_subcolumns应用后的类型不匹配问题。
修复BACKUP DATABASE db EXCEPT TABLES db.table查询的解析失败问题。
禁止创建空Variant类型。
修复system.merges中result_part_path的无效格式化问题。
修复单元素glob解析问题。
修复含ARRAY JOIN的分布式查询在从服务器上的查询生成问题。
修复DateTime64在DateTime64中无返回结果的错误。
修复S3Queue无序模式下tracked_files_limit小于文件出现速率时的“No such key”错误。
优化大标记缓存删除时的上下文互斥锁占用问题。
修复主键缓存对LowCardinality列字典大小的低估问题。
修复RemoteQueryExecutor在本地用户不存在时的异常抛出问题。
修复启用enable_block_number_column时的突变操作问题。
修复备份中含空文件时plain rewritable磁盘的备份/恢复问题。
修复DistributedAsyncInsertDirectoryQueue中的插入取消问题。
修复解析错误数据到稀疏列时的崩溃问题(enable_parsing_to_custom_serialization启用时可能发生)。
修复备份恢复期间的潜在崩溃问题。
修复parallel_hash JOIN在ON子句含复杂不等条件时的潜在问题。
使用默认格式设置进行JSON解析以避免反序列化中断。
修复不支持存储引擎的事务崩溃问题。
修复Tuple解析时的重复JSON键检查缺失问题(此前可能导致“Chunk行数无效”逻辑错误)。