跳到主要内容
跳到主要内容

v24.10 Cloud 变更日志

列出基于 v24.10 版本的 ClickHouse Cloud 服务相关变更。

向后不兼容的变更

  • 允许在带有 UNION 的查询链中、且子查询在括号内时,在 FORMAT 之前写 SETTINGS。这解决了 #39712。更改当查询在同一序列中两次指定 SETTINGS 子句时的行为。距离对应子查询最近的 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 的交互模式中,以更美观的形式打印 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)。

新功能

  • 可刷新物化视图已经可以在生产环境中使用。#70550Michael Kolupaev)。Replicated 数据库现已支持可刷新物化视图。#60669Michael 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 组合键来切换进度表的渲染。#63689Maria 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 设置,用于在 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 控制。#68502Alexey Milovidov)。
  • clickhouse local 增加对 --copy 模式的支持,以便进行格式转换 #68503#68583 (Denis Hananein)。
  • 新增了 ripeMD160 函数,用于计算字符串的 RIPEMD-160 密码学哈希。示例:SELECT hex(ripeMD160('The quick brown fox jumps over the lazy dog')) 返回 37F332F68DB77BD9D7EDD4969571AD671CF9DD3B#68639Dergousov Maxim)。
  • 为 URL 表引擎添加虚拟列 _headers。关闭 #65026#68867 (flynn).
  • 添加 system.projections 表,用于跟踪可用投影。 #68901 (Jordi Villar)。
  • 新增对 arrayUnion 函数的支持。#68989Peter 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),从而可以跳过归一化步骤(问题 #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 ...#70593Shichao Jin)。