Cloud 版 v24.10 更新日志
v24.10 版本中与 ClickHouse Cloud 服务相关的更新内容。
向后不兼容的变更
- 允许在带有
UNION的查询链中,当子查询位于括号内时,将SETTINGS写在FORMAT之前。这修复了 #39712。同时修改了在一个查询中按顺序两次指定 SETTINGS 子句时的行为。距离相应子查询最近的 SETTINGS 子句将具有更高优先级。在之前的版本中,最外层的 SETTINGS 子句可能会优先生效而覆盖内部的子句。#60197#68614(Alexey Milovidov)。 - 重新实现 Dynamic 类型。现在,当动态数据类型的数量达到上限时,新类型不会再被转换为 String,而是以一种特殊的数据结构,以二进制格式并携带二进制编码的数据类型信息进行存储。现在,曾经插入到 Dynamic 列中的任意类型都可以作为子列从中读取。#68132(Pavel Kruglov)。
- 支持对具名元组使用类似
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的交互模式中,以 Pretty 形式打印Tuple数据类型。在之前的版本中,该设置仅应用于DESCRIBE查询和toTypeName。这修复了 #65753。#68492(Alexey Milovidov)。 - 默认允许对
[PRE]WHERE子句中的过滤条件进行重新排序。可以通过将allow_reorder_prewhere_conditions设置为false来禁用此行为。#70657(Nikita Taranov)。 - 修复
optimize_functions_to_subcolumns优化(之前可能导致Invalid column type for ColumnUnique::insertRangeFrom. Expected String, got LowCardinality(String)错误),方法是在mapKeys/mapValues中保留LowCardinality类型。#70716(Azat Khuzhin)。
新功能
- 可刷新materialized view 现已可用于生产环境。 #70550 (Michael Kolupaev)。Replicated 数据库现已支持可刷新materialized view。 #60669 (Michael Kolupaev)。
- 函数
toStartOfInterval()现在新增了一个重载,用于模拟 TimescaleDB 的time_bucket()函数以及 PostgreSQL 的date_bin()函数(#55619)。它允许从一个任意起点开始(而不是将 0000-01-01 00:00:00.000 作为固定起点),将日期或时间戳值对齐到给定时间间隔的整数倍。例如,SELECT toStartOfInterval(toDateTime('2023-01-01 14:45:00'), INTERVAL 1 MINUTE, toDateTime('2023-01-01 14:35:30'));会返回2023-01-01 14:44:30,该时间是以起点2023-01-01 14:35:30开始、按 1 分钟时间间隔对齐后的结果。#56738(Yarik Briukhovetskyi)。 - MongoDB 集成已重构:从已弃用的 Poco::MongoDB 迁移到新的 mongocxx 驱动,移除对已弃用的旧协议的支持,支持通过 URI 进行连接,支持所有 MongoDB 类型,在 MongoDB 端支持 WHERE 和 ORDER BY 语句,限制 MongoDB 不支持的表达式。#63279(Kirill Nikiforov)。
- clickhouse-client 中新增了
--progress-table选项,用于在查询执行期间以表格形式输出各项指标的变化;新的--enable-progress-table-toggle选项与--progress-table配套使用,可以通过按下 Control+Space 组合键来切换进度表的渲染。#63689 (Maria Khristenko)。 - 这使得可以为通配符前缀授予访问权限。
GRANT SELECT ON db.table_pefix_* TO user。#65311(pufit)。 - 引入了 JSONCompactWithProgress 格式,ClickHouse 会将每一行输出为以换行符分隔的 JSON 对象,其中包含元数据、数据、进度、汇总以及统计信息。#66205 (Alexey Korepanov)。
- 添加
system.query_metric_log,用于记录来自system.events表的单个查询的内存和指标值历史,并定期刷新到磁盘。 #66532 (Pablo Marcos)。 - 新增
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;``` VM-114-29-tos :) select * from ads_app_poster_ip_source_channel_di_replicated_local;. #67805 (sunny). - 为
Interval数据类型的值实现了比较功能,现在会将它们转换为最小公共超类型。 #68057 (Yarik Briukhovetskyi). - 添加
create_if_not_existsSETTING,以使 CREATE 语句默认采用 IF NOT EXISTS 行为。 #68164 (Peter Nguyen)。 - 支持在 Azure 和本地读取 Iceberg 表。 #68210 (Daniil Ivanik).
- 新增聚合函数 distinctDynamicTypes/distinctJSONPaths/distinctJSONPathsAndTypes,以便更好地检查 JSON 列中的类型内容。#68463(Pavel Kruglov)。
- 查询缓存条目现在可以按标签删除。例如,由
SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'abc'创建的查询缓存条目,现在可以通过SYSTEM DROP QUERY CACHE TAG 'abc'清除(当然也可以直接使用:SYSTEM DROP QUERY CACHE,这将清空整个查询缓存)。#68477(Michał Tabaszewski)。 - 可以使用隐式
SELECT来编写简单的SELECT查询,以支持类似计算器的表达式,例如:ch "1 + 2"。这由一个新的设置implicit_select控制。#68502(Alexey Milovidov)。 - 为
clickhouse local增加对--copy模式的支持,将其作为格式转换的快捷方式 #68503。#68583(Denis Hananein)。 - 新增
ripeMD160函数,用于计算字符串的 RIPEMD-160 密码学哈希值。示例:SELECT hex(ripeMD160('The quick brown fox jumps over the lazy dog'))返回37F332F68DB77BD9D7EDD4969571AD671CF9DD3B。#68639(Dergousov Maxim)。 - 为 URL 表引擎添加虚拟列 _headers。关闭 #65026。#68867(flynn)。
- 添加
system.projections表,用于跟踪可用的 PROJECTION。 #68901 (Jordi Villar). - 为
arrayUnion函数添加支持。 #68989 (Peter Nguyen). - 新增函数
arrayZipUnaligned,用于与 Spark 的arrays_zip保持兼容,在原始arrayZip的基础上支持未对齐的数组。 ``` sql SELECT arrayZipUnaligned([1], [1, 2, 3]). #69030 (李扬). - 支持聚合函数
quantileExactWeightedInterpolated,它是基于quantileExactWeighted的插值版。有些人可能会疑惑,既然已经有quantileExactInterpolatedWeighted,为什么还需要新的quantileExactWeightedInterpolated。原因是新函数比旧的更精确。顺便一提,这是为在 Apache Gluten 中兼容 Spark 而引入的。#69619(李扬)。 - 支持函数 arrayElementOrNull。当数组索引越界或 map 键不存在时,它返回 null。#69646 (李扬)。
- 在大多数函数中支持 Dynamic 类型,方法是对 Dynamic 的内部类型执行这些函数。#69691(Pavel Kruglov)。
- 为函数
arrayAUC新增参数scale(默认值:true),用于跳过归一化步骤(issue #69609)。#69717(gabrielmcg44)。 - 重新添加了
RIPEMD160函数,用于计算字符串的 RIPEMD-160 密码学哈希值。示例:SELECT HEX(RIPEMD160('The quick brown fox jumps over the lazy dog'))返回37F332F68DB77BD9D7EDD4969571AD671CF9DD3B。#70087(Dergousov Maxim)。 - 允许为对象存储表引擎和数据湖中读取的文件启用缓存,使用由 ETag + 文件路径组成的哈希作为缓存键。 #70135 (Kseniia Sumarokova).
- 支持在 HDFS 上读取 Iceberg 表。#70268 (flynn)。
- 通过
input_format_binary_read_json_as_string/output_format_binary_write_json_as_string设置项,可在 RowBinary 格式中以二进制字符串的形式读写 JSON 类型。 #70288 (Pavel Kruglov). - 支持在 Native 格式中将 JSON 列序列化/反序列化为单个 String 列。对于输出,请使用设置
output_format_native_write_json_as_string。对于输入,请在列数据之前使用序列化版本1。#70312 (Pavel Kruglov). - 现在支持标准 CTE 和
with insert,此前仅支持insert ... with ...。#70593 (Shichao Jin)。