跳到主要内容
跳到主要内容
编辑此页

v24.10 Cloud 版本更新日志

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

向后不兼容的变更

  • 允许在带有 UNION 的查询链中,当子查询位于括号内时,在 FORMAT 之前写入 SETTINGS。这解决了 #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-clientclickhouse-local 的交互模式下以漂亮的格式打印 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)。

新功能

  • 可刷新的物化视图已准备好用于生产。#70550 (Michael Kolupaev)。复制数据库现在支持可刷新的物化视图。#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,这是一个 1 分钟间隔的倍数,从原点 2023-01-01 14:35:30 开始。#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 选项相关联,并通过按控制键 (空格) 切换进度表的渲染。#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)。
  • 添加了函数 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 控制。#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 表以跟踪可用的投影。#68901 (Jordi Villar)。
  • 添加对 arrayUnion 函数的支持。#68989 (Peter Nguyen)。
  • 添加新函数 arrayZipUnaligned 以实现 spark 兼容性 (arrays_zip),它允许基于原始 arrayZip 的未对齐数组。``` sql SELECT arrayZipUnaligned([1], [1, 2, 3]). #69030 (李扬)。
  • 支持聚合函数 quantileExactWeightedInterpolated,这是一个基于 quantileExactWeighted 的插值版本。有些人可能会想知道为什么我们需要一个新的 quantileExactWeightedInterpolated,因为我们已经有了 quantileExactInterpolatedWeighted。原因是新的这个比旧的更准确。顺便说一句,它是为了 Apache Gluten 中的 spark 兼容性。#69619 (李扬)。
  • 支持函数 arrayElementOrNull。如果数组索引超出范围或找不到映射键,则返回 null。#69646 (李扬)。
  • 通过在 Dynamic 内部类型上执行函数,在大多数函数中支持 Dynamic 类型。#69691 (Pavel Kruglov)。
  • 向函数 arrayAUC 添加参数 scale(默认值:true),允许跳过归一化步骤(问题 #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)。