跳转到主内容
跳转到主内容

Cloud 版 v24.10 更新日志

v24.10 版本中与 ClickHouse Cloud 服务相关的更新内容。

向后不兼容的变更

  • 允许在带有 UNION 的查询链中,当子查询位于括号内时,将 SETTINGS 写在 FORMAT 之前。这修复了 #39712。同时修改了在一个查询中按顺序两次指定 SETTINGS 子句时的行为。距离相应子查询最近的 SETTINGS 子句将具有更高优先级。在之前的版本中,最外层的 SETTINGS 子句可能会优先生效而覆盖内部的子句。#60197#68614Alexey Milovidov)。
  • 重新实现 Dynamic 类型。现在,当动态数据类型的数量达到上限时,新类型不会再被转换为 String,而是以一种特殊的数据结构,以二进制格式并携带二进制编码的数据类型信息进行存储。现在,曾经插入到 Dynamic 列中的任意类型都可以作为子列从中读取。#68132Pavel 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。你使用这种查询的可能性极低,但我们仍然必须将此变更标记为潜在的向后不兼容变更。#68435Alexey Milovidov)。
  • 当启用 print_pretty_type_names 设置时,将在 SHOW CREATE TABLE 语句、formatQuery 函数,以及 clickhouse-clientclickhouse-local 的交互模式中,以 Pretty 形式打印 Tuple 数据类型。在之前的版本中,该设置仅应用于 DESCRIBE 查询和 toTypeName。这修复了 #65753#68492Alexey Milovidov)。
  • 默认允许对 [PRE]WHERE 子句中的过滤条件进行重新排序。可以通过将 allow_reorder_prewhere_conditions 设置为 false 来禁用此行为。#70657Nikita Taranov)。
  • 修复 optimize_functions_to_subcolumns 优化(之前可能导致 Invalid column type for ColumnUnique::insertRangeFrom. Expected String, got LowCardinality(String) 错误),方法是在 mapKeys/mapValues 中保留 LowCardinality 类型。#70716Azat 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 分钟时间间隔对齐后的结果。#56738Yarik Briukhovetskyi)。
  • MongoDB 集成已重构:从已弃用的 Poco::MongoDB 迁移到新的 mongocxx 驱动,移除对已弃用的旧协议的支持,支持通过 URI 进行连接,支持所有 MongoDB 类型,在 MongoDB 端支持 WHERE 和 ORDER BY 语句,限制 MongoDB 不支持的表达式。#63279Kirill Nikiforov)。
  • clickhouse-client 中新增了 --progress-table 选项,用于在查询执行期间以表格形式输出各项指标的变化;新的 --enable-progress-table-toggle 选项与 --progress-table 配套使用,可以通过按下 Control+Space 组合键来切换进度表的渲染。#63689 (Maria Khristenko)。
  • 这使得可以为通配符前缀授予访问权限。GRANT SELECT ON db.table_pefix_* TO user#65311pufit)。
  • 引入了 JSONCompactWithProgress 格式,ClickHouse 会将每一行输出为以换行符分隔的 JSON 对象,其中包含元数据、数据、进度、汇总以及统计信息。#66205 (Alexey Korepanov)。
  • 添加 system.query_metric_log,用于记录来自 system.events 表的单个查询的内存和指标值历史,并定期刷新到磁盘。 #66532 (Pablo Marcos)。
  • 新增 input_format_json_empty_as_default 设置,启用后会将 JSON 输入中的空字段视为默认值。关闭 #59339#66782Alexis Arnaud)。
  • 新增函数 overlayoverlayUTF8,用于将字符串的某一部分替换为另一个字符串。例如: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_exists SETTING,以使 CREATE 语句默认采用 IF NOT EXISTS 行为。 #68164 (Peter Nguyen)。
  • 支持在 Azure 和本地读取 Iceberg 表。 #68210 (Daniil Ivanik).
  • 新增聚合函数 distinctDynamicTypes/distinctJSONPaths/distinctJSONPathsAndTypes,以便更好地检查 JSON 列中的类型内容。#68463Pavel Kruglov)。
  • 查询缓存条目现在可以按标签删除。例如,由 SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'abc' 创建的查询缓存条目,现在可以通过 SYSTEM DROP QUERY CACHE TAG 'abc' 清除(当然也可以直接使用:SYSTEM DROP QUERY CACHE,这将清空整个查询缓存)。#68477Michał Tabaszewski)。
  • 可以使用隐式 SELECT 来编写简单的 SELECT 查询,以支持类似计算器的表达式,例如:ch "1 + 2"。这由一个新的设置 implicit_select 控制。#68502Alexey Milovidov)。
  • clickhouse local 增加对 --copy 模式的支持,将其作为格式转换的快捷方式 #68503#68583Denis Hananein)。
  • 新增 ripeMD160 函数,用于计算字符串的 RIPEMD-160 密码学哈希值。示例:SELECT hex(ripeMD160('The quick brown fox jumps over the lazy dog')) 返回 37F332F68DB77BD9D7EDD4969571AD671CF9DD3B#68639Dergousov Maxim)。
  • 为 URL 表引擎添加虚拟列 _headers。关闭 #65026#68867flynn)。
  • 添加 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 的内部类型执行这些函数。#69691Pavel Kruglov)。
  • 为函数 arrayAUC 新增参数 scale(默认值:true),用于跳过归一化步骤(issue #69609)。#69717gabrielmcg44)。
  • 重新添加了 RIPEMD160 函数,用于计算字符串的 RIPEMD-160 密码学哈希值。示例:SELECT HEX(RIPEMD160('The quick brown fox jumps over the lazy dog')) 返回 37F332F68DB77BD9D7EDD4969571AD671CF9DD3B#70087Dergousov 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)。