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

2024 更新日志

目录

ClickHouse 发布 v24.12, 2024-12-19
ClickHouse 发布 v24.11, 2024-11-26
ClickHouse 发布 v24.10, 2024-10-31
ClickHouse 发布 v24.9, 2024-09-26
ClickHouse 发布 v24.8 LTS, 2024-08-20
ClickHouse 发布 v24.7, 2024-07-30
ClickHouse 发布 v24.6, 2024-07-01
ClickHouse 发布 v24.5, 2024-05-30
ClickHouse 发布 v24.4, 2024-04-30
ClickHouse 发布 v24.3 LTS, 2024-03-26
ClickHouse 发布 v24.2, 2024-02-29
ClickHouse 发布 v24.1, 2024-01-30
2023 年更新日志

ClickHouse 发布 24.12, 2024-12-19

向后不兼容的变更

  • 函数 greatestleast 现在忽略 NULL 输入值,而之前如果参数之一为 NULL,则返回 NULL。例如,SELECT greatest(1, 2, NULL) 现在返回 2。这使得行为与 PostgreSQL 兼容,但同时打破了与返回 NULL 的 MySQL 的兼容性。要保留之前的行为,请将设置 least_greatest_legacy_null_behavior (默认值:false)设置为 true#65519 #73344 (kevinyhzou)。
  • 新的 MongoDB 集成现在是默认设置。喜欢使用旧版 MongoDB 驱动程序(基于 Poco 驱动程序)的用户可以启用服务器设置 use_legacy_mongodb_integration#73359 (Kirill Nikiforov

新功能

  • JSON/Dynamic/Variant 类型从实验性功能移至 beta 版。#72294 (Pavel Kruglov)。我们还将所有修复以及此更改向后移植到 24.11。
  • Iceberg 数据存储格式的模式演变,为用户提供了广泛的选项来修改其表的模式。列的顺序、列名和简单类型扩展可以在后台更改。#69445 (Daniil Ivanik)。
  • 与 Iceberg REST Catalog 集成:一个新的数据库引擎,名为 Iceberg,它将整个目录插入到 ClickHouse 中。#71542 (Kseniia Sumarokova)。
  • MergeTree 表的主键索引添加缓存(可以通过表设置 use_primary_key_cache 启用)。如果为主键索引启用了延迟加载和缓存,则它将按需加载到缓存(类似于标记缓存),而不是永远保存在内存中。在数据部分的插入/合并/提取以及表重启时添加主键索引的预热(可以通过设置 prewarm_primary_key_cache 启用)。这允许在共享存储上为大型表降低内存使用量,我们在超过一千万亿条记录的表上对其进行了测试。#72102 (Anton Popov)。#72750 (Alexander Gololobov)。
  • 实现 SYSTEM LOAD PRIMARY KEY 命令,以加载指定表的所有部分或所有表的主键索引(如果未指定表)。这将对基准测试和防止查询执行期间的额外延迟很有用。#66252 #67733 (ZAWA_ll)。
  • 添加了一个查询,允许将 MergeTree 表附加为 ReplicatedMergeTree,反之亦然:ATTACH TABLE ... AS REPLICATEDATTACH TABLE ... AS NOT REPLICATED#65401 (Kirill)。
  • 一个新的设置 http_response_headers,允许您自定义 HTTP 响应标头。例如,您可以告诉浏览器渲染存储在数据库中的图片。这关闭了 #59620#72656 (Alexey Milovidov)。
  • 添加函数 toUnixTimestamp64Second,将 DateTime64 转换为具有固定秒精度的 Int64 值,以便我们可以支持日期在 Unix 纪元之前的负值。#70597 (zhanglistar)。#73146 (Robert Schulze)。
  • 添加新设置 enforce_index_structure_match_on_partition_manipulation,以允许在源表的投影和二级索引集是目标表中这些项的子集时进行附加。关闭 #70602#70603 (zwy991114)。
  • 为 ALTER USER 添加语法 {ADD|MODIFY|DROP SETTING},ALTER USER {ADD|DROP PROFILE},对于 ALTER ROLE 和 ALTER PROFILE 也是如此。因此,您可以修改设置集,而不是替换所有设置集。#72050 (pufit)。
  • 添加了 arrayPRAUC 函数,用于计算精确率-召回率曲线的 AUC(曲线下面积)。#72073 (Emmanuel)。
  • 为数组类型添加 indexOfAssumeSorted 函数。优化在非递减顺序排序数组的情况下的搜索。效果出现在非常大的数组(超过 100,000 个元素)上。#72517 (Eric Kurbanov)。
  • 允许使用分隔符作为聚合函数 groupConcat 的可选第二个参数。#72540 (Yarik Briukhovetskyi)。
  • 如果 from 参数包含的字符多于 to 参数,则函数 translate 现在支持字符删除。示例:SELECT translate('clickhouse', 'clickhouse', 'CLICK') 现在返回 CLICK#71441 (shuai.xu)。

实验性功能

  • 一个新的 MergeTree 设置 allow_experimental_reverse_key,它支持 MergeTree 排序键中的降序排序顺序。这对于时间序列分析非常有用,尤其是 TopN 查询。示例用法:ENGINE = MergeTree ORDER BY (time DESC, key)- time 字段的降序。#71095 (Amos Bird)。

性能提升

  • JOIN 重新排序。添加了一个选项来选择将充当查询计划中内部(构建)表的 join 侧。这由 query_plan_join_swap_table 控制,可以将其设置为 auto。在这种模式下,ClickHouse 将尝试选择行数最少的表。#71577 (Vladimir Cherkasov)。
  • 现在,当 join_algorithm 设置设置为 default 时,将使用 parallel_hash 算法(如果适用)。当无法使用 parallel_hash 时,仍然会考虑之前的两个替代方案(directhash)。#70788 (Nikita Taranov)。
  • 添加选项以从 WHEREON 表达式中提取公共表达式,以减少 join 期间使用的哈希表数量。当 JOIN ON 条件在不同的 OR 部分内具有公共部分时,这才有意义。可以通过 optimize_extract_common_expressions = 1 启用。#71537 (János Benjamin Antal)。
  • 当索引列被 CAST 为 LowCardinality(String) 时,允许在 SELECT 上使用索引,这可能是对 Merge 表运行查询时,某些表具有 String,而某些表具有 LowCardinality(String) 的情况。#71598 (Yarik Briukhovetskyi)。
  • 在使用并行副本并启用本地计划执行查询期间,不要在 worker 上执行索引分析。协调器将根据其侧(查询发起者)的索引分析,为 worker 选择要读取的范围。这使得具有并行副本的短查询具有与单节点查询一样低的延迟。#72109 (Igor Nikonov)。
  • 对于对象存储磁盘,clickhouse disks remove --recursive 的内存使用量已减少。#67323 (Kirill)。
  • #57631 中恢复读取紧凑部分中单列子列的优化。它是意外删除的。#72285 (Pavel Kruglov)。
  • 通过在比较器中取消虚拟化调用来加速 LowCardinality(String) 列的排序。#72337 (Alexander Gololobov)。
  • 优化函数 argMin/argMax 以处理一些简单的数据类型。#72350 (alesapin)。
  • 优化内存跟踪器中带有共享锁的锁定,以减少锁争用,从而提高 CPU 数量非常高的系统上的性能。#72375 (Jiebin Sun)。
  • 添加了一个新设置 use_async_executor_for_materialized_views。使用物化视图查询的异步和潜在的多线程执行,可以加快 INSERT 期间的视图处理速度,但也消耗更多内存。#72497 (alesapin)。
  • 改进了聚合函数状态的反序列化性能(在数据类型 AggregateFunction 和分布式查询中)。略微提高了格式 RowBinary 的解析性能。#72818 (Anton Popov)。
  • 以表的键顺序拆分使用并行副本读取的范围,以减少读取期间的内存消耗。#72173 (JIaQi)。
  • 在插入批次中分区键的单个值的情况下,加速插入到 merge tree 中。#72348 (alesapin)。
  • 在从备份还原时,实现并行创建表。在此 PR 之前,RESTORE 命令始终在单个线程中创建表,这在包含许多表的备份的情况下可能会很慢。#72427 (Vitaly Baranov)。
  • 如果标记缓存很大,则删除标记缓存可能需要相当长的时间。如果在此期间我们持有上下文互斥锁,它会阻止许多其他活动,甚至在释放互斥锁之前都无法建立新的客户端连接。实际上,同步不需要持有此互斥锁,通过共享 ptr 获得对缓存的本地引用就足够了。#72749 (Alexander Gololobov)。

改进

  • 删除 allow_experimental_join_condition 设置,默认允许非等值条件。#69910 (Vladimir Cherkasov)。
  • 来自服务器配置 (users.xml) 的设置现在也适用于客户端。对格式设置很有用,例如 date_time_output_format#71178 (Michael Kolupaev)。
  • 基于服务器/用户内存使用量的自动 GROUP BY/ORDER BY 到磁盘。通过 max_bytes_ratio_before_external_group_by/max_bytes_ratio_before_external_sort 查询设置控制。#71406 (Azat Khuzhin)。
  • 添加新的取消逻辑:CancellationChecker 检查每个启动的查询的超时,并在超时到达后停止它们。#69880 (Yarik Briukhovetskyi)。
  • 支持从 ObjectJSON 的 ALTER,这意味着您可以轻松地从已弃用的 Object 类型迁移。#71784 (Pavel Kruglov)。
  • 允许集合中存在 Enum 中不存在的未知值。修复 #72662#72686 (zhanglistar)。
  • 支持 Enum 数据类型的字符串搜索运算符(例如,LIKE),实现 #72661#72732 (zhanglistar)。
  • 某些无意义的 ALTER USER 查询被接受。修复了 #71227#71286 (Arthur Passos)。
  • 在为分布式 INSERT ... SELECT 构建计划时,遵守 prefer_locahost_replica#72190 (filimonov)。
  • Azure 违反了 Iceberg 规范,错误地将 Iceberg v1 标记为 Iceberg v2。问题在 这里描述。Azure Iceberg Writer 创建的 Iceberg 元数据文件(以及清单文件)违反了规范。现在我们尝试使用 v2 读取器读取 v1 Iceberg 格式元数据(因为他们以这种方式编写),并在他们未在清单文件中创建相应字段时添加错误。#72277 (Daniil Ivanik)。
  • 现在允许在查询中使用 UNION [ALL]CREATE MATERIALIZED VIEW。行为与带有 JOIN 的物化视图相同:只有 SELECT 表达式中的第一个表将充当插入的触发器,所有其他表将被忽略。但是,如果对第一个表有多个引用(例如,与自身 UNION),则所有这些引用都将作为插入的数据块进行处理。#72347 (alesapin)。
  • 当 ClickHouse 用作字典的源时,添加了源查询验证。#72548 (Alexey Katsman)。
  • 确保 ClickHouse 将在配置重新加载时看到 ZooKeeper 更改。#72593 (Azat Khuzhin)。
  • 更好地近似缓存标记的内存使用量,以减少缓存的总内存使用量。#72630 (Antonio Andelic)。
  • 添加新的 StartupScriptsExecutionState 指标。该指标可以有三个值:0 = 启动脚本尚未完成,1 = 启动脚本成功执行,2 = 启动脚本失败。我们需要此指标,因为我们需要知道启动脚本是否在云中成功执行,尤其是在发布到基本配置之后。#72637 (Miсhael Stetsyuk)。
  • 将新的 MergeTreeIndexGranularityInternalArraysTotalSize 指标添加到 system.metrics。需要此指标来查找具有容易受到高影响的大型数据集的实例
  • 为创建复制表添加重试。#72682 (Vitaly Baranov)。
  • total_bytes_with_inactive 添加到 system.tables 以计算非活动部分的字节总数。#72690 (Kai Zhu)。
  • 将 MergeTree 设置添加到 system.settings_changes#72694 (Raúl Marín)。
  • notEmpty 函数中支持 JSON 类型。#72741 (Pavel Kruglov)。
  • 支持解析 GCS S3 错误 AuthenticationRequired#72753 (Vitaly Baranov)。
  • 在函数 ifNullcoalesce 中支持 Dynamic 类型。#72772 (Pavel Kruglov)。
  • 在函数 toFloat64/touInt32/etc. 中支持 Dynamic#72989 (Pavel Kruglov)。
  • 添加 S3 请求设置 http_max_fields, http_max_field_name_size, http_max_field_value_size 并在备份或还原期间解析 S3 API 响应时使用它们。#72778 (Vitaly Baranov)。
  • 仅在最后一个使用此元数据的表被删除后,才在 Keeper 中删除 Storage S3(Azure)Queue 中的表元数据。#72810 (Kseniia Sumarokova)。
  • 添加了 JoinBuildTableRowCount/JoinProbeTableRowCount/JoinResultRowCount 配置文件事件。#72842 (Vladimir Cherkasov)。
  • 在 MergeTree 排序键和跳过索引中支持子列。#72644 (Pavel Kruglov)。

Bug 修复(官方稳定版本中用户可见的错误行为)

  • 修复 MergeTree 可能的相交部分(在将部分移动到分离目录的操作失败之后,可能是由于对象存储上的操作)。#70476 (Azat Khuzhin)。
  • 修复表名过长时出现的错误检测。提供诊断信息,告知最大长度。添加新函数 getMaxTableNameLengthForDatabase#70810 (Yarik Briukhovetskyi)。
  • 修复 clickhouse-library-bridge 崩溃后的僵尸进程(此程序允许运行不安全的库)。#71301 (MikhailBurdukov)。
  • 修复当 plain_rewritable 磁盘创建目录失败时,事务回滚期间的 NoSuchKey 错误。#71439 (Julia Kartseva)。
  • 修复 Pretty JSON 格式中 Dynamic 值的序列化。#71923 (Pavel Kruglov)。
  • File/S3/URL/HDFS/Azure 引擎的创建查询中添加推断的格式名称。以前,每次服务器重新启动时都会推断格式名称,如果删除指定的数据文件,则会导致服务器启动期间出错。#72108 (Pavel Kruglov)。
  • 修复在使用旧分析器的 join on 表达式中使用 UDF 时出现的错误。#72179 (Raúl Marín)。
  • 修复 StorageObjectStorage 中的一些小错误。需要默认启用 use_hive_partitioning#72185 (Yarik Briukhovetskyi)。
  • 修复了 min_age_to_force_merge_on_partition_only 设置在尝试重复合并已合并为单个 part 的相同分区时卡住,而没有合并具有多个 part 的分区的错误。 #72209 (Christoph Wurm)。
  • 修复了在处理稀疏列时,罕见情况下 SimpleSquashingChunksTransform 中发生的崩溃。 #72226 (Vladimir Cherkasov)。
  • 修复了 GraceHashJoin 中的数据竞争,该竞争可能导致连接输出中缺少某些行。 #72233 (Nikita Taranov)。
  • 修复了物化 _block_number 列的 ALTER DELETE 查询(如果启用了设置 enable_block_number_column)。 #72261 (Anton Popov)。
  • 修复了并发调用 ColumnDynamic::dumpStructure() 时的数据竞争,例如在 ConcurrentHashJoin 构造函数中。 #72278 (Nikita Taranov)。
  • 修复了 ORDER BY ... WITH FILL 中重复列可能导致的 LOGICAL_ERROR#72387 (Vladimir Cherkasov)。
  • 修复了应用 optimize_functions_to_subcolumns 后,几种情况下类型不匹配的问题。 #72394 (Anton Popov)。
  • 使用 AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE 代替 AWS_CONTAINER_AUTHORIZATION_TOKEN_PATH。 修复了 #71074#72397 (Konstantin Bogdanov)。
  • 修复了解析 BACKUP DATABASE db EXCEPT TABLES db.table 查询时失败的问题。 #72429 (Konstantin Bogdanov)。
  • 不允许创建空的 Variant 类型。 #72454 (Pavel Kruglov)。
  • 修复了 system.mergesresult_part_path 的无效格式。 #72567 (Konstantin Bogdanov)。
  • 修复了解析只有一个元素的 glob (例如 {file}) 时失败的问题。 #72572 (Konstantin Bogdanov)。
  • 修复了在具有 ARRAY JOIN 的分布式查询情况下,为 follower 服务器生成查询的问题。 修复了 #69276#72608 (Dmitry Novik)。
  • 修复了 DateTime64 IN DateTime64 返回空结果的错误。 #72640 (Yarik Briukhovetskyi)。
  • 修复了在具有 flatten_nested=0 创建的表的 Replicated 数据库中添加新副本时,元数据不一致的问题。 #72685 (Alexander Tokmakov)。
  • 修复了 Keeper 内部通信的高级 SSL 配置。 #72730 (Antonio Andelic)。
  • 修复了在 tracked_files_limit 设置小于 s3 文件出现速率时,S3Queue 无序模式下 “No such key” 错误。 #72738 (Kseniia Sumarokova)。
  • 修复了当本地用户不存在时,RemoteQueryExecutor 中抛出的异常。 #72759 (Andrey Zvonov)。
  • 修复了物化 _block_number 列的 mutations 操作(如果启用了设置 enable_block_number_column)。 #72854 (Anton Popov)。
  • 修复了备份/还原操作,当普通可重写磁盘备份中存在空文件时的问题。 #72858 (Kseniia Sumarokova)。
  • 正确取消 DistributedAsyncInsertDirectoryQueue 中的 inserts 操作。 #72885 (Antonio Andelic)。
  • 修复了解析不正确数据到稀疏列时发生的崩溃(当启用设置 enable_parsing_to_custom_serialization 时可能发生)。 #72891 (Anton Popov)。
  • 修复了备份还原期间潜在的崩溃。 #72947 (Kseniia Sumarokova)。
  • 修复了 parallel_hash JOIN 方法中的错误,该错误可能在查询的 ON 子句中具有带有不等式过滤器的复杂条件时出现。 #72993 (Nikita Taranov)。
  • 在 JSON 解析期间使用默认格式设置,以避免反序列化损坏。 #73043 (Pavel Kruglov)。
  • 修复了在不支持存储引擎的事务中发生的崩溃。 #73045 (Raúl Marín)。
  • 修复了可能高估内存跟踪的问题(当 MemoryTrackingMemoryResident 之间的差异持续增长时)。 #73081 (Azat Khuzhin)。
  • 在 Tuple 解析期间检查重复的 JSON 键。 以前,这可能会导致解析期间出现逻辑错误 Invalid number of rows in Chunk#73082 (Pavel Kruglov)。

构建/测试/打包改进

  • 以前存储在 /utils 文件夹中并需要手动从源代码编译的所有小型实用程序,现在都是 ClickHouse 主捆绑包的一部分。 这关闭了: #72404#72426 (Nikita Mikhaylov)。
  • 移除 22.3 版本中引入的 /etc/systemd/system/clickhouse-server.service 删除操作 #39323#72259 (Mikhail f. Shiryaev)。
  • 拆分大型翻译单元,以避免因内存/CPU 限制而导致的编译失败。 #72352 (Yakov Olkhovskiy)。
  • OSX: 使用 ICU 支持构建,从而启用排序规则、字符集转换和其他本地化功能。 #73083 (Raúl Marín)。

ClickHouse release 24.11, 2024-11-26

向后不兼容的变更

  • 移除系统表 generate_seriesgenerateSeries。 它们是在这里错误添加的: #59390#71091 (Alexey Milovidov)。
  • 移除 StorageExternalDistributed。 关闭了 #70600#71176 (flynn)。
  • Kafka、NATS 和 RabbitMQ 表引擎现在由 SOURCES 层级结构中自己的授权覆盖。 为任何创建使用这些引擎类型的表的非默认数据库用户添加授权。 #71250 (Christoph Wurm)。
  • 在执行 mutation 查询之前,检查完整的 mutation 查询(包括子查询)。 这可以防止意外运行无效查询并构建阻塞有效 mutations 的 dead mutations。 #71300 (Christoph Wurm)。
  • 将文件系统缓存设置 skip_download_if_exceeds_query_cache 重命名为 filesystem_cache_skip_download_if_exceeds_per_query_cache_write_limit#71578 (Kseniia Sumarokova)。
  • 移除 deltaSumTimestamp 中对 Enum 以及 UInt128UInt256 参数的支持。 移除 deltaSumTimestamp 的第二个(“时间戳”)参数对 Int8UInt8Int16UInt16 的支持。 #71790 (Alexey Milovidov)。
  • 当使用 Dictionary 存储引擎、dictionary 表函数或直接从字典本身进行 SELECT 查询直接检索数据时,现在只需要对字典具有 SELECT 权限或 dictGet 权限即可。 这与之前防止 ACL 绕过的尝试保持一致: https://github.com/ClickHouse/ClickHouse/pull/57362https://github.com/ClickHouse/ClickHouse/pull/65359。 这也使后者向后兼容。 #72051 (Nikita Mikhaylov)。

实验性功能

  • 实现 allow_feature_tier 作为全局开关,以禁用所有实验性/beta 功能。 #71841 #71145 (Raúl Marín)。
  • 修复了由于 JSON 子列文件中未转义的特殊符号而可能导致的 No such file or directory 错误。 #71182 (Pavel Kruglov)。
  • 支持从 String 类型 ALTER 为 JSON 类型。 此 PR 还将 JSON 和 Dynamic 类型的序列化更改为新的 V2 版本。 旧的 V1 版本仍然可以通过启用设置 merge_tree_use_v1_object_and_dynamic_serialization 来使用(可以在升级期间使用,以便能够回滚版本而不会出现问题)。 #70442 (Pavel Kruglov)。
  • 实现从 Map/Tuple/Object 到新 JSON 的简单 CAST 转换,通过 JSON 字符串的序列化/反序列化。 #71320 (Pavel Kruglov)。
  • 默认情况下,不允许在 ORDER BY/GROUP BY/PARTITION BY/PRIMARY KEY 中使用 Variant/Dynamic 类型,因为它可能导致意外结果。 #69731 (Pavel Kruglov)。
  • 禁止在 min/max 函数中使用 Dynamic/Variant 类型,以避免混淆。 #71761 (Pavel Kruglov)。

新功能

  • 添加了 SQL 语法来描述工作负载和资源管理。 https://clickhouse.ac.cn/docs/en/operations/workload-scheduling#69187 (Sergei Trifonov)。
  • 一种新的数据类型 BFloat16,表示具有 8 位指数、符号和 7 位尾数的 16 位浮点数。 这关闭了 #44206。 这关闭了 #49937#64712 (Alexey Milovidov)。
  • 添加 CHECK GRANT 查询以检查当前用户/角色是否已被授予特定权限,以及内存中是否存在相应的表/列。 #68885 (Unalian)。
  • 添加 iceberg[S3;HDFS;Azure]Cluster, deltaLakeCluster, hudiCluster 表函数。 #72045 (Mikhail Artemenko)。
  • 添加在 http_handlers 中设置用户/密码的功能(用于 dynamic_query_handler/predefined_query_handler)。 #70725 (Azat Khuzhin)。
  • 在 ORDER BY WITH FILL 运算符中添加对 staleness clause 的支持。 #71151 (Mikhail Artemenko)。
  • 允许每种身份验证方法都有自己的过期日期,从用户实体中移除。 #70090 (Arthur Passos)。
  • 添加了新函数 parseDateTime64parseDateTime64OrNullparseDateTime64OrZero。 与现有函数 parseDateTime (及其变体) 相比,它们返回 DateTime64 类型的值,而不是 DateTime 类型。 #71581 (kevinyhzou)。

性能提升

  • 优化了索引粒度值的内存使用,如果粒度对于 part 是常量。 添加了始终为 part 选择常量粒度的能力(设置 use_const_adaptive_granularity),这有助于确保在内存中始终对其进行优化。 这有助于在大型工作负载(共享存储中数万亿行)中避免数据 part 的元数据(索引粒度值)不断增长的内存使用。 #71786 (Anton Popov)。
  • 现在,当为并行处理在线程之间分发输入块时,我们不再为 join_algorithm = 'parallel_hash' 复制输入块的列。 #67782 (Nikita Taranov)。
  • 优化了非相交 parts 的 Replacing 合并算法。 #70977 (Anton Popov)。
  • 对于指标和 system.detached_parts,不要列出来自只读和 write-once 磁盘的 detached parts。 #71086 (Alexey Milovidov)。
  • 默认情况下,不计算重型异步指标。 该功能在 #40332 中引入,但是拥有一个仅单个客户需要的重型后台作业并不好。 #71087 (Alexey Milovidov)。
  • 对于 plain_rewritable 磁盘:在列出目录时,不要调用对象存储 API,因为这可能是低效的。 而是将文件名列表存储在内存中。 权衡是增加了初始加载时间和存储文件名称所需的内存。 #70823 (Julia Kartseva)。
  • 通过减少临界区,提高了 system.query_metric_log 收集间隔的性能和准确性。 #71473 (Pablo Marcos)。
  • 通过生成虚拟行进行顺序读取优化,因此在合并排序期间将读取更少的数据,当存在多个 parts 时尤其有用。 #62125 (Shichao Jin)。
  • 添加了服务器设置 async_load_system_database,允许服务器在系统数据库未完全加载的情况下启动。 如果系统表很多,这将有助于更快地启动 ClickHouse。 #69847 (Sergei Trifonov)。
  • clickhouse-compressor 添加了 --threads 参数,允许并行压缩数据。 #70860 (Alexey Milovidov)。
  • 添加了设置 prewarm_mark_cache,该设置允许在 inserts、merges、parts 的 fetches 操作以及表的启动时将 marks 加载到 mark 缓存中。 #71053 (Anton Popov)。
  • 缩小内存中 index_granularity 数组的大小,以减少 MergeTree 表引擎系列的内存占用。 #71595 (alesapin)。
  • 关闭文件系统缓存设置 boundary_alignment 以进行非磁盘读取,这提高了从具有缓存的独立远程文件读取的性能。 #71827 (Kseniia Sumarokova)。
  • 类似 SELECT * FROM table LIMIT ... 的查询过去会加载 part 索引,即使它们没有被使用。 #71866 (Alexander Gololobov)。
  • 默认启用 parallel_replicas_local_plan。 在查询发起者上构建完善的本地计划可以提高并行副本的性能,同时减少资源消耗,并为应用更多查询优化提供机会。 #70171 (Igor Nikonov)。

改进

  • 允许将 clickhouse 与文件参数一起使用,例如 ch queries.sql#71589 (Raúl Marín)。
  • Vertical 格式(当您以 \G 结束查询时也会激活)获得了 Pretty 格式的功能,例如: - 在数字中高亮显示千位分组; - 打印可读的数字提示。 #71630 (Alexey Milovidov)。
  • 将外部用户角色从查询发起者推送到集群中的其他节点。 当只有发起者有权访问外部身份验证器(如 LDAP)时,这很有帮助。 #70332 (Andrey Zvonov)。
  • 为聚合函数 any 添加了别名 anyRespectNullsfirstValueRespectNullsanyValueRespectNulls。 还为聚合函数 anyLast 添加了别名 anyLastRespectNullslastValueRespectNulls。 这允许使用更自然的仅驼峰式语法,而不是混合的驼峰式/下划线语法,例如: SELECT anyLastRespectNullsStateIf 而不是 anyLast_respect_nullsStateIf#71403 (Peter Nguyen)。
  • 添加了配置参数 date_time_utc,使 JSON 日志格式支持 RFC 3339/ISO8601 格式的 UTC 日期时间。 #71560 (Ali)。
  • 为 S3 端点添加了新的标头类型用于用户身份验证 (access_header)。 这允许获取具有最低优先级的 access header,它将被来自任何其他来源(例如,表架构或命名集合)的 access_key_id 覆盖。 #71011 (MikhailBurdukov)。
  • 带有常量数组和常量捕获参数的高阶函数将返回常量。 #58400 (Alexey Milovidov)。
  • 查询计划步骤名称 (EXPLAIN PLAN json=1) 和管道处理器名称 (EXPLAIN PIPELINE compact=0,graph=1) 现在都有一个唯一的 ID 作为后缀。 这允许将处理器分析器输出和 OpenTelemetry 跟踪与 explain 输出匹配。 #63518 (qhsong)。
  • 添加了在写入 Azure Blob Storage 后检查对象是否存在的选项,这由设置 check_objects_after_upload 控制。 #64847 (Smita Kulkarni)。
  • clickhouse-local 默认使用 Atomic 数据库。 解决了 #50647 中的第 1 项和第 5 项。 关闭了 #44817#68024 (Alexey Milovidov)。
  • 异常会破坏 HTTP 协议,以便向客户端发出错误警报。 #68800 (Sema Checherinda)。
  • 通过创建 replica_dir 并将副本标记为 DDLWorker 中的 active,报告运行分布式 DDL 查询的主机。 #69658 (tuanpach)。
  • 如果 distributed_ddl_output_mode 设置为 *_only_active,则仅等待数据库 ON CLUSTER 查询的 active 副本。 #69660 (tuanpach)。
  • 更好地处理 ON CLUSTER 备份和还原的错误和取消: - 如果备份或还原在一个主机上失败,则会自动在其他主机上取消 - 不会因为某些主机失败而其他主机继续工作而产生奇怪的错误 - 如果备份或还原在一个主机上取消,则会自动在其他主机上取消 - 修复了 test_disallow_concurrency 的问题 - 现在禁用并发必须更好地工作 - 备份和还原现在更耐 ZooKeeper 断开连接。 #70027 (Vitaly Baranov)。
  • 支持 ALTER TABLE ... MODIFY/RESET SETTING ... 用于存储引擎 S3Queue 中的某些设置。 #70811 (Kseniia Sumarokova)。
  • 添加了重新加载客户端证书的功能,与重新加载服务器证书的过程相同。 #70997 (Roman Antonov)。
  • 使客户端历史记录大小可配置,并增加其默认大小。 #71014 (Jiří Kozlovský)。
  • Boolean 类型支持 parquet 原生读取器。 #71055 (Arthur Passos)。
  • 重试与 S3 交互时发生的更多错误,例如 “Malformed message”。 #71088 (Alexey Milovidov)。
  • 降低有关 S3 的某些消息的日志级别。 #71090 (Alexey Milovidov)。
  • 支持写入带有空格的 HDFS 文件。 #71105 (exmy)。
  • 添加了限制复制表、字典和视图数量的设置。 #71179 (Kirill)。
  • 如果前者可用,则使用 AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE 代替 AWS_CONTAINER_AUTHORIZATION_TOKEN。 修复了 #71074#71269 (Konstantin Bogdanov)。
  • 从 ReplicatedMergeTree 重启线程中删除 metadata_version ZooKeeper 节点的创建。 我们需要创建此节点的唯一场景是用户从早于 20.4 的版本直接更新到晚于 24.10 的版本。 ClickHouse 不支持跨越一年以上的升级,因此我们应该抛出异常并要求用户逐步更新,而不是创建节点。 #71385 (Miсhael Stetsyuk)。
  • 在高级仪表板中添加了每个主机的仪表板 Overview (host)Cloud overview (host)#71422 (alesapin)。
  • clickhouse-local 默认使用隐式 SELECT,这允许将其用作计算器。 改进了隐式 SELECT 模式的语法高亮显示。 #71620 (Alexey Milovidov)。
  • 命令行应用程序即使对于多语句也会突出显示语法。 #71622 (Alexey Milovidov)。
  • 命令行应用程序将在错误时返回非零退出代码。 在以前的版本中,disks 应用程序在错误时返回零,其他应用程序对于错误 256 (PARTITION_ALREADY_EXISTS) 和 512 (SET_NON_GRANTED_ROLE) 返回零。 #71623 (Alexey Milovidov)。
  • 当用户/组以 ID 形式给出时,clickhouse su 失败。 此补丁修复了它以接受 UID:GID#71626 (Mikhail f. Shiryaev)。
  • 允许通过设置 filesystem_cache_prefer_bigger_buffer_size 禁用文件系统缓存的内存缓冲区增加。 #71640 (Kseniia Sumarokova)。
  • 为文件系统缓存中的后台下载最大文件段大小添加了单独的设置 background_download_max_file_segment_size#71648 (Kseniia Sumarokova)。
  • 稍微改进了 JSON 类型解析:如果 JSON 路径的当前块包含多种类型的值,请尝试按特殊的尽力而为的顺序尝试类型来选择最佳类型。 #71785 (Pavel Kruglov)。
  • 以前从 system.asynchronous_metrics 读取会等待并发更新完成。 如果系统负载很重,这可能会花费很长时间。 通过此更改,始终可以读取先前收集的值。 #71798 (Alexander Gololobov)。
  • S3Queue 和 AzureQueue: 将 polling_max_timeout_ms 设置为 10 分钟,polling_backoff_ms 设置为 30 秒。 #71817 (Kseniia Sumarokova)。
  • history 周期内更新 HostResolver 三次。 #71863 (Sema Checherinda)。
  • 在高级仪表板 HTML 页面上,从 system.dashboards 表中添加了仪表板的下拉选择器。 #72081 (Sergei Trifonov)。
  • 授权后检查默认数据库是否存在。 修复了 #71097#71140 (Konstantin Bogdanov)。

Bug Fix (官方稳定版本中用户可见的错误行为)

  • ATTACH PART 查询期间重复数据删除的 parts 不再卡在带有 attaching_ 前缀的状态。 #65636 (Kirill)。
  • 修复了 DateTime64 在 IN 函数中丢失精度的错误。 #67230 (Yarik Briukhovetskyi)。
  • 修复了在使用 IGNORE/RESPECT NULLS 函数的 ORDER BY ... WITH FILL 中可能出现的逻辑错误,关闭了 #57609#68234 (Vladimir Cherkasov)。
  • 修复了在达到内存限制的情况下,格式为 Native 的异步 inserts 中罕见的逻辑错误。 #68965 (Anton Popov)。
  • 修复了 CREATE TABLE 中 EPHEMERAL 列的 COMMENT。 #70458 (Yakov Olkhovskiy)。
  • 修复了 LowCardinality(Nullable) 类型与 JSONExtract 函数一起使用时的逻辑错误。 #70549 (Pavel Kruglov)。
  • 允许在存在相同 zk 路径的另一个副本时,系统删除副本的 zk 路径。 #70642 (MikhailBurdukov)。
  • 修复了 AggregateFunctionGroupArraySorted 中的崩溃和内存泄漏问题。 #70820 (Michael Kolupaev)。
  • 在 URL 引擎中添加了通过用户标头覆盖 Content-Type 的能力。 #70859 (Artem Iurin)。
  • 修复了 StorageS3Queue 中的逻辑错误:“无法在 /processed 中创建持久节点,因为它已存在”。 #70984 (Kseniia Sumarokova)。
  • 修复了在特定情况下,命名会话未关闭并永久挂起的问题。 #70998 (Márcio Martins)。
  • 修复了投影轻量级删除的 rebuild 选项中未考虑 _row_exists 列的错误。 #71089 (Shichao Jin)。
  • 修复了在 Oracle Linux UEK 6.10 上运行时的 AT_* is out of range 问题。 #71109 (Örjan Fors)。
  • 修复了由于意外的竞争条件,导致 system.query_metric_log 中的值错误的问题。 #71124 (Pablo Marcos)。
  • 修复了 quantileExactWeightedInterpolated 的聚合函数名称不匹配的问题。该错误是在 https://github.com/ClickHouse/ClickHouse/pull/69619 中引入的。抄送 @Algunenano。 #71168 (李扬)。
  • 修复了函数比较中 Dynamic 类型的 bad_weak_ptr 异常。 #71183 (Pavel Kruglov)。
  • 检查读取的 7z 文件是否在本地计算机上。 #71184 (Daniil Ivanik)。
  • 修复了通过 HTTP 和异步插入在 Native 格式中忽略 format 设置的问题。 #71193 (Pavel Kruglov)。
  • 如果系统表的名称以字面量形式出现,例如 SELECT * FROM users WHERE name = 'system.metrics' SETTINGS use_query_cache = true;,则使用 use_query_cache = 1 设置运行的 SELECT 查询不再被拒绝,现在可以正常工作。 #71254 (Robert Schulze)。
  • 修复了如果 enable_filesystem_cache=1,但存储配置中的磁盘没有任何缓存配置,则内存使用量增加的错误。 #71261 (Kseniia Sumarokova)。
  • 修复了从 Dynamic 列反序列化 LowCardinality 字典时可能出现的“无法读取所有数据”错误。 #71299 (Pavel Kruglov)。
  • 修复了客户端并行输出格式的不完整清理问题。 #71304 (Raúl Marín)。
  • 在命名集合中添加了缺失的转义字符。没有此修复,clickhouse-server 将无法启动。 #71308 (MikhailBurdukov)。
  • 修复了通过 native 协议使用空块进行异步插入的问题。 #71312 (Anton Popov)。
  • 修复了授予错误的通配符权限时 AST 格式不一致的问题 #71309#71332 (pufit)。
  • 在数据 parts 析构函数中添加了 try/catch 以避免 std::terminate。 #71364 (alesapin)。
  • 检查 JSON 类型提示中的可疑和实验性类型。 #71369 (Pavel Kruglov)。
  • 也在非 Linux 操作系统上启动内存工作线程(修复了 #71051)。 #71384 (Alexandre Snarskii)。
  • 修复了 Variant 列的 Chunk 中行数无效的错误。 #71388 (Pavel Kruglov)。
  • 修复了旧版本 PostgreSQL 中不存在列 "attgenerated" 的错误,修复了 #60651#71396 (0xMihalich)。
  • 为了避免服务器日志泛滥,现在将身份验证失败的尝试记录为 DEBUG 级别而不是 ERROR 级别。 #71405 (Robert Schulze)。
  • 修复了在 mongodb 表函数中传递错误参数(例如 NULL)时发生的崩溃。 #71426 (Vladimir Cherkasov)。
  • 修复了 optimize_rewrite_array_exists_to_has 的崩溃问题。 #71432 (Raúl Marín)。
  • 修复了 inserts 中设置 max_insert_delayed_streams_for_parallel_write 的用法。之前它的工作方式不正确,可能导致将数据写入多个分区的 inserts 中出现高内存使用率。 #71474 (Anton Popov)。
  • 修复了在 arrayJoin 显然可以出现在 WHERE 条件中的情况下,可能出现的 Argument for function must be constant 错误(旧分析器)。这是在 https://github.com/ClickHouse/ClickHouse/pull/65414 之后引入的回归问题。 #71476 (Nikolai Kochetov)。
  • 防止在 SortCursor 中出现 0 列时的崩溃(旧分析器)。 #71494 (Raúl Marín)。
  • 修复了由未初始化的 ORC 数据引起的 Date32 超出范围的问题。有关更多详细信息,请参阅 https://github.com/apache/incubator-gluten/issues/7823#71500 (李扬)。
  • 修复了宽 part 中 Dynamic 和 JSON 类型列大小的计算问题。 #71526 (Pavel Kruglov)。
  • 分析器修复了物化视图内部的查询使用带有 CTE 的 IN 语句时的问题。关闭了 #65598#71538 (Maksim Kita)。
  • 避免在使用约束中的 UDF 时发生崩溃。 #71541 (Raúl Marín)。
  • 在位移函数中,当超出范围时,返回 0 或默认字符而不是抛出错误。 #71580 (Pablo Marcos)。
  • 修复了在使用带有某些引擎的物化视图时服务器崩溃的问题。 #71593 (Pervakov Grigorii)。
  • 包含常量数组别名的嵌套数据结构的 Array join 导致空指针解引用。关闭了 #71677#71678 (Alexey Milovidov)。
  • 修复了使用空元组进行 ALTER 操作时的 LOGICAL_ERROR。修复了 #71647#71679 (Amos Bird)。
  • 在 NOT IN 运算符的情况下,不要转换分区列谓词中的常量集合。 #71695 (Eduard Karacharov)。
  • 修复了 docker init 脚本失败的日志消息,使其更容易理解。 #71734 (Андрей)。
  • 修复了从 LowCardinality(Nullable) 到 Dynamic 的 CAST 转换。之前,这可能导致错误 Bad cast from type DB::ColumnVector<int> to DB::ColumnNullable#71742 (Pavel Kruglov)。
  • 修复了 DateTime64 类型主键在 WHERE 条件下使用 toDayOfWeek 函数时出现的异常。 #71849 (Yakov Olkhovskiy)。
  • 修复了稀疏列解析后默认值的填充。 #71854 (Anton Popov)。
  • 修复了当输入是分布式表上的 ALIAS 时 GROUPING 函数的错误,关闭了 #68602#71855 (Vladimir Cherkasov)。
  • 修复了使用 allow_experimental_join_condition 时可能发生的崩溃,关闭了 #71693#71857 (Vladimir Cherkasov)。
  • 修复了使用 WITH TIES 子句的 select 语句可能返回行数不足的问题。 #71886 (wxybear)。
  • 修复了当 arrayWithConstant 求值的列被错误地认为超出数组大小限制时,引起的 TOO_LARGE_ARRAY_SIZE 异常。 #71894 (Udi)。
  • clickhouse-benchmark 报告的查询时间超过一秒的查询指标错误。 #71898 (Alexey Milovidov)。
  • 修复了 clickhouse-client 中进度指示器和进度表之间的数据竞争。当使用 FROM INFILE 时,此问题可见。在 INSERT 查询期间拦截按键以切换进度表显示。 #71901 (Julia Kartseva)。
  • 使用辅助 keeper 进行集群自动发现。 #71911 (Anton Ivashkin)。
  • 修复了 system.s3/azure_queue_log 中的 rows_processed 列在 24.6 版本中损坏的问题。关闭了 #69975#71946 (Kseniia Sumarokova)。
  • 修复了 s3/s3Cluster 函数可能返回不完整结果或抛出异常的情况。这涉及到在 s3 uri 中使用 glob 模式(如 pattern/*),并且应该存在一个键为 pattern/ 的空对象(此类对象由 S3 控制台自动创建)。此外,设置 s3_skip_empty_files 的默认值从 false 更改为默认的 true#71947 (Nikita Taranov)。
  • 修复了 clickhouse-client 语法高亮中的崩溃问题。关闭了 #71864#71949 (Nikolay Degterinsky)。
  • 修复了 MergeTree 表中,当 ORDER BY 中的二进制单调函数的第一个参数是常量时,出现的 Illegal type 错误。修复了 #71941#71966 (Nikolai Kochetov)。
  • 仅允许在子查询内部使用的 EXPLAIN AST 中使用 SELECT 查询。其他类型的查询会导致逻辑错误:“从 DB::ASTCreateQuery 到 DB::ASTSelectWithUnionQuery 的错误转换”或 Inconsistent AST formatting#71982 (Pavel Kruglov)。
  • 当通过 clickhouse-client 插入记录时,客户端将从服务器读取列描述。但是存在一个错误,我们以错误的顺序写入了描述,它应该是 [statistics, ttl, settings]。 #71991 (Han Fei)。
  • 修复了启用 format_alter_commands_with_parentheses 时,MOVE PARTITION ... TO TABLE ... alter 命令的格式化问题。 #72080 (János Benjamin Antal)。
  • 修复了在具有并行副本的查询中 RIGHT / FULL JOIN 的问题。现在,RIGHT JOIN 可以与并行副本一起执行(右表读取是分布式的)。FULL JOIN 无法在节点之间并行化,只能本地执行。 #71162 (Igor Nikonov)。
  • 修复了 Docker 容器中的 ClickHouse 由于受限的 syscalls 而在 stderr 中打印 "get_mempolicy: Operation not permitted" 的问题。 #70900 (filimonov)。
  • 修复了 ZooKeeper 中 metadata_version 记录在重启线程而不是附加线程中的问题。 #70297 (Miсhael Stetsyuk)。
  • 这是对“零拷贝”复制的修复,该复制不受支持并将被完全删除。当 ReplicatedMergeTree 中有节点正在使用 blob 进行零拷贝复制时,不要删除该 blob。 #71186 (Antonio Andelic)。
  • 这是对“零拷贝”复制的修复,该复制不受支持并将被完全删除。在将 part 移动到零拷贝磁盘之前,获取零拷贝共享锁,以防止 Keeper 不可用时可能发生的数据丢失。 #71845 (Aleksei Filatov)。

ClickHouse 24.10 版本,2024-10-31

向后不兼容的变更

  • 允许在带有 UNION 的查询链中,当子查询位于括号内时,在 FORMAT 之前写入 SETTINGS。关闭了 #39712。更改了当一个查询在一个序列中指定了两次 SETTINGS 子句时的行为。最接近的 SETTINGS 子句将优先用于相应的子查询。在以前的版本中,最外层的 SETTINGS 子句可能会优先于内部的子句。 #68614 (Alexey Milovidov)。
  • 现在默认允许对 [PRE]WHERE 子句中的过滤器条件进行重新排序。可以通过将 allow_reorder_prewhere_conditions 设置为 false 来禁用它。 #70657 (Nikita Taranov)。
  • 移除了 idxd-config 库,该库具有不兼容的许可证。这也移除了实验性的 Intel DeflateQPL 编解码器。 #70987 (Alexey Milovidov)。

新特性

  • 允许授予对通配符前缀的访问权限。GRANT SELECT ON db.table_pefix_* TO user#65311 (pufit)。
  • 如果在查询运行时按下空格键,客户端将显示一个包含详细指标的实时表格。您可以使用 clickhouse-client 中的新选项 --progress-table 全局启用它;一个新的 --enable-progress-table-toggle--progress-table 选项相关联,并通过按下 Control 键(空格键)来切换进度表的渲染。 #63689 (Maria Khristenko), #70423 (Julia Kartseva)。
  • 允许使用来自 ETag + 文件路径的哈希作为缓存键,为对象存储表引擎和数据湖缓存读取的文件。 #70135 (Kseniia Sumarokova)。
  • 支持使用查询创建表:CREATE TABLE ... CLONE AS ...。它克隆源表的 schema,然后将所有分区附加到新创建的表。此功能仅支持 MergeTree 系列的表。关闭了 #65015#69091 (tuanpach)。
  • 添加了一个新的系统表 system.query_metric_log,其中包含来自表 system.events 的内存和指标值的历史记录,这些记录会定期刷新到磁盘。 #66532 (Pablo Marcos)。
  • 可以使用隐式 SELECT 编写简单的 SELECT 查询,以启用计算器样式的表达式,例如 ch "1 + 2"。这由一个新的设置 implicit_select 控制。 #68502 (Alexey Milovidov)。
  • 支持 clickhouse local 的 --copy 模式,作为格式转换的快捷方式 #68503#68583 (Denis Hananein)。
  • 添加了一个内置的 HTML 页面,用于可视化 merges,该页面可在 /merges 路径下访问。 #70821 (Alexey Milovidov)。
  • 添加了对 arrayUnion 函数的支持。 #68989 (Peter Nguyen)。
  • 允许参数化 SQL 别名。 #50665 (Anton Kozlov)。
  • 一个新的聚合函数 quantileExactWeightedInterpolated,它是基于 quantileExactWeighted 的插值版本。有些人可能会想知道,既然我们已经有了 quantileExactInterpolatedWeighted,为什么还需要一个新的 quantileExactWeightedInterpolated。原因是新的函数比旧的更准确。这是为了与 spark 兼容。 #69619 (李扬)。
  • 一个新的函数 arrayElementOrNull。如果数组索引超出范围或未找到 Map 键,则返回 NULL#69646 (李扬)。
  • 允许用户通过 config.xml 文件中的新字段 message_regexpmessage_regexp_negative 指定正则表达式来过滤日志记录。日志记录应用于格式化的未着色文本,以获得最直观的开发者体验。 #69657 (Peter Nguyen)。
  • 添加了 RIPEMD160 函数,该函数计算字符串的 RIPEMD-160 加密哈希值。示例:SELECT HEX(RIPEMD160('The quick brown fox jumps over the lazy dog')) 返回 37F332F68DB77BD9D7EDD4969571AD671CF9DD3B#70087 (Dergousov Maxim)。
  • 支持读取 HDFS 上的 Iceberg 表。 #70268 (flynn)。
  • 支持 CTE 的 WITH ... INSERT 形式,因为之前我们只支持 INSERT ... WITH ...#70593 (Shichao Jin)。
  • MongoDB 集成:支持所有 MongoDB 类型,支持 MongoDB 端的 WHERE 和 ORDER BY 语句,限制 MongoDB 不支持的表达式。请注意,新的集成默认情况下是禁用的,要使用它,请在服务器配置中将 <use_legacy_mongodb_integration> 设置为 false#63279 (Kirill Nikiforov)。
  • 添加了一个新的函数 getSettingOrDefault,用于返回默认值,并避免在当前 profile 中找不到自定义设置时抛出异常。 #69917 (Shankar)。

实验性功能

  • 可刷新的物化视图已准备好用于生产环境。 #70550 (Michael Kolupaev)。Replicated 数据库现在支持可刷新的物化视图。 #60669 (Michael Kolupaev)。
  • 并行副本已从实验性移至 beta 阶段。重新设计了控制并行副本算法行为的设置。快速回顾:ClickHouse 有四种不同的并行读取算法,涉及多个副本,这反映在设置 parallel_replicas_mode 中,它的默认值为 read_tasks。此外,还添加了切换设置 enable_parallel_replicas#63151 (Alexey Milovidov), (Nikita Mikhaylov)。
  • 支持在大多数函数中使用 Dynamic 类型,方法是在 Dynamic 内部的内部类型上执行它们。 #69691 (Pavel Kruglov)。
  • 允许在 RowBinary 格式中,在设置 input_format_binary_read_json_as_string/output_format_binary_write_json_as_string 下,将 JSON 类型作为二进制字符串读取/写入。 #70288 (Pavel Kruglov)。
  • 允许在 Native 格式中将 JSON 列序列化/反序列化为单个 String 列。对于输出,请使用设置 output_format_native_write_json_as_string。对于输入,请在列数据之前使用序列化版本 1#70312 (Pavel Kruglov)。
  • 为 MergeTree 表引入了一种特殊的(实验性的)merge 选择器模式,该模式对于 parts 数量接近限制的分区更具侵略性。它由 MergeTree 级别的设置 merge_selector_use_blurry_base 控制。 #70645 (Nikita Mikhaylov)。
  • 实现 Avro 的 Union 和 ClickHouse 的 Variant 类型之间的通用 ser/de。解决了 #69713#69712 (Jiří Kozlovský)。

性能提升

  • 重构 IDiskIObjectStorage 以获得更好的性能。来自 plainplain_rewritable 对象存储的表将更快地初始化。 #68146 (Alexey Milovidov, Julia Kartseva)。当确定文件或目录是否存在于 plain rewritable 磁盘上时,不要调用 LIST 对象存储 API,因为它可能成本效益低下。 #70852 (Julia Kartseva)。减少 plain_rewritable 磁盘中对象存储 HEAD API 请求的数量。 #70915 (Julia Kartseva)。
  • 添加了直接将数据解析到稀疏列的功能。 #69828 (Anton Popov)。
  • 提高了解析具有大量缺失值的格式(例如 JSONEachRow)的性能。 #69875 (Anton Popov)。
  • 支持并行读取 parquet 行组以及在单线程模式下预取行组。 #69862 (LiuNeng)。
  • 支持 pointInPolygon 的 minmax 索引。 #62085 (JackyWoo)。
  • 在读取 Parquet 文件时使用 Bloom 过滤器。 #62966 (Arthur Passos)。
  • 无锁部件重命名,以避免 INSERT 影响 SELECT(由于部件锁)(在 fsync_part_directory 的正常情况下,并行 INSERT 的 SELECT 的 QPS 提高了 2 倍,在重负载下,效果更明显)。注意,目前仅包括 ReplicatedMergeTree#64955 (Azat Khuzhin)。
  • materialize ttl 上遵守 ttl_only_drop_parts;仅读取必要的列以重新计算 TTL 并通过用空部件替换它们来删除部件。 #65488 (Andrey Zvonov)。
  • 优化了 ThreadPool 中的线程创建,以最大程度地减少锁争用。线程创建现在在临界区之外执行,以避免在高负载条件下作业调度和线程管理中的延迟。这使得 ClickHouse 在高并发负载下响应更快。 #68694 (filimonov)。
  • 允许从 ORC 读取 LowCardinality 字符串列。 #69481 (李扬)。
  • 在系统日志(例如 part_logquery_views_logfilesystem_cache_log)中为 ProfileEvents 使用 LowCardinality#70152 (Alexey Milovidov)。
  • 提高 fromUnixTimestamp/toUnixTimestamp 函数的性能。 #71042 (kevinyhzou)。
  • 当从阻塞 I/O 读取时,不要为整个服务器禁用从页面缓存的非阻塞读取。当单个文件系统(例如 tmpfs)不支持 preadv2 系统调用而其他文件系统支持时,这会导致性能下降。 #70299 (Antonio Andelic)。
  • ALTER TABLE .. REPLACE PARTITION 不再等待发生在其他分区的 mutations/merges。 #59138 (Vasily Nemkov)。
  • 从 Keeper 同步 ACL 时,不要进行验证。它在创建期间进行验证。这应该没那么重要,但是有些安装有数万甚至更多的用户创建,并且不必要的哈希验证可能需要很长时间才能在服务器启动期间完成(它从 keeper 同步所有内容)。 #70644 (Raúl Marín)。

改进

  • CREATE TABLE AS 将复制 PRIMARY KEYORDER BY 和类似的子句(MergeTree 表的)。 #69739 (sakulali)。
  • 在 Keeper 中支持 64 位 XID。可以使用 use_xid_64 配置值启用它。 #69908 (Antonio Andelic)。
  • 当没有为参数提供值时,Bool 设置的命令行参数设置为 true(例如 clickhouse-client --optimize_aggregation_in_order --query "SELECT 1")。 #70459 (davidtsuk)。
  • 添加了用户级设置 min_free_disk_bytes_to_perform_insertmin_free_disk_perform_to_throw_insert,以防止在几乎已满的磁盘上进行插入。 #69755 (Marco Vilas Boas)。
  • 设置的嵌入式文档将比网站上的文档更详细和完整。这是使网站文档始终从源代码自动生成的第一步。这具有长期的影响:- 它将保证包含每个设置;- 不会存在默认值过时的情况;- 我们可以为每个 ClickHouse 版本生成此文档;- 即使没有互联网访问,文档也可以由服务器本身显示。从源代码在网站上生成文档。 #70289 (Alexey Milovidov)。
  • 允许在 replace 函数中使用空 needle,与 PostgreSQL 的行为相同。 #69918 (zhanglistar)。
  • 允许在 replaceRegexp* 函数中使用空 needle。 #70053 (zhanglistar)。
  • data/database_name/ 目录中表的符号链接是为表数据的实际路径创建的,具体取决于存储策略,而不是默认磁盘上的 store/... 目录。 #61777 (Kirill)。
  • JSON 解析 Enum 字段时,包含整数的字符串将被解释为相应的 Enum 元素。这解决了 #65119 的问题。 #66801 (scanhex12)。
  • 允许 TRIM -ing LEADINGTRAILING 空字符串作为空操作。解决了 #67792 的问题。 #68455 (Peter Nguyen)。
  • 提高 cast(timestamp as String) 与 Spark 的兼容性。 #69179 (Wenzheng Liu)。
  • enable_analyzer 设置为 true 时,始终使用新的分析器来计算常量表达式。支持计算 executable 表函数参数,而无需为常量表达式使用 SELECT 查询。 #69292 (Dmitry Novik)。
  • 添加设置 enable_secure_identifiers 以禁止使用特殊字符的标识符。 #69411 (tuanpach)。
  • 添加 show_create_query_identifier_quoting_rule 以定义 SHOW CREATE TABLE 查询结果中的标识符引用行为。可能的值:- user_display:当标识符是关键字时。- when_necessary:当标识符是 {"distinct", "all", "table"} 之一,并且可能导致歧义时:列名、字典属性名。- always:始终引用标识符。 #69448 (tuanpach)。
  • 改进访问实体依赖项的恢复。 #69563 (Vitaly Baranov)。
  • 如果您运行 clickhouse-client 或其他 CLI 应用程序,并且由于服务器过载而启动缓慢,并且您开始键入查询(例如 SELECT),则之前的版本将在打印问候消息之前显示终端回显内容的剩余部分,例如 SELECTClickHouse local version 24.10.1.1. 而不是 ClickHouse local version 24.10.1.1.。现在已修复。这解决了 #31696 的问题。 #69856 (Alexey Milovidov)。
  • system.replicas 表添加新列 readonly_duration。需要能够在警报中区分实际的只读副本和 sentinel 副本。 #69871 (Miсhael Stetsyuk)。
  • join_output_by_rowlist_perkey_rows_threshold 设置类型更改为无符号整数。 #69886 (kevinyhzou)。
  • 增强 OpenTelemetry span 日志记录以包含查询设置。 #70011 (sharathks118)。
  • 如果 lambda 结果类型意外,则添加有关高阶数组函数的诊断信息。 #70093 (ttanay)。
  • Keeper 改进:集群更改期间减少锁定。 #70275 (Antonio Andelic)。
  • SHOW GRANTS 命令添加 WITH IMPLICITFINAL 关键字。修复了隐式授权的一个小 bug:#70094#70293 (pufit)。
  • 对于 MergeTree 设置,遵守 compatibilitycompatibility 值取自服务器启动时的 default profile,并且默认的 MergeTree 设置会相应更改。compatibility 设置的进一步更改不会影响 MergeTree 设置。 #70322 (Nikolai Kochetov)。
  • 避免在服务器间通信期间发生错误时,用大型 HTTP 响应正文垃圾邮件日志。 #70487 (Vladimir Cherkasov)。
  • 添加了一个新设置 max_parts_to_move,以控制一次可以移动的最大部件数。 #70520 (Vladimir Cherkasov)。
  • 限制某些日志消息的频率。 #70601 (Alexey Milovidov)。
  • 带有 PART 限定符的 CHECK TABLE 在客户端中格式不正确。 #70660 (Alexey Milovidov)。
  • 支持使用 parquet native writer 写入列索引和偏移索引。 #70669 (LiuNeng)。
  • 支持在 joda 语法中解析 DateTime64 的微秒和时区(“joda” 是一个流行的 Java 日期和时间库,“joda 语法”是该库的风格)。 #70737 (kevinyhzou)。
  • 更改了一种方法来确定云存储是否支持批量删除#70786 (Vitaly Baranov)。
  • 在 native reader 中支持 Parquet page v2。 #70807 (Arthur Passos)。
  • 检查表是否同时设置了 storage_policydisk。添加了当使用 disk 设置时,检查新存储策略是否与旧存储策略兼容。 #70839 (Kirill)。
  • 添加 system.s3_queue_settingssystem.azure_queue_settings#70841 (Kseniia Sumarokova)。
  • 函数 base58Encodebase58Decode 现在接受 FixedString 类型的参数。示例:SELECT base58Encode(toFixedString('plaintext', 9));#70846 (Faizan Patel)。
  • partition 列添加到部件日志的每个条目类型。以前,它仅针对某些条目设置。这解决了 #70819 的问题。 #70848 (Alexey Milovidov)。
  • MergeStartMutateStart 事件添加到 system.part_log 中,这有助于合并分析和可视化。 #70850 (Alexey Milovidov)。
  • 添加有关合并的源部件数量的 profile 事件。它允许在生产环境中监控 merge tree 的扇出。 #70908 (Alexey Milovidov)。
  • 重新启用后台下载到文件系统缓存。 #70929 (Nikita Taranov)。
  • 添加一个新的合并选择器算法,名为 Trivial,仅供专业用途。它比 Simple 合并选择器更差。 #70969 (Alexey Milovidov)。
  • 支持原子 CREATE OR REPLACE VIEW#70536 (tuanpach)
  • 向聚合函数 windowFunnel 添加了 strict_once 模式,以避免在事件匹配多个条件时多次计数一个事件,解决了 #21835 的问题。 #69738 (Vladimir Cherkasov)。

Bug 修复(官方稳定版本中用户可见的错误行为)

  • 在全局上下文对象中应用配置更新。它修复了诸如 #62308 之类的问题。 #62944 (Amos Bird)。
  • 修复 ReadSettings 未使用用户设置的值,因为仅使用了默认值。 #65625 (Kseniia Sumarokova)。
  • 修复在使用有符号参数时 sumMapFiltered 中的类型不匹配问题。 #58408 (Chen768959)。
  • 修复传递可选时区参数时,类似 toHour 的转换函数的单调性。 #60264 (Amos Bird)。
  • 放宽 Merge 表的 supportsPrewhere 检查。这修复了 #61064 的问题。它在 #60082 中被不必要地加强了。 #61091 (Amos Bird)。
  • 修复 use_concurrency_control 设置处理,以正确执行 concurrent_threads_soft_limit_num 限制。这默认启用并发控制,因为以前它是损坏的。 #61473 (Sergei Trifonov)。
  • 修复在任何其他函数(如 NOT)下进行 IS NULL 检查时,不正确的 JOIN ON 部分优化,这可能导致错误的结果。解决了 #67915 的问题。 #68049 (Vladimir Cherkasov)。
  • 阻止使表的 CREATE 查询无效的 ALTER 查询。 #68574 (János Benjamin Antal)。
  • 修复元组和数组的 negate (`-`) 和 NOT 函数的不一致 AST 格式。 #68600 (Vladimir Cherkasov)。
  • 修复在反序列化期间将不完整类型插入到 Dynamic 中的问题。这可能导致 Parameter out of bound 错误。 #69291 (Pavel Kruglov)。
  • 零拷贝复制,它是实验性的,不应在生产环境中使用:修复在使用零拷贝的复制 MergeTree 中 restore replica 后的无限循环。 #69293 (MikhailBurdukov)。
  • 将存储 S3Queueprocessing_threads_num 的默认值返回为 cpu 核心数。 #69384 (Kseniia Sumarokova)。
  • 当反/序列化嵌套重复的 protobuf 到嵌套列时,绕过 try/catch 流程(修复了 #41971 的问题)。 #69556 (Eliot Hautefeuille)。
  • 修复在 PostgreSQL 引擎中插入到 FixedString 列期间发生的崩溃。 #69584 (Pavel Kruglov)。
  • 修复执行 create view t as (with recursive 42 as ttt select ttt); 时发生的崩溃。 #69676 (Han Fei)。
  • 修复了如果值类型为 DateTime64,maxMapState 抛出 'Bad get' 的问题。 #69787 (Michael Kolupaev)。
  • 通过覆盖 useDefaultImplementationForLowCardinalityColumns 以返回 true,修复 LowCardinality 列的 getSubcolumn#69831 (Miсhael Stetsyuk)。
  • 修复如果分布式表的 DROP 失败,则永久阻塞分布式发送的问题。 #69843 (Azat Khuzhin)。
  • 修复包含带有 NaN 键的 WITH FILL 的不可取消查询。这解决了 #69261 的问题。 #69845 (Alexey Milovidov)。
  • 修复具有旧兼容性值的分析器默认值。 #69895 (Raúl Marín)。
  • 在 DROP 旧表期间,不要在 CREATE OR REPLACE VIEW 期间检查依赖项。以前,当重新创建的视图有依赖表时,CREATE OR REPLACE 查询失败。 #69907 (Pavel Kruglov)。
  • Decimal 的一些东西。修复了 #69730 的问题。 #69978 (Arthur Passos)。
  • 现在 DEFINER/INVOKER 将与参数化视图一起使用。 #69984 (pufit)。
  • 修复视图定义者的解析。 #69985 (pufit)。
  • 修复了时区可能会更改带有 DateDate32 参数的查询结果的 bug。 #70036 (Yarik Briukhovetskyi)。
  • 修复了带有嵌套视图和 WHERE 条件的查询的 Block structure mismatch 问题。修复了 #66209 的问题。 #70054 (Nikolai Kochetov)。
  • 在评估 tuple 函数时,避免在不同的命名元组之间重用列。这修复了 #70022 的问题。 #70103 (Amos Bird)。
  • 修复在替换范围中的文字时,错误的 LOGICAL_ERROR。 #70122 (Pablo Marcos)。
  • 在 ALTER TABLE MODIFY COLUMN/QUERY 期间检查 Nullable(Nothing) 类型,以防止具有此类数据类型的表。 #70123 (Pavel Kruglov)。
  • 对于非法查询 JOIN ... ON *,提供正确的错误消息,解决了 #68650 的问题。 #70124 (Vladimir Cherkasov)。
  • 修复使用跳过索引时的错误结果。 #70127 (Raúl Marín)。
  • 修复 ColumnObject/ColumnTuple 解压缩方法中的数据竞争,这可能导致堆释放后使用。 #70137 (Pavel Kruglov)。
  • 修复在使用 Dynamic 类型进行 ALTER COLUMN 时可能发生的挂起。 #70144 (Pavel Kruglov)。
  • 现在 ClickHouse 将认为更多错误是可重试的,并且在这种错误情况下不会将数据部件标记为损坏。 #70145 (alesapin)。
  • 在为 JSON 子列创建 Dynamic 类型期间,使用正确的 max_types 参数。 #70147 (Pavel Kruglov)。
  • 修复了在使用 bcrypt 密码身份验证方法的用户的 system.query_log 中显示密码的问题。 #70148 (Nikolay Degterinsky)。
  • 修复 native 接口的事件计数器 (InterfaceNativeSendBytes)。 #70153 (Yakov Olkhovskiy)。
  • 修复可能与 JSON 列相关的崩溃。 #70172 (Pavel Kruglov)。
  • 修复 arrayMin 和 arrayMax 的多个问题。 #70207 (Raúl Marín)。
  • 在 JSON 类型解析器中遵守设置 allow_simdjson。 #70218 (Pavel Kruglov)。
  • 修复在创建具有两个 select 和一个 INTERSECT 的物化视图时发生的空指针解引用,例如 CREATE MATERIALIZED VIEW v0 AS (SELECT 1) INTERSECT (SELECT 1);#70264 (Konstantin Bogdanov)。
  • 不要使用启动脚本修改全局设置。以前,在启动脚本中更改设置会全局更改它。 #70310 (Antonio Andelic)。
  • 修复减少 max_types 参数的 Dynamic 类型的 ALTER,这可能导致服务器崩溃。 #70328 (Pavel Kruglov)。
  • 修复错误使用 WITH FILL 时发生的崩溃。 #70338 (Raúl Marín)。
  • 修复 SYSTEM DROP FORMAT SCHEMA CACHE FOR Protobuf 中可能发生的释放后使用。 #70358 (Azat Khuzhin)。
  • 修复 GROUP BY JSON 子对象子列时发生的崩溃。#70374 (Pavel Kruglov)。
  • 如果 part 没有行,则不要为垂直合并预取 part。#70452 (Antonio Andelic)。
  • 修复 WHERE 子句中使用 lambda 函数时发生的崩溃。#70464 (Raúl Marín)。
  • 修复在数据库 Replicated 和辅助副本上不可用的表函数源的情况下,使用 CREATE ... AS table_function(...) 创建表的问题。#70511 (Kseniia Sumarokova)。
  • 忽略 wait_for_async_insert=1 的异步插入的所有输出。 关闭 #62644#70530 (Konstantin Bogdanov)。
  • 在从 system.remote_data_paths 遍历影子目录时,忽略 frozen_metadata.txt 文件。#70590 (Aleksei Filatov)。
  • 修复在内存未对齐的情况下创建有状态窗口函数的问题。#70631 (Raúl Marín)。
  • 修复了在添加具有非空默认表达式的 Array 类型列之后,SELECT 查询和合并中罕见的崩溃问题。#70695 (Anton Popov)。
  • 插入表函数 s3 将遵守查询设置。#70696 (Vladimir Cherkasov)。
  • 修复在启用跳过不支持的字段时推断 protobuf 模式时的无限递归问题。#70697 (Raúl Marín)。
  • 默认禁用 enable_named_columns_in_function_tuple 设置。#70833 (Raúl Marín)。
  • 修复 S3Queue 表引擎设置 processing_threads_num 在从服务器上的 CPU 核心数推断时无效的问题。#70837 (Kseniia Sumarokova)。
  • 规范化聚合状态中的命名元组参数。 修复了 #69732 问题。 #70853 (Amos Bird)。
  • 修复了二级哈希表中由于负零导致的逻辑错误。 关闭了 #70973 问题。 #70979 (Alexey Milovidov)。
  • 修复分布式和并行副本的 limit bylimit with ties 功能。#70880 (Nikita Taranov)。

ClickHouse 24.9 版本,2024-09-26

向后不兼容的变更

  • 支持命名元组的表达式,如 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)。
  • Replicated 数据库中创建表时,不允许显式指定 UUID。 此外,也不允许为 Replicated 数据库中的 *MergeTree 表显式指定 Keeper 路径和副本名称。 它引入了一个新的设置 database_replicated_allow_explicit_uuid,并将 database_replicated_allow_replicated_engine_arguments 的类型从 Bool 更改为 UInt64。#66104 (Alexander Tokmakov)。

新功能

  • 允许用户拥有多种身份验证方法,而不是仅一种。 允许将身份验证方法重置为最近添加的方法。 如果您想在一段时间内运行 24.8 版本的实例和 24.9 版本的实例,最好将 max_authentication_methods_per_user 设置为 1,以避免潜在的不兼容性。#65277 (Arthur Passos)。
  • 添加了对 ATTACH PARTITION ALL FROM 的支持。#61987 (Kirill Nikiforov)。
  • 添加了 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; #67805 (sunny)。
  • 实现了对不同域(例如秒和分钟)的 Interval 数据类型值进行比较,因此它们现在转换为最小超类型。#68057 (Yarik Briukhovetskyi)。
  • 向默认值添加 create_if_not_exists 设置,以在 CREATE 语句期间使用 IF NOT EXISTS 行为。#68164 (Peter Nguyen)。
  • 使在 Azure 和本地读取 Iceberg 表成为可能。#68210 (Daniil Ivanik)。
  • 查询缓存条目现在可以按标签删除。 例如,由 SELECT 1 SETTINGS use_query_cache = true, query_cache_tag = 'abc' 创建的查询缓存条目现在可以通过 SYSTEM DROP QUERY CACHE TAG 'abc' 删除。#68477 (Michał Tabaszewski)。
  • 为命名集合添加存储加密。#68615 (Pablo Marcos)。
  • URL 表引擎添加虚拟列 _headers。 关闭了 #65026 问题。 #68867 (flynn)。
  • 添加 system.projections 表以跟踪可用的投影。#68901 (Jordi Villar)。
  • 添加了新函数 arrayZipUnaligned,用于 Spark 兼容性(在 Spark 中名为 arrays_zip),它允许基于原始 arrayZip 的未对齐数组。#69030 (李扬)。
  • 为 keeper 客户端命令行应用程序添加了 cp/mv 命令,该命令原子性地复制/移动节点。#69034 (Mikhail Artemenko)。
  • 向函数 arrayAUC 添加参数 scale(默认值:true),该参数允许跳过归一化步骤(问题 #69609)。 #69717 (gabrielmcg44)。

实验性功能

  • 添加了一个设置 input_format_try_infer_variants,当列/数组元素有多个可能的类型时,该设置允许在文本格式的模式推断期间推断 Variant 类型。#63798 (Shaun Struwig)。
  • 添加了聚合函数 distinctDynamicTypes/distinctJSONPaths/distinctJSONPathsAndTypes,以便更好地内省 JSON 列类型内容。#68463 (Kruglov Pavel)。
  • 新算法通过一致性哈希来确定并行副本之间标记分布的单位。 为不同的读取模式选择不同数量的标记,以提高性能。#68424 (Nikita Taranov)。
  • 以前,并行副本公告处理中的部件去重逻辑的算法复杂度为 O(n^2),对于具有许多部件(或分区)的表,这可能会花费相当长的时间。 此更改使复杂度变为 O(n*log(n))。#69596 (Alexander Gololobov)。
  • 可刷新的物化视图改进:追加模式(... REFRESH EVERY 1 MINUTE APPEND ...)以将行添加到现有表而不是覆盖整个表,重试(默认禁用,在查询的 SETTINGS 部分中配置),SYSTEM WAIT VIEW <name> 查询,等待当前正在运行的刷新,以及一些修复。#58934 (Michael Kolupaev)。
  • 添加了 min_max 作为一种新的(实验性)统计信息类型。 它支持估计数字列上的范围谓词,例如 x < 100#67013 (JackyWoo)。
  • 改进了来自 Variant/Dynamic 列的 castOrDefault 函数,使其在内部类型完全不可转换时也能工作。#67150 (Kruglov Pavel)。
  • 现在可以通过 MaterializedPostgreSQL 实现列子集的复制。 关闭了 #33748 问题。 #69092 (Kruglov Kirill)。

性能提升

  • 实现了仅读取 Hive 分区所需的文件。#68963 (Yarik Briukhovetskyi)。
  • 当表键在 LEFT 或 INNER 哈希连接中密集时,通过按键重新排列右表来提高 JOIN 性能。#60341 (kevinyhzou)。
  • 通过惰性追加行列表来提高 ALL JOIN 性能。#63677 (kevinyhzou)。
  • 在启动过程中异步加载文件系统缓存元数据,以加快重启速度(由设置 load_metadata_asynchronously 控制)。#65736 (Daniel Pozo Escalona)。
  • 优化了函数 arraymap,以更快地处理某些常见情况。#67707 (李扬)。
  • 对 ORC 字符串读取进行简单的优化,特别是当列不包含 NULL 值时。#67794 (李扬)。
  • 通过减少调度合并步骤的开销,提高了合并的整体性能。#68016 (Anton Popov)。
  • 当未设置 profile、未设置凭据且 IMDS 不可用时(例如,当您在云外部的机器上查询公共存储桶时),加快对 S3 的请求速度。 关闭了 #52771 问题。 #68082 (Alexey Milovidov)。
  • 反虚化 RowInputFormatWithNamesAndTypes 中的格式读取器,以提高一些性能。#68437 (李扬)。
  • 当使用 group by 键聚合时,为 uniq 聚合函数添加并行合并,以最大限度地提高 CPU 利用率。#68441 (Jiebin Sun)。
  • 添加设置 output_format_orc_dictionary_key_size_threshold,允许用户为 ORC 输出格式中的字符串列启用字典编码。 它有助于减小输出 ORC 文件大小并显着提高读取性能。#68591 (李扬)。
  • 引入新的 Keeper 请求 RemoveRecursive,该请求删除节点及其所有子树。#69332 (Mikhail Artemenko)。
  • 通过并行向向量索引添加数据,加快插入到具有向量相似度索引的表中的性能。#69493 (flynn)。
  • 通过使用自适应写入缓冲区大小来减少 JSON 插入的内存使用量。 宽部件中 JSON 列创建的许多文件包含少量数据,为它们分配 1MB 缓冲区没有意义。#69272 (Kruglov Pavel)。
  • 避免在并发哈希连接线程池中返回线程,以避免查询过度生成线程。#69406 (Duc Canh Le)。

改进

  • CREATE TABLE AS 现在复制 PRIMARY KEY、ORDER BY 和类似子句。 现在仅支持 MergeTree 系列的表引擎。#69076 (sakulali)。
  • 加强了与解析小实体相关的代码库部分。 发现并修复了以下(次要)错误:- 如果 DeltaLake 表按 Bool 分区,则分区值始终被解释为 false; - ExternalDistributed 表仅使用提供的地址中的单个分片; max_threads 设置和类似的设置的值打印为 'auto(N)' 而不是 auto(N)#52503 (Alexey Milovidov)。
  • 使用 cgroup 特定的指标进行 CPU 使用率核算,而不是系统级指标。#62003 (Nikita Taranov)。
  • 远程 S3 磁盘的 IO 调度现在在 HTTP 套接字流级别(而不是整个 S3 请求)完成,以解决 bandwidth_limit 节流问题。#65182 (Sergei Trifonov)。
  • 函数 upperUTF8lowerUTF8 以前只能将西里尔字符转换为大写/小写。 现在取消了此限制,并且任意语言的字符都可以转换为大写/小写。 示例:SELECT upperUTF8('Süden') 现在返回 SÜDEN#65761 (李扬)。
  • 当在具有投影的表上发生轻量级删除时,尽管用户可以选择抛出异常(默认情况下)或在发生轻量级删除时删除投影,但现在有第三种选择,即仍然进行轻量级删除,然后重建投影。#66169 (jsc0218)。
  • 添加了两个选项(dns_allow_resolve_names_to_ipv4dns_allow_resolve_names_to_ipv6),以允许阻止连接 IP 族。#66895 (MikhailBurdukov)。
  • 使 clickhouse-client 中的 Ctrl-Z 忽略行为可配置 (ignore_shell_suspend)。#67134 (Azat Khuzhin)。
  • 改进 JSON 输出格式中的 UTF-8 验证。 确保在结果数据中存在某些字节序列的情况下生成有效的 JSON。#67938 (mwoenker)。
  • 为合并和突变添加了配置文件事件,以便更好地进行内省。#68015 (Anton Popov)。
  • ODBC:从服务器配置获取 http_max_tries。#68128 (Rodolphe Dugé de Bernonville)。
  • 在 X.509 SubjectAltName 扩展中添加对用户身份验证的通配符支持。#68236 (Marco Vilas Boas)。
  • 改进日期时间的模式推断。 现在仅当日期时间具有小数部分时才使用 DateTime64,否则使用常规 DateTime。 现在 Date/DateTime 的推断更加严格,特别是当 date_time_input_format='best_effort' 时,以避免从极端情况下的字符串推断日期时间。#68382 (Kruglov Pavel)。
  • 从字典中删除旧的命名集合代码,并将其替换为新的代码,新代码允许在字典中使用 DDL 创建的命名集合。 关闭了 #60936#36890 问题。 #68412 (Kseniia Sumarokova)。
  • 对于外部 HTTP 身份验证器,默认使用 HTTP/1.1 而不是 HTTP/1.0。#68456 (Aleksei Filatov)。
  • 为线程池内省添加了一组新的指标,提供了对线程池性能和行为的更深入了解。#68674 (filimonov)。
  • 支持格式为 Values 的异步插入中的查询参数。#68741 (Anton Popov)。
  • 支持 Date32dateTrunctoStartOfInterval 函数中使用。#68874 (LiuNeng)。
  • plan_step_nameplan_step_description 列添加到 system.processors_profile_log#68954 (Alexander Gololobov)。
  • 在嵌入式字典中支持西班牙语。#69035 (Vasily Okunev)。
  • 将 CPU 架构添加到简短的故障信息消息中。#69037 (Konstantin Bogdanov)。
  • 如果在重试期间无法建立新的 Keeper 连接,查询将更快失败。#69148 (Raúl Marín)。
  • 更新数据库工厂,以便用户定义的数据库引擎可以具有参数、设置和表覆盖(类似于 StorageFactory)。#69201 (NikBarykin)。
  • 如果表具有 SETTINGS,则将所有外部表引擎和函数替换为 Null 引擎的恢复模式(restore_replace_external_engines_to_nullrestore_replace_external_table_functions_to_null 设置)将失败。 现在,在这种情况下,它会从表定义中删除设置,并允许恢复此类表。#69253 (Ilya Yatsishin)。
  • CLICKHOUSE_PASSWORD 在 clickhouse 镜像的入口点中针对 XML 正确转义。#69301 (aohoyd)。
  • 允许 arrayZip/arrayZipUnaligned 使用空参数,就像 concat 在 https://github.com/ClickHouse/ClickHouse/pull/65887 中所做的那样。 这是为了 Gluten CH 后端中的 Spark 兼容性。#69576 (李扬)。
  • 为 Keeper 的内部通信支持更高级的 SSL 选项(例如,带有密码的私钥)。#69582 (Antonio Andelic)。
  • 对于具有许多部件或分区的超大型表,索引分析可能会花费相当长的时间。 此更改应允许在该阶段终止重型查询。#69606 (Alexander Gololobov)。
  • 屏蔽 gcs 表函数中的敏感信息。#69611 (Vitaly Baranov)。
  • 为减少行数的合并重建投影。#62364 (cangyin)。

错误修复(官方稳定版本中用户可见的错误行为)

  • 修复在实验性和不受支持的 MaterializedPostgreSQL 引擎中,当 pg dbname 包含“-”时附加表的问题。#62730 (takakawa)。
  • 修复了在实验性和完全不受支持的 MaterializedPostgreSQL 引擎中,当 adnum 排序中断时,生成列的错误问题 #63161。 修复了在实验性和完全不受支持的 MaterializedPostgreSQL 中,当表中存在生成列时,id 列使用 nextval 表达式作为默认值的错误问题。 修复了删除包含 [a-z1-9-] 以外符号的发布时发生的错误。#67664 (Kruglov Kirill)。
  • Storage Join 支持左表中的 Nullable 列,关闭 #61247 问题。 #66926 (vdimir)。
  • IN 运算符包含转换为 Decimal() 时,并行副本(也分发查询)的查询结果不正确。 该错误是随新分析器引入的。#67234 (Igor Nikonov)。
  • 修复 alter modify order by 导致元数据不一致的问题。#67436 (iceFireser)。
  • 修复了函数 fromModifiedJulianDay 的上限。它本应是 9999-12-31,但错误地设置为 9999-01-01#67583 (PHO)。
  • 修复了 IN 查询中索引不在元组开头时的问题。#67626 (Yarik Briukhovetskyi)。
  • 修复了 RoleCache 中的过期问题。#67748 (Vitaly Baranov)。
  • 修复了由于刷新到视图速度过慢导致窗口视图 (window view) 丢失块 (block) 的问题。#67983 (Raúl Marín)。
  • 修复了由不正确的日期格式引起的 MSan 问题。#68105 (JackyWoo)。
  • 修复了当文件中数据类型与请求类型显著不同时,Parquet 过滤中的崩溃问题(例如 ... FROM file('a.parquet', Parquet, 'x String'),但文件具有 x Int64)。在未修复此问题之前,请使用 input_format_parquet_filter_push_down = 0 作为临时解决方案。#68131 (Michael Kolupaev)。
  • 修复了在 #67091 中引入的 lag/lead 函数的崩溃问题。#68262 (lgbo)。
  • 尝试修复查询取消时 postgres 崩溃的问题。#68288 (Kseniia Sumarokova)。
  • https://github.com/ClickHouse/ClickHouse/pull/61984 之后,schema_inference_make_columns_nullable=0 仍然可能使 Parquet/Arrow 格式的列变为 Nullable。此更改是向后不兼容的,用户注意到了行为的变化。此 PR 使 schema_inference_make_columns_nullable=0 像以前一样工作(不会推断出 Nullable 列),并为此设置引入了新值 auto,该值仅在数据具有关于可空性的信息时才使列变为 Nullable#68298 (Kruglov Pavel)。
  • 修复了 #50868 问题。分布式查询中嵌套子查询返回的小 DateTime64 常量值被错误地转换为 Null,从而导致错误和可能的查询结果不正确。#68323 (Shankar)。
  • 修复了查询 SYSTEM SYNC REPLICA 中缺少同步副本模式的问题。#68326 (Duc Canh Le)。
  • 修复了键条件中的错误。#68354 (Han Fei)。
  • 修复了在 LDAP 外部用户目录中使用的角色被删除或重命名时发生的崩溃问题。#68355 (Andrey Zvonov)。
  • 修复了 system.view_refreshes 的 Progress 列值大于 1 的问题 #68377#68378 (megao)。
  • 正确处理正则表达式标志 (regexp flags)。#68389 (Han Fei)。
  • PostgreSQL 风格的 cast 运算符 (::) 即使对于 SQL 风格的十六进制和二进制字符串字面量 (例如,SELECT x'414243'::String) 也能正常工作。这解决了 #68324 问题。#68482 (Alexey Milovidov)。
  • https://github.com/ClickHouse/ClickHouse/pull/68131 的小补丁。#68494 (Chang chen)。
  • 修复了 #68239 问题:SAMPLE n,其中 n 是整数。#68499 (Denis Hananein)。
  • 修复了当两个分布 (distribution) 的大小不相等时 mann-whitney-utest 中的错误。#68556 (Han Fei)。
  • 修复了在意外重启后,由于对 covered-by-broken part 的异常处理,导致 ReplicatedMergeTree 复制无法启动的问题。#68584 (baolin)。
  • 修复了当函数 sipHash64KeyedsipHash128KeyedsipHash128ReferenceKeyed 应用于空数组或元组时出现的 LOGICAL_ERROR#68630 (Robert Schulze)。
  • 修复了全文本索引在索引多列时可能过滤掉错误列的问题,原因是它没有在不同列之间重置 row_id。重现步骤在 tests/queries/0_stateless/03228_full_text_with_multi_col.sql 中。没有此修复。#68644 (siyuan)。
  • 修复了在创建 Replicated 表时副本名称 (replica_name) 中出现无效字符 '\t' 和 '\n',导致 LogEntry 中 'source replica' 解析不正确的问题。在问题 #68640 中提及。#68645 (Zhigao Hong)。
  • 将虚拟列 _table_database 添加回分布式表。它们在 24.3 版本之前可用。#68672 (Anton Popov)。
  • 修复了 Variant 列排列 (permutation) 期间可能出现的错误 Size of permutation (0) is less than required (...)#68681 (Kruglov Pavel)。
  • 修复了使用新的 JSON 列时可能出现的错误 DB::Exception: Block structure mismatch in joined block stream: different columns:#68686 (Kruglov Pavel)。
  • 修复了在函数 sipHash(64/128)Keyed 中使用数组作为键哈希映射时,物化常量键 (materialized constant keys) 的问题。#68731 (Salvatore Mesoraca)。
  • 使 ColumnsDescription::toString 使用相同的 IAST::FormatState object 格式化每个列。这导致写入磁盘和 ZooKeeper 的统一的列元数据。#68733 (Miсhael Stetsyuk)。
  • 修复了分组集 (grouping sets) 的聚合数据合并问题。#68744 (Nikolai Kochetov)。
  • 修复了逻辑错误,该错误发生在创建复制合并树 (replicated merge tree)、更改列,然后执行 modify statistics 时。#68820 (Han Fei)。
  • 修复了分析器中从子查询解析动态子列的问题。#68824 (Kruglov Pavel)。
  • 修复了 DeltaLake 中复杂类型元数据解析的问题。解决了 #68739 问题。#68836 (Kseniia Sumarokova)。
  • 修复了在表元数据在插入之后但在刷新到表之前被更改(通过 ALTER ADD/MODIFY COLUMN 查询)的情况下,异步插入的问题。#68837 (Anton Popov)。
  • 修复了在数组中传递空元组时出现的意外异常。修复了 #68618 问题。#68848 (Amos Bird)。
  • 修复了解析纯元数据变更 (mutation) 命令的问题。#68935 (János Benjamin Antal)。
  • 修复了在 anyHeavy 状态合并期间可能出现的错误结果。#68950 (Raúl Marín)。
  • 修复了在启用设置 optimize_functions_to_subcolumns 的情况下写入物化视图 (Materialized Views) 的问题。#68951 (Anton Popov)。
  • 不要在常量动态列 (const Dynamic column) 方法中使用序列化缓存 (serializations cache)。这可能导致在聚合期间使用未初始化的值,甚至出现竞争条件。#68953 (Kruglov Pavel)。
  • 修复了解析错误,该错误发生在某些情况下在 JSON 类型解析期间应将 null 作为默认值插入时。#68955 (Kruglov Pavel)。
  • 修复了在某些压缩响应中未发送 Content-Encoding 的问题。#64802#68975 (Konstantin Bogdanov)。
  • 在某些情况下,路径被错误地连接,其中包含 // 部分,使用路径规范化 (path normalization) 解决了此问题。#69066 (Yarik Briukhovetskyi)。
  • 修复了当有空异步插入时出现的逻辑错误。#69080 (Han Fei)。
  • 修复了在查询取消期间 clickhouse-client 中进度指示 (progress indication) 的数据竞争。#69081 (Sergei Trifonov)。
  • 修复了一个错误,该错误导致向量相似度索引(目前为实验性功能)在与余弦距离 (cosine distance) 作为距离函数一起使用时未被利用。#69090 (flynn)。
  • 此更改解决了一个问题,即在初始创建过程中服务器发生故障后尝试再次创建 Replicated 数据库可能会导致错误。#69102 (Miсhael Stetsyuk)。
  • input_format_csv_try_infer_numbers_from_strings = 1 时,不要从 CSV 中的 String 类型推断 Bool 类型,因为我们不允许从字符串读取 bool 值。#69109 (Kruglov Pavel)。
  • 修复了当启用 --multiquery 时,客户端上 explain ast insert 查询的解析错误。#69123 (wxybear)。
  • 子查询中的 UNION 子句在具有并行副本的查询中未被正确处理,并导致 LOGICAL_ERROR Duplicate announcement received for replica#69146 (Igor Nikonov)。
  • 修复了在 s3Cluster 中传播结构参数 (structure argument) 的问题。以前,当将查询发送到 s3Cluster 中的副本时,列的 DEFAULT 表达式可能会丢失。#69147 (Kruglov Pavel)。
  • 在从表达式转换为目标类型的过程中,尊重 Values 格式中的格式设置 (format settings)。#69149 (Kruglov Pavel)。
  • 修复了只读用户 (readonly users) 的 clickhouse-client --queries-file 问题(之前会因 Cannot modify 'log_comment' setting in readonly mode 而失败)。#69175 (Azat Khuzhin)。
  • 修复了当 clickhouse-client 通过管道连接到提前终止的进程时的数据竞争。#69186 (vdimir)。
  • 修复了 JSON/Dynamic 类型的 Fix uniq 和 GROUP BY 的不正确结果。#69203 (Kruglov Pavel)。
  • 修复了异步插入的 INFILE 格式检测。如果格式未在 FORMAT 子句中显式定义,则可以从 INFILE 文件扩展名中检测到。#69237 (Julia Kartseva)。
  • 此问题 之后,生产环境中有相当多的表副本,它们的 metadata_version 节点值既等于 0,又与相应表的 metadata 节点版本不同。这导致 alter 查询在这些副本上失败。#69274 (Miсhael Stetsyuk)。
  • 将 Dynamic 类型标记为不安全的 primary key 类型,以避免 Fields 的问题。#69311 (Kruglov Pavel)。
  • 改进了访问实体依赖项的恢复。#69346 (Vitaly Baranov)。
  • 修复了当所有连接尝试都无法获取插入连接时出现的未定义行为。#69390 (Pablo Marcos)。
  • 关闭了 #69135 问题。如果我们尝试为 cross join 重用已连接的数据,但这在目前的 ClickHouse 中不可能发生。最好在 reuseJoinedData 中保留 have_compressed#69404 (lgbo)。
  • 使 materialize() 函数在参数为稀疏列 (sparse column) 时返回完整列。#69429 (Alexander Gololobov)。
  • 修复了函数 sqidDecodeLOGICAL_ERROR (#69450)。#69451 (Robert Schulze)。
  • 针对 24.6 版本或使用复制数据库创建查询时 s3queue 问题的快速修复。#69454 (Kseniia Sumarokova)。
  • 修复了由于 INSERT INTO ... SELECTCREATE TABLE AS SELECT 查询中的压缩 (squashing) 导致内存消耗过高的情况。#69469 (Yarik Briukhovetskyi)。
  • 语句 SHOW COLUMNSSHOW INDEX 现在在表名中包含点号时也能正常工作。#69514 (Salvatore Mesoraca)。
  • 现在禁止对溢出模式 (overflow mode) != 'throw' 的查询使用查询缓存。这防止了可能被截断和不正确的查询结果被存储在查询缓存中的情况。(问题 #67476)。#69549 (Robert Schulze)。
  • 在移动到 prewhere 期间保持条件的原始顺序。以前,顺序可能会改变,并且当顺序很重要时,可能会导致查询失败。#69560 (Kruglov Pavel)。
  • 修复 Keeper 在 ZNOAUTH 错误后的多请求预处理。#69627 (Antonio Andelic)。
  • 修复了在 DatabaseReplicated 中使用带有 WHERE 子句的 TTL 创建新副本时可能发生的 METADATA_MISMATCH 错误。#69736 (Nikolay Degterinsky)。
  • 修复了 StorageS3(Azure)Queue 设置 tracked_file_ttl_sec。我们使用键 tracked_file_ttl_sec 将其写入 keeper,但读取时为 tracked_files_ttl_sec,这是一个拼写错误。#69742 (Kseniia Sumarokova)。
  • 在 gethyperrectangleforrowgroup 中使用 tryconvertfieldtotype。#69745 (Miсhael Stetsyuk)。
  • 回滚 “修复了没有列且没有自适应索引粒度 (adaptive index granularity) 的 prewhere (几乎没有任何东西)”。由于回滚的更改,当读取旧 CH 版本(大概是 2021 年或更早版本)生成的数据 part 时,可能会发生一些错误。#68897 (Alexander Gololobov)。

ClickHouse 24.8 LTS 版本,2024-08-20

向后不兼容的更改

  • clickhouse-clientclickhouse-local 现在默认使用多查询模式(而不是单查询模式)。例如,clickhouse-client -q "SELECT 1; SELECT 2" 现在可以工作,而用户以前必须添加 --multiquery(或 -n)。--multiquery/-n 开关已过时。多查询语句中的 INSERT 查询根据其 FORMAT 子句进行特殊处理:如果 FORMAT 是 VALUES(最常见的情况),则 INSERT 语句的结尾由查询末尾的尾随分号 ; 表示。对于所有其他 FORMAT(例如 CSVJSONEachRow),INSERT 语句的结尾由查询末尾的两个换行符 \n\n 表示。#63898 (FFish)。
  • 在以前的版本中,可以通过在数据类型名称后附加 WithDictionary 来使用 LowCardinality 数据类型的替代语法。这是一个最初的工作实现,从未记录或公开。现在,它已被弃用。如果您使用了此语法,则必须 ALTER 您的表并将数据类型重命名为 LowCardinality#66842 (Alexey Milovidov)。
  • 修复了与分布式目标表一起使用的存储引擎 Buffer 的逻辑错误。这是一个向后不兼容的更改:如果表在查询中出现多次(例如,在自连接中),则使用 Buffer 和分布式目标表的查询可能停止工作。#67015 (vdimir)。
  • 在以前的版本中,使用接近于零的负参数调用基于 Gamma 函数的随机分布函数(例如 Chi-Squared、Student、Fisher)会导致长时间计算或无限循环。在新版本中,使用零或负参数调用这些函数将产生异常。这解决了 #67297 问题。#67326 (Alexey Milovidov)。
  • 系统表 text_log 默认启用。这与以前的版本完全兼容,但您可能会注意到本地磁盘上的磁盘使用量略有增加(此系统表占用少量磁盘空间)。#67428 (Alexey Milovidov)。
  • 在以前的版本中,如果要求生成非常大的数组,arrayWithConstant 可能会很慢。在新版本中,每个数组限制为 1 GB。这解决了 #32754 问题。#67741 (Alexey Milovidov)。
  • 修复了 REPLACE 修饰符的格式化(禁止省略括号)。#67774 (Azat Khuzhin)。
  • #68349 中反向移植:重新实现了 Dynamic 类型。现在,当达到动态数据类型的限制时,新类型不会强制转换为 String,而是以二进制格式存储在特殊的数据结构中,并带有二进制编码的数据类型。现在,任何曾经插入到 Dynamic 列的类型都可以作为子列从中读取。#68132 (Kruglov Pavel)。

新功能

  • 添加了一个新的 MergeTree 设置 deduplicate_merge_projection_mode,用于控制合并期间的 projection(对于特定引擎)和 OPTIMIZE DEDUPLICATE 查询。支持的选项:throw(在 projection 未完全支持 *MergeTree 引擎的情况下抛出异常)、drop(如果 projection 本身无法一致合并,则在合并期间删除 projection)和 rebuild(从头开始重建 projection,这是一个繁重的操作)。#66672 (jsc0218)。
  • 为 S3 表引擎添加了 _etag 虚拟列。修复了 #65312 问题。#65386 (skyoct)。
  • 为查询缓存添加了标签(命名空间)机制。具有不同标签的相同查询被查询缓存视为不同的查询。示例:SELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'abc'SELECT 1 SETTINGS use_query_cache = 1, query_cache_tag = 'def' 现在创建不同的查询缓存条目。#68235 (sakulali)。
  • 支持更多 JOIN strictness 变体 (LEFT/RIGHT SEMI/ANTI/ANY JOIN),其中不等式条件涉及左右表中的列。例如 t1.y < t2.y(请参阅设置 allow_experimental_join_condition)。#64281 (lgbo)。
  • 为不同的引擎(FileURLS3AzureBlobStorageHDFS)解释 Hive 风格的分区。Hive 风格的分区将数据组织到分区子目录中,从而可以有效地查询和管理大型数据集。目前,它仅创建具有适当名称和数据的虚拟列。后续 PR 将引入适当的数据过滤(性能加速)。#65997 (Yarik Briukhovetskyi)。
  • 添加了用于 Spark 兼容性的函数 printf(但您可以使用现有的 format 函数)。#66257 (李扬)。
  • 添加了选项 restore_replace_external_engines_to_nullrestore_replace_external_table_functions_to_null,以将外部引擎和 table_engines 替换为 Null 引擎,这对于测试可能很有用。它应该适用于 RESTORE 和显式表创建。#66536 (Ilya Yatsishin)。
  • 添加了使用函数 readWKTLineString 读取 WKT 格式的 MULTILINESTRING 几何图形的支持。#67647 (Jacob Reckhard)。
  • 添加了一个新的表函数 fuzzQuery。此函数允许使用随机变化修改给定的查询字符串。示例:SELECT query FROM fuzzQuery('SELECT 1') LIMIT 5;#67655 (pufit)。
  • 添加了一个查询 ALTER TABLE ... DROP DETACHED PARTITION ALL,用于删除所有分离的分区 (detached partitions)。#67885 (Duc Canh Le)。
  • 当启用新设置 rows_before_aggregation 时,将 rows_before_aggregation_at_least 统计信息添加到查询响应中。此统计信息表示聚合之前读取的行数。在分布式查询的上下文中,当使用不带 limitgroup bymax 聚合函数时,rows_before_aggregation_at_least 可以反映查询命中的行数。#66084 (morning-color)。
  • 支持对 Join 表执行 OPTIMIZE 查询以减少其内存占用。#67883 (Duc Canh Le)。
  • 如果在 URL 中添加 &run=1,则允许在 play 中立即运行查询 #66457 (Aleksandr Musorin)。

实验性功能

  • 实现新的 JSON 数据类型。#66444 (Kruglov Pavel)。
  • 添加新的 TimeSeries 表引擎。#64183 (Vitaly Baranov)。
  • 添加新的实验性 Kafka 存储引擎,以将偏移量存储在 Keeper 中,而不是依赖于将其提交到 Kafka。这使得提交到 ClickHouse 表的操作与从队列中的消费操作具有原子性。#57625 (János Benjamin Antal)。
  • 使用自适应读取任务大小计算方法(自适应意味着它取决于读取的列大小)用于并行副本。#60377 (Nikita Taranov)。
  • 添加了 count_min (count-min sketches) 统计类型,它为类似 col = 'val' 的等值谓词提供选择性估计。支持的数据类型包括字符串、日期、日期时间和数值类型。#65521 (JackyWoo)。

性能提升

  • 默认启用设置 optimize_functions_to_subcolumns#68053 (Anton Popov)。
  • plain_rewritable 磁盘目录元数据存储在 __meta 布局中,与对象存储中的 MergeTree 数据分开。将 plain_rewritable 磁盘移动到扁平目录结构。#65751 (Julia Kartseva)。
  • 通过提前为所有子列预留所需的内存,改进 String/Array/Map/Variant/Dynamic 类型的列压缩(发生在 INSERT 查询中的操作)。#67043 (Kruglov Pavel)。
  • 加速 SYSTEM FLUSH LOGS 并在关闭时刷新日志。#67472 (Sema Checherinda)。
  • 通过减少合并调度步骤的开销,提高了合并的整体性能。#68016 (Anton Popov)。
  • 加速 DROP DATABASE 查询的表删除速度,将 database_catalog_drop_table_concurrency 的默认值增加到 16。#67228 (Nikita Mikhaylov)。
  • 避免在写入 ORC 时为数组列分配过多容量。数组列的性能提升了 15%。#67879 (李扬)。
  • 显著加速非复制 MergeTree 的 mutations 操作 #66911 #66909 (Alexey Milovidov)。

改进

  • 设置 allow_experimental_analyzer 重命名为 enable_analyzer。旧名称以别名的形式保留。这表明 Analyzer 不再处于 Beta 阶段,并已完全升级到生产环境。#66438 (Nikita Mikhaylov)。
  • 改进日期时间模式推断。现在仅当日期时间具有小数部分时才使用 DateTime64,否则使用常规 DateTime。Date/DateTime 的推断现在更加严格,尤其是在 date_time_input_format='best_effort' 时,以避免在极端情况下从字符串推断日期时间。#68382 (Kruglov Pavel)。
  • ClickHouse 服务器现在支持新的设置 max_keep_alive_requests。对于服务器的 keep-alive HTTP 连接,它与 keep_alive_timeout 协同工作 - 如果空闲超时未过期,但通过给定连接已完成超过 max_keep_alive_requests 请求,服务器将关闭该连接。#61793 (Nikita Taranov)。
  • 高级仪表板的各种改进。这关闭了 #67697。这关闭了 #63407。这关闭了 #51129。这关闭了 #61204#67701 (Alexey Milovidov)。
  • 创建 Distributed 表时,不再需要 REMOTE 的授权:Distributed 引擎的授权就足够了。#65419 (jsc0218)。
  • 不要在 Docker 镜像中显式传递 keeper 的日志,以允许覆盖。#65564 (Azat Khuzhin)。
  • BACKUPRESTORE 查询引入了 use_same_password_for_base_backup 设置,允许创建增量备份并从受密码保护的存档中恢复增量备份。#66214 (Samuele)。
  • 忽略 ATTACH 查询的 async_load_databases(以前 ATTACH 可能在表附加之前返回)。#66240 (Azat Khuzhin)。
  • 为拒绝的连接(资源不足的情况)添加了日志和指标。#66410 (Alexander Tokmakov)。
  • 支持 MongoDB 引擎的正确 UUID 类型。#66671 (Azat Khuzhin)。
  • 添加复制延迟和恢复时间指标。#66703 (Miсhael Stetsyuk)。
  • 添加 DiskS3NoSuchKeyErrors 指标。#66704 (Miсhael Stetsyuk)。
  • 确保 COMMENT 子句适用于所有表引擎。#66832 (Joe Lynch)。
  • 函数 mapFromArrays 现在接受 Map(K, V) 作为第一个参数,例如:SELECT mapFromArrays(map('a', 4, 'b', 4), ['aa', 'bb']) 现在可以工作并返回 {('a',4):'aa',('b',4):'bb'}。此外,如果第一个参数是 Array,它现在也可以是 Array(Nullable(T))Array(LowCardinality(Nullable(T))) 类型,只要实际数组值不是 NULL#67103 (李扬)。
  • ~/.clickhouse-local 读取 clickhouse-local 的配置。#67135 (Azat Khuzhin)。
  • 将设置 input_format_orc_read_use_writer_time_zone 重命名为 input_format_orc_reader_timezone,并允许用户设置读取器时区。#67175 (kevinyhzou)。
  • 降低 HTTP 连接在连接后立即被对等方重置时出现的 Socket is not connected 错误的级别,关闭 #34218#67177 (vdimir)。
  • 添加从配置加载 system.dashboards 的仪表板的功能(一旦设置,它们将覆盖默认的仪表板预设)。#67232 (Azat Khuzhin)。
  • SQL 中的窗口函数传统上使用蛇形命名法。ClickHouse 使用 camelCase,因此创建了新的别名 denseRank()percentRank()。这些新函数可以像原始的 dense_rank()percent_rank() 函数一样调用。蛇形命名法和 camelCase 语法仍然可用。并且为每个函数添加了新的测试。这关闭了 #67042#67334 (Peter Nguyen)。
  • 如果配置文件格式不是 .xml.yml.yaml,则自动检测配置文件格式。如果文件以 < 开头,则可能是 XML,否则可能是 YAML。当从管道提供配置文件时,这很有用:clickhouse-server --config-file <(echo "hello: world")#67391 (sakulali)。
  • 函数 formatDateTimeformatDateTimeInJodaSyntax 现在将其 format 参数视为可选。如果未指定,则假定格式字符串为 %Y-%m-%d %H:%i:%syyyy-MM-dd HH:mm:ss。示例:SELECT parseDateTime('2021-01-04 23:12:34') 现在返回 DateTime 值 2021-01-04 23:12:34(以前,这会抛出异常)。#67399 (Robert Schulze)。
  • 如果 KeeperMap 中的 Keeper 请求因超时或连接丢失而发生,则自动重试。#67448 (Antonio Andelic)。
  • 为 Aarch64 Linux 构建添加 -no-pie,以允许在 ClickHouse 重启后正确地进行内省和符号化堆栈跟踪。#67916 (filimonov)。
  • 为合并和突变添加了配置文件事件,以便更好地进行内省。#68015 (Anton Popov)。
  • 删除非复制 MergeTree 的不必要日志。#68238 (Daniil Ivanik)。

构建/测试/打包改进

  • 集成测试的 flaky 检查将不再多次运行每个测试用例,以查找测试中更多的问题并使其更可靠。它使用 pytest-repeat 库在同一环境下多次运行测试用例。在测试用例结束时清理表和其他实体以通过测试非常重要。重复运行比多次 pytest 运行速度快得多,因为它只需启动一次必要的容器。#66986 (Ilya Yatsishin)。
  • 解除 CLion 与 ClickHouse 的使用限制。在以前的版本中,CLion 在每次按键时都会冻结一分钟。这关闭了 #66994#66995 (Alexey Milovidov)。
  • getauxval:由于较新 Linux 内核中较高的 ASLR 熵,避免在 sanitizer re-exec 下崩溃。#67081 (Raúl Marín)。
  • 部分客户端代码被提取到单个文件中,即使对于调试版本,也对其应用了尽可能高的优化。这关闭了:#65745#67215 (Nikita Mikhaylov)。

Bug 修复

  • 仅与实验性的 Variant 数据类型相关。修复 Variant + AggregateFunction 类型的崩溃问题。#67122 (Kruglov Pavel)。
  • 修复 DistributedAsyncInsert 在连接为空时的崩溃问题。#67219 (Pablo Marcos)。
  • 修复 uniquniqTheta 使用 tuple() 参数时的崩溃问题。关闭 #67303#67306 (flynn)。
  • 修复 #66026。避免在 ReplaceTableNodeToDummyVisitor 中遍历未解析的表函数参数。#67522 (Dmitry Novik)。
  • 修复 JSONMergePatch 函数中潜在的堆栈溢出。将此函数从 jsonMergePatch 重命名为 JSONMergePatch,因为之前的名称是错误的。之前的名称仍然保留以实现兼容性。改进了函数中错误的诊断。这关闭了 #67304#67756 (Alexey Milovidov)。
  • 修复了由特制查询触发的 NULL 指针解引用,该查询通过 hopEnd、hopStart、tumbleEnd 和 tumbleStart 导致服务器崩溃。#68098 (Salvatore Mesoraca)。
  • 修复了使用子查询进行过滤时,某些系统表中 Not-ready Set 的问题。#66018 (Michael Kolupaev)。
  • 修复了 ALTER ADD COLUMN 查询后子列的读取问题。#66243 (Anton Popov)。
  • 修复了发送到外部数据库(例如 PostgreSQL)的查询中的布尔字面量。#66282 (vdimir)。
  • 修复了带有别名 JOIN ON 表达式的查询的格式化问题,例如 ... JOIN t2 ON (x = y) AS e ORDER BY x 应该格式化为 ... JOIN t2 ON ((x = y) AS e) ORDER BY x#66312 (vdimir)。
  • 修复了 inter-server secret 的 cluster() 问题(保留之前的初始用户)。#66364 (Azat Khuzhin)。
  • 修复了将带有 null 值的 Array 字段转换为 Array(Variant) 时可能出现的运行时错误。#66727 (Kruglov Pavel)。
  • 修复了 Context::getDDLWorker 中偶尔出现的死锁。#66843 (Alexander Gololobov)。
  • 修复了在不完整的 drop 操作后创建 KeeperMap 表的问题。#66865 (Antonio Andelic)。
  • 修复了恢复到 s3_plain_rewritable 磁盘时出现的 broken part 错误。#66881 (Vitaly Baranov)。
  • 在极少数情况下,ClickHouse 可能会因为磁盘上的一些意外 projections 而将 parts 视为 broken。现在已修复。#66898 (alesapin)。
  • 修复了模式推断中无效的格式检测,该检测可能导致逻辑错误 Format不支持模式推断。#66899 (Kruglov Pavel)。
  • 修复了使用并行副本取消查询时可能发生的死锁。#66905 (Nikita Taranov)。
  • 即使设置了 database_replicated_allow_heavy_create,也禁止 create as select。这在 23.12 中是无条件禁止的,但在未发布的 24.7 版本中意外地允许了。#66980 (vdimir)。
  • 当设置了 max_rows_to_read 限制时,从 numbers 表读取数据可能会错误地抛出异常。这关闭了 #66992#66996 (Alexey Milovidov)。
  • 为 lagInFrame 和 leadInFrame 窗口函数添加正确的类型转换 - 修复了 msan 测试。#67091 (Yakov Olkhovskiy)。
  • TRUNCATE DATABASE 过去会像 DROP DATABASE 查询一样停止复制,现在已修复。#67129 (Alexander Tokmakov)。
  • clickhouse-local 中使用单独的客户端上下文。#67133 (Vitaly Baranov)。
  • 修复了从单分片的 Distriburted 表上的 Merge 表读取数据时出现的错误 Cannot convert column because it is non constant in source stream but must be constant in result.#67146 (Nikolai Kochetov)。
  • 修正了禁用 enable_order_by_all 和并行副本(以及分布式查询)时 ORDER BY all 的行为。#67153 (Igor Nikonov)。
  • 修复了模式缓存中 input_format_max_bytes_to_read_for_schema_inference 的错误用法。#67157 (Kruglov Pavel)。
  • 修复了在按单个可空键分组时,如果发出异常,则 count distinct 存在内存泄漏的问题。#67171 (Jet He)。
  • 修复了将 OUTER JOIN 转换为 INNER JOIN 的优化中的错误。这关闭了 #67156。这关闭了 #66447。该错误是在 https://github.com/ClickHouse/ClickHouse/pull/62907 中引入的。#67178 (Maksim Kita)。
  • 修复了错误 Conversion from AggregateFunction(name, Type) to AggregateFunction(name, Nullable(Type)) is not supported。该错误是由 optimize_rewrite_aggregate_function_with_if 优化引起的。修复了 #67112#67229 (Nikolai Kochetov)。
  • 修复了当使用空元组作为函数 IN 的 lhs 时查询挂起的问题。#67295 (Duc Canh Le)。
  • 可以创建非常深的嵌套 JSON 数据,这会在跳过未知字段时触发堆栈溢出。这关闭了 #67292#67324 (Alexey Milovidov)。
  • 修复了在启动期间发生异常后附加 ReplicatedMergeTree 表的问题。#67360 (Antonio Andelic)。
  • 修复了由在 Aggregator 中错误地从线程组分离而导致的段错误。#67385 (Antonio Andelic)。
  • 修复了在 PK 中指定非确定性函数的又一种情况。#67395 (Nikolai Kochetov)。
  • 修复了 bloom_filter 索引破坏带有轻微奇怪条件(例如 (k=2)=(k=2)has([1,2,3], k))的查询的问题。#67423 (Michael Kolupaev)。
  • 如果文件名/URI 不在存档中,则正确解析包含 :: 的文件名/URI。#67433 (Antonio Andelic)。
  • 修复了在 WriteBuffer 被取消的情况下,WriteBufferFromS3 中等待任务的问题。#67459 (Kseniia Sumarokova)。
  • 保护临时 part 目录在 RESTORE 期间不被删除。#67491 (Vitaly Baranov)。
  • 修复了嵌套短路函数的执行。#67520 (Kruglov Pavel)。
  • 修复了 Logical error: Expected the argument №N of type T to have X rows, but it has 0 错误。该错误可能发生在 GROUP BY 中带有常量表达式的远程查询中(使用新的 analyzer)。#67536 (Nikolai Kochetov)。
  • 修复了在 tuple 上使用 NULL 值进行 join 的问题:某些使用新 analyzer 并在 JOIN ON 部分的 tuple 中包含 NULL 的查询返回了不正确的结果。#67538 (vdimir)。
  • 修复了在完全不可驱逐缓存的情况下,FileCache::freeSpaceRatioKeepingThreadFunc() 的冗余重新调度。#67540 (Kseniia Sumarokova)。
  • 修复了通过 HTTP 接口插入到流式引擎(Kafka、RabbitMQ、NATS)的问题。#67554 (János Benjamin Antal)。
  • 修复了函数 toStartOfWeek 在使用小的 DateTime64 值时返回错误结果的问题。#67558 (Yarik Briukhovetskyi)。
  • 修复了使用递归 CTE 创建视图的问题。#67587 (Yakov Olkhovskiy)。
  • 修复了文件系统缓存中 Logical error: 'file_offset_of_buffer_end <= read_until_position' 错误。关闭 #57508#67623 (Kseniia Sumarokova)。
  • 修复了 #62282。删除了对 convertFieldToString() 的调用,并添加了特定于数据类型的序列化代码。当参数值为返回数据类型实例的函数或表达式时,参数化视图替换对于多种数据类型被破坏。#67654 (Shankar)。
  • 修复了 percent_rank 的崩溃问题。percent_rank 的默认帧类型已更改为 range unbounded preceding and unbounded following。考虑了 IWindowFunction 的默认窗口帧,现在 SQL 中没有窗口帧定义的窗口函数可以正确地放入不同的 WindowTransfomer 中。#67661 (lgbo)。
  • 修复了重新加载带有 UNION 的 SQL UDF 的问题。以前,重启服务器可能会使 UDF 无效。#67665 (Antonio Andelic)。
  • 修复了在使用实验性 Variant 类型并在函数 if 中对 Tuples 和 Maps 启用设置 use_variant_as_common_type 时可能出现的逻辑错误 “Unexpected return type from if”。#67687 (Kruglov Pavel)。
  • 由于 Linux 内核中的一个 bug,查询可能会在 TimerDescriptor::drain 中挂起。这关闭了 #37686#67702 (Alexey Milovidov)。
  • 修复了 RESTORE ON CLUSTER 命令的完成问题。#67720 (Vitaly Baranov)。
  • 修复了在加载时出现 CANNOT_SCHEDULE_TASK 错误时字典挂起的问题。#67751 (Azat Khuzhin)。
  • 带有 bloom filter 索引的查询,例如 SELECT count() FROM t WHERE cast(c = 1 or c = 9999 AS Bool) SETTINGS use_skip_indexes=1 现在可以正常工作。#67781 (jsc0218)。
  • 修复了某些不带键和过滤器的聚合查询中错误的聚合结果,关闭 #67419#67804 (vdimir)。
  • 验证 ALTER ADD/MODIFY COLUMN 中的实验性/可疑数据类型。#67911 (Kruglov Pavel)。
  • 修复了分布式查询中常量折叠后的 DateTime64 解析问题,关闭 #66773#67920 (vdimir)。
  • 修复了谓词中存在非确定性函数时 count() 结果错误的问题。#67922 (János Benjamin Antal)。
  • 修复了在使用 CPU 数量受限的容器化环境中,最大线程软限制的计算问题。#67963 (Robert Schulze)。
  • 现在,如果 projection 在磁盘上不存在但在 checksums.txt 中存在,ClickHouse 不会将 part 视为 broken。#68003 (alesapin)。
  • 修复了使用新 analyzer 进行 mutations 时跳过未触及的 part 的问题。以前,在启用 analyzer 的情况下,即使 mutation 根据谓词不影响该 part,mutation 也可能重写 part 中的数据。#68052 (Anton Popov)。
  • 删除一个错误的优化,该优化会删除使用 OFFSET 的子查询中的排序。修复了 #67906#68099 (Graham Campbell)。
  • 尝试修复聚合 projection 优化中 Block structure mismatch in AggregatingStep stream: different types 的问题。#68107 (Nikolai Kochetov)。
  • 尝试修复查询取消时 postgres 崩溃的问题。#68288 (Kseniia Sumarokova)。
  • 修复了查询 SYSTEM SYNC REPLICA 中缺少同步副本模式的问题。#68326 (Duc Canh Le)。

ClickHouse 24.7 版本发布,2024-07-30

向后不兼容变更

  • 禁止对使用复制数据库执行 CREATE MATERIALIZED VIEW ... ENGINE Replicated*MergeTree POPULATE AS SELECT ... 操作。 #63963 (vdimir)。
  • clickhouse-keeper-client 将仅接受字符串字面量形式的路径,例如 ls '/hello/world',而不再接受裸字符串,例如 ls /hello/world#65494 (Alexey Milovidov)。
  • 指标 KeeperOutstandingRequets 已重命名为 KeeperOutstandingRequests#66206 (Robert Schulze)。
  • system.functions 表中移除 is_deterministic 字段。 #66630 (Alexey Milovidov)。
  • 函数 tuple 现在将尝试在查询中构造命名元组(由 enable_named_columns_in_function_tuple 控制)。引入函数 tupleNames 以从元组中提取名称。 #54881 (Amos Bird)。
  • 更改了物化视图的去重工作方式。修复了很多类似的情况:- 在目标表上:数据被分割成 2 个或更多块,当这些块并行插入时,会被认为是重复的。 - 在 MV 目标表上:相等的块被去重,这种情况发生在 MV 由于执行聚合而经常为不同的输入数据产生相等的数据时。 - 在 MV 目标表上:来自不同 MV 的相等块被去重。 #61601 (Sema Checherinda)。
  • 函数 bitShiftLeftbitShitfRight 对于超出范围的位移位置会返回错误 #65838 (Pablo Marcos)。

新功能

  • full_sorting_join 算法添加 ASOF JOIN 支持。 #55051 (vdimir)。
  • clickhouse-client 中支持 JWT 身份验证(仅在 ClickHouse Cloud 中可用)。 #62829 (Konstantin Bogdanov)。
  • 添加 SQL 函数 changeYearchangeMonthchangeDaychangeHourchangeMinutechangeSecond。例如,SELECT changeMonth(toDate('2024-06-14'), 7) 返回日期 2024-07-14#63186 (cucumber95)。
  • 引入启动脚本,允许在启动阶段执行预配置的查询。 #64889 (pufit)。
  • 在客户端配置中支持 accept_invalid_certificate,以允许客户端通过安全 TCP 连接到使用自签名证书运行的服务器 - 可以用作相应的 openSSL 客户端设置 verificationMode=none + invalidCertificateHandler.name=AcceptCertificateHandler 的简写形式。 #65238 (peacewalker122)。
  • 添加 system.error_log,其中包含来自表 system.errors 的错误值的历史记录,定期刷新到磁盘。 #65381 (Pablo Marcos)。
  • 添加聚合函数 groupConcat。与 arrayStringConcat( groupArray(column), ',') 大致相同。可以接收 2 个参数:字符串分隔符和要处理的元素数量。 #65451 (Yarik Briukhovetskyi)。
  • 添加 AzureQueue 存储。 #65458 (Kseniia Sumarokova)。
  • 添加一个新设置以禁用/启用将页索引写入 parquet 文件。 #65475 (lgbo)。
  • 引入 logger.console_log_level 服务器配置以控制控制台的日志级别(如果启用)。 #65559 (Azat Khuzhin)。
  • 使用表函数 file 自动将通配符 * 附加到目录路径的末尾。 #66019 (Zhidong (David) Guo)。
  • 在非交互模式下为客户端添加 --memory-usage 选项。 #66393 (vdimir)。
  • 为 clickhouse-disks 创建一个交互式客户端,从本地目录添加本地磁盘。 #64446 (Daniil Ivanik)。
  • 当对带有投影的表执行轻量级删除时,用户可以选择抛出异常(默认)或删除投影 #65594 (jsc0218)。
  • 添加包含所有已分离表的主要信息的系统表。 #65400 (Konstantin Morozov)。

实验性功能

  • 更改 Variant 数据类型的二进制序列化:添加 compact 模式,以避免对于具有单个变体或仅具有 NULL 值的粒度多次写入相同的鉴别符。添加 MergeTree 设置 use_compact_variant_discriminators_serialization,默认启用。请注意,Variant 类型仍处于实验阶段,序列化中的向后不兼容更改是可以接受的。 #62774 (Kruglov Pavel)。
  • 支持 clickhouse-keeper 的磁盘后端存储。 #56626 (Han Fei)。
  • 重构 JSONExtract 函数,支持更多类型,包括实验性的 Dynamic 类型。 #66046 (Kruglov Pavel)。
  • VariantDynamic 子列支持 null map 子列。 #66178 (Kruglov Pavel)。
  • 修复从更改后的 Memory 表读取 Dynamic 子列的问题。之前,如果通过 alter 更改 Memory 表中 Dynamic 类型的 max_types 参数,则后续的子列读取可能会返回错误的结果。 #66066 (Kruglov Pavel)。
  • 在使用自定义键并行副本时,添加对 cluster_for_parallel_replicas 的支持。它允许您将并行副本与带有 MergeTree 表的自定义键一起使用。 #65453 (Antonio Andelic)。

性能提升

  • 将整数转字符串算法替换为更快的算法(从修改后的 amdn/itoa 到修改后的 jeaiii/itoa)。 #61661 (Raúl Marín)。
  • 现在收集并缓存由 join(parallel_hash 算法)创建的哈希表的大小。此信息将用于为后续查询执行预分配哈希表中的空间,并节省哈希表调整大小的时间。 #64553 (Nikita Taranov)。
  • 通过使用缓冲,优化了带有 ORDER BY 主键和 WHERE 条件(具有高选择性)的查询。它由设置 read_in_order_use_buffering 控制(默认启用),并可能增加查询的内存使用量。 #64607 (Anton Popov)。
  • 提高加载 plain_rewritable 元数据的性能。 #65634 (Alexey Milovidov)。
  • 在只读磁盘上附加表将使用更少的资源,因为它不会加载过时的 parts。 #65635 (Alexey Milovidov)。
  • 为 Set 索引支持 minmax 超矩形。 #65676 (AntiTopQuark)。
  • 卸载过时 parts 的主索引以减少总内存使用量。 #65852 (Anton Popov)。
  • 如果模式是简单的(即不包含元字符、模式类、标志、分组字符等),则函数 replaceRegexpAllreplaceRegexpOne 现在会快得多。(感谢 Taiyang Li)。 #66185 (Robert Schulze)。
  • s3 请求:减少查询的重试时间,增加备份的重试次数。查询为 8.5 分钟和 100 次重试,备份恢复为 1.2 小时和 1000 次重试。 #65232 (Sema Checherinda)。
  • 支持查询计划 LIMIT 优化。支持 PostgreSQL 存储和表函数的 LIMIT 下推。 #65454 (Maksim Kita)。
  • 改进了 ZooKeeper 负载均衡。即使 fallback_session_lifetime 已设置,当前会话也不会过期,直到最佳节点变得可用。添加了对 AZ 感知负载均衡的支持。 #65570 (Alexander Tokmakov)。
  • DatabaseCatalog 通过使用最多 database_catalog_drop_table_concurrency 线程来更快地删除表。 #66065 (Sema Checherinda)。

改进

  • 改进了 ZooKeeper 负载均衡。即使 fallback_session_lifetime 已设置,当前会话也不会过期,直到最佳节点变得可用。添加了对 AZ 感知负载均衡的支持。 #65570 (Alexander Tokmakov)。
  • 设置 optimize_trivial_insert_select 默认禁用。在大多数情况下,它应该是有益的。但是,如果您发现 INSERT SELECT 变慢或内存使用量增加,您可以重新启用它或 SET compatibility = '24.6'#58970 (Alexey Milovidov)。
  • 如果 clickhouse-clientclickhouse-local 崩溃,则打印堆栈跟踪和诊断信息。 #61109 (Alexander Tokmakov)。
  • SHOW INDEX | INDEXES | INDICES | KEYS 的结果以前按主键列名排序。由于这不直观,因此结果现在按主键列在主键中的位置排序。 #61131 (Robert Schulze)。
  • 更改了物化视图的去重工作方式。修复了很多类似的情况:- 在目标表上:数据被分割成 2 个或更多块,当这些块并行插入时,会被认为是重复的。 - 在 MV 目标表上:相等的块被去重,这种情况发生在 MV 由于执行聚合而经常为不同的输入数据产生相等的数据时。 - 在 MV 目标表上:来自不同 MV 的相等块被去重。 #61601 (Sema Checherinda)。
  • 支持读取分区数据 DeltaLake 数据。通过读取元数据而不是数据来推断 DeltaLake 模式。 #63201 (Kseniia Sumarokova)。
  • 在可组合协议中,TLS 层仅接受 certificateFileprivateKeyFile 参数。 https://clickhouse.ac.cn/docs/en/operations/settings/composable-protocols. #63985 (Anton Ivashkin)。
  • 添加了 profile event SelectQueriesWithPrimaryKeyUsage,指示有多少 SELECT 查询使用主键来评估 WHERE 子句。 #64492 (0x01f)。
  • StorageS3Queue 相关修复和改进。根据服务器上的物理 cpu 核心数推断 s3queue_processing_threads_num 的默认值(而不是之前的默认值 1)。将 s3queue_loading_retries 的默认值设置为 10。修复了 system.s3queue 的异常列中可能出现的模糊“Uncaught exception”。在 MEMORY_LIMIT_EXCEEDED 异常时,不增加重试计数。将文件提交移动到完全完成插入表后的阶段,以避免在未插入时提交文件。添加设置 s3queue_max_processed_files_before_commits3queue_max_processed_rows_before_commits3queue_max_processed_bytes_before_commits3queue_max_processing_time_sec_before_commit,以更好地控制提交和刷新时间。 #65046 (Kseniia Sumarokova)。
  • 在参数化视图函数中支持别名(仅限新分析器)。 #65190 (Kseniia Sumarokova)。
  • 更新为在 azureBlobStorage 的日志中屏蔽帐户密钥。 #65273 (SmitaRKulkarni)。
  • 当过滤器表达式是 PARTITION BY 表达式的一部分时,对 IN 谓词进行分区裁剪。 #65335 (Eduard Karacharov)。
  • arrayMin/arrayMax 可以应用于所有可比较的数据类型。 #65455 (pn)。
  • 改进了 cgroups v2 的内存核算,以排除页面缓存占用的量。 #65470 (Nikita Taranov)。
  • 当将 chunks 序列化以插入到 EmbeddedRocksDB 表时,不要为每一行创建格式设置。 #65474 (Duc Canh Le)。
  • clickhouse-local 提示符缩减为仅 :)getFQDNOrHostName() 在 macOS 上花费的时间太长,并且我们不希望 clickhouse-local 的提示符中出现主机名。 #65510 (Konstantin Bogdanov)。
  • 避免在低端虚拟机上打印来自 jemalloc 的关于每个 CPU arena 的消息。 #65532 (Alexey Milovidov)。
  • 默认禁用文件系统缓存后台下载。当我们修复可能导致“内存超出限制”的问题时,将重新启用它,因为如果我们使用后台下载线程,则内存释放是在查询上下文之外完成的(而缓冲区是在查询上下文中分配的)。此外,我们需要添加一个单独的设置来定义后台工作线程的最大下载大小(目前它受 max_file_segment_size 限制,这可能太大)。 #65534 (Kseniia Sumarokova)。
  • 为配置添加新选项 <config_reload_interval_ms>,允许指定 clickhouse 重新加载配置的频率。 #65545 (alesapin)。
  • 实现 ClickHouse 数据类型的二进制编码,并在文档中添加其规范。在动态二进制序列化中使用它,允许在设置下在 RowBinaryWithNamesAndTypes 和 Native 格式中使用它。 #65546 (Kruglov Pavel)。
  • 服务器设置 compiled_expression_cache_sizecompiled_expression_cache_elements_size 现在显示在 system.server_settings 中。 #65584 (Robert Schulze)。
  • 添加基于 x509 SubjectAltName 扩展的用户身份识别支持。 #65626 (Anton Kozlov)。
  • clickhouse-local 将遵循配置文件中的 max_server_memory_usagemax_server_memory_usage_to_ram_ratio。它还将默认将最大内存使用量设置为系统内存的 90%,就像 clickhouse-server 所做的那样。 #65697 (Alexey Milovidov)。
  • 添加一个脚本以将文件备份到 ClickHouse。 #65699 (Alexey Milovidov)。
  • PostgreSQL 源支持查询取消。 #65722 (Maksim Kita)。
  • 使 allow_experimental_analyzer 由分布式查询的发起者控制。这确保了混合版本集群中操作期间的兼容性和正确性。 #65777 (Nikita Mikhaylov)。
  • 在 Keeper 中遵循 cgroup CPU 限制。 #65819 (Antonio Andelic)。
  • 允许将 concat 函数与空参数一起使用 :) select concat();#65887 (李扬)。
  • 允许在 clickhouse-local 中控制命名集合。 #65973 (Alexey Milovidov)。
  • 改进 Azure 相关的 profile events。 #65999 (alesapin)。
  • 支持按 writer 的时区读取 ORC 文件。 #66025 (kevinyhzou)。
  • 添加设置以控制到 PostgreSQL 的连接。设置 postgresql_connection_attempt_timeout 指定传递给连接 URL 的 connect_timeout 参数的值。设置 postgresql_connection_pool_retries 指定建立到 PostgreSQL 端点的连接的重试次数。 #66232 (Dmitry Novik)。
  • 减少 system.processors_profile_loginput_wait_elapsed_us/elapsed_us 的不准确性。 #66239 (Azat Khuzhin)。
  • 改进文件系统缓存的 ProfileEvents。 #66249 (zhukai)。
  • 添加设置以忽略复制存储的命名集合管理的查询中的 ON CLUSTER 子句。 #66288 (MikhailBurdukov)。
  • 函数 generateSnowflakeID 现在允许将机器 ID 指定为参数,以防止大型集群中的冲突。 #66374 (ZAWA_ll)。
  • 禁用在交互模式下按 Ctrl+Z 挂起。这是一个常见的陷阱,并且对于几乎所有用户来说都不是预期的行为。我想只有少数极端高级用户可能会喜欢将终端应用程序挂起到后台,但我一个都不认识。 #66511 (Alexey Milovidov)。
  • 添加选项以验证字典中主键的类型。如果没有此选项,对于简单布局,任何列类型都将隐式转换为 UInt64。 #66595 (MikhailBurdukov)。

Bug Fix (官方稳定版本中用户可见的错误行为)

  • 检查 CREATE/REPLACE/RENAME/EXCHANGE 查询中的循环依赖,如果存在循环依赖,则抛出异常。以前,这种循环依赖可能导致服务器启动期间的死锁。还修复了依赖项创建中的一些错误。 #65405 (Kruglov Pavel)。
  • 修复函数调用中 LowCardinality 列的意外大小。 #65298 (Raúl Marín)。
  • 修复 maxIntersections 中的崩溃。 #65689 (Raúl Marín)。
  • 修复用户定义中的 VALID UNTIL 子句在重启后重置的问题。 #66409 (Nikolay Degterinsky)。
  • 修复 SHOW MERGES 中的剩余时间列。 #66735 (Alexey Milovidov)。
  • Query was cancelled 可能在 clickhouse-client 中打印两次。此行为已修复。 #66005 (Nikita Mikhaylov)。
  • 修复了将 MySQL NULL 字段映射到 ClickHouse 非 NULL 字段时,使用 MaterializedMySQL(这是一个不受支持的实验性功能)和 TABLE OVERRIDE 导致的崩溃。 #54649 (Filipp Ozinov)。
  • 修复了 PREWHERE 表达式未读取任何列且表没有自适应索引粒度(非常旧的表)时的逻辑错误。 #59173 (Alexander Gololobov)。
  • 修复取消查询时取消缓冲区的错误。 #64478 (Sema Checherinda)。
  • 修复了从元数据填充 parts 列(当 columns.txt 不存在时)。 #64757 (Azat Khuzhin)。
  • 修复 ALTER TABLE ... ON CLUSTER ... MODIFY SQL SECURITY 的崩溃。 #64957 (pufit)。
  • 修复销毁 AccessControl 时的崩溃:添加显式关闭。 #64993 (Vitaly Baranov)。
  • 递归地消除 uniq* 函数参数中的单射函数。这以前可以正常工作,但在新的分析器中被破坏了。 #65140 (Duc Canh Le)。
  • 修复了带有 CTE 的查询中意外的 projection 名称。 #65267 (wudidapaopao)。
  • 当通过直接查询或 Dictionary 表引擎访问字典时,需要 dictGet 权限。 #65359 (Joe Lynch)。
  • 修复了使用增量备份的用户特定 S3 身份验证。 #65481 (Antonio Andelic)。
  • 在启用 read-in-order 优化的情况下,禁用带有 FINAL 的查询的 non-intersecting-parts 优化。这可能会导致不正确的查询结果。作为一种解决方法,请在此修复合并之前禁用 do_not_merge_across_partitions_select_finalsplit_parts_ranges_into_intersecting_and_non_intersecting_final#65505 (Nikolai Kochetov)。
  • 修复了当列表批次中的所有文件都被过滤掉时,出现异常 blob metadata 的索引越界 的问题。 #65523 (Kseniia Sumarokova)。
  • 修复了投影重复数据删除合并时出现的 NOT_FOUND_COLUMN_IN_BLOCK 错误。 #65573 (Yakov Olkhovskiy)。
  • 修复了 MergeJoin 中的错误。稀疏序列化中的列可能被视为其嵌套类型的列,即使没有执行所需的转换。 #65632 (Nikita Taranov)。
  • 修复了兼容性级别 '23.4' 未正确应用的问题。 #65737 (cw5121)。
  • 修复了带有可为空字段的 odbc 表的问题。 #65738 (Rodolphe Dugé de Bernonville)。
  • 修复了 TCPHandler 中的数据竞争,这可能在发生致命错误时发生。 #65744 (Kseniia Sumarokova)。
  • 修复了函数 parseDateTime 中使用 %F%D 占位符时出现的无效异常。 #65768 (Antonio Andelic)。
  • 对于从 PostgreSQL 读取数据的查询,如果 ClickHouse 查询已完成,则取消内部 PostgreSQL 查询。否则,ClickHouse 查询在内部 PostgreSQL 查询完成之前无法取消。 #65771 (Maksim Kita)。
  • 修复了旧分析器和 dictGetOrDefault 一起使用时短路逻辑中的错误。 #65802 (jsc0218)。
  • 修复了导致带有 TTL 的 EmbeddedRocksDB 写入损坏 SST 文件的错误。 #65816 (Duc Canh Le)。
  • 函数 bitTestbitTestAllbitTestAny 现在在指定的位索引越界时返回错误 #65818 (Pablo Marcos)。
  • 设置 join_any_take_last_row 在任何带有哈希连接的查询中都受支持。 #65820 (vdimir)。
  • 更好地处理涉及 IS NULL 检查的连接条件(例如,ON (a = b AND (a IS NOT NULL) AND (b IS NOT NULL) ) OR ( (a IS NULL) AND (b IS NULL) ) 被重写为 ON a <=> b),修复了当存在 IS NULL 以外的条件时出现的不正确优化。 #65835 (vdimir)。
  • 修复了 S3Queue 中不断增长的内存使用量。 #65839 (Kseniia Sumarokova)。
  • 修复了 arrayAUC 中的平局处理,以匹配 sklearn。 #65840 (gabrielmcg44)。
  • 修复了 MySQL 服务器协议 TLS 连接的潜在问题。 #65917 (Azat Khuzhin)。
  • 修复了 MySQL 客户端协议 TLS 连接的潜在问题。 #65938 (Azat Khuzhin)。
  • 修复了使用零超时处理 SSL_ERROR_WANT_READ/SSL_ERROR_WANT_WRITE 的问题。 #65941 (Azat Khuzhin)。
  • 在模式推断缓存中添加了缺失的设置 input_format_csv_skip_first_lines/input_format_tsv_skip_first_lines/input_format_csv_try_infer_numbers_from_strings/input_format_csv_try_infer_strings_from_quoted_tuples,因为它们可能会更改结果模式。它可以防止在这些设置更改时模式推断结果不正确。 #65980 (Kruglov Pavel)。
  • s3 引擎和 s3 表函数中的列 _size 表示存档内部文件的大小,而不是存档本身的大小。 #65993 (Daniil Ivanik)。
  • 修复了解析器中动态子列的解析问题,避免在读取动态子列时读取整个列。 #66004 (Kruglov Pavel)。
  • 修复了使用替换覆盖的 from_env 的配置合并。 #66034 (Azat Khuzhin)。
  • 修复了关闭期间 GRPCServer 中可能发生的挂起。 #66061 (Vitaly Baranov)。
  • 修复了函数 has 中使用非常量 LowCardinality 参数的几个案例。 #66088 (Anton Popov)。
  • 修复了 groupArrayIntersect。它在 merge() 函数中存在不正确的行为。此外,还修复了数字和通用数据的 deserialise() 中的行为。 #66103 (Yarik Briukhovetskyi)。
  • 修复了 unbin/unhex 实现中的缓冲区溢出错误。 #66106 (Nikita Taranov)。
  • 禁用了在 #64760 中引入的 merge-filters 优化。如果优化合并了两个过滤器表达式并且没有应用短路评估,则可能会导致异常。 #66126 (Nikolai Kochetov)。
  • 修复了服务器无法解析带有负块大小数组编码的 Avro 文件的问题,Avro 规范现在允许这样做。 #66130 (Serge Klochkov)。
  • 修复了 ZooKeeper 客户端中的一个错误:会话在从 ZooKeeper 接收到硬件错误后可能会陷入无法使用的状态。例如,这可能是由于 ClickHouse Keeper 中的“软内存限制”引起的。 #66140 (Alexander Tokmakov)。
  • 修复了 SumIfToCountIfVisitor 和有符号整数中的问题。 #66146 (Raúl Marín)。
  • 修复了分布式查询结果中数据丢失的罕见情况。 #66174 (vdimir)。
  • 修复了 StorageDeltaLake 中元数据字段的解析顺序。 #66211 (Kseniia Sumarokova)。
  • 对于 distributed_ddl_output_modenone_only_active 模式,不要抛出 TIMEOUT_EXCEEDED#66218 (Alexander Tokmakov)。
  • 修复了当无法使用索引时 system.numbers_mt 的限制处理。 #66231 (János Benjamin Antal)。
  • 修复了 ClickHouse 服务器如何检测 cgroups v2 指定的最大可用 CPU 核心数的问题,如果服务器在 Docker 等容器中运行。更详细地说,容器通常在根 cgroup 中运行其进程,该 cgroup 具有空名称。在这种情况下,ClickHouse 忽略了 cgroups v2 设置的 CPU 限制。 #66237 (filimonov)。
  • 修复了约束中使用带有 IN 的子查询时出现的 Not-ready set 错误。 #66261 (Nikolai Kochetov)。
  • 修复了复制到 S3 或 AzureBlobStorage 时的错误报告。 #66295 (Vitaly Baranov)。
  • 防止 watchdog 保留未链接(轮换)日志文件的描述符。 #66334 (Aleksei Filatov)。
  • 修复了 logicalexpressionoptimizerpass 丢失常量逻辑类型的错误。 #66344 (pn)。
  • 修复了 group_by_use_nulls=true 和新分析器出现的 Column identifier is already registered 错误。 #66400 (Nikolai Kochetov)。
  • 修复了由于过于激进的过滤器下推,导致连接和过滤表外部引擎(如 PostgreSQL)的查询可能产生不正确结果的问题。从现在开始,在与外部表进行外连接的情况下,where 部分的条件将不会发送到外部数据库。 #66402 (vdimir)。
  • 为交叉连接添加了缺失的列物化。 #66413 (lgbo)。
  • 修复了在新分析器启用的情况下,对于 GROUP BY 键中带有常量表达式的查询,出现 Cannot find column 错误的问题。 #66433 (Nikolai Kochetov)。
  • 避免了在 Npy 格式导入过程中由于错误的数组嵌套级别可能发生的逻辑错误,修复了其他类型错误的测试。 #66461 (Yarik Briukhovetskyi)。
  • 修复了谓词中存在非确定性函数时 count() 结果错误的问题。 #66510 (Duc Canh Le)。
  • 正确跟踪 Allocator::realloc 的内存。 #66548 (Antonio Andelic)。
  • 修复了哈希空元组时读取未初始化内存的问题。 #66562 (Alexey Milovidov)。
  • 修复了带有 WINDOW 的查询的无效结果。当 PARTITION 列具有稀疏序列化并且窗口函数并行执行时,可能会发生这种情况。 #66579 (Nikolai Kochetov)。
  • 修复了在本地存储中删除命名集合的问题。 #66599 (János Benjamin Antal)。
  • 修复了 column_length 未在 ColumnTuple::insertManyFrom 中更新的问题。 #66626 (lgbo)。
  • 修复了对于表达式 (column IS NULL). 的查询,出现的 Unknown identifierColumn is not under aggregate function 错误。该错误由 #65088 触发,仅在使用禁用分析器的情况下。 #66654 (Nikolai Kochetov)。
  • 修复了当标量子查询用作 IN 的第一个参数时(使用新分析器),出现的 Method getResultType is not supported for QUERY query node 错误。 #66655 (Nikolai Kochetov)。
  • 修复了读取变体子列期间可能发生的 PARAMETER_OUT_OF_BOUND 错误。 #66659 (Kruglov Pavel)。
  • 修复了删除列后合并卡住的罕见情况。 #66707 (Raúl Marín)。
  • 修复了从远程源插入选择时 isUniqTypes 断言失败的问题。 #66722 (Sema Checherinda)。
  • 修复了 PrometheusRequestHandler 中的逻辑错误。 #66621 (Vitaly Baranov)。
  • 修复了 fuzzer 发现的 indexHint 函数案例。 #66286 (Anton Popov)。
  • 修复了 'create table b empty as a' 的 AST 格式化。 #64951 (Michael Kolupaev)。

ClickHouse 24.6 版本,2024-07-01

向后不兼容的变更

  • 默认启用异步加载数据库和表。请参阅 config.xml 中的 async_load_databases 设置。虽然此更改完全兼容,但可能会引入行为上的差异。当 async_load_databases 设置为 false 时(如之前的版本中),服务器在加载完所有表之前不会接受连接。当 async_load_databases 设置为 true 时(如新版本中),服务器可以在所有表加载完成之前接受连接。如果查询访问尚未加载的表,它将等待表的加载,这可能需要相当长的时间。如果服务器是大型分布式系统负载均衡器的一部分,则可能会改变服务器的行为。在第一种情况下,负载均衡器可能会收到连接拒绝并快速故障转移到另一台服务器。在第二种情况下,负载均衡器可以连接到仍在加载表的服务器,并且查询将具有更高的延迟。此外,如果大量查询在等待状态下累积,则可能会导致“惊群效应”问题,即它们同时开始处理。这可能只对高负载的分布式后端产生影响。您可以将 async_load_databases 的值设置为 false 以避免此问题。 #57695 (Alexey Milovidov)。
  • 设置 replace_long_file_name_to_hash 默认对 MergeTree 表启用。 #64457 (Anton Popov)。此设置完全兼容,升级期间无需任何操作。从 23.9 开始的所有版本都支持新的数据格式。启用此设置后,您将无法再降级到 23.8 或更早版本。
  • 一些无效查询将在解析期间更早地失败。注意:禁用了对内联 KQL 表达式(实验性的 Kusto 语言)的支持,当它们被放入 kql 表函数而没有字符串文字时,例如 kql(garbage | trash) 而不是 kql('garbage | trash')kql($$garbage | trash$$)。此功能是意外引入的,不应存在。 #61500 (Alexey Milovidov)。
  • 重做了存储 S3QueueOrdered 模式下的并行处理。如果您使用了设置 s3queue_processing_threads_nums3queue_total_shards_num,则此 PR 对于 Ordered 模式是向后不兼容的。设置 s3queue_total_shards_num 已删除,之前只允许在 s3queue_allow_experimental_sharded_mode 下使用,现在已弃用。添加了一个新设置 - s3queue_buckets#64349 (Kseniia Sumarokova)。
  • 添加了新函数 snowflakeIDToDateTimesnowflakeIDToDateTime64dateTimeToSnowflakeIDdateTime64ToSnowflakeID。与现有函数 snowflakeToDateTimesnowflakeToDateTime64dateTimeToSnowflakedateTime64ToSnowflake 不同,新函数与函数 generateSnowflakeID 兼容,即它们接受由 generateSnowflakeID 生成的 snowflake ID,并生成与 generateSnowflakeID 类型相同的 snowflake ID(即 UInt64)。此外,与 generateSnowflakeID 一样,新函数默认使用 UNIX 纪元(即 1970-01-01)。如果需要,可以传递不同的纪元,例如 Twitter/X 的纪元 2010-11-04,即自 UNIX 纪元以来的 1288834974657 毫秒。旧的转换函数已被弃用,将在过渡期后删除:要继续使用它们,请启用设置 allow_deprecated_snowflake_conversion_functions#64948 (Robert Schulze)。

新功能

  • 允许在 ClickHouse Keeper 中存储命名集合。 #64574 (Kseniia Sumarokova)。
  • 支持空元组。 #55061 (Amos Bird)。
  • 添加 Hilbert 曲线编码和解码函数。 #60156 (Artem Mustafin)。
  • 添加了对 hilbertEncode 进行索引分析的支持。 #64662 (Artem Mustafin)。
  • 添加了使用函数 readWKTLineString 读取 WKT 格式的 LINESTRING 几何图形的支持。 #62519 (Nikita Mikhaylov)。
  • 允许从不同的磁盘附加 part。 #63087 (Unalian)。
  • 添加了新的 SQL 函数 generateSnowflakeID,用于生成 Twitter 风格的 Snowflake ID。 #63577 (Danila Puzov)。
  • 添加了 merge_workloadmutation_workload 设置,用于调节资源如何在合并、mutation 和其他工作负载之间被利用和共享。 #64061 (Sergei Trifonov)。
  • 添加了对使用 = 运算符比较 IPv4IPv6 类型 的支持。 #64292 (Francisco J. Jurado Moreno)。
  • 支持二进制数学函数(pow、atan2、max2、min2、hypot)中的 decimal 参数。 #64582 (Mikhail Gorshkov)。
  • 添加了 SQL 函数 parseReadableSize(以及 OrNullOrZero 变体)。 #64742 (Francisco J. Jurado Moreno)。
  • 添加了服务器设置 max_table_num_to_throwmax_database_num_to_throw,以限制 CREATE 查询中的数据库或表数量。 #64781 (Xu Jia)。
  • 为类似文件的存储(s3/file/hdfs/url/azureBlobStorage)添加了 _time 虚拟列。 #64947 (Ilya Golshtein)。
  • 引入了新函数 base64URLEncodebase64URLDecodetryBase64URLDecode#64991 (Mikhail Gorshkov)。
  • 添加了新函数 editDistanceUTF8,它计算两个 UTF8 字符串之间的 编辑距离#65269 (LiuNeng)。
  • 添加了 http_response_headers 配置,以支持自定义 HTTP 处理程序中的自定义响应标头。 #63562 (Grigorii)。
  • 添加了一个新的表函数 loop,以支持在无限循环中返回查询结果。 #63452 (Sariel)。这对于测试很有用。
  • system.query_log 中引入了两个额外的列:used_privilegesmissing_privilegesused_privileges 填充了在查询执行期间检查的权限,missing_privileges 包含缺少的必需权限。 #64597 (Alexey Katsman)。
  • 添加了一个设置 output_format_pretty_display_footer_column_names,启用后,对于长表(默认 50 行),将在表尾显示列名,行数的阈值由 output_format_pretty_display_footer_column_names_min_rows 控制。 #65144 (Shaun Struwig)。

实验性功能

  • 引入了“不同值的数量”类型的统计信息。 #59357 (Han Fei)。
  • 支持带有 ReplicatedMergeTree 的统计信息。 #64934 (Han Fei)。
  • 如果为 Replicated 数据库配置了“副本组”,则自动创建一个包含来自所有组的副本的集群。 #64312 (Alexander Tokmakov)。
  • 添加了设置 parallel_replicas_custom_key_range_lowerparallel_replicas_custom_key_range_upper,以控制当使用范围过滤器时,动态分片并行副本如何并行化查询。 #64604 (josh-hildred)。

性能提升

  • 添加了在插入期间重新洗牌行的能力,以优化大小,而不会违反 PRIMARY KEY 设置的顺序。它由设置 optimize_row_order 控制(默认关闭)。 #63578 (Igor Markelov)。
  • 添加了一个原生 parquet 读取器,可以直接将 parquet 二进制文件读取到 ClickHouse 列中。它由设置 input_format_parquet_use_native_reader 控制(默认禁用)。 #60361 (ZhiHong Zhang)。
  • 当查询过滤器能够从 MergeTree 表中选择精确范围时,支持部分平凡计数优化。 #60463 (Amos Bird)。
  • 通过在单个转换中收集多个线程的块,减少多线程 INSERT 的最大内存使用量。 #61047 (Yarik Briukhovetskyi)。
  • 通过使用固定内存分配,避免分配额外的缓冲区,从而减少使用 Azure 对象存储时的内存使用量。 #63160 (SmitaRKulkarni)。
  • 减少 ColumnNullable::size 中的虚函数调用次数。 #60556 (HappenLee)。
  • 当正则表达式参数为单字符时,加速 splitByRegexp#62696 (Robert Schulze)。
  • 通过跟踪使用的最小和最大键值,加速 8 位和 16 位键的聚合。这可以减少需要验证的单元格数量。 #62746 (Jiebin Sun)。
  • 当左侧为 LowCardinality,右侧为常量集时,优化运算符 IN。 #64060 (Zhiguo Zhou)。
  • 使用线程池来初始化和销毁 ConcurrentHashJoin 内的哈希表。 #64241 (Nikita Taranov)。
  • 优化了带有稀疏列的表中的垂直合并。 #64311 (Anton Popov)。
  • 在垂直合并期间启用了从远程文件系统预取数据。这提高了数据存储在远程文件系统上的表中的垂直合并的延迟。 #64314 (Anton Popov)。
  • 减少 ColumnSparse::filter 的冗余 isDefault 调用,以提高性能。 #64426 (Jiebin Sun)。
  • 通过发出多个异步 getChildren 请求,加速 find_super_nodesfind_big_family keeper-client 命令。 #64628 (Alexander Gololobov)。
  • 改进了可为空数字类型参数的函数 least/greatest#64668 (KevinyhZou)。
  • 允许合并查询计划的两个连续过滤步骤。如果过滤器条件可以从父步骤下推,则可以改进过滤器下推优化。 #64760 (Nikolai Kochetov)。
  • 移除了垂直 final 实现中的不良优化,并默认重新启用垂直 final 算法。 #64783 (Duc Canh Le)。
  • 从过滤器表达式中删除 ALIAS 节点。这稍微提高了带有 PREWHERE 的查询的性能(使用新的分析器)。 #64793 (Nikolai Kochetov)。
  • 重新启用了 OpenSSL 会话缓存。 #65111 (Robert Schulze)。
  • 添加了设置以禁用插入时物化跳过索引和统计信息 (materialize_skip_indexes_on_insertmaterialize_statistics_on_insert)。 #64391 (Anton Popov)。
  • 使用分配的内存大小来计算行组大小,并降低单线程模式下 Parquet 写入器的峰值内存使用量。 #64424 (LiuNeng)。
  • 改进稀疏列的迭代器,减少 size 的调用次数。 #64497 (Jiebin Sun)。
  • 更新条件,以便为备份到 Azure blob storage 使用服务器端复制。 #64518 (SmitaRKulkarni)。
  • 优化了具有大量跳过索引的表的垂直合并的内存使用量。 #64580 (Anton Popov)。

改进

  • 现在在系统表之上执行 SHOW CREATE TABLE 将显示每个表独有的超级有用的注释,这将解释为什么需要此表。 #63788 (Nikita Mikhaylov)。
  • 函数 round()roundBankers()floor()ceil()trunc() 的第二个参数(scale)现在可以是非 const 的。 #64798 (Mikhail Gorshkov)。
  • 添加新磁盘时,热重载 Distributed 表的存储策略。 #58285 (Duc Canh Le)。
  • 避免在饱和服务中调度线程时,MergeTree 索引分析期间可能发生的死锁。 #59427 (Sean Haynes)。
  • 修复了 S3 代理支持和隧道传输的几个次要的极端情况。 #63427 (Arthur Passos)。
  • 提高 io_uring 重新提交的可见性。重命名 profile event IOUringSQEsResubmits -> IOUringSQEsResubmitsAsync 并添加一个新的 IOUringSQEsResubmitsSync#63699 (Tomer Shafir)。
  • 添加了一个新的设置 metadata_keep_free_space_bytes,用于在元数据存储磁盘上保留可用空间。 #64128 (MikhailBurdukov)。
  • 添加指标以跟踪 plain_rewritable 元数据存储创建和删除的目录数量,以及本地到远程内存映射中的条目数量。 #64175 (Julia Kartseva)。
  • 查询缓存现在将具有不同设置的相同查询视为不同的查询。这提高了在不同设置(例如 limitadditional_table_filters)会影响查询结果的情况下的鲁棒性。 #64205 (Robert Schulze)。
  • 支持对象存储中非标准的错误代码 QpsLimitExceeded 作为可重试的错误。 #64225 (Sema Checherinda)。
  • 如果表的 ZooKeeper 路径已存在,则禁止将 MergeTree 表转换为 Replicated 表。 #64244 (Kirill)。
  • 添加了一个新的设置 input_format_parquet_prefer_block_bytes 来控制平均输出块字节数,并将 input_format_parquet_max_block_size 的默认值修改为 65409。 #64427 (LiuNeng)。
  • 允许为 no_proxy 环境变量和 ClickHouse 代理配置中指定的主机绕过代理。 #63314 (Arthur Passos)。
  • 始终以全局线程池中足够的线程数启动 Keeper。 #64444 (Duc Canh Le)。
  • 用户配置中的设置不影响对象存储之上 MergeTree 的合并和 mutations。 #64456 (alesapin)。
  • 支持对象存储中非标准的错误代码 TotalQpsLimitExceeded 作为可重试的错误。 #64520 (Sema Checherinda)。
  • 更新了开源和 ClickHouse Cloud 版本的 Advanced Dashboard,以包含“最大并发网络连接数”图表。 #64610 (Thom O'Connor)。
  • 改进 zeros_mtgenerateRandom 的进度报告。 #64804 (Raúl Marín)。
  • 添加了一个异步指标 jemalloc.profile.active,以显示采样当前是否处于活动状态。这是一个除了 prof.active 之外的激活机制;调用线程进行采样时,两者都必须处于活动状态。 #64842 (Unalian)。
  • 移除 allow_experimental_join_condition 作为重要标记。此标记可能阻止混合版本集群中的分布式查询成功执行。 #65008 (Nikita Mikhaylov)。
  • 添加了服务器异步指标 DiskGetObjectThrottler*DiskGetObjectThrottler*,反映了使用 s3_max_get_rpss3_max_put_rps 磁盘设置定义的每秒请求速率限制,以及当前可发送而不会达到磁盘限制的请求数。指标是为每个配置了限制的磁盘定义的。 #65050 (Sergei Trifonov)。
  • 初始化 Poco::ThreadPool 的全局跟踪收集器(Keeper 等需要)。 #65239 (Kseniia Sumarokova)。
  • 在使用 bcrypt_hash 创建用户时添加验证。 #65242 (Raúl Marín)。
  • PREWHERE 期间/之后读取的行数添加 profile events。 #64198 (Nikita Taranov)。
  • 在带有并行副本的 EXPLAIN PLAN 中打印查询。 #64298 (vdimir)。
  • allow_deprecated_functions 重命名为 allow_deprecated_error_prone_window_functions#64358 (Raúl Marín)。
  • file 表函数中也遵守文件描述符的 max_read_buffer_size 设置。 #64532 (Azat Khuzhin)。
  • 即使对于物化视图,也禁用不支持的存储的事务。 #64918 (alesapin)。
  • 在新分析器中禁止 QUALIFY 子句。旧分析器忽略 QUALIFY,因此可能导致 mutations 中意外的数据删除。 #65356 (Dmitry Novik)。

Bug Fix(官方稳定版本中用户可见的错误行为)

  • 修复了 Apache ORC 库中的一个 bug:修复了在所有平台上写入无符号类型以及 ARM 上的 Int8 时 ORC 统计信息的计算。 #64563 (Michael Kolupaev)。
  • 恢复了 ClickHouse 如何工作和解释 CSV 格式元组的行为。此更改有效地还原了 https://github.com/ClickHouse/ClickHouse/pull/60994,并使其仅在以下几个设置下可用:output_format_csv_serialize_tuple_into_separate_columnsinput_format_csv_deserialize_separate_columns_into_tupleinput_format_csv_try_infer_strings_from_quoted_tuples#65170 (Nikita Mikhaylov)。
  • 修复了一个权限错误,在该错误中,特定情况下的用户可以在默认数据库上提升其权限,而无需必要的授权。 #64769 (pufit)。
  • 修复了 UniqInjectiveFunctionsEliminationPass 和 uniqCombined 的崩溃问题。 #65188 (Raúl Marín)。
  • 修复了 ClickHouse Keeper 中的一个 bug,该 bug 会导致在关闭会话期间出现摘要不匹配。 #65198 (Aleksei Filatov)。
  • 为 Distinct combinator 使用正确的内存对齐方式。以前,当使用 combinator 时,由于无效的内存分配可能会发生崩溃。 #65379 (Antonio Andelic)。
  • 修复了 DISTINCT 和窗口函数的崩溃问题。 #64767 (Igor Nikonov)。
  • 修复了 'set' 跳过索引不适用于 IN 和 indexHint() 的问题。 #62083 (Michael Kolupaev)。
  • 支持在参数化视图值分配期间执行函数。 #63502 (SmitaRKulkarni)。
  • 修复了 Parquet 内存跟踪。 #63584 (Michael Kolupaev)。
  • 修复了读取 Tuple(Map(LowCardinality(String), String), ...) 类型的列。 #63956 (Anton Popov)。
  • 修复了不同类型(表达式和函数)的循环别名的 Cyclic aliases 错误。 #63993 (Nikolai Kochetov)。
  • 此修复将为查询管道中每个单独的视图使用具有正确 definer 的适当重新定义的上下文。 #64079 (pufit)。
  • 修复分析器:使用 INTERPOLATE 时,“未找到列”错误已修复。 #64096 (Yakov Olkhovskiy)。
  • 修复了使用与包含该文件的磁盘不同的凭据创建到 S3 存储桶的备份。 #64153 (Antonio Andelic)。
  • 查询缓存现在将针对不同数据库的两个相同查询视为不同的查询。以前的行为可能被用于绕过读取表的缺失权限。 #64199 (Robert Schulze)。
  • 修复了 StatusFile 中 ~WriteBufferFromFileDescriptor 中未捕获异常时可能发生的中止。 #64206 (Kruglov Pavel)。
  • 修复了带有 ARRAY JOIN 的分布式查询的 duplicate alias 错误。 #64226 (Nikolai Kochetov)。
  • 修复了从字符串到整数的意外 accurateCast。 #64255 (wudidapaopao)。
  • 修复了 CNF 简化,以防任何 OR 组包含互斥的原子。 #64256 (Eduard Karacharov)。
  • 修复了查询树大小验证。 #64377 (Dmitry Novik)。
  • 修复了带有 PREWHEREBuffer 表的 Logical error: Bad cast 错误。 #64388 (Nikolai Kochetov)。
  • blob_storage_log 存储在对象存储上时,防止递归日志记录。 #64393 (vdimir)。
  • 修复了带有默认表达式的表的 CREATE TABLE AS 查询。 #64455 (Anton Popov)。
  • 修复了在具有可空键的表上使用 ORDER BY ... NULLS FIRST / LAST 时 optimize_read_in_order 的行为。 #64483 (Eduard Karacharov)。
  • 修复了对 GLOBAL IN. 的别名的查询的 Expression nodes list expected 1 projection namesUnknown expression or identifier 错误。 #64517 (Nikolai Kochetov)。
  • 修复了 GROUP BY 键中带有常量 CTE 的分布式查询中的 Cannot find column 错误。 #64519 (Nikolai Kochetov)。
  • 修复了从备份还原因创建具有尚未还原的 definer 的 MV 而被阻止时的崩溃循环。 #64595 (pufit)。
  • 修复了当格式化程序生成奇数个字符且最后一个字符为 0 时函数 formatDateTimeInJodaSyntax 的输出。例如,SELECT formatDateTimeInJodaSyntax(toDate('2012-05-29'), 'D') 现在正确返回 150,而不是之前的 15#64614 (LiuNeng)。
  • 如果已使用 -If combinator,则不要重写聚合。 #64638 (Dmitry Novik)。
  • 修复了 float 的类型推断(在小缓冲区的情况下,即 --max_read_buffer_size 1)。 #64641 (Azat Khuzhin)。
  • 修复了可能导致带有表达式的 TTLs 无法正常工作的 bug。 #64694 (alesapin)。
  • 修复了删除始终为 true 的 WHEREPREWHERE 表达式(对于新分析器)。 #64695 (Nikolai Kochetov)。
  • 修复了当按 startsWithendsWithmatchmultiSearchAny 的结果进行过滤时,基于令牌的文本索引(ngrambffull_text)过度消除 part 的问题。 #64720 (Eduard Karacharov)。
  • 修复了 UTF8::computeWidth 函数中 ANSI CSI 转义的不正确行为。 #64756 (Shaun Struwig)。
  • 修复了跨子查询错误删除 ORDER BY / LIMIT BY 的情况。 #64766 (Raúl Marín)。
  • 修复了(实验性的)不相等连接,其中子查询用于混合连接条件中的集合。 #64775 (lgbo)。
  • 修复了 plain_rewritable 磁盘上的本地缓存崩溃问题。 #64778 (Julia Kartseva)。
  • Keeper 修复:在 mntr 命令中为 zk_latest_snapshot_size 返回正确的值。 #64784 (Antonio Andelic)。
  • 修复了通过 Nested 列使用 ARRAY JOIN 的分布式查询中的 Cannot find column 错误。修复了 #64755#64801 (Nikolai Kochetov)。
  • 修复了 slru 缓存策略中的内存泄漏。 #64803 (Kseniia Sumarokova)。
  • 修复了在几种查询中可能出现的不正确的内存跟踪:从 S3 读取任何数据的查询、通过 http 协议的查询、异步插入。 #64844 (Anton Popov)。
  • 修复了当物化视图的列类型与源表不同时,从带有 PREWHERE 的物化视图读取时出现的 Block structure mismatch 错误。修复了 #64611#64855 (Nikolai Kochetov)。
  • 修复了在表具有带有子查询的 TTL + 数据库已复制 + 并行副本 + 分析器的情况下罕见的崩溃。这非常罕见,但请不要将带有子查询的 TTLs 用于生产环境。 #64858 (alesapin)。
  • 修复了在删除大批量数据时,blob_storage_log 中重复 Delete 事件的问题。 #64924 (vdimir)。
  • 修复了在服务器启动后,当配置包含来自 [Zoo]Keeper 的内容时,可能发生的来自 [Zoo]Keeper 的 Session moved to another server 错误。 #64986 (Alexander Tokmakov)。
  • 修复了在 https://github.com/ClickHouse/ClickHouse/pull/54211 中对于参数化 VIEWs 损坏的 ALTER MODIFY COMMENT 查询。 #65031 (Nikolay Degterinsky)。
  • 修复了启用 cluster_secure_connection 参数时 DatabaseReplicated 中的 host_id。以前,即使启用了该参数,DatabaseReplicated 创建的集群内的所有连接也不是安全的。 #65054 (Nikolay Degterinsky)。
  • 修复了 StorageMerge 的 PREWHERE 优化后出现的 Not-ready Set 错误。 #65057 (Nikolai Kochetov)。
  • 避免写入类似文件的存储中已完成的缓冲区。 #65063 (Kruglov Pavel)。
  • 修复了循环别名情况下可能存在的无限查询持续时间。修复了 #64849#65081 (Nikolai Kochetov)。
  • 修复了带有 INTERPOLATE (alias) 的远程查询的 Unknown expression identifier 错误(新分析器)。修复了 #64636#65090 (Nikolai Kochetov)。
  • 修复了将算术运算推出聚合的问题。在新分析器中,优化仅应用一次。 #65104 (Dmitry Novik)。
  • 修复了新分析器中的聚合函数名称重写。 #65110 (Dmitry Novik)。
  • 在从客户端套接字读取(部分)请求正文时发生接收超时的情况下,响应 5xx 而不是 200 OK。 #65118 (Julian Maicher)。
  • 修复了对冲请求可能发生的崩溃。 #65206 (Azat Khuzhin)。
  • 修复了 Hashed 和 Hashed_Array 字典短路评估中的 bug,该 bug 可能会读取未初始化的数字,从而导致各种错误。 #65256 (jsc0218)。
  • 此 PR 确保在 IN 运算符的类型转换过程中始终可以看到常量(IN 运算符的第二个参数)的类型。否则,丢失类型信息可能会导致某些转换失败,例如从 DateTime 到 Date 的转换。这修复了 (#64487)。 #65315 (pn)。

构建/测试/打包改进

ClickHouse 版本 24.5,2024-05-30

向后不兼容的更改

  • 将“倒排索引”重命名为“全文索引”,这是一个技术性较低/更用户友好的名称。这也更改了内部表元数据,并会破坏带有现有(实验性)倒排索引的表。请务必在升级前删除此类索引,并在升级后重新创建它们。 #62884 (Robert Schulze)。
  • 函数 neighborrunningAccumulaterunningDifferenceStartingWithFirstValuerunningDifference 已弃用(因为它容易出错)。应使用正确的窗口函数来代替。要重新启用它们,请设置 allow_deprecated_error_prone_window_functions = 1 或设置 compatibility = '24.4' 或更低版本。 #63132 (Nikita Taranov)。
  • 如果列数很多,但许多数据库或表未被授予 SHOW TABLES 权限,则从 system.columns 查询将更快。请注意,在以前的版本中,如果您向单个列授予 SHOW COLUMNS 权限,而未向相应的表授予 SHOW TABLES 权限,则 system.columns 表将显示这些列,但在新版本中,它将完全跳过该表。删除了减慢查询速度的跟踪日志消息“Access granted”和“Access denied”。 #63439 (Alexey Milovidov)。

新功能

  • 添加了 Form 格式,用于在 application/x-www-form-urlencoded 格式中读取/写入单个记录。 #60199 (Shaun Struwig)。
  • 添加了在 CROSS JOIN 中进行压缩的可能性。 #60459 (p1rattttt)。
  • 如果大小超过限制,则添加了在临时文件中执行 CROSS JOIN 的可能性。 #63432 (p1rattttt)。
  • 支持使用不等条件进行 join,这些条件涉及左右表中的列。例如 t1.y < t2.y。要启用此功能,请 SET allow_experimental_join_condition = 1#60920 (lgbo)。
  • 现在,Map 可以使用 Float32Float64Array(T)Map(K, V)Tuple(T1, T2, ...) 作为键。关闭了 #54537#59318 (李扬)。
  • 通过创建和摄取 SST 文件而不是依赖 rocksdb 内置 memtable,将批量加载引入 EmbeddedRocksDB。这有助于提高导入速度,特别是对于长时间运行的插入 StorageEmbeddedRocksDB 表的查询。此外,还引入了 EmbeddedRocksDB 表设置。 #59163 #63324 (Duc Canh Le)。
  • 用户现在可以使用设置 input_format_tsv_crlf_end_of_line 通过 TSV 格式解析 CRLF。关闭了 #56257#59747 (Shaun Struwig)。
  • 一个新的设置 input_format_force_null_for_omitted_fields,强制将省略字段的值设置为 NULL。 #60887 (Constantine Peresypkin)。
  • 早期我们的 S3 存储和 s3 表函数不支持从归档容器文件(如 tarball、zip、7z)中选择数据。现在它们允许遍历 S3 中归档文件内部的文件。 #62259 (Daniil Ivanik)。
  • 支持条件函数 clamp#62377 (skyoct)。
  • 添加 NPy 输出格式。 #62430 (豪肥肥)。
  • Raw 格式作为 TSVRaw 的同义词。 #63394 (Unalian)。
  • 添加了一个新的 SQL 函数 generateUUIDv7,用于生成版本 7 UUID,也称为基于时间戳的 UUID,带有随机组件。还添加了一个新函数 UUIDToNum,用于从 UUID 中提取字节,以及一个新的函数 UUIDv7ToDateTime,用于从 UUID 版本 7 中提取时间戳组件。 #62852 (Alexey Petrunyaka)。
  • 在 Linux 和 MacOS 上,如果程序的 stdout 重定向到带有压缩扩展名的文件,则使用相应的压缩方法而不是不压缩(使其行为类似于 INTO OUTFILE)。 #63662 (v01dXYZ)。
  • 更改关于附加表数量过多的警告,以区分表、视图和字典。 #64180 (Francisco J. Jurado Moreno)。
  • 在 ClickHouse 服务器中为 azureBlobStorage 函数提供支持,以使用 Azure 工作负载标识向 Azure Blob 存储进行身份验证。如果在配置中设置了 use_workload_identity 参数,则使用 工作负载标识 进行身份验证。 #57881 (Vinay Suryadevara)。
  • system.parts_columns 表中添加 TTL 信息。 #63200 (litlig)。

实验性功能

  • 实现了 Dynamic 数据类型,允许在其中存储任何类型的值,而无需预先知道所有类型。Dynamic 类型在设置 allow_experimental_dynamic_type 下可用。参考:#54864#63058 (Kruglov Pavel)。
  • 允许创建 MaterializedMySQL 数据库,而无需连接到 MySQL。 #63397 (Kirill)。
  • 如果某些 DDL 任务连续失败超过 max_retries_before_automatic_recovery 次(默认为 100 次),并且出现相同的错误,则自动将 Replicated 数据库的副本标记为丢失并开始恢复。此外,修复了一个错误,该错误可能导致在条目执行的早期阶段抛出异常时跳过 DDL 条目。 #63549 (Alexander Tokmakov)。
  • StorageS3Queues3queue_tracked_file_ttl_secs3queue_traked_files_limit 中统计失败的文件。 #63638 (Kseniia Sumarokova)。

性能改进

  • 减少文件系统缓存中的争用(第 4 部分)。允许通过在后台执行额外的驱逐(由 keep_free_space_size(elements)_ratio 控制)来保持文件系统缓存未满。这允许释放来自查询的空间预留压力(在 tryReserve 方法上)。此外,这是以尽可能无锁的方式完成的,例如,不应阻止正常的缓存使用。 #61250 (Kseniia Sumarokova)。
  • INSERT 期间跳过合并新创建的 projection 块。 #59405 (Nikita Taranov)。
  • 如果输入字符串都是 ascii 字符,则“asciily”处理字符串函数 ...UTF8。灵感来自 https://github.com/apache/doris/pull/29799。整体速度提升 1.07 倍~1.62 倍。请注意,在某些情况下,峰值内存使用量已减少。 #61632 (李扬)。
  • 改进了 StorageS3 中选择 ({}) glob 的性能。 #62120 (Andrey Zvonov)。
  • HostResolver 为每个 IP 地址记录多次。如果远程主机有多个 IP,并且由于某些原因(例如防火墙规则),允许访问某些 IP,而禁止访问其他 IP,则只有第一个被禁止的 IP 记录被标记为失败,并且在每次尝试中,这些 IP 都有机会被选中(并再次失败)。即使修复此问题,每 120 秒 DNS 缓存也会被删除,并且 IP 可能会再次被选中。 #62652 (Anton Ivashkin)。
  • 添加了一个新的配置 prefer_merge_sort_block_bytes,用于控制内存使用量,并在合并时列数很多的情况下将排序速度提高 2 倍。 #62904 (LiuNeng)。
  • clickhouse-local 将启动更快。在以前的版本中,它错误地没有删除临时目录。现在它会删除了。这关闭了 #62941#63074 (Alexey Milovidov)。
  • 针对新分析器的微优化。 #63429 (Raúl Marín)。
  • 如果将 DateTimeDateTime64 进行比较,索引分析将起作用。这关闭了 #63441#63443 #63532 (Alexey Milovidov)。
  • 通过删除垃圾数据,稍微加快了 set 类型索引的速度(大约 1.5 倍)。 #64098 (Alexey Milovidov)。
  • 在写入文件系统缓存时,删除数据复制操作。 #63401 (Kseniia Sumarokova)。
  • 现在,使用 Azure Blob 存储的备份将使用 multicopy。 #64116 (alesapin)。
  • 允许即使容器不同,也对 Azure 使用 native copy。 #64154 (alesapin)。
  • 最终为 Azure 启用 native copy。 #64182 (alesapin)。

改进

  • 允许使用 clickhouse-local 及其快捷方式 clickhousech,并将查询或查询文件作为位置参数。示例:ch "SELECT 1"ch --param_test Hello "SELECT {test:String}"ch query.sql。这关闭了 #62361#63081 (Alexey Milovidov)。
  • 为本地和 Azure (azure_blob_storage) 对象存储启用 plain_rewritable 元数据。 #63365 (Julia Kartseva)。
  • 支持英文样式的 Unicode 引号,例如 “Hello”、“world”。这在一般情况下值得怀疑,但在文字处理器(如 Google 文档)中键入查询时很有帮助。这关闭了 #58634#63381 (Alexey Milovidov)。
  • 允许在 INSERT 查询的列列表中使用尾随逗号。例如:INSERT INTO test (a, b, c, ) VALUES ...#63803 (Alexey Milovidov)。
  • Regexp 格式提供更好的异常消息。 #63804 (Alexey Milovidov)。
  • 允许在 Values 格式中使用尾随逗号。例如,允许以下查询:INSERT INTO test (a, b, c) VALUES (4, 5, 6,);#63810 (Alexey Milovidov)。
  • 使 rabbitmq nack 损坏的消息。关闭了 #45350#60312 (Kseniia Sumarokova)。
  • 修复了在解释调试信息时,异步堆栈展开(例如在使用采样查询分析器时)中的崩溃。这关闭了 #60460#60468 (Alexey Milovidov)。
  • 针对 s3 错误 'no key',为磁盘和存储情况提供不同的消息。 #61108 (Sema Checherinda)。
  • 进度条将适用于来自 system.zerossystem.zeros_mt 的带有 LIMIT 的简单查询(它已经适用于 system.numberssystem.numbers_mt)以及 generateRandom 表函数。作为奖励,如果记录总数大于 max_rows_to_read 限制,它将更早地抛出异常。这关闭了 #58183#61823 (Alexey Milovidov)。
  • 支持 YAML 配置中的“Merge Key”(这是 YAML 的一个奇怪功能,请忽略)。 #62685 (Azat Khuzhin)。
  • 当非确定性函数与 Replicated 源一起使用时,增强错误消息。 #62896 (Grégoire Pineau)。
  • 修复来自 remote 的 Distributed over Distributed 的 interserver secret。 #63013 (Azat Khuzhin)。
  • 支持 YAML 文件的 include_from。但是,您最好使用 config.d #63106 (Eduard Karacharov)。
  • 从 skim 建议中选择后,在终端中保留先前的数据。 #63261 (FlameFactory)。
  • 字段的宽度(在 Pretty 格式或 visibleWidth 函数中)现在正确地忽略 ANSI 转义序列。 #63270 (Shaun Struwig)。
  • 在适当的时候,通过更准确的错误代码来更新错误代码 NUMBER_OF_ARGUMENTS_DOESNT_MATCH 的使用。 #63406 (Yohann Jardin)。
  • os_userclient_hostname 现在为 clickhouse-client 中用于命令行建议的查询正确设置。这关闭了 #63430#63433 (Alexey Milovidov)。
  • 如果 max_block_size 为零,则自动将其更正为默认值。 #63587 (Antonio Andelic)。
  • 向 trace_log 添加 build_id ALIAS 列,以便在检测到二进制文件更改时自动重命名。这是为了解决 #52086#63656 (Zimu Li)。
  • 为对象存储磁盘启用 truncate 操作。 #63693 (MikhailBurdukov)。
  • 关键字列表的加载现在取决于服务器修订版本,并且对于旧版本的 ClickHouse 服务器将被禁用。抄送 @azat。 #63786 (Nikita Mikhaylov)。
  • Clickhouse 磁盘必须读取服务器设置才能获得实际的元数据格式版本。 #63831 (Sema Checherinda)。
  • 当 stdout 不是 TTY 时,禁用 pretty 格式限制(output_format_pretty_max_rows/output_format_pretty_max_value_width)。 #63942 (Azat Khuzhin)。
  • 当 ClickHouse 在 AWS Lambda 内部使用时,异常处理现在可以工作。作者:Alexey Coolnev#64014 (Alexey Milovidov)。
  • 对于通过 HTTP 传递的无效压缩数据,抛出 CANNOT_DECOMPRESS 而不是 CORRUPTED_DATA#64036 (vdimir)。
  • Pretty 格式中单个大数字的提示现在适用于 Nullable 和 LowCardinality。这关闭了 #61993#64084 (Alexey Milovidov)。
  • 在零件索引过滤周围添加指标、日志和线程名称。 #64130 (Alexey Milovidov)。
  • ATTACH 上忽略 allow_suspicious_primary_key,并在 ALTER 上进行验证。 #64202 (Azat Khuzhin)。

构建/测试/打包改进

Bug 修复

ClickHouse 24.4 版本,2024-04-30

升级说明

  • clickhouse-odbc-bridgeclickhouse-library-bridge 现在是单独的软件包。 这关闭了 #61677#62114 (Alexey Milovidov)。
  • 不允许将 max_parallel_replicas (用于实验性的从副本并行读取) 设置为 0,因为这没有意义。 关闭了 #60140#61201 (Kruglov Pavel)。
  • 移除对 INSERT WATCH 查询(已弃用的 LIVE VIEW 功能的一部分)的支持。 #62382 (Alexey Milovidov)。
  • 移除了 optimize_monotonous_functions_in_order_by 设置。 #63004 (Raúl Marín)。
  • Replicated 数据库引擎中移除实验性标签。 现在它处于 Beta 阶段。 #62937 (Justin de Guzman)。

新功能

  • 支持递归 CTE。 #62074 (Maksim Kita)。
  • 支持 QUALIFY 子句。 关闭了 #47819#62619 (Maksim Kita)。
  • 表引擎现在是可授权的,并且不会影响现有用户的行为。 #60117 (jsc0218)。
  • 添加了一个可重写的 S3 磁盘,该磁盘支持 INSERT 操作,并且不需要本地存储的元数据。 #61116 (Julia Kartseva)。 主要用例是用于系统表。
  • 在客户端输入时的语法高亮将工作在语法级别(之前,它工作在词法分析器级别)。 #62123 (Alexey Milovidov)。
  • 支持同时删除多个表,例如 DROP TABLE a, b, c;。 #58705 (zhongyuankai)。
  • 现在支持通过 ALTER MODIFY SETTING 修改内存表设置。 示例:ALTER TABLE memory MODIFY SETTING min_rows_to_keep = 100, max_rows_to_keep = 1000;#62039 (zhongyuankai)。
  • 为 HTTP 接口添加了 role 查询参数。 它的工作方式类似于 SET ROLE x,在语句执行之前应用角色。 这允许克服 HTTP 接口的限制,因为不允许使用多个语句,并且不可能同时发送 SET ROLE x 和语句本身。 可以通过这种方式设置多个角色,例如,?role=x&role=y,这将等效于 SET ROLE x, y#62669 (Serge Klochkov)。
  • 添加 SYSTEM UNLOAD PRIMARY KEY 以释放表的 primary key 的内存使用。 #62738 (Pablo Marcos)。
  • system.text_log 添加了 value1, value2, ..., value10 列。 这些列包含用于格式化消息的值。 #59619 (Alexey Katsman)。
  • 添加了持久虚拟列 _block_offset,它存储在插入时分配的块中的原始行号。 可以通过 MergeTree 设置 enable_block_offset_column 启用 _block_offset 列的持久性。 添加了虚拟列 _part_data_version,它包含最小块号或 part 的 mutation 版本。 持久虚拟列 _block_number 不再被认为是实验性的。 #60676 (Anton Popov)。
  • 添加了一个设置 input_format_json_throw_on_bad_escape_sequence,禁用它可以允许在 JSON 输入格式中保存错误的转义序列。 #61889 (Kruglov Pavel)。

性能提升

  • 使用等效集合改进了 JOIN 过滤器下推。 #61216 (Maksim Kita)。
  • 如果 JOIN 之后的过滤器始终过滤默认值,则将 OUTER JOIN 转换为 INNER JOIN 的优化。 可以使用设置 query_plan_convert_outer_join_to_inner_join 控制优化,默认启用。 #62907 (Maksim Kita)。
  • AWS S3 的改进。 客户端必须向服务器发送标头 'Keep-Alive: timeout=X'。 如果客户端收到来自服务器的带有该标头的响应,则客户端必须使用来自服务器的值。 此外,对于客户端来说,最好不要使用即将过期的连接,以避免连接关闭竞争。 #62249 (Sema Checherinda)。
  • 减少 SELECT 的 mutations 开销 (v2)。 #60856 (Azat Khuzhin)。
  • PODArray 中更频繁调用的函数现在被强制内联。 #61144 (李扬)。
  • 通过在读取所有必需的列时跳过对象的其余部分来加速 JSON 解析。 #62210 (lgbo)。
  • 改进从 file/s3/hdfs/url/... 表函数中的文件进行简单 insert select 操作。 添加单独的 max_parsing_threads 设置以控制并行解析中使用的线程数。 #62404 (Kruglov Pavel)。
  • 函数 to_utc_timestampfrom_utc_timestamp 现在速度快了约 2 倍。 #62583 (KevinyhZou)。
  • 当输入主要包含不可解析的值时,函数 parseDateTimeOrNull, parseDateTimeOrZero, parseDateTimeInJodaSyntaxOrNullparseDateTimeInJodaSyntaxOrZero 现在运行速度显着加快 (10 倍 - 1000 倍)。 #62634 (LiuNeng)。
  • 当查询缓存包含大量条目(例如超过 100,000)时,针对 system.query_cache 的 SELECT 查询现在明显更快。 #62671 (Robert Schulze)。
  • 文件系统缓存中减少争用 (第 3 部分):执行从文件系统中删除操作,而无需锁定空间预留尝试。 #61163 (Kseniia Sumarokova)。
  • 加速文件系统缓存的动态调整大小。 #61723 (Kseniia Sumarokova)。
  • 具有 INVALIDATE_QUERY 的字典源不会在启动时重新加载两次。 #62050 (vdimir)。
  • 修复了一个问题,当在涉及 primary key 的布尔表达式后添加多余的 = 1= 0 时,primary index 未被使用。 例如,SELECT * FROM <table> WHERE <primary-key> IN (<value>) = 1SELECT * FROM <table> WHERE <primary-key> NOT IN (<value>) = 0 都会执行全表扫描,而 primary index 可以被使用。 #62142 (josh-hildred)。
  • system.remote_data_paths 返回 chunk 流,而不是将整个结果累积到一个大的 chunk 中。 这允许消耗更少的内存,显示中间进度并取消查询。 #62613 (Alexander Gololobov)。

实验性功能

  • 支持 Azure Blob Storage 的并行写入缓冲区,可通过设置 azure_allow_parallel_part_upload 管理。 #62534 (SmitaRKulkarni)。
  • 用户空间页面缓存现在可以与静态 web 存储 (disk(type = web)) 一起使用。 使用客户端设置 use_page_cache_for_disks_without_file_cache=1 启用。 #61911 (Michael Kolupaev)。
  • 不要将 Bool 和数字变体视为 Variant 类型中的可疑类型。 #61999 (Kruglov Pavel)。
  • 实现从 String 到 Variant 的更好转换,使用解析方式。 #62005 (Kruglov Pavel)。
  • 支持 JSONExtract 函数中的 Variant 类型。 #62014 (Kruglov Pavel)。
  • Variant 类型标记为可比较的,以便可以在 primary key 中使用它。 #62693 (Kruglov Pavel)。

改进

  • 为了方便起见,SELECT * FROM numbers() 的工作方式将与 SELECT * FROM system.numbers 相同 - 没有限制。 #61969 (YenchangChan)。
  • 为 Kafka 配置引入单独的 consumer/producer 标签。 这避免了来自 librdkafka (一个有很多 bug 的糟糕的 C 库) 的警告,即为 producer 实例指定了 consumer 属性,反之亦然 (例如 Configuration property session.timeout.ms is a consumer property and will be ignored by this producer instance)。 关闭了: #58983#58956 (Aleksandr Musorin)。
  • 函数 date_diffage 现在以纳秒而不是微秒精度计算结果。 它们现在还提供 nanosecond (或 nanosecondsns) 作为 unit 参数的可能值。 #61409 (Austin Kothig)。
  • date_trunc 添加了纳秒、微秒、毫秒单位。 #62335 (Misz606)。
  • 在证书重新加载期间重新加载证书链。 #61671 (Pervakov Grigorii)。
  • 尝试通过在副本路径存在活动副本时不允许附加表来防止错误 #60432#61876 (Arthur Passos)。
  • 实现对 clickhouse-localinput 的支持。 #61923 (Azat Khuzhin)。
  • 具有严格模式 ANYJoin 表引擎在重新加载后是一致的。 当插入多个具有相同键的行时,第一个行将具有更高的优先级(之前,在表加载时是随机选择的)。 关闭 #51027#61972 (vdimir)。
  • 从 Apache Arrow schema 自动推断 Nullable 列类型。 #61984 (Maksim Kita)。
  • 允许取消聚合期间聚合状态的并行合并。 示例:uniqExact#61992 (Maksim Kita)。
  • 使用 system.keywords 填充建议,并在内部所有地方使用它们。 #62000 (Nikita Mikhaylov)。
  • ReplicatedMergeTreeOPTIMIZE FINAL 现在将等待当前活动的合并完成,然后重新尝试调度最终合并。 这将使其更符合普通的 MergeTree 行为。 #62067 (Nikita Taranov)。
  • 当从 hive 文本文件读取数据时,它将使用 hive 文本文件的第一行来调整输入字段的数量,有时第一行的字段数与定义的 hive 表不匹配,例如 hive 表被定义为具有 3 列,如 test_tbl(a Int32, b Int32, c Int32),但文本文件的第一行只有 2 个字段,在这种情况下,输入字段将被调整为 2,如果文本文件的下一行有 3 个字段,则第三个字段将无法读取,但设置为默认值 0,这是不正确的。 #62086 (KevinyhZou)。
  • CREATE AS 复制表的注释。 #62117 (Pablo Marcos)。
  • 向表 zookeeper 添加查询进度。 #62152 (JackyWoo)。
  • 添加了在服务器范围内启用 trace collector (Real 和 CPU) 的能力。 #62189 (alesapin)。
  • 添加了设置 lightweight_deletes_sync (默认值:2 - 同步等待所有副本)。 它类似于设置 mutations_sync,但仅影响 lightweight deletes 的行为。 #62195 (Anton Popov)。
  • 在解析自定义设置的值时区分布尔值和整数:SET custom_a = true; SET custom_b = 1;#62206 (Vitaly Baranov)。
  • 支持通过 AWS Private Link Interface endpoints 进行 S3 访问。 关闭了 #60021, #31074#53761#62208 (Arthur Passos)。
  • 如果目录不存在,则不要在 clickhouse-client 中为 UDF 创建目录。 这关闭了 #59597#62366 (Alexey Milovidov)。
  • 查询缓存现在不再缓存针对系统表的查询结果 (system.*, information_schema.*, INFORMATION_SCHEMA.*)。 #62376 (Robert Schulze)。
  • MOVE PARTITION TO TABLE 查询可能会被延迟,或者可能抛出 TOO_MANY_PARTS 异常,以避免超出 part 数量的限制。 与 INSERT 查询应用相同的设置和限制(请参阅 max_parts_in_total, parts_to_delay_insert, parts_to_throw_insert, inactive_parts_to_throw_insert, inactive_parts_to_delay_insert, max_avg_part_size_for_too_many_parts, min_delay_to_insert_msmax_delay_to_insert 设置)。 #62420 (Sergei Trifonov)。
  • 将 macOS 上的默认安装目录从 /usr/bin 更改为 /usr/local/bin。 这是必要的,因为 Apple 的 System Integrity Protection 在 macOS El Capitan (2015) 中引入,阻止写入 /usr/bin,即使使用 sudo 也是如此。 #62489 (haohang)。
  • 使 transform 始终返回第一个匹配项。 #62518 (Raúl Marín)。
  • 向系统表 blob_storage_log 添加了缺失的 hostname 列。 #62456 (Jayme Bird)。
  • 为了与其他系统表保持一致,system.backup_log 现在具有列 event_time#62541 (Jayme Bird)。
  • system.backup_log 现在具有 "default" 排序键,即 event_date, event_time,与其他 _log 表引擎相同。 #62667 (Nikita Mikhaylov)。
  • 在执行 RESTORE 时避免评估表 DEFAULT 表达式。 #62601 (Vitaly Baranov)。
  • S3 存储和备份也需要与 s3 磁盘相同的默认 keep alive 设置。 #62648 (Sema Checherinda)。
  • 将 librdkafka (那个臭名昭著的 C 库,有很多 bug) 的客户端标识符添加到日志消息中,以便能够区分来自单个表的不同消费者的日志消息。 #62813 (János Benjamin Antal)。
  • 允许在 Replicated 数据库 ZooKeeper 路径中使用特殊宏 {uuid}{database}#62818 (Vitaly Baranov)。
  • 允许 HTTP 请求中使用具有不同身份验证方案的 quota key。 #62842 (Kseniia Sumarokova)。
  • 减少 clickhouse clientclickhouse local 中命令行参数 --help 的详细程度。 之前的输出现在由 --help --verbose 生成。 #62973 (Yarik Briukhovetskyi)。
  • log_bin_use_v1_row_events 已在 MySQL 8.3 中移除,我们为实验性的 MaterializedMySQL 引擎对此进行了调整 #60479#63101 (Eugene Klimov)。 作者:Nikolay Yankin。

构建/测试/打包改进

Bug 修复(官方稳定版本中用户可见的错误行为)

ClickHouse 24.3 LTS 版本,2024-03-27

升级说明

  • 设置 allow_experimental_analyzer 默认启用,它将查询分析切换到新的实现,该实现具有更好的兼容性和更完整的功能。 “分析器” 功能被认为是 beta 版本而不是实验性版本。 您可以通过将 compatibility 设置为 24.2 或禁用 allow_experimental_analyzer 设置来恢复旧的行为。 观看 YouTube 上的视频
  • ClickHouse 允许 String 数据类型中使用任意二进制数据,这通常是 UTF-8。 Parquet/ORC/Arrow String 仅支持 UTF-8。 这就是为什么您可以选择使用哪个 Arrow 的数据类型来用于 ClickHouse String 数据类型 - String 或 Binary。 这由设置 output_format_parquet_string_as_string, output_format_orc_string_as_string, output_format_arrow_string_as_string 控制。 虽然 Binary 会更正确和兼容,但在大多数情况下,默认使用 String 将符合用户期望。 Parquet/ORC/Arrow 支持多种压缩方法,包括 lz4 和 zstd。 ClickHouse 支持每一种压缩方法。 一些较差的工具缺乏对更快的 lz4 压缩方法的支持,这就是为什么我们默认设置 zstd。 这由设置 output_format_parquet_compression_method, output_format_orc_compression_methodoutput_format_arrow_compression_method 控制。 我们将 Parquet 和 ORC 的默认值更改为 zstd,但 Arrow 除外(它强调低级别用法)。 #61817 (Alexey Milovidov)。 与 Geet Patel 共同创作。
  • 在新版本的 ClickHouse 中,如果所有参数均为 Float64,则函数 geoDistancegreatCircleDistancegreatCircleAngle 将使用 64 位双精度浮点数据类型进行内部计算和返回类型。 这解决了 #58476。 在以前的版本中,该函数始终使用 Float32。 您可以通过将 geo_distance_returns_float64_on_float64_arguments 设置为 false 或将 compatibility 设置为 24.2 或更早版本来切换到旧的行为。 #61848 (Alexey Milovidov)。 与 Geet Patel 共同创作。
  • 过时的内存数据 parts 自 23.5 版本起已被弃用,自 23.10 版本起不再支持。 现在剩余的代码已删除。 继续 #55186#45409。 您不太可能使用内存数据 parts,因为它们仅在 23.5 版本之前可用,并且仅当您通过为 MergeTree 表指定相应的 SETTINGS 手动启用它们时才可用。 要检查您是否具有内存数据 parts,请运行以下查询:SELECT part_type, count() FROM system.parts GROUP BY part_type ORDER BY part_type。 要禁用内存数据 parts 的使用,请执行 ALTER TABLE ... MODIFY SETTING min_bytes_for_compact_part = DEFAULT, min_rows_for_compact_part = DEFAULT。 从旧的 ClickHouse 版本升级之前,请先检查您是否没有内存数据 parts。 如果存在内存数据 parts,请先禁用它们,然后等待直到没有内存数据 parts,然后继续升级。 #61127 (Alexey Milovidov)。
  • system.zookeeper 表中的列名从 duration_ms 更改为 duration_microseconds,以反映持续时间以微秒分辨率为单位的实际情况。 #60774 (Duc Canh Le)。
  • 如果同时启用了查询级别设置 async_insertdeduplicate_blocks_in_dependent_materialized_views,则拒绝传入的 INSERT 查询。 此行为由设置 throw_if_deduplication_in_dependent_materialized_views_enabled_with_async_insert 控制,默认情况下启用。 这是 https://github.com/ClickHouse/ClickHouse/pull/59699 的延续,需要解除阻止 https://github.com/ClickHouse/ClickHouse/pull/59915#60888 (Nikita Mikhaylov)。
  • 实用程序 clickhouse-copier 已移至 GitHub 上的单独存储库:https://github.com/ClickHouse/copier。 它不再包含在捆绑包中,但仍可作为单独下载项使用。 这关闭了:#60734 这关闭了:#60540 这关闭了:#60250 这关闭了:#52917 这关闭了:#51140 这关闭了:#47517 这关闭了:#47189 这关闭了:#46598 这关闭了:#40257 这关闭了:#36504 这关闭了:#35485 这关闭了:#33702 这关闭了:#26702
  • 为了提高与 MySQL 的兼容性,兼容性别名 locate 现在默认接受参数 (needle, haystack[, start_pos])。 可以通过设置 function_locate_has_mysql_compatible_argument_order = 0 来恢复之前的行为 (haystack, needle, [, start_pos])#61092 (Robert Schulze)。
  • 默认情况下,禁止在 MergeTree 表的 ORDER BY 中使用 SimpleAggregateFunction(就像禁止 AggregateFunction 一样,但禁止它们是因为它们不可比较)(使用 allow_suspicious_primary_key 以允许它们)。 #61399 (Azat Khuzhin)。
  • Ordinary 数据库引擎已弃用。 如果您的服务器正在使用它,您将在 clickhouse-client 中收到警告。 这关闭了 #52229#56942 (shabroo)。

新功能

  • 支持以 tar 格式(除了 zip 格式之外)读取和写入备份。 #59535 (josh-hildred)。
  • 实现了对 S3 Express 存储桶的支持。 #59965 (Nikita Taranov)。
  • 允许从不同的磁盘附加 parts(使用复制而不是硬链接)。 #60112 (Unalian)。
  • 大小受限的 Memory 表:由其设置 min_bytes_to_keepmax_bytes_to_keepmin_rows_to_keepmax_rows_to_keep 控制。 #60612 (Jake Bamrah)。
  • 分离了等待和执行查询的数量限制。 添加了新的服务器设置 max_waiting_queries,用于限制由于 async_load_databases 而等待的查询数量。 现有执行查询数量的限制不再计算等待查询。 #61053 (Sergei Trifonov)。
  • 添加了一个表 system.keywords,其中包含来自解析器的所有关键字。 主要需要并用于更好的模糊测试和语法突出显示。 #51808 (Nikita Mikhaylov)。
  • 添加对 ATTACH PARTITION ALL 的支持。 #61107 (Kirill Nikiforov)。
  • 添加新函数 getClientHTTPHeader。 这解决了 #54665 问题。 与 @lingtaolf 共同完成。 #61820 (Alexey Milovidov)。
  • 添加 generate_series 作为表函数(PostgreSQL 的兼容性别名,对应现有的 numbers 函数)。 此函数生成包含自然数等差数列的表。 #59390 (divanik)。
  • topK/topkWeighed 添加支持模式,该模式返回值的计数及其误差。 #54508 (UnamedRus)。
  • 添加函数 toMillisecond,该函数返回 DateTimeDateTime64 类型值的毫秒部分。 #60281 (Shaun Struwig)。
  • 允许为 clickhouse-server 配置 HTTP 重定向处理程序。 例如,您可以将 / 重定向到 Play UI。 #60390 (Alexey Milovidov)。

性能提升

  • 优化函数 dotProduct 以省略不必要的且昂贵的内存复制。 #60928 (Robert Schulze)。
  • 256 位整数的打印速度提升 30 倍。 #61100 (Raúl Marín)。
  • 如果表的主键包含大多无用的列,则不要将其保存在内存中。 这由新设置 primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns 控制,默认值为 0.9,这意味着:对于复合主键,如果某一列的值在至少 0.9 的时间内发生变化,则其后的列将不会被加载。 #60255 (Alexey Milovidov)。
  • 提高涉及多个 Nullable 列时序列化聚合方法的性能。 #55809 (Amos Bird)。
  • 延迟构建 JSON 输出,以提高 ALL JOIN 的性能。 #58278 (LiuNeng)。
  • 使与外部服务(如 AWS S3)的 HTTP/HTTPS 连接在所有用例中可重用。 即使响应为 3xx 或 4xx。 #58845 (Sema Checherinda)。
  • 改进聚合函数 argMin / argMax / any / anyLast / anyHeavy,以及 ORDER BY {u8/u16/u32/u64/i8/i16/u32/i64) LIMIT 1 查询。 #58640 (Raúl Marín)。
  • 列过滤器的微小优化。 在某些情况下,峰值内存可以减少到原来的 44%。 #59698 (李扬)。
  • 当结果类型的底层类型为数字时,以列式方式执行 multiIf 函数。 #60384 (李扬)。
  • 更快的(几乎快 2 倍)互斥锁。 #60823 (Azat Khuzhin)。
  • 当分布式查询完成时,并行耗尽多个连接。 #60845 (lizhuoyu5)。
  • 优化 Nullable 数字或 Nullable 字符串列之间的数据移动,从而改善一些微基准测试。 #60846 (李扬)。
  • 文件系统缓存的操作将减少锁竞争的影响。 #61066 (Alexey Milovidov)。
  • 通过防止错误的编译器优化来优化数组 JOIN 和其他 JOIN。 关闭 #61074#61075 (李扬)。
  • 如果包含语法错误的查询包含带有正则表达式的 COLUMNS 匹配器,则每次在解析器的回溯期间都会编译该正则表达式,而不是只编译一次。 这是一个根本性的错误。 编译后的正则表达式被放入 AST 中。 但 AST 中的字母 A 代表 "abstract"(抽象),这意味着它不应包含重量级对象。 AST 的部分可以在解析期间创建和丢弃,包括大量的回溯。 这导致解析端速度变慢,并因此允许只读用户进行 DoS 攻击。 但主要问题是它阻碍了模糊测试的进展。 #61543 (Alexey Milovidov)。
  • 添加新的分析器通道以优化单个值的 IN 运算符。 #61564 (LiuNeng)。
  • DNSResolver 混洗解析后的 IP 集合,这是均匀利用 AWS S3 的多个端点所必需的。 #60965 (Sema Checherinda)。

实验性功能

  • 支持 Azure blob 存储的并行读取。 这提高了实验性 Azure 对象存储的性能。 #61503 (SmitaRKulkarni)。
  • 为 Azure blob 存储添加类似于 S3 的异步 WriteBuffer。 这提高了实验性 Azure 对象存储的性能。 #59929 (SmitaRKulkarni)。
  • 使用托管身份进行备份 IO,当使用 Azure Blob Storage 时。 添加一个设置以阻止 ClickHouse 尝试创建不存在的容器,这需要在存储帐户级别具有权限。 #61785 (Daniel Pozo Escalona)。
  • 添加设置 parallel_replicas_allow_in_with_subquery = 1,允许 IN 子查询与并行副本一起工作。 #60950 (Nikolai Kochetov)。
  • 零拷贝复制的更改:当删除表时,必须删除与表相关的所有零拷贝锁。 包含这些锁的目录也必须删除。 #57575 (Sema Checherinda)。

改进

  • 使用 MergeTree 作为默认表引擎。 #60524 (Alexey Milovidov)
  • 默认启用 output_format_pretty_row_numbers。 这对于可用性更好。 #61791 (Alexey Milovidov)。
  • 在之前的版本中,Pretty 格式中的某些数字不够美观。 #61794 (Alexey Milovidov)。
  • 如果 Pretty 格式中的长值是结果集中的单个值,例如在 SHOW CREATE TABLE 查询的结果中,则不会被截断。 #61795 (Alexey Milovidov)。
  • clickhouse-local 类似,clickhouse-client 将接受 --output-format 选项作为 --format 选项的同义词。 这解决了 #59848 问题。 #61797 (Alexey Milovidov)。
  • 如果 stdout 是终端且未指定输出格式,则 clickhouse-client 和类似工具将默认使用 PrettyCompact,类似于交互模式。 clickhouse-clientclickhouse-local 将以统一的方式处理输入和输出格式的命令行参数。 这解决了 #61272 问题。 #61800 (Alexey Milovidov)。
  • 在 Pretty 格式中使用下划线数字组以提高可读性。 这由新设置 output_format_pretty_highlight_digit_groups 控制。 #61802 (Alexey Milovidov)。
  • 添加通过 SYSTEM FLUSH DISTRIBUTED 覆盖初始 INSERT 设置的功能。 #61832 (Azat Khuzhin)。
  • 默认启用处理器性能分析(排序、聚合等的时间消耗/输入和输出字节数)。 #61096 (Azat Khuzhin)。
  • 在文件系统数据库中支持没有格式扩展名的文件。 #60795 (Kruglov Pavel)。
  • 使所有格式名称不区分大小写,例如 Tsv、TSV、tsv,甚至 rowbinary。 #60420 (豪肥肥)。 如果您能继续正确书写,例如 JSON 😇,而不是 Json 🤮,我将不胜感激,但如果您喜欢其他拼写方式,我们也不介意。
  • distributed_ddl_output_mode 设置添加 none_only_active 模式。 #60340 (Alexander Tokmakov)。
  • 高级仪表板的多行图表颜色略有改善。 #60391 (Alexey Milovidov)。
  • 高级仪表板现在在滚动时始终显示控件。 这允许您在不向上滚动的情况下添加新图表。 #60692 (Alexey Milovidov)。
  • 在为物化视图运行 MODIFY COLUMN 查询时,检查内部表的结构以确保每列都存在。 #47427 (sunny)。
  • 字符串类型和枚举类型可以在同一上下文中使用,例如:数组、UNION 查询、条件表达式。 这解决了 #60726 问题。 #60727 (Alexey Milovidov)。
  • 允许在查询处理的外部数据结构中声明枚举(这是一个您可以为查询提供的即时临时表)。 #57857 (Duc Canh Le)。
  • 在选择要合并的分区时,考虑轻量级删除的行,以便更好地估计结果分区磁盘大小。 #58223 (Zhuo Qiu)。
  • 为更多系统表的列添加注释。 https://github.com/ClickHouse/ClickHouse/pull/58356 的延续。 #59016 (Nikita Mikhaylov)。
  • 现在我们可以在 PREWHERE 中使用虚拟列。 这对于非 const 虚拟列(如 _part_offset)很有价值。 #59033 (Amos Bird)。 改进了虚拟列的整体可用性。 现在允许在 PREWHERE 中使用虚拟列(对于非 const 虚拟列(如 _part_offset)很有价值)。 现在,内置文档可用于虚拟列,作为 DESCRIBE 查询中启用设置 describe_include_virtual_columns 的列的注释。 #60205 (Anton Popov)。
  • 对象存储不再使用常量密钥,而是生成密钥来确定删除对象的能力。 #59495 (Sema Checherinda)。
  • 允许使用 "local" 作为对象存储类型,而不是 "local_blob_storage"。 #60165 (Kseniia Sumarokova)。
  • DETACH/服务器关闭和 SYSTEM FLUSH DISTRIBUTED 时并行刷新 Distributed 引擎的挂起 INSERT 块(只有当表具有多磁盘策略时,并行才会工作(就像现在 Distributed 引擎中的所有内容一样))。 #60225 (Azat Khuzhin)。
  • 添加一个设置以强制为合并操作使用读取穿透缓存。 #60308 (Kseniia Sumarokova)。
  • MySQL 兼容性协议的改进。 问题 #57598 提到了关于事务处理的变体行为。 当没有活动事务时发出的 COMMIT/ROLLBACK 被报告为错误,这与 MySQL 的行为相反。 #60338 (PapaToemmsn)。
  • 函数 substring 现在有一个新的别名 byteSlice#60494 (Robert Schulze)。
  • 将服务器设置 dns_cache_max_size 重命名为 dns_cache_max_entries 以减少歧义。 #60500 (Kirill Nikiforov)。
  • SHOW INDEX | INDEXES | INDICES | KEYS 不再按主键列排序(这是违反直觉的)。 #60514 (Robert Schulze)。
  • Keeper 改进:在启动期间检测到无效快照时中止,以避免数据丢失。 #60537 (Antonio Andelic)。
  • 将 tzdata 更新到 2024a。 #60768 (Raúl Marín)。
  • Keeper 改进:在 Keeper 的设置中支持 leadership_expiry_ms#60806 (Brokenice0415)。
  • 始终推断 JSON 格式中的指数数字,而与设置 input_format_try_infer_exponent_floats 无关。 添加设置 input_format_json_use_string_type_for_ambiguous_paths_in_named_tuples_inference_from_objects,允许对命名元组从 JSON 对象推断中的模糊路径使用 String 类型,而不是抛出异常。 #60808 (Kruglov Pavel)。
  • 添加通常在 MySQL 语法中使用的 START TRANSACTION 语法支持,解决 https://github.com/ClickHouse/ClickHouse/discussions/60865 问题。 #60886 (Zach Naimon)。
  • 为全排序合并连接算法添加一个标志,将 null 视为最大/最小。 因此,该行为可以与其他 SQL 系统(如 Apache Spark)兼容。 #60896 (loudongfeng)。
  • 支持在 clickhouse-clientclickhouse-local 中通过文件扩展名检测输出格式。 #61036 (豪肥肥)。
  • 当 Linux 的 CGroups 值更改时,在运行时更新内存限制。 #61049 (Han Fei)。
  • 添加函数 toUInt128OrZero,这是由于错误而遗漏的(该错误与 https://github.com/ClickHouse/ClickHouse/pull/945 有关)。 兼容性别名 FROM_UNIXTIMEDATE_FORMAT(它们不是 ClickHouse 原生的,仅为了 MySQL 兼容性而存在)已设为不区分大小写,正如 SQL 兼容性别名所期望的那样。 #61114 (Alexey Milovidov)。
  • 改进了访问检查,允许在目标用户也没有撤销权限的情况下撤销未拥有的权限。 示例:GRANT SELECT ON *.* TO user1; REVOKE SELECT ON system.* FROM user1;#61115 (pufit)。
  • 修复带有 Nullable 列的 has() 函数(修复 #60214)。 #61249 (Mikhail Koviazin)。
  • 现在可以在配置替换中为子树 <include from_zk="/path" merge="true"> 指定属性 merge="true"。 如果指定此属性,clickhouse 将子树与现有配置合并,否则默认行为是将新内容附加到配置。 #61299 (alesapin)。
  • 为虚拟内存映射添加异步指标:VMMaxMapCountVMNumMaps。 关闭 #60662 问题。 #61354 (Tuan Pham Anh)。
  • 在创建临时数据的所有位置使用 temporary_files_codec 设置,例如外部内存排序和外部内存 GROUP BY。 之前它仅在 partial_merge JOIN 算法中有效。 #61456 (Maksim Kita)。
  • 添加新设置 max_parser_backtracks,允许限制查询解析的复杂性。 #61502 (Alexey Milovidov)。
  • 减少文件系统缓存动态调整大小期间的争用。 #61524 (Kseniia Sumarokova)。
  • 禁用 StorageS3 队列的分片模式,因为它将被重写。 #61537 (Kseniia Sumarokova)。
  • 修复拼写错误:从 use_leagcy_max_leveluse_legacy_max_level#61545 (William Schoeffel)。
  • 删除 system.blob_storage_log 中的一些重复条目。 #61622 (YenchangChan)。
  • 添加 current_user 函数作为 MySQL 的兼容性别名。 #61770 (Yarik Briukhovetskyi)。
  • 修复混合 x86-64 / ARM 集群中浮点聚合函数状态不一致的问题 #60610 (Harry Lee)。

构建/测试/打包改进

Bug 修复(官方稳定版本中用户可见的错误行为)

ClickHouse 24.2 版本发布,2024-02-29

向后不兼容的变更

  • 验证嵌套类型中可疑/实验性类型。 之前,我们没有验证嵌套类型(如 Array/Tuple/Map)中的此类类型(JSON 除外)。 #59385 (Kruglov Pavel)。
  • 为线程数和块大小添加健全性检查。 #60138 (Raúl Marín)。
  • 默认情况下,不要推断指数表示法中的浮点数。 添加设置 input_format_try_infer_exponent_floats,这将恢复之前的行为(默认禁用)。 关闭 #59476#59500 (Kruglov Pavel)。
  • 允许 alter 操作被括号包围。 括号的发出可以通过 format_alter_operations_with_parentheses 配置来控制。 默认情况下,在格式化的查询中,括号会被发出,因为我们将格式化的 alter 操作作为元数据存储在某些地方(例如:mutations)。 新语法澄清了一些 alter 操作以列表结尾的查询。 例如:ALTER TABLE x MODIFY TTL date GROUP BY a, b, DROP COLUMN c 在旧语法中无法正确解析。 在新语法中,查询 ALTER TABLE x (MODIFY TTL date GROUP BY a, b), (DROP COLUMN c) 是显而易见的。 较旧的版本无法读取新语法,因此如果在单个集群中混合使用较新和较旧版本的 ClickHouse,则使用新语法可能会导致问题。 #59532 (János Benjamin Antal)。
  • 修复物化视图的安全问题,该问题允许用户在没有所需权限的情况下插入表。 此修复验证用户不仅有权插入物化视图,还有权插入所有底层表。 这意味着以前可以正常工作的一些查询现在可能会失败,并显示 Not enough privileges 错误。 为了解决这个问题,此版本为视图引入了一个新的 SQL 安全功能 https://clickhouse.ac.cn/docs/en/sql-reference/statements/create/view#sql_security#54901 #60439 (pufit)。

新功能

  • 添加了新语法,允许在 View/Materialized View 中指定 definer 用户。 这允许从视图执行 selects/inserts,而无需底层表的显式授权。 因此,View 将封装授权。 #54901 #60439 (pufit)。
  • 如果在 file/s3/hdfs/url/azureBlobStorage 引擎中文件格式未知,则在模式推断期间尝试自动检测文件格式。 关闭 #50576#59092 (Kruglov Pavel)。
  • 实现异步插入超时自动调整。 引入以下设置:async_insert_poll_timeout_ms、async_insert_use_adaptive_busy_timeout、async_insert_busy_timeout_min_ms、async_insert_busy_timeout_max_ms、async_insert_busy_timeout_increase_rate、async_insert_busy_timeout_decrease_rate。 #58486 (Julia Kartseva)。
  • 允许为最大连续登录失败次数设置配额。 #54737 (Alexey Gerasimchuck)。
  • 一个新的聚合函数 groupArrayIntersect。 跟进: #49862#59598 (Yarik Briukhovetskyi)。
  • AzureBlobStorage 的备份和恢复支持。 解决 #50747#56988 (SmitaRKulkarni)。
  • 用户现在可以使用 format_schema_rows_template 在查询中直接指定模板字符串,作为 format_template_row 的替代方案。 关闭 #31363#59088 (Shaun Struwig)。
  • 实现了将不同类型的 MergeTree 表自动转换为复制引擎的功能。 在表的数据目录 (/clickhouse/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/) 中创建空的 convert_to_replicated 文件,该表将在下次服务器启动时自动转换。 #57798 (Kirill)。
  • 添加了查询 ALTER TABLE table FORGET PARTITION partition,用于删除与空分区相关的 ZooKeeper 节点。 #59507 (Sergei Trifonov)。 这是一个专家级功能。
  • 支持 NATS 表引擎的 JWT 凭据文件。 #59543 (Nickolaj Jepsen)。
  • 实现了 system.dns_cache 表,这对于调试 DNS 问题很有用。 #59856 (Kirill Nikiforov)。
  • 编解码器 LZ4HC 将接受新的 2 级,它比之前的最低级别 3 更快,但压缩率较低。 在以前的版本中,LZ4HC(2) 及更低级别与 LZ4HC(3) 相同。 作者: Cyan4973#60090 (Alexey Milovidov)。
  • 实现了 system.dns_cache 表,这对于调试 DNS 问题很有用。 新的服务器设置 dns_cache_max_size。 #60257 (Kirill Nikiforov)。
  • 支持 merge 表函数的单参数版本,如 merge(['db_name', ] 'tables_regexp')#60372 (豪肥肥)。
  • 支持负位置参数。 关闭 #57736#58292 (flynn)。
  • 支持在配置中使用 user 键为特定的 S3 设置指定一组允许的用户。 #60144 (Antonio Andelic)。
  • 添加了表函数 mergeTreeIndex。 它表示 MergeTree 表的索引和标记文件的内容。 它可用于内省。 语法:mergeTreeIndex(database, table, [with_marks = true]),其中 database.table 是具有 MergeTree 引擎的现有表。 #58140 (Anton Popov)。

实验性功能

  • 添加了函数 seriesOutliersDetectTukey,以使用 Tukey 的围栏算法检测序列数据中的异常值。 #58632 (Bhavna Jindal)。 请注意,行为将在下一个补丁版本中更改。
  • 添加函数 variantType,该函数为每一行返回带有变体类型名称的 Enum。 #59398 (Kruglov Pavel)。
  • 支持并行副本的 LEFT JOINALL INNER JOIN 和简单子查询(仅限分析器)。 新设置 parallel_replicas_prefer_local_join 选择本地 JOIN 执行(默认)与 GLOBAL JOIN。 所有表都应存在于 cluster_for_parallel_replicas 中的每个副本上。 新设置 min_external_table_block_size_rowsmin_external_table_block_size_bytes 用于压缩为临时表发送的小块(仅限分析器)。 #58916 (Nikolai Kochetov)。
  • 允许在添加或恢复新副本期间在 Replicated 数据库中并发创建表。 #59277 (Konstantin Bogdanov)。
  • Variant 值实现比较运算符,并将正确的 Field 插入到 Variant 列中。 默认情况下不允许创建具有相似变体类型的 Variant 类型(允许使用设置 allow_suspicious_variant_types)。 关闭 #59996。 关闭 #59850#60198 (Kruglov Pavel)。
  • 禁用带有 CTE 的并行副本 JOIN(非分析器) #59239 (Raúl Marín)。

性能提升

  • 主键将使用更少的内存。 #60049 (Alexey Milovidov)。
  • 改进主键和某些其他操作的内存使用量。 #60050 (Alexey Milovidov)。
  • 表的主键将在首次访问时延迟加载到内存中。 这由新的 MergeTree 设置 primary_key_lazy_load 控制,默认情况下该设置处于启用状态。 这提供了几个优点:- 对于未使用的表,不会加载主键;- 如果内存不足,则会在首次使用时而不是在服务器启动时抛出异常。 这提供了一些缺点:- 加载主键的延迟将在首次查询时而不是在接受连接之前支付; 这理论上可能会引入惊群效应问题。 这关闭了 #11188#60093 (Alexey Milovidov)。
  • 用于向量搜索的向量化距离函数。 #58866 (Robert Schulze)。
  • 向量化函数 dotProduct,它对向量搜索很有用。 #60202 (Robert Schulze)。
  • dictGetOrDefault 函数添加短路能力。 关闭 #52098#57767 (jsc0218)。
  • Keeper 改进:仅缓存由 latest_logs_cache_size_thresholdcommit_logs_cache_size_threshold 控制的特定数量的内存日志。 #59460 (Antonio Andelic)。
  • Keeper 改进:进一步减小数据节点的大小。 #59592 (Antonio Andelic)。
  • 继续优化当结果类型为 Float*/Decimal*/*Int*if 函数的分支未命中,跟进 https://github.com/ClickHouse/ClickHouse/pull/57885#59148 (李扬)。
  • 当输入类型为 Map 时优化 if 函数,速度提升高达约 10 倍。 #59413 (李扬)。
  • 通过实现严格别名化来提高 Int8 类型的性能(我们已经为 UInt8 和所有其他整数类型实现了严格别名化)。 #59485 (Raúl Marín)。
  • 通过减少分支未命中来优化 bigint 和 big decimal 类型的条件 sum/avg 的性能。 #59504 (李扬)。
  • 提高具有活动 mutations 的 SELECT 查询的性能。 #59531 (Azat Khuzhin)。
  • 使用 AVX2 优化函数 isNotNull#59621 (李扬)。
  • 提高 ASOF JOIN 在排序或几乎排序数据上的性能。 #59731 (Maksim Kita)。
  • 之前的默认值 async_insert_max_data_size 等于 1 MB,这显得太小了。 新的值将为 10 MiB。 #59536 (Nikita Mikhaylov)。
  • 在执行 RESTORE 命令时,使用多线程从备份中读取表的元数据。 #60040 (Vitaly Baranov)。
  • 现在,如果 StorageBuffer 有多个分片 (num_layers > 1),则后台刷新将为所有分片同时在多个线程中发生。 #60111 (alesapin)。

改进

  • 当输出格式为 Pretty 格式且块由超过一百万的单个数值组成时,将在表格右侧打印可读的数字。 #60379 (rogeryk)。
  • 添加了设置 split_parts_ranges_into_intersecting_and_non_intersecting_finalsplit_intersecting_parts_ranges_into_layers_final。 这些设置用于禁用针对带有 FINAL 的查询的优化,仅用于调试。 #59705 (Maksim Kita)。 实际上不仅如此 - 它们还可以降低内存使用量,但会牺牲性能。
  • 将设置 extract_kvp_max_pairs_per_row 重命名为 extract_key_value_pairs_max_pairs_per_row。 问题(设置名称中不必要的缩写)在 https://github.com/ClickHouse/ClickHouse/pull/43606 中引入。 修复此设置的文档。 #59683 (Alexey Milovidov)。 #59960 (jsc0218)。
  • 在具有 DEFAULTMATERIALIZED 表达式的列上运行 ALTER COLUMN MATERIALIZE 现在可以精确地遵循语义。 #58023 (Duc Canh Le)。
  • 为 mutations 期间的错误启用了指数退避逻辑。 这将减少 CPU 使用率、内存使用率和日志文件大小。 #58036 (MikhailBurdukov)。
  • 添加了改进以计数 InitialQuery Profile Event。 #58195 (Unalian)。
  • 允许在 storage_configuration 中定义 volume_priority#58533 (Andrey Zvonov)。
  • T64 编解码器中添加对 Date32 类型的支持。 #58738 (Hongbin Ma)。
  • 允许在具有多个项目的类型中使用尾随逗号。 #59119 (Aleksandr Musorin)。
  • Distributed 表引擎的设置现在可以在服务器配置文件中指定(类似于 MergeTree 设置),例如 <distributed> <flush_on_detach>false</flush_on_detach> </distributed>#59291 (Azat Khuzhin)。
  • 在读取 system.zookeeper 时重试断开连接和过期的会话。 这有助于从 system.zookeeper 表中读取许多行,尤其是在存在故障注入断开连接的情况下。 #59388 (Alexander Gololobov)。
  • input_format_values_interpret_expressions=0 时,不要将前导零的数字解释为八进制数。 #59403 (Joanna Hulboj)。
  • 在启动时和配置文件更改时,ClickHouse 会更新其总内存跟踪器的硬内存限制。 这些限制基于各种服务器设置和 cgroups 限制(在 Linux 上)计算得出。 以前,设置 /sys/fs/cgroup/memory.max(对于 cgroups v2)是硬编码的。 因此,为嵌套组(层次结构)配置的 cgroup v2 内存限制(例如 /sys/fs/cgroup/my/nested/group/memory.max)被忽略了。 现在已修复。 v1 内存限制的行为保持不变。 #59435 (Robert Schulze)。
  • 添加了新的 profile events,用于观察在 INSERT 期间计算 PK/projections/二级索引所花费的时间。 #59436 (Nikita Taranov)。
  • 允许使用设置 s3queue_last_processed_path 在创建时为有序模式的 S3Queue 定义起始点。 #59446 (Kseniia Sumarokova)。
  • 使系统表的注释也在 clickhouse-localsystem.tables 中可用。 #59493 (Nikita Mikhaylov)。
  • system.zookeeper 表:以前,整个结果都累积在内存中并作为一个大块返回。 此更改应有助于减少从 system.zookeeper 读取大量行时的内存消耗,允许显示中间进度(到目前为止已读取多少行),并避免在结果集很大时遇到连接超时。 #59545 (Alexander Gololobov)。
  • 现在,仪表板可以理解 URL 的 #hash 的压缩和未压缩状态(向后兼容性)。 #59124 的延续。 #59548 (Amos Bird)。
  • 将 Intel QPL(由编解码器 DEFLATE_QPL 使用)从 v1.3.1 升级到 v1.4.0。 此外,修复了轮询超时机制的错误,因为我们观察到在某些情况下超时无法正常工作,如果发生超时,IAA 和 CPU 可能会同时处理缓冲区。 到目前为止,我们最好确保 IAA 编解码器状态不是 QPL_STS_BEING_PROCESSED,然后回退到 SW 编解码器。 #59551 (jasperzhu)。
  • 不要在 ClickHouse Cloud 中显示有关服务器版本的警告,因为 ClickHouse Cloud 会自动处理无缝升级。 #59657 (Alexey Milovidov)。
  • 自解压后,临时二进制文件将被移动而不是复制。 #59661 (Yakov Olkhovskiy)。
  • 修复 Apple macOS 上的堆栈展开。 这关闭了 #53653#59690 (Nikita Mikhaylov)。
  • 即使使用者将 max_parser_depth 设置错误配置为非常高的值,也要检查解析器中的堆栈溢出。 这关闭了 #59622#59697 (Alexey Milovidov)。 #60434
  • 统一 Kafka 存储中 XML 和 SQL 创建的命名集合行为。 #59710 (Pervakov Grigorii)。
  • 如果 merge_max_block_size_bytes 足够小,并且表包含宽行(字符串或元组),则后台合并可能会陷入无限循环。 此行为已修复。 跟进 https://github.com/ClickHouse/ClickHouse/pull/59340#59812 (Nikita Mikhaylov)。
  • 如果 CREATE TABLE 显式包含 uuid,则允许在 replica_path 中使用 uuid。 #59908 (Azat Khuzhin)。
  • system.tables 系统表中添加 ReplicatedMergeTree 表的 metadata_version 列。 #59942 (Maksim Kita)。
  • Keeper 改进:仅为 Prometheus 发送 Keeper 相关的指标/事件。 #59945 (Antonio Andelic)。
  • 即使在升级后系统表的结构发生更改,仪表板也将显示不同 ClickHouse 版本之间的指标。 #59967 (Alexey Milovidov)。
  • 允许从文件加载 AZ 信息。 #59976 (Konstantin Bogdanov)。
  • Keeper 改进: 为磁盘相关操作添加失败重试机制。 #59980 (Antonio Andelic).
  • 添加新的配置设置 backups.remove_backup_files_after_failure: <clickhouse> <backups> <remove_backup_files_after_failure>true</remove_backup_files_after_failure> </backups> </clickhouse>#60002 (Vitaly Baranov).
  • 复制 S3 文件,当 GCP 返回 Internal Error 错误码且 HTTP 错误代码为 GATEWAY_TIMEOUT 时,回退到缓冲区复制。 #60164 (Maksim Kita).
  • ULIDStringToDateTime 增加短路执行优化。 #60211 (Juan Madurga).
  • 为表 system.backupssystem.backup_log 添加了 query_id 列。为 error 列添加了错误堆栈跟踪信息。 #60220 (Maksim Kita).
  • 通过 MySQL 端口的连接现在会自动运行设置 prefer_column_name_to_alias = 1,以支持开箱即用的 QuickSight。此外,设置 mysql_map_string_to_text_in_show_columnsmysql_map_fixed_string_to_text_in_show_columns 现在默认启用,也仅影响 MySQL 连接。这提高了与更多 BI 工具的兼容性。 #60365 (Robert Schulze).
  • 修复了 JavaScript 代码中的竞争条件,该条件导致图表在彼此之上重复出现。 #60392 (Alexey Milovidov).

构建/测试/打包改进

  • 添加了带有内省功能的覆盖率收集的构建和测试。是 #56102 的延续。 #58792 (Alexey Milovidov).
  • 当设置 CMake 交叉编译工具链变量时,更新 corrosion-cmake 中的 Rust 工具链。 #59309 (Aris Tritas).
  • 为 ASTLiterals 添加了一些模糊测试。 #59383 (Raúl Marín).
  • 如果您希望在每次 ClickHouse 容器启动时都运行 initdb 脚本,您应该初始化环境变量 CLICKHOUSE_ALWAYS_RUN_INITDB_SCRIPTS。 #59808 (Alexander Nikolaev).
  • 移除禁用通用 ClickHouse 组件(如 server/client/...)的能力,但保留一些需要额外库的组件(如 ODBC 或 keeper)。 #59857 (Azat Khuzhin).
  • 查询模糊器将在查询内部模糊测试 SETTINGS。 #60087 (Alexey Milovidov).
  • 添加了对使用 clang-19 (master) 构建 ClickHouse 的支持。 #60448 (Alexey Milovidov).

Bug Fix (官方稳定版本中用户可见的错误行为)

  • 修复了 TTL WHERE 中的 "Non-ready set" 错误。 #57430 (Nikolai Kochetov).
  • 修复了 quantilesGK 函数中的一个错误 #58216 (李扬).
  • 修复了 Decimal 参数的 intDiv 的错误行为 #59243 (Yarik Briukhovetskyi).
  • 修复了使用 FixedString 输入的 translate 函数 #59356 (Raúl Marín).
  • 修复了 Keeper 中的摘要计算 #59439 (Antonio Andelic).
  • 修复了没有调试符号的二进制文件的堆栈跟踪 #59444 (Azat Khuzhin).
  • 修复了列特定设置情况下的 ASTAlterCommand::formatImpl ... #59445 (János Benjamin Antal).
  • 修复了 Analyzer 中 SELECT * FROM [...] ORDER BY ALL 的问题 #59462 (zhongyuankai).
  • 修复了分布式查询取消期间可能发生的未捕获异常 #59487 (Azat Khuzhin).
  • 使 MAX 对复杂类型使用与 permutation 相同的规则 #59498 (Raúl Marín).
  • 修复了传递 update_insert_deduplication_token_in_dependent_materialized_views 时的边界情况 #59544 (Jordi Villar).
  • 修复了在空值上使用 arrayElement / map 的错误结果 #59594 (Raúl Marín).
  • 修复了合并空状态时 topK 中的崩溃问题 #59603 (Raúl Marín).
  • 修复了带有常量分片键的分布式表 #59606 (Vitaly Baranov).
  • 修复了 WingFuzz 发现的 KQL 问题 #59626 (Yong Wang).
  • 修复了 AsynchronousBoundedReadBuffer 的错误 "Read beyond last offset" #59630 (Vitaly Baranov).
  • 在 RewriteSumFunctionWithSumAndCountVisitor 中维护函数别名 #59658 (Raúl Marín).
  • 修复了非初始查询的查询开始时间 #59662 (Raúl Marín).
  • 验证 minmax 跳数索引的参数类型 #59733 (Anton Popov).
  • 修复了使用 FixedString 输入的 leftPad / rightPad 函数 #59739 (Raúl Marín).
  • 修复了函数 countMatches 中的 AST 模糊器问题 #59752 (Robert Schulze).
  • RabbitMQ: 修复了既没有 acked 也没有 nacked 消息的问题 #59775 (Kseniia Sumarokova).
  • 修复了 StorageURL 在单线程中执行部分查询执行的问题 #59833 (Michael Kolupaev).
  • S3Queue: 修复了未初始化的值 #59897 (Kseniia Sumarokova).
  • 修复了解析由括号包围的分区表达式的问题 #59901 (János Benjamin Antal).
  • 修复了通过 HTTP 的 JSONColumnsWithMetadata 格式中的崩溃问题 #59925 (Kruglov Pavel).
  • 如果 Analyzer 中返回值不同,则不要将 sum 重写为 count #59926 (Azat Khuzhin).
  • UniqExactSet 读取崩溃修复 #59928 (Maksim Kita).
  • ReplicatedMergeTree 无效的 metadata_version 修复 #59946 (Maksim Kita).
  • 修复了 StorageDistributed 中的数据竞争 #59987 (Nikita Taranov).
  • Docker: 在启用选项而不是禁用时运行 init 脚本 #59991 (jktng).
  • 修复了使用单引号 INSERT 到 SQLite 的问题 (通过用引号转义单引号而不是反斜杠) #60015 (Azat Khuzhin).
  • 修复了 arrayFold 中的几个逻辑错误 #60022 (Raúl Marín).
  • 修复了 optimize_uniq_to_count 移除列别名的问题 #60026 (Raúl Marín).
  • 修复了在删除时 S3Queue 表可能出现的异常 #60036 (Kseniia Sumarokova).
  • 修复了带有单个字面量的 NOT 的格式化问题 #60042 (Raúl Marín).
  • 在 DDLLogEntry 中使用来自上下文的 max_query_size,而不是硬编码的 4096 #60083 (Kruglov Pavel).
  • 修复了包含名为 table 的表的查询的不一致格式化。修复了当 UNION ALL, INTERSECTEXCEPT 的结构不是线性时,它们的错误格式化。这关闭了 #52349。修复了 SYSTEM 查询的错误格式化,包括 SYSTEM ... DROP FILESYSTEM CACHE, SYSTEM ... REFRESH/START/STOP/CANCEL/TEST VIEW, SYSTEM ENABLE/DISABLE FAILPOINT。修复了参数化 DDL 查询的格式化。修复了 DESCRIBE FILESYSTEM CACHE 查询的格式化。修复了 SET param_... (设置参数的查询) 的错误格式化。修复了 CREATE INDEX 查询的错误格式化。修复了 CREATE USER 和类似查询的不一致格式化。修复了 CREATE SETTINGS PROFILE 的不一致格式化。修复了 ALTER ... MODIFY REFRESH 的错误格式化。修复了如果帧偏移是表达式,则窗口函数的不一致格式化。修复了如果在实现运算符的函数 (例如 plus) 之后使用 RESPECT NULLSIGNORE NULLS,则它们的不一致格式化。修复了 SYSTEM SYNC REPLICA ... LIGHTWEIGHT FROM ... 的愚蠢格式化。修复了带有 GROUP BY GROUPING SETS ... WITH ROLLUP/CUBE/TOTALS 的无效查询的不一致格式化。修复了 GRANT CURRENT GRANTS 的不一致格式化。修复了 CREATE TABLE (... COLLATE) 的不一致格式化。此外,我修复了子查询中 EXPLAIN 的不正确格式化 (#60102)。修复了 lambda 函数的不正确格式化 (#60012)。添加了检查,因此将来不可能忽略这些可憎之物。 #60095 (Alexey Milovidov).
  • 修复了子查询中 explain 的不一致格式化 #60102 (Alexey Milovidov).
  • 修复了带有 Nullable 的 cosineDistance 崩溃问题 #60150 (Raúl Marín).
  • 允许将字符串表示形式中的布尔值强制转换为 true 布尔值 #60160 (Robert Schulze).
  • 修复了 system.s3queue_log #60166 (Kseniia Sumarokova).
  • 修复了带有可空聚合函数名称的 arrayReduce #60188 (Raúl Marín).
  • 隐藏 S3Queue 的敏感信息 #60233 (Kseniia Sumarokova).
  • 修复了 http 异常代码。 #60252 (Austin Kothig).
  • S3Queue: 修复了一个 bug (也修复了不稳定的 test_storage_s3_queue/test.py::test_shards_distributed) #60282 (Kseniia Sumarokova).
  • 修复了带有 IPv6 的哈希函数中 use-of-uninitialized-value 和无效结果的问题 #60359 (Kruglov Pavel).
  • 修复了带有 null 参数的 OptimizeDateOrDateTimeConverterWithPreimageVisitor #60453 (Raúl Marín).
  • 修复了一个小 bug,该 bug 阻止了从 KQL 或 PRQL 方言客户端发送的分布式表查询在副本上执行。 #59674. #60470 (Alexey Milovidov) #59674 (Austin Kothig).

ClickHouse 24.1 版本,2024-01-30

向后不兼容的变更

  • 设置 print_pretty_type_names 默认开启。您可以将其关闭以保持旧的行为,或者 SET compatibility = '23.12'#57726 (Alexey Milovidov).
  • MergeTree 设置 clean_deleted_rows 已弃用,不再起作用。默认情况下不允许 OPTIMIZECLEANUP 关键字 (除非启用 allow_experimental_replacing_merge_with_cleanup)。 #58316 (Alexander Tokmakov).
  • 函数 reverseDNSQuery 不再可用。这关闭了 #58368#58369 (Alexey Milovidov).
  • 启用各种更改以改进配置文件中的访问控制。这些更改会影响行为,您可以查看 access_control_improvements 部分中的 config.xml。如果您不确定,请保持配置文件中的值与先前版本中的值相同。 #58584 (Alexey Milovidov).
  • 改进了 sumMapFiltered 与 NaN 值一起运算的操作。 NaN 值现在被放置在末尾 (而不是随机位置),并且被认为与任何值都不同。 -0 现在也被视为等于 0;由于 0 值被丢弃,-0 值也被丢弃。 #58959 (Raúl Marín).
  • 函数 visibleWidth 将按照文档中的描述运行。在以前的版本中,它只是像 lengthUTF8 函数一样计算字符串序列化后的代码点,但没有考虑零宽度和组合字符、全角字符、制表符和删除符。现在行为已相应更改。如果您想保持旧的行为,请将 function_visible_width_behavior 设置为 0,或将 compatibility 设置为 23.12 或更低版本。 #59022 (Alexey Milovidov).
  • Kusto 方言已被禁用,直到这两个 bug 被修复: #59037#59036#59305 (Alexey Milovidov)。任何使用 Kusto 的尝试都将导致异常。
  • 更高效的 FINAL 修饰符实现不再保证保留顺序,即使 max_threads = 1。如果您依赖以前的行为,请将 enable_vertical_final 设置为 0 或将 compatibility 设置为 23.12

新功能

  • 实现了 Variant 数据类型,它表示其他数据类型的联合。类型 Variant(T1, T2, ..., TN) 意味着此类型的每一行都具有类型 T1T2 或 ... 或 TN 或其中任何一个类型的值 (NULL 值)。Variant 类型在设置 allow_experimental_variant_type 下可用。参考: #54864#58047 (Kruglov Pavel).
  • 某些设置 (目前为 min_compress_block_sizemax_compress_block_size) 现在可以在列级别指定,在列级别它们优先于相应的表级别设置。示例: CREATE TABLE tab (col String SETTINGS (min_compress_block_size = 81920, max_compress_block_size = 163840)) ENGINE = MergeTree ORDER BY tuple();#55201 (Duc Canh Le).
  • 添加了 quantileDD 聚合函数以及相应的 quantilesDDmedianDD。它基于 DDSketch https://www.vldb.org/pvldb/vol12/p2195-masson.pdf。 ### 用户界面更改的文档条目。 #56342 (Srikanth Chekuri).
  • 允许配置任何类型的对象存储和任何类型的元数据类型。 #58357 (Kseniia Sumarokova).
  • distributed_ddl_output_mode 添加了 null_status_on_timeout_only_activethrow_only_active 模式,允许避免等待非活动副本。 #58350 (Alexander Tokmakov).
  • 添加了函数 arrayShingles 来计算子数组,例如 arrayShingles([1, 2, 3, 4, 5], 3) 返回 [[1,2,3],[2,3,4],[3,4,5]]#58396 (Zheng Miao).
  • 添加了字符串相似度函数 punycodeEncode, punycodeDecode, idnaEncodeidnaDecode,这些函数对于根据 IDNA 标准将国际域名转换为 ASCII 表示形式非常有用。 #58454 (Robert Schulze).
  • 添加了字符串相似度函数 dramerauLevenshteinDistance, jaroSimilarityjaroWinklerSimilarity#58531 (Robert Schulze).
  • 添加了两个设置 output_format_compression_level 来更改输出压缩级别,以及 output_format_compression_zstd_window_log 来显式设置压缩窗口大小,并在输出压缩方法为 zstd 时启用 zstd 压缩的长距离模式。应用于 INTO OUTFILE 以及写入表函数 file, url, hdfs, s3azureBlobStorage 时。 #58539 (Duc Canh Le).
  • 如果输出不是终端,则自动禁用 Pretty 格式中的 ANSI 转义序列。为设置 output_format_pretty_color 添加了新的 auto 模式。 #58614 (Shaun Struwig).
  • 添加了解码 Sqids 的函数 sqidDecode#58544 (Robert Schulze).
  • 允许在 JSON 输入格式中将 Bool 值读取为 String。这在默认启用的设置 input_format_json_read_bools_as_strings 下完成。 #58561 (Kruglov Pavel).
  • 添加了函数 seriesDecomposeSTL,它将时间序列分解为季节、趋势和残差分量。 #57078 (Bhavna Jindal).
  • 为 MaterializedMySQL 引入了 MySQL Binlog Client:一个 binlog 连接用于多个数据库。 #57323 (Val Doroshchuk).
  • Intel QuickAssist Technology (QAT) 提供硬件加速的压缩和加密。ClickHouse 获得了一种新的压缩编解码器 ZSTD_QAT,它利用 QAT 进行 zstd 压缩。该编解码器使用 Intel 的 QATlibInte 的 QAT ZSTD 插件。目前,只有压缩可以在硬件中加速 (如果 QAT 无法初始化,则会启动软件回退),解压缩始终在软件中运行。 #57509 (jasperzhu).
  • 实现了为 s3 磁盘生成对象存储键的新方法。现在可以在磁盘描述中使用 key_template 选项以 re2 正则表达式语法定义格式。 #57663 (Sema Checherinda).
  • 表 system.dropped_tables_parts 包含 system.dropped_tables 表 (已删除但尚未移除的表) 的 parts。 #58038 (Yakov Olkhovskiy).
  • 添加了设置 max_materialized_views_size_for_table 以限制附加到表的物化视图的数量。 #58068 (zhongyuankai).
  • clickhouse-format 改进: 支持带有 VALUES 的 INSERT 查询;支持注释 (使用 --comments 输出它们);支持 --max_line_length 选项以仅格式化多行中的长查询。 #58246 (vdimir).
  • clickhouse-local 中附加所有系统表,包括 system.parts。这关闭了 #58312#58359 (Alexey Milovidov).
  • 在函数 transform 中支持 Enum 数据类型。这关闭了 #58241#58360 (Alexey Milovidov).
  • 添加表 system.database_engines#58390 (Bharat Nallan)。允许在代码库中独立注册数据库引擎。 #58365 (Bharat Nallan)。允许独立注册解释器。 #58443 (Bharat Nallan).
  • SYSTEM SYNC REPLICA LIGHTWEIGHT 查询添加了 FROM <Replicas> 修饰符。使用 FROM 修饰符可确保我们仅等待指定源副本以及 ZooKeeper 中不存在或具有空 source_replica 的任何副本的获取和删除范围。 #58393 (Jayme Bird).
  • 添加了设置 update_insert_deduplication_token_in_dependent_materialized_views。此设置允许在依赖的物化视图中插入期间使用表标识符更新插入重复数据删除令牌。关闭了 #59165#59238 (Maksim Kita).
  • 添加了语句 SYSTEM RELOAD ASYNCHRONOUS METRICS,它更新异步指标。主要用于测试和开发。 #53710 (Robert Schulze).

性能改进

  • 为更好的并行性和缓存局部性重写了并行副本的协调。它已在数百个副本上进行了线性可扩展性测试。它还获得了按顺序读取的支持。 #57968 (Nikita Taranov).
  • 使用原生 ClickHouse 缓冲区替换了基于 HTTP 出站缓冲。为接口添加了字节计数指标。 #56064 (Yakov Olkhovskiy).
  • uniqExact 的大型聚合状态将在分布式查询中并行合并。 #59009 (Nikita Taranov).
  • 降低了从 MergeTree 表读取数据后的内存使用量。 #59290 (Anton Popov).
  • 降低了垂直合并中的内存使用量。 #59340 (Anton Popov).
  • 避免了 Keeper 启动期间更多情况下的巨大内存消耗。 #58455 (Antonio Andelic).
  • Keeper 改进: 减少 Keeper 存储节点时的内存使用量。 #59002 (Antonio Andelic).
  • 更缓存友好的 final 实现。关于行为更改的说明:以前,使用 FINAL 修饰符且以单流读取(例如 max_threads = 1)的查询在没有显式提供的 ORDER BY 子句的情况下生成排序后的输出。当 enable_vertical_final = true 时(默认情况下是这样)不再保证这一点。 #54366 (Duc Canh Le).
  • 绕过了 ReadBufferFromIStream 中的额外复制,例如,用于从 S3 读取数据。 #56961 (Nikita Taranov).
  • 优化当输入为 Array(Map)/Array(Array(Num)/Array(Array(String))/Array(BigInt)/Array(Decimal) 时的数组元素函数。之前的实现会进行不必要的内存分配。当输入类型为 Array(Map) 时,优化速度最高可达 ~6 倍。 #56403 (李扬).
  • 在从紧凑部件中读取多个子列时,仅读取列一次。 #57631 (Kruglov Pavel).
  • 重写 sum(column + constant) 函数的 AST(抽象语法树)。这作为一个分析器的优化步骤提供。 #57853 (Jiebin Sun).
  • 函数 match 的求值现在使用跳跃索引 ngrambf_v1tokenbf_v1#57882 (凌涛).
  • 函数 match 的求值现在使用倒排索引。 #58284 (凌涛).
  • MergeTree 的 FINAL 不会比较来自同一非 L0 分区中的行。 #58142 (Duc Canh Le).
  • 加速 iota 调用(用连续数字填充数组)。 #58271 (Raúl Marín).
  • 加速非数值类型的 MIN/MAX 函数。 #58334 (Raúl Marín).
  • 使用 BMI2/SSE 内联函数优化过滤器组合(例如在多阶段 PREWHERE 中)。 #58800 (Zhiguo Zhou).
  • clickhouse-local 中减少使用一个线程。 #58968 (Alexey Milovidov).
  • 提升当类型为 Nullable 时,multiIf 函数的性能。 #57745 (KevinyhZou).
  • 添加 SYSTEM JEMALLOC PURGE 用于清除未使用的 jemalloc 页面,SYSTEM JEMALLOC [ ENABLE | DISABLE | FLUSH ] PROFILE 用于在启用性能分析器时控制 jemalloc 配置文件。在 Keeper 中添加与 jemalloc 相关的 4LW 命令:jmst 用于导出 jemalloc 统计信息,jmfpjmepjmdp 用于在启用性能分析器时控制 jemalloc 配置文件。 #58665 (Antonio Andelic).
  • 降低备份到 S3 的内存消耗。 #58962 (Vitaly Baranov).

改进

  • 为系统表的所有列添加了注释(简要描述)。原因如下: - 我们经常使用系统表,有时开发人员很难理解特定列的用途和含义。 - 我们经常更改(添加新的或修改现有的)系统表,而它们的文档总是过时。例如,看一下 system.parts 的文档页面。它缺少很多列 - 我们希望最终直接从 ClickHouse 生成文档。 #58356 (Nikita Mikhaylov).
  • 允许 PASTE JOIN 的子查询不使用别名。 #58654 (Yarik Briukhovetskyi).
  • 在 macOS 上启用 MySQL/MariaDB 集成。这关闭了 #21191#46316 (Alexey Milovidov) (Robert Schulze).
  • 默认禁用 max_rows_in_set_to_optimize_join 设置。 #56396 (vdimir).
  • 添加 <host_name> 配置参数,允许在 ON CLUSTER DDL 查询和 Replicated 数据库引擎中避免解析主机名。这减轻了集群定义更改时队列卡住的可能性。关闭了 #57573#57603 (Nikolay Degterinsky).
  • 将文件系统缓存的 load_metadata_threads 增加到 16。这将使服务器启动更快。 #57732 (Alexey Milovidov).
  • 添加限制 merges/mutations 的能力 (max_mutations_bandwidth_for_server/max_merges_bandwidth_for_server)。 #57877 (Azat Khuzhin).
  • 将系统表 system.server_settings 中未文档化的(布尔型)列 is_hot_reloadable 替换为 (Enum8) 列 changeable_without_restart,其可能值为 NoYesIncreaseOnlyDecreaseOnly。同时文档化了该列。 #58029 (skyoct).
  • 集群发现支持设置用户名和密码,关闭了 #58063#58123 (vdimir).
  • ALTER TABLE ... PART 中支持查询参数。 #58297 (Azat Khuzhin).
  • 动态地为 Kafka 表创建消费者(但保留一段时间 - kafka_consumers_pool_ttl_ms,自上次使用后),这应该解决 system.kafka_consumers 的统计信息问题(当没有人从 Kafka 表读取数据时,消费者不会被消费,这会导致活动内存泄漏和缓慢的表 detach),并且此 PR 再次默认启用 system.kafka_consumers 的统计信息。 #58310 (Azat Khuzhin).
  • sparkBar 作为 sparkbar 的别名。 #58335 (凌涛).
  • 避免在上传到 GCS 后发送 ComposeObject 请求。 #58343 (Azat Khuzhin).
  • 正确处理配置文件 XML 中名称中带有点的键。 #58354 (Azat Khuzhin).
  • 使函数 format 在常量参数上返回常量。这关闭了 #58355#58358 (Alexey Milovidov).
  • 添加设置 max_estimated_execution_time 以区分 max_execution_timemax_estimated_execution_time#58402 (Zhang Yifan).
  • 当使用无效的数据库引擎名称时,提供提示。 #58444 (Bharat Nallan).
  • 添加设置以更好地控制 Arrow 字典中索引的类型。默认使用有符号整数类型作为索引,如 Arrow 建议的那样。关闭了 #57401#58519 (Kruglov Pavel).
  • 实现 #58575:在运行 Docker 镜像时支持 CLICKHOUSE_PASSWORD_FILE 环境变量。 #58583 (Eyal Halpern Shalev).
  • 当执行某些需要大量流来读取数据的查询时,之前会抛出错误 "Paste JOIN requires sorted tables only"。现在在这种情况下,流的数量会调整为 1。 #58608 (Yarik Briukhovetskyi).
  • 改进 INVALID_IDENTIFIER 错误的提示信息。 #58703 (Yakov Olkhovskiy).
  • 改进了在 normalizeQuery 中对有符号数值字面量的处理。 #58710 (Salvatore Mesoraca).
  • 支持 MySQL 的 Point 数据类型。 #58721 (Kseniia Sumarokova).
  • 当比较 Float32 列和一个常量字符串时,将字符串读取为 Float32(而不是 Float64)。 #58724 (Raúl Marín).
  • 提高 S3 兼容性,添加 ECloud EOS 存储支持。 #58786 (xleoken).
  • 允许 KILL QUERY 取消备份/恢复操作。此 PR 还使正在运行的备份和恢复操作在 system.processes 中可见。此外,服务器配置中现在有一个新设置 - shutdown_wait_backups_and_restores (默认=true),它使服务器在关闭时要么等待所有正在运行的备份和恢复操作完成,要么直接取消它们。 #58804 (Vitaly Baranov).
  • Avro 格式支持 ZSTD 编解码器。关闭了 #58735#58805 (flynn).
  • MySQL 接口增加了对 net_write_timeoutnet_read_timeout 设置的支持。net_write_timeout 被转换为 ClickHouse 原生的 send_timeout 设置,类似地,net_read_timeout 被转换为 receive_timeout。修复了一个问题,即只有当整个语句为大写时,才能设置 MySQL sql_select_limit 设置。 #58835 (Serge Klochkov).
  • 改进了当创建字典和表时名称冲突的异常信息。 #58841 (Yarik Briukhovetskyi).
  • 确保对于自定义(从 SQL 创建的)磁盘,服务器配置中指定了 filesystem_caches_path(所有文件系统缓存的通用目录前缀)或 custom_cached_disks_base_directory(仅从自定义磁盘创建的文件系统缓存的通用目录前缀)。custom_cached_disks_base_directory 对于自定义磁盘的优先级高于 filesystem_caches_path,后者在前一个不存在时使用。文件系统缓存设置 path 必须位于该目录内,否则将抛出异常,阻止磁盘的创建。这不会影响在旧版本上创建且服务器已升级的磁盘 - 那么将不会抛出异常以允许服务器成功启动)。custom_cached_disks_base_directory 已添加到默认服务器配置中,路径为 /var/lib/clickhouse/caches/。关闭了 #57825#58869 (Kseniia Sumarokova).
  • MySQL 接口增加了对 SHOW WARNINGS/SHOW COUNT(*) WARNINGS 查询的兼容性,尽管返回的结果始终为空集。 #58929 (Serge Klochkov).
  • 在执行并行分布式 INSERT SELECT 时跳过不可用的副本。 #58931 (Alexander Tokmakov).
  • 在 JSON 中启用结构化日志格式时,显示文字描述的日志级别。 #58936 (Tim Liou).
  • MySQL 接口通过数据类型别名增加了对 CAST(x AS SIGNED)CAST(x AS UNSIGNED) 语句的支持:SIGNED 代表 Int64,UNSIGNED 代表 UInt64。这提高了与 BI 工具(如 Looker Studio)的兼容性。 #58954 (Serge Klochkov).
  • 将 Docker 容器中的工作目录更改为数据路径。 #58975 (cangyin).
  • 为 Azure Blob Storage 添加了设置 azure_max_unexpected_write_error_retries,也可以从 azure 部分的配置中设置。 #59001 (SmitaRKulkarni).
  • 允许服务器在存在损坏的数据湖表的情况下启动。关闭了 #58625#59080 (Kseniia Sumarokova).
  • 允许在 Iceberg 表引擎中忽略模式演变,并使用用户在创建表时指定的模式或在创建表时从元数据解析的最新模式读取所有数据。这是通过默认禁用的设置 iceberg_engine_ignore_schema_evolution 实现的。请注意,启用此设置可能会导致不正确的结果,因为在模式演变的情况下,所有数据文件都将使用相同的模式读取。 #59133 (Kruglov Pavel).
  • 禁止在只读/一次写入存储上执行可变操作(INSERT/ALTER/OPTIMIZE/...),并使用适当的 TABLE_IS_READ_ONLY 错误(以避免残留)。避免在 CREATE/ATTACH 时在一次写入磁盘(format_version.txt)上留下残留。忽略 ReplicatedMergeTreeDROP 操作(与 MergeTree 相同)。修复了对 s3_plain 的迭代(MetadataStorageFromPlainObjectStorage::iterateDirectory)。请注意,只读磁盘是 web,一次写入磁盘是 s3_plain#59170 (Azat Khuzhin).
  • 修复了实验性 _block_number 列中的一个错误,该错误可能导致在复杂的 ALTERmerge 组合期间出现逻辑错误。修复了 #56202。替换了 #58601#59295 (alesapin).
  • Play UI 能够理解何时在 JSON 中返回异常。针对 #52853 的调整。 #59303 (Alexey Milovidov).
  • /binary HTTP 处理程序允许在查询字符串中指定用户、主机以及可选的密码。 #59311 (Alexey Milovidov).
  • 支持压缩内存表的备份。这关闭了 #57893#59315 (Alexey Milovidov).
  • BACKUPRESTORE 查询中支持 FORMAT 子句。 #59338 (Vitaly Baranov).
  • 函数 concatWithSeparator 现在支持任意参数类型(而不仅仅是 StringFixedString 参数)。例如,SELECT concatWithSeparator('.', 'number', 1) 现在返回 number.1#59341 (Robert Schulze).

构建/测试/打包 改进

  • 改进 clickhouse 二进制文件的别名(现在 ch/clickhouseclickhouse-localclickhouse,取决于参数),并为新别名添加 bash 补全。 #58344 (Azat Khuzhin).
  • 在 CI 中添加设置更改检查,以检查所有设置更改是否都反映在设置更改历史记录中。 #58555 (Kruglov Pavel).
  • 在有状态测试中使用直接从 S3 附加的表。 #58791 (Alexey Milovidov).
  • 将整个 fuzzer.log 保存为存档,而不是最后 10 万行。tail -n 100000 通常会删除包含表定义的行。例如:。 #58821 (Dmitry Novik).
  • 在 macOS Aarch64 上启用 Rust(这将为客户端添加使用 skim 的模糊搜索和 PRQL 语言,尽管我不认为有人会在 darwin 上托管 ClickHouse,所以我认为这主要是为了客户端中的模糊搜索)。 #59272 (Azat Khuzhin).
  • 修复混合 x86_64 和 ARM 集群中的聚合问题 #59132 (Harry Lee).

Bug 修复(官方稳定版本中用户可见的错误行为)

2023 年更新日志

  • 目录
  • ClickHouse 24.12 版本,2024-12-19
  • ClickHouse 24.11 版本,2024-11-26
  • ClickHouse 24.10 版本,2024-10-31
  • ClickHouse 24.9 版本,2024-09-26
  • ClickHouse 24.8 LTS 版本,2024-08-20
  • ClickHouse 24.7 版本,2024-07-30
  • ClickHouse 24.6 版本,2024-07-01
  • ClickHouse 24.5 版本,2024-05-30
  • ClickHouse 24.4 版本,2024-04-30
  • ClickHouse 24.3 LTS 版本,2024-03-27
  • ClickHouse 24.2 版本,2024-02-29
  • ClickHouse 24.1 版本,2024-01-30
  • 2023 年更新日志