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

2023 更新日志

目录

ClickHouse 版本 v23.12, 2023-12-28
ClickHouse 版本 v23.11, 2023-12-06
ClickHouse 版本 v23.10, 2023-11-02
ClickHouse 版本 v23.9, 2023-09-28
ClickHouse 版本 v23.8 LTS, 2023-08-31
ClickHouse 版本 v23.7, 2023-07-27
ClickHouse 版本 v23.6, 2023-06-30
ClickHouse 版本 v23.5, 2023-06-08
ClickHouse 版本 v23.4, 2023-04-26
ClickHouse 版本 v23.3 LTS, 2023-03-30
ClickHouse 版本 v23.2, 2023-02-23
ClickHouse 版本 v23.1, 2023-01-25
2022 年更新日志

ClickHouse 版本 23.12, 2023-12-28

向后不兼容的变更

  • 修复 TTL 表达式中非确定性函数的检查。之前,在某些情况下,您可以创建带有非确定性函数的 TTL 表达式,这可能导致后续未定义的行为。此修复解决了 #37250。默认情况下,不允许 TTL 表达式不依赖于表的任何列。可以通过 SET allow_suspicious_ttl_expressions = 1SET compatibility = '23.11' 重新允许。关闭了 #37286#51858 (Alexey Milovidov)。
  • MergeTree 设置 clean_deleted_rows 已弃用,不再起作用。默认情况下不允许 OPTIMIZECLEANUP 关键字(可以使用 allow_experimental_replacing_merge_with_cleanup 设置解锁)。 #58267 (Alexander Tokmakov)。此修复解决了 #57930。此关闭了 #54988。此关闭了 #54570。此关闭了 #50346。此关闭了 #47579。此功能必须移除,因为它不好。我们必须尽快移除它,因为没有其他选择。 #57932 (Alexey Milovidov)。

新功能

  • 实现可刷新的物化视图,在 #33919 中请求。 #56946 (Michael Kolupaev, Michael Guzov)。
  • 引入 PASTE JOIN,允许用户通过行号简单地连接没有 ON 子句的表。示例:SELECT * FROM (SELECT number AS a FROM numbers(2)) AS t1 PASTE JOIN (SELECT number AS a FROM numbers(2) ORDER BY a DESC) AS t2#57995 (Yarik Briukhovetskyi)。
  • ORDER BY 子句现在支持指定 ALL,这意味着 ClickHouse 按 SELECT 子句中的所有列排序。示例:SELECT col1, col2 FROM tab WHERE [...] ORDER BY ALL#57875 (zhongyuankai)。
  • 添加了一个新的 mutation 命令 ALTER TABLE <table> APPLY DELETED MASK,允许强制应用轻量级删除写入的掩码,并从磁盘中删除标记为已删除的行。 #57433 (Anton Popov)。
  • 处理程序 /binary 打开 ClickHouse 二进制文件内部符号的可视化查看器。 #58211 (Alexey Milovidov)。
  • 添加了一个新的 SQL 函数 sqid 来生成 Sqids (https://sqids.org/),示例:SELECT sqid(125, 126)#57512 (Robert Schulze)。
  • 添加一个新的函数 seriesPeriodDetectFFT,使用 FFT 检测序列周期。 #57574 (Bhavna Jindal)。
  • 添加一个 HTTP 端点,用于检查 Keeper 是否准备好接受流量。 #55876 (Konstantin Bogdanov)。
  • 为模式推断添加“union”模式。在此模式下,生成的表模式是所有文件模式的并集(因此模式是从每个文件推断出来的)。模式推断的模式由设置 schema_inference_mode 控制,有两个可能的值 - defaultunion。关闭了 #55428#55892 (Kruglov Pavel)。
  • 添加新的设置 input_format_csv_try_infer_numbers_from_strings,允许从 CSV 格式的字符串中推断数字。关闭了 #56455#56859 (Kruglov Pavel)。
  • 当数据库或表的数量超过可配置的阈值时,向用户显示警告。 #57375 (凌涛)。
  • 具有 HASHED_ARRAY(和 COMPLEX_KEY_HASHED_ARRAY)布局的字典支持 SHARDS,类似于 HASHED#57544 (vdimir)。
  • 为内存中的总主键字节数和总分配主键字节数添加异步指标。 #57551 (Bharat Nallan)。
  • 添加 SHA512_256 函数。 #57645 (Bharat Nallan)。
  • FORMAT_BYTES 添加为 formatReadableSize 的别名。 #57592 (Bharat Nallan)。
  • 允许将可选会话令牌传递给 s3 表函数。 #57850 (Shani Elharrar)。
  • 引入新的设置 http_make_head_request。如果关闭此设置,URL 表引擎将不会执行 HEAD 请求来确定文件大小。这是为了支持效率低下、配置错误或无法胜任的 HTTP 服务器。 #54602 (Fionera)。
  • 现在可以在索引(非主键)定义中引用 ALIAS 列(问题 #55650)。示例:CREATE TABLE tab(col UInt32, col_alias ALIAS col + 1, INDEX idx (col_alias) TYPE minmax) ENGINE = MergeTree ORDER BY col;#57546 (Robert Schulze)。
  • 添加了一个新的设置 readonly,可用于指定 S3 磁盘为只读。当只能只读访问底层 S3 存储桶时,这对于在 s3_plain 类型的磁盘上创建表很有用。 #57977 (Pengyuan Bian)。
  • MergeTree 表中的主键分析现在将应用于包含虚拟列 _part_offset(可选地带有 _part)的谓词。此功能可以用作一种特殊的二级索引。 #58224 (Amos Bird)。

性能提升

  • 在 FINAL 处理期间从 MergeTree 表中提取不相交的部分范围。这样,我们可以避免对这些不相交的部分范围进行额外的 FINAL 逻辑。在具有相同主键的重复值数量较低的情况下,性能将几乎与没有 FINAL 的情况相同。当设置 do_not_merge_across_partitions_select_final 设置时,提高 MergeTree FINAL 的读取性能。 #58120 (Maksim Kita)。
  • 使用 s3 服务器端复制而不是通过缓冲区复制,实现了 s3 磁盘之间的复制。改进了 BACKUP/RESTORE 操作和 clickhouse-disks copy 命令。 #56744 (MikhailBurdukov)。
  • Hash JOIN 遵守设置 max_joined_block_size_rows,并且不会为 ALL JOIN 生成大型块。 #56996 (vdimir)。
  • 更早地释放聚合的内存。这可以避免不必要地外部聚合。 #57691 (Nikolai Kochetov)。
  • 提高字符串序列化的性能。 #57717 (Maksim Kita)。
  • 支持 Merge 引擎表的简单计数优化。 #57867 (skyoct)。
  • 在某些情况下优化了聚合。 #57872 (Anton Popov)。
  • hasAny 函数现在可以利用全文跳过索引。 #57878 (Jpnock)。
  • 函数 if(cond, then, else)(及其别名 cond ? then : else)被优化为使用无分支评估。 #57885 (zhanglistar)。
  • 如果分区键表达式仅包含主键表达式中的列,则 MergeTree 会自动派生 do_not_merge_across_partitions_select_final 设置。 #58218 (Maksim Kita)。
  • 加速原生类型的 MINMAX#58231 (Raúl Marín)。
  • 为文件系统缓存实现 SLRU 缓存策略。 #57076 (Kseniia Sumarokova)。
  • 后台获取的每个端点的连接数限制从 15 提高到 background_fetches_pool_size 设置的值。 - MergeTree 级别的设置 replicated_max_parallel_fetches_for_host 已过时 - MergeTree 级别的设置 replicated_fetches_http_connection_timeout, replicated_fetches_http_send_timeoutreplicated_fetches_http_receive_timeout 已移至服务器级别。 - 设置 keep_alive_timeout 已添加到服务器级别设置列表中。 #57523 (Nikita Mikhaylov)。
  • 使查询 system.filesystem_cache 不会占用大量内存。 #57687 (Kseniia Sumarokova)。
  • 减少字符串反序列化时的内存使用量。 #57787 (Maksim Kita)。
  • Enum 的更高效的构造函数 - 当 Enum 具有大量值时,这是有意义的。 #57887 (Duc Canh Le)。
  • 从文件系统缓存读取的改进:始终使用 pread 方法。 #57970 (Nikita Taranov)。
  • 在逻辑表达式优化器中为 AND notEquals 链添加优化。此优化仅在启用实验性分析器时可用。 #58214 (Kevin Mingtarja)。

改进

  • Keeper 中对软内存限制的支持。如果内存使用量接近最大值,它将拒绝请求。 #57271 (Han Fei)。 #57699 (Han Fei)。
  • 使插入到分布式表能够正确处理更新的集群配置。当动态更新集群节点列表时,分布式表的目录监视器将更新它。 #42826 (zhongyuankai)。
  • 不允许创建具有不一致合并参数的复制表。 #56833 (Duc Canh Le)。
  • system.tables 中显示未压缩大小。 #56618#57186 (Chen Lixiang)。
  • Distributed 表添加 skip_unavailable_shards 作为设置,类似于相应的查询级别设置。关闭了 #43666#57218 (Gagan Goel)。
  • 函数 substring(别名:substr, mid)现在可以与 Enum 类型一起使用。以前,第一个函数参数必须是 StringFixedString 类型的值。这提高了与第三方工具(如通过 MySQL 接口的 Tableau)的兼容性。 #57277 (Serge Klochkov)。
  • 函数 format 现在支持任意参数类型(而不仅仅是 StringFixedString 参数)。这对于计算 SELECT format('The {0} to all questions is {1}', 'answer', 42) 很重要。 #57549 (Robert Schulze)。
  • 允许将 date_trunc 函数与不区分大小写的第一个参数一起使用。现在支持两种情况:SELECT date_trunc('day', now())SELECT date_trunc('DAY', now())#57624 (Yarik Briukhovetskyi)。
  • 当表不存在时,提供更好的提示。 #57342 (Bharat Nallan)。
  • 允许在查询时覆盖 max_partition_size_to_dropmax_table_size_to_drop 服务器设置。 #57452 (Jordi Villar)。
  • 在 JSON 格式中稍微更好地推断未命名的元组。 #57751 (Kruglov Pavel)。
  • 添加对连接到 Keeper 时使用只读标志的支持(修复了 #53749)。 #57479 (Mikhail Koviazin)。
  • 修复了可能由于“No such file or directory”(从磁盘恢复批处理期间)导致的分布式发送卡住。修复了 system.distribution_queue 中的 error_count 可能存在的问题(在 distributed_directory_monitor_max_sleep_time_ms >5min 的情况下)。引入了配置文件事件以跟踪异步 INSERT 失败 - DistributedAsyncInsertionFailures#57480 (Azat Khuzhin)。
  • MaterializedPostgreSQL 中支持 PostgreSQL 生成的列和默认列值(实验性功能)。关闭了 #40449#57568 (Kseniia Sumarokova)。
  • 允许在不重启服务器的情况下应用一些文件系统缓存配置设置更改。 #57578 (Kseniia Sumarokova)。
  • 正确处理具有空数组的 PostgreSQL 表结构。 #57618 (Mike Kot)。
  • 将自上次服务器重启以来发生的错误总数公开为 ClickHouseErrorMetric_ALL 指标。 #57627 (Nikita Mikhaylov)。
  • 允许配置文件中具有 from_env/from_zk 引用和非空元素且 replace=1 的节点。 #57628 (Azat Khuzhin)。
  • 一个表函数 fuzzJSON,允许生成大量格式错误的 JSON 用于模糊测试。 #57646 (Julia Kartseva)。
  • 允许 IPv6 到 UInt128 的转换和二进制算术。 #57707 (Yakov Olkhovskiy)。
  • async inserts deduplication cache 添加一个设置 - 我们等待缓存更新的时间。弃用设置 async_block_ids_cache_min_update_interval_ms。现在仅在发生冲突时才更新缓存。 #57743 (alesapin)。
  • sleep() 函数现在可以使用 KILL QUERY 取消。 #57746 (Vitaly Baranov)。
  • 禁止在实验性 Replicated 数据库中为 Replicated 表引擎执行 CREATE TABLE ... AS SELECT 查询,因为它们不受支持。参考 #35408#57796 (Nikolay Degterinsky)。
  • 修复并改进转换外部数据库的查询,以递归获取所有兼容的谓词。 #57888 (flynn)。
  • 支持动态重新加载文件系统缓存大小。关闭了 #57866#57897 (Kseniia Sumarokova)。
  • 正确支持具有阻塞 SIGRTMIN 的线程的 system.stack_trace(这些线程可能存在于低质量的外部库中,例如 Apache rdkafka)。 #57907 (Azat Khuzhin)。并且仅在线程未被阻塞时才向线程发送信号,以避免在没有意义时等待 storage_system_stack_trace_pipe_read_timeout_ms#58136 (Azat Khuzhin)。
  • 容忍仲裁插入检查中的 Keeper 故障。 #57986 (Raúl Marín)。
  • 将最大/峰值 RSS (MemoryResidentMax) 添加到 system.asynchronous_metrics。 #58095 (Azat Khuzhin)。
  • 此 PR 允许用户在未提及区域(如果不是默认区域)的情况下使用 s3 样式链接(https://s3://)。如果用户提及了错误的区域,也会找到正确的区域。 #58148 (Yarik Briukhovetskyi)。
  • clickhouse-format --obfuscate 将了解 Settings、MergeTreeSettings 和时区,并保持其名称不变。 #58179 (Alexey Milovidov)。
  • ZipArchiveWriter 中添加了显式的 finalize() 函数。简化了 ZipArchiveWriter 中过于复杂的代码。此修复解决了 #58074#58202 (Vitaly Baranov)。
  • 使具有相同路径的缓存使用相同的缓存对象。此行为以前存在,但在 23.4 中被破坏。如果具有相同路径的此类缓存具有不同的缓存设置集,则会抛出异常,表示不允许这样做。 #58264 (Kseniia Sumarokova)。
  • 并行副本(实验性功能):友好的设置 #57542 (Igor Nikonov)。
  • 并行副本(实验性功能):公告响应处理改进 #57749 (Igor Nikonov)。
  • 并行副本(实验性功能):在 ParallelReplicasReadingCoordinator 中更加尊重 min_number_of_marks #57763 (Nikita Taranov)。
  • 并行副本 (实验性功能): 禁用带有 IN (子查询) 的并行副本 #58133 (Igor Nikonov)。
  • 并行副本 (实验性功能): 添加 profile 事件 'ParallelReplicasUsedCount' #58173 (Igor Nikonov)。
  • 非 POST 请求(例如 HEAD)将与 GET 类似,变为只读。 #58060 (San)。
  • system.part_log 添加 bytes_uncompressed#58167 (Jordi Villar)。
  • system.backupssystem.backup_log 表添加基本备份名称 #58178 (Pradeep Chhetri)。
  • 在 clickhouse-local 的命令行中添加对指定查询参数的支持 #58210 (Pradeep Chhetri)。

构建/测试/打包改进

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

ClickHouse 23.11 版本,2023-12-06

向后不兼容的变更

  • 默认的 ClickHouse 服务器配置文件为 default 用户默认启用了 access_management(通过 SQL 查询操作用户)和 named_collection_control(通过 SQL 查询操作命名集合)。这关闭了 #56482#56619 (Alexey Milovidov)。
  • 窗口函数 RESPECT NULLS/IGNORE NULLS 的多项改进。如果您将它们用作聚合函数,并使用这些修饰符存储聚合函数的状态,它们可能会变得不兼容。 #57189 (Raúl Marín)。
  • 删除优化 optimize_move_functions_out_of_any#57190 (Raúl Marín)。
  • parseDateTime 函数中的格式化程序 %l/%k/%c 现在能够解析没有前导零的小时/月份,例如,select parseDateTime('2023-11-26 8:14', '%F %k:%i') 现在可以工作了。设置 parsedatetime_parse_without_leading_zeros = 0 以恢复以前需要两位数字的行为。formatDateTime 函数现在也能够打印没有前导零的小时/月份。这由设置 formatdatetime_format_without_leading_zeros 控制,但默认关闭,以避免破坏现有的用例。 #55872 (Azat Khuzhin)。
  • 您不能再将聚合函数 avgWeightedDecimal 类型的参数一起使用。解决方法:将参数转换为 Float64。这关闭了 #43928。这关闭了 #31768。这关闭了 #56435。如果您在带有 Decimal 参数的物化视图或投影中使用了此函数,请联系 [email protected]。修复了聚合函数 sumMap 中的错误,并使其速度降低了约 1.5..2 倍。但这无关紧要,因为该函数本来就是垃圾。这关闭了 #54955。这关闭了 #53134。这关闭了 #55148。修复了函数 groupArraySample 中的一个 bug - 如果在一个查询中生成多个聚合状态,它会使用相同的随机种子。 #56350 (Alexey Milovidov)。

新功能

  • 添加了服务器设置 async_load_databases,用于异步加载数据库和表。加快了服务器启动时间。适用于具有 OrdinaryAtomicReplicated 引擎的数据库。它们的表异步加载元数据。查询表会提高加载作业的优先级并等待其完成。添加了一个新的表 system.asynchronous_loader 用于内省。 #49351 (Sergei Trifonov)。
  • 添加系统表 blob_storage_log。它允许审计所有写入 S3 和其他对象存储的数据。 #52918 (vdimir)。
  • 使用统计信息来更好地排序 prewhere 条件。 #53240 (Han Fei)。
  • 在 Keeper 协议中添加了对压缩的支持。可以通过在 zookeeper 部分中使用 use_compression 标志在 ClickHouse 端启用它。请注意,只有 ClickHouse Keeper 支持压缩,而 Apache ZooKeeper 不支持。解决 #49507#54957 (SmitaRKulkarni)。
  • 引入了功能 storage_metadata_write_full_object_key。如果设置为 true,则使用新格式写入元数据文件。使用该格式,ClickHouse 在元数据文件中存储完整的远程对象键,从而实现更好的灵活性和优化。 #55566 (Sema Checherinda)。
  • 添加新的设置和语法,以保护命名集合的字段不被覆盖。这旨在防止恶意用户获得对密钥的未授权访问。 #55782 (Salvatore Mesoraca)。
  • 向所有系统日志表添加 hostname 列 - 如果您使系统表成为复制的、共享的或分布式的,这将非常有用。 #55894 (Bharat Nallan)。
  • 添加 CHECK ALL TABLES 查询。 #56022 (vdimir)。
  • 添加了函数 fromDaysSinceYearZero,它类似于 MySQL 的 FROM_DAYS。例如,SELECT fromDaysSinceYearZero(739136) 返回 2023-09-08#56088 (Joanna Hulboj)。
  • 添加了一个外部 Python 工具,用于查看备份并从中提取信息,而无需使用 ClickHouse。 #56268 (Vitaly Baranov)。
  • 实现了一个名为 preferred_optimize_projection_name 的新设置。如果将其设置为非空字符串,则在可能的情况下将使用指定的投影,而不是从所有候选项中选择。 #56309 (Yarik Briukhovetskyi)。
  • 为 yielding/resigning leadership 添加 4 字母命令 (https://github.com/ClickHouse/ClickHouse/issues/56352)。 #56354 (Pradeep Chhetri)。 #56620 (Pradeep Chhetri)。
  • 添加了一个新的 SQL 函数 arrayRandomSample(arr, k),它从输入数组返回 k 个元素的样本。以前只能使用不太方便的语法来实现类似的功能,例如 SELECT arrayReduce('groupArraySample(3)', range(10))#56416 (Robert Schulze)。
  • 添加了对在 .npy 文件中使用 Float16 类型数据的支持。关闭 #56344#56424 (Yarik Briukhovetskyi)。
  • 添加了一个系统视图 information_schema.statistics,以更好地兼容 Tableau Online。 #56425 (Serge Klochkov)。
  • 添加 system.symbols 表,用于内省二进制文件。 #56548 (Alexey Milovidov)。
  • 可配置的仪表板。现在使用查询加载图表的查询,默认情况下,该查询使用新的 system.dashboards 表。 #56771 (Sergei Trifonov)。
  • 引入 fileCluster 表函数 - 如果您将共享文件系统(NFS 和类似系统)挂载到 user_files 目录中,这将非常有用。 #56868 (Andrey Zvonov)。
  • s3/file/hdfs/url/azureBlobStorage 引擎添加带有文件大小(以字节为单位)的 _size 虚拟列。 #57126 (Kruglov Pavel)。
  • 从 Prometheus 端点公开自上次重启以来服务器上发生的每个错误代码的错误数量。 #57209 (Nikita Mikhaylov)。
  • ClickHouse keeper 在 /keeper/availability-zone 路径报告其运行的可用区。可以通过 <availability_zone><value>us-west-1a</value></availability_zone> 进行配置。 #56715 (Jianfei Hu)。
  • 使 ALTER materialized_view MODIFY QUERY 非实验性,并弃用 allow_experimental_alter_materialized_view_structure 设置。修复了 #15206#57311 (alesapin)。
  • 设置 join_algorithm 尊重指定的顺序 #51745 (vdimir)。
  • 在 Protobuf 格式中添加了对著名的 Protobuf 类型的支持。 #56741 (János Benjamin Antal)。

性能提升

  • 与 S3 交互的自适应超时。第一次尝试使用较低的发送和接收超时。 #56314 (Sema Checherinda)。
  • max_concurrent_queries 的默认值从 100 增加到 1000。当有大量客户端连接,并且缓慢发送或接收数据,因此服务器不受 CPU 限制,或者当 CPU 核心数大于 100 时,这是有意义的。此外,默认启用并发控制,并将所需的查询处理线程总数设置为 CPU 核心数的两倍。这提高了大量并发查询场景下的性能。 #46927 (Alexey Milovidov)。
  • 支持并行评估窗口函数。修复了 #34688#39631 (Dmitry Novik)。
  • Numbers 表引擎(system.numbers 表的)现在分析条件以生成所需的数据子集,例如表的索引。 #50909 (JackyWoo)。
  • 提高了 Merge 表引擎通过 IN (...) 条件进行过滤的性能。 #54905 (Nikita Taranov)。
  • 当文件系统缓存已满且存在大量读取时发生的改进。 #55158 (Kseniia Sumarokova)。
  • 添加了禁用 S3 校验和的功能,以避免过度遍历文件(这由设置 s3_disable_checksum 控制)。 #55559 (Azat Khuzhin)。
  • 现在,当数据在页面缓存中时,我们从远程表同步读取(就像我们对本地表所做的那样)。它更快,不需要线程池内的同步,并且不会犹豫在本地 FS 上执行 seek 操作,并减少 CPU 等待。 #55841 (Nikita Taranov)。
  • 优化从 maparrayElement 获取值。这将带来约 30% 的速度提升。 - 减少保留的内存 - 减少 resize 调用。 #55957 (lgbo)。
  • 使用 AVX-512 进行多阶段过滤的优化。在 ICX 设备(Intel Xeon Platinum 8380 CPU,80 核,160 线程)上对 OnTime 数据集进行的性能实验表明,此更改可以为查询 Q2、Q3、Q4、Q5 和 Q6 的 QPS 分别带来 7.4%、5.9%、4.7%、3.0% 和 4.6% 的改进,而对其他查询没有影响。 #56079 (Zhiguo Zhou)。
  • 限制查询分析器内繁忙的线程数。如果线程数更多,它们将跳过分析。 #56105 (Alexey Milovidov)。
  • 减少窗口函数中虚函数调用的数量。 #56120 (Maksim Kita)。
  • 允许在 ORC 数据格式中进行递归 Tuple 字段修剪,以加快扫描速度。 #56122 (李扬)。
  • Npy 数据格式的简单计数优化:诸如 select count() from 'data.npy' 之类的查询将更快地工作,因为结果被缓存。 #56304 (Yarik Briukhovetskyi)。
  • 具有聚合和大量流的查询将在计划构建期间使用更少的内存量。 #57074 (Alexey Milovidov)。
  • 通过优化对 ProcessList 的访问,提高用户数量众多和高并发查询(>2000 QPS)用例的查询执行性能。 #57106 (Andrej Hoos).
  • 对 array join 的小幅改进,重用了一些中间结果。 #57183 (李扬).
  • 在某些情况下,堆栈展开速度很慢。现在不会了。 #57221 (Alexey Milovidov).
  • 现在,当 max_streams = 1 时,我们使用默认读取池从外部存储读取数据。当启用读取预取时,这很有益。 #57334 (Nikita Taranov).
  • Keeper 改进:通过延迟日志预处理来改善启动期间的内存使用。 #55660 (Antonio Andelic).
  • 改进了 FileHDFS 存储的 glob 匹配性能。 #56141 (Andrey Zvonov).
  • 实验性全文索引中的倒排列表现在被压缩,这使其大小减少了 10-30%。 #56226 (Harry Lee).
  • 并行化备份中的 BackupEntriesCollector#56312 (Kseniia Sumarokova).

改进

  • 添加一个新的 MergeTree 设置 add_implicit_sign_column_constraint_for_collapsing_engine(默认禁用)。启用后,它为 CollapsingMergeTree 表添加一个隐式的 CHECK 约束,该约束将 Sign 列的值限制为仅 -1 或 1。 #56701. #56986 (Kevin Mingtarja).
  • 允许在不重启的情况下向存储配置添加新磁盘。 #56367 (Duc Canh Le).
  • 支持在同一个 alter 查询中创建和物化索引,也支持在同一个查询中 “modify TTL” 和 “materialize TTL”。 关闭了 #55651#56331 (flynn).
  • 添加一个新的名为 fuzzJSON 的表函数,该函数包含源 JSON 字符串的扰动版本,带有随机变化。 #56490 (Julia Kartseva).
  • Engine Merge 根据底层表的行策略过滤记录,因此您不必在 Merge 表上创建另一个行策略。 #50209 (Ilya Golshtein).
  • 添加一个设置 max_execution_time_leaf 以限制分布式查询在分片上的执行时间,以及 timeout_overflow_mode_leaf 以控制超时发生时的行为。 #51823 (Duc Canh Le).
  • 添加 ClickHouse 设置以禁用通过 HTTP 代理进行 HTTPS 请求的隧道。 #55033 (Arthur Passos).
  • background_fetches_pool_size 设置为 16,background_schedule_pool_size 设置为 512,这更适合频繁小批量插入的生产环境。 #54327 (Denny Crane).
  • 当从 csv 格式文件读取数据时,如果行尾是 \r,且后面没有 \n,则会遇到以下异常:Cannot parse CSV format: found \r (CR) not followed by \n (LF). Line must end by \n (LF) or \r\n (CR LF) or \n\r. 在 ClickHouse 中,csv 行尾必须是 \n\r\n\n\r,因此 \r 后面必须跟 \n,但在某些情况下,csv 输入数据异常,如上所述,\r 在行尾。 #54340 (KevinyhZou).
  • 更新 Arrow 库到 release-13.0.0,该版本支持新的编码。 关闭了 #44505#54800 (Kruglov Pavel).
  • 通过在 DDL 条目主机列表中查找本地 IP 地址时,移除繁重的系统调用来提高 ON CLUSTER 查询的性能。 #54909 (Duc Canh Le).
  • 修复了在将线程附加到查询或用户之前分配的内存的记账问题。 #56089 (Nikita Taranov).
  • 在 Apache Arrow 格式中添加对 LARGE_LIST 的支持。 #56118 (edef).
  • 允许通过 OPTIMIZE 查询手动压缩 EmbeddedRocksDB#56225 (Azat Khuzhin).
  • EmbeddedRocksDB 表添加指定 BlockBasedTableOptions 的能力。 #56264 (Azat Khuzhin).
  • 现在,当通过 MySQL 协议建立连接时,SHOW COLUMNS 会显示 MySQL 等效的数据类型名称。以前,当设置 use_mysql_types_in_show_columns = 1 时是这种情况。该设置被保留,但已过时。 #56277 (Robert Schulze).
  • 修复了在 TRUNCATEDROP PARTITION 后服务器刚重启时可能出现的 The local set of parts of table doesn't look like the set of parts in ZooKeeper 错误。 #56282 (Alexander Tokmakov).
  • 修复了函数 formatQuery/formatQuerySingleLine 中非 const 查询字符串的处理。还添加了这两个函数的 OrNull 变体,当查询无法解析时,这些变体返回 NULL 而不是抛出异常。 #56327 (Robert Schulze).
  • 允许备份已删除内部表的物化视图,而不是使备份失败。 #56387 (Kseniia Sumarokova).
  • 当查询某些列时,对 system.replicas 的查询会启动对 ZooKeeper 的请求。当有数千个表时,这些请求可能会给 ZooKeeper 带来相当大的负载。如果同时对 system.replicas 进行多个查询,它们会多次执行相同的请求。更改是为了“去重”来自并发查询的请求。 #56420 (Alexander Gololobov).
  • 修复了查询外部数据库时到 MySQL 兼容查询的转换。 #56456 (flynn).
  • 添加了对使用 KeeperMap 引擎备份和还原表的支持。 #56460 (Antonio Andelic).
  • 必须重新检查 CompleteMultipartUpload 的 404 响应。即使客户端收到超时或其他网络错误,操作也可能在服务器上完成。CompleteMultipartUpload 的下一次重试收到 404 响应。如果对象键存在,则该操作被视为成功。 #56475 (Sema Checherinda).
  • 默认启用 HTTP OPTIONS 方法 - 它简化了从 Web 浏览器请求 ClickHouse 的操作。 #56483 (Alexey Milovidov).
  • dns_max_consecutive_failures 的值在 #46550 中被错误地更改了 - 这被还原并调整为更好的值。此外,还将 HTTP keep-alive 超时时间从生产环境调整为合理的值。 #56485 (Alexey Milovidov).
  • 延迟加载基本备份(基本备份只有在需要时才会被加载)。还为备份添加了一些日志消息和 profile 事件。 #56516 (Vitaly Baranov).
  • 设置 query_cache_store_results_of_queries_with_nondeterministic_functions(值为 falsetrue)已被标记为过时。它被设置 query_cache_nondeterministic_function_handling 替换,这是一个三值枚举,用于控制查询缓存如何处理具有非确定性函数的查询:a) 抛出异常(默认行为),b) 无条件保存非确定性查询结果,或 c) 忽略,即不抛出异常,也不缓存结果。 #56519 (Robert Schulze).
  • 在 JOIN ON 部分重写带有 is null 检查的相等性。 实验性仅限分析器#56538 (vdimir).
  • 函数 concat 现在支持任意参数类型(而不仅仅是 String 和 FixedString 参数)。这使其行为更类似于 MySQL concat 实现。例如,SELECT concat('ab', 42) 现在返回 ab42#56540 (Serge Klochkov).
  • 允许从配置中的 'named_collection' 部分或从 SQL 创建的命名集合中获取缓存配置。 #56541 (Kseniia Sumarokova).
  • PostgreSQL 数据库引擎:在 postgres 连接不成功的情况下,使过时表的删除操作不那么激进。 #56609 (jsc0218).
  • 当 URL 不正确时,连接到 PG 花费的时间太长,因此相关的查询卡在那里并被取消。 #56648 (jsc0218).
  • Keeper 改进:默认在 Keeper 中禁用压缩日志。 #56763 (Antonio Andelic).
  • 添加配置设置 wait_dictionaries_load_at_startup#56782 (Vitaly Baranov).
  • 以前的 ClickHouse 版本中存在潜在漏洞:如果用户已连接并使用 “interserver secret” 方法尝试身份验证失败,服务器不会立即终止连接,而是继续接收并忽略来自客户端的剩余数据包。虽然这些数据包被忽略,但它们仍然会被解析,如果它们使用的压缩方法存在另一个已知的漏洞,则会导致在未经身份验证的情况下利用该漏洞。此问题通过 ClickHouse Bug Bounty Programhttps://twitter.com/malacupa 发现。 #56794 (Alexey Milovidov).
  • 当远程副本上完全提交某个 part 时,获取该 part 会等待。最好不要发送 PreActive 状态的 part。对于零拷贝,这是一个强制性限制。 #56808 (Sema Checherinda).
  • 修复了使用实验性 MaterializedPostgreSQL 时可能出现的 postgresql 逻辑复制转换错误。 #53721 (takakawa).
  • 实现用户级设置 alter_move_to_space_execute_async,允许异步执行查询 ALTER TABLE ... MOVE PARTITION|PART TO DISK|VOLUME。后台执行的池大小由 background_move_pool_size 控制。默认行为是同步执行。 修复了 #47643#56809 (alesapin).
  • 能够在扫描 system.tables 时按引擎进行过滤,避免不必要的(可能耗时的)连接。 #56813 (jsc0218).
  • 在 RocksDB 存储的系统表中显示 total_bytestotal_rows#56816 (Aleksandr Musorin).
  • 允许在 TEMPORARY 表的 ALTER 中使用基本命令。 #56892 (Sergey).
  • LZ4 压缩。在极少数情况下,当输出缓冲区容量不足以将压缩块直接写入输出缓冲区时,缓冲压缩块。 #56938 (Sema Checherinda).
  • 为排队作业的数量添加指标,这对于 IO 线程池很有用。 #56958 (Alexey Milovidov).
  • 在配置文件中为 PostgreSQL 表引擎设置添加一个设置。添加了对该设置的检查,并围绕附加设置添加了文档。 #56959 (Peignon Melvyn).
  • 函数 concat 现在可以与单个参数一起调用,例如 SELECT concat('abc')。这使其行为与 MySQL 的 concat 实现更加一致。 #57000 (Serge Klochkov).
  • 根据 AWS S3 文档的要求,对所有 x-amz-* 标头进行签名。 #57001 (Arthur Passos).
  • 函数 fromDaysSinceYearZero (别名: FROM_DAYS) 现在可以与无符号和有符号整数类型一起使用(以前,它必须是无符号整数)。这提高了与 Tableau Online 等第三方工具的兼容性。 #57002 (Serge Klochkov).
  • system.s3queue_log 添加到默认配置。 #57036 (Kseniia Sumarokova).
  • wait_dictionaries_load_at_startup 的默认值更改为 true,并且仅当 dictionaries_lazy_load 为 false 时才使用此设置。 #57133 (Vitaly Baranov).
  • 即使启用了 dictionaries_lazy_load,也在创建时检查字典源类型。 #57134 (Vitaly Baranov).
  • 计划级优化现在可以单独启用/禁用。以前,只能禁用所有优化。以前执行此操作的设置 (query_plan_enable_optimizations) 被保留,并且仍然可以用于禁用所有优化。 #57152 (Robert Schulze).
  • 服务器的退出代码将与异常代码相对应。例如,如果服务器由于内存限制而无法启动,则它将以代码 241 = MEMORY_LIMIT_EXCEEDED 退出。在以前的版本中,异常的退出代码始终为 70 = Poco::Util::ExitCode::EXIT_SOFTWARE。 #57153 (Alexey Milovidov).
  • 不要解构和符号化来自 functional C++ 标头的堆栈帧。 #57201 (Mike Kot).
  • HTTP 服务器页面 /dashboard 现在支持带有多个线条的图表。 #57236 (Sergei Trifonov).
  • max_memory_usage_in_client 命令行选项支持带有后缀(K、M、G 等)的字符串值。 关闭了 #56879#57273 (Yarik Briukhovetskyi).
  • 将 Intel QPL(由编解码器 DEFLATE_QPL 使用)从 v1.2.0 升级到 v1.3.1。还修复了 BOF (Block On Fault) = 0 情况下的错误,更改为通过回退到 SW 路径来处理页面错误。 #57291 (jasperzhu).
  • 将 MergeTree 设置的默认 replicated_deduplication_window 从 100 增加到 1k。 #57335 (sichenzhao).
  • 停止过多地使用 INCONSISTENT_METADATA_FOR_BACKUP。如果可能,最好继续扫描,而不是停止并从头开始扫描备份。 #57385 (Vitaly Baranov).

构建/测试/打包改进

  • 添加 SQLLogic 测试。 #56078 (Han Fei).
  • 为了提高可用性,使 clickhouse-localclickhouse-client 可以使用短名称 (ch, chl, chc)。 #56634 (Alexey Milovidov).
  • 通过从外部库中删除未使用的代码,进一步优化了构建大小。 #56786 (Alexey Milovidov).
  • 添加自动检查,确保没有大型翻译单元。 #56559 (Alexey Milovidov).
  • 降低单二进制发行版的大小。 这关闭了 #55181#56617 (Alexey Milovidov).
  • 每次构建后,有关每个翻译单元和二进制文件大小的信息将发送到 ClickHouse Cloud 中的 CI 数据库。 这关闭了 #56107#56636 (Alexey Milovidov).
  • “Apache Arrow” 库(我们仅将其用于解析 arrow 格式等非必要的事情)的某些文件始终被重新构建,而忽略了构建缓存。 这已修复。 #56657 (Alexey Milovidov).
  • 避免重新编译依赖于有关版本的自动生成源文件的翻译单元。 #56660 (Alexey Milovidov).
  • 链接器调用的跟踪数据将发送到 ClickHouse Cloud 中的 CI 数据库。 #56725 (Alexey Milovidov).
  • 对 clickhouse 二进制文件使用 DWARF 5 调试符号(以前是 DWARF 4)。 #56770 (Michael Kolupaev).
  • 添加一个新的构建选项 SANITIZE_COVERAGE。 如果启用此选项,则代码将被检测以跟踪覆盖率。 收集的信息在 ClickHouse 中可用,通过:(1) 一个新的函数 coverage,它返回上次覆盖率重置后在代码中找到的唯一地址数组;(2) SYSTEM RESET COVERAGE 查询,它重置累积的数据。 这使我们能够比较不同测试的覆盖率,包括差异代码覆盖率。 #20539 的延续。 #56102 (Alexey Milovidov).
  • 收集堆栈时,某些堆栈帧可能无法解析。 在这种情况下,原始地址可能会有所帮助。 #56267 (Alexander Gololobov).
  • 添加禁用 libssh 的选项。 #56333 (Alexey Milovidov).
  • 在 CI 中的 S3 测试中启用 temporary_data_in_cache。 #48425 (vdimir).
  • 在 CI 中设置 clickhouse-client 的最大内存使用量 (1G)。 #56873 (Nikita Mikhaylov).

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

ClickHouse 23.10 版本,2023-11-02

向后不兼容的变更

  • 不再有自动删除损坏数据 part 的选项。这关闭了 #55174#55184 (Alexey Milovidov)。 #55557 (Jihyuk Bok)。
  • 过时的内存数据 part 不再能从预写日志中读取。如果您之前配置了内存 part,则必须在升级前将其删除。 #55186 (Alexey Milovidov)。
  • 移除了与 Meilisearch 的集成。原因:它仅与旧版本 0.18 兼容。最新版本的 Meilisearch 更改了协议,不再工作。注意:如果您能帮助将其恢复,我们将不胜感激。 #55189 (Alexey Milovidov)。
  • 将目录监视器概念重命名为后台 INSERT。所有设置 *directory_monitor* 都已重命名为 distributed_background_insert*应该保留向后兼容性(因为旧设置已添加为别名)。 #55978 (Azat Khuzhin)。
  • 不要将客户端设置的 send_timeout 解释为服务端上的 receive_timeout,反之亦然。 #56035 (Azat Khuzhin)。
  • 比较具有不同单位的时间间隔将抛出异常。这关闭了 #55942。您可能偶尔依赖于之前的行为,即无论单位如何,都会比较底层的数值。 #56090 (Alexey Milovidov)。
  • 完全重写了实验性的 S3Queue 表引擎:更改了我们在 zookeeper 中保存信息的方式,从而减少了 zookeeper 请求,在已知状态不会更改的情况下添加了 zookeeper 状态的缓存,改进了从 s3 进程的轮询,使其不那么激进,更改了为跟踪文件维护 ttl 和 max 设置的方式,现在它是一个后台进程。添加了 system.s3queuesystem.s3queue_log 表。关闭了 #54998#54422 (Kseniia Sumarokova)。
  • HTTP 端点上的任意路径不再被解释为对 /query 端点的请求。 #55521 (Konstantin Bogdanov)。

新功能

  • 添加了函数 arrayFold(accumulator, x1, ..., xn -> expression, initial, array1, ..., arrayn),它将 lambda 函数应用于相同基数 (cardinality) 的多个数组,并将结果收集到累加器中。 #49794 (Lirikl)。
  • 支持 Npy 格式。SELECT * FROM file('example_array.npy', Npy)#55982 (Yarik Briukhovetskyi)。
  • 如果表在其键中具有空间填充曲线,例如 ORDER BY mortonEncode(x, y),则可以将其参数的条件(例如,x >= 10 AND x <= 20 AND y >= 20 AND y <= 30)用于索引。添加了设置 analyze_index_with_space_filling_curves 以启用或禁用此分析。这关闭了 #41195。是 #4538 的延续。是 #6286 的延续。是 #28130 的延续。是 #41753 的延续。 #55642 (Alexey Milovidov)。
  • 添加了一个名为 force_optimize_projection_name 的新设置,它接受投影名称作为参数。如果其值设置为非空字符串,ClickHouse 将检查查询中是否至少使用过一次此投影。关闭了 #55331#56134 (Yarik Briukhovetskyi)。
  • 支持通过原生协议使用外部数据进行异步插入。以前,它仅在数据内联到查询中时才有效。 #54730 (Anton Popov)。
  • 添加了聚合函数 lttb,它使用 Largest-Triangle-Three-Buckets 算法来对数据进行降采样以进行可视化。 #53145 (Sinan)。
  • 查询 CHECK TABLE 具有更好的性能和可用性(发送进度更新,可取消)。支持使用 CHECK TABLE ... PART 'part_name' 检查特定 part。 #53404 (vdimir)。
  • 添加了函数 jsonMergePatch。当使用 JSON 数据作为字符串时,它提供了一种将这些字符串(JSON 对象)合并在一起以形成包含单个 JSON 对象的单个字符串的方法。 #54364 (Memo)。
  • Kusto 查询语言方言支持的第二部分。 第一阶段实现 已合并。 #42510 (larryluogit)。
  • 添加了一个新的 SQL 函数 arrayRandomSample(arr, k),它从输入数组返回 k 个元素的样本。以前只能使用不太方便的语法来实现类似的功能,例如“SELECT arrayReduce('groupArraySample(3)', range(10))”。 #54391 (itayisraelov)。
  • 引入 -ArgMin/-ArgMax 聚合组合器,它们允许仅按最小值/最大值进行聚合。可以在 #54818 中找到一个用例。此 PR 还将组合器重组到专用文件夹中。 #54947 (Amos Bird)。
  • 允许使用 SYSTEM DROP SCHEMA FORMAT CACHE [FOR Protobuf] 删除 Protobuf 格式的缓存。 #55064 (Aleksandr Musorin)。
  • 添加了外部 HTTP Basic 身份验证器。 #55199 (Aleksei Filatov)。
  • 添加了函数 byteSwap,它反转无符号整数的字节顺序。这对于反转内部表示为无符号整数的类型的值(例如 IPv4)特别有用。 #55211 (Priyansh Agrawal)。
  • 添加了函数 formatQuery,它返回 SQL 查询字符串的格式化版本(可能跨越多行)。还添加了函数 formatQuerySingleLine,它执行相同的操作,但返回的字符串不包含换行符。 #55239 (Salvatore Mesoraca)。
  • 添加了 DWARF 输入格式,该格式从 ELF 可执行文件/库/目标文件读取调试符号。 #55450 (Michael Kolupaev)。
  • 允许在 RabbitMQ、NATS 和 FileLog 引擎中保存未解析的记录和错误。添加了虚拟列 _error_raw_message(对于 NATS 和 RabbitMQ),_raw_record(对于 FileLog),当 ClickHouse 无法解析新记录时,这些列将被填充。此行为受存储设置 nats_handle_error_mode(对于 NATS)、rabbitmq_handle_error_mode(对于 RabbitMQ)、handle_error_mode(对于 FileLog)控制,类似于 kafka_handle_error_mode。如果设置为 default,则当 ClickHouse 无法解析记录时将抛出异常;如果设置为 stream,则错误和原始记录将保存到虚拟列中。关闭了 #36035#55477 (Kruglov Pavel)。
  • Keeper 客户端改进:添加了 get_all_children_number command 命令,该命令返回特定路径下所有子节点的数量。 #55485 (guoxiaolong)。
  • Keeper 客户端改进:添加了 get_direct_children_number 命令,该命令返回路径下直接子节点的数量。 #55898 (xuzifu666)。
  • 添加了语句 SHOW SETTING setting_name,它是现有语句 SHOW SETTINGS 的简化版本。 #55979 (Maksim Kita)。
  • system.parts_columns 表添加了字段 substreamsfilenames#55108 (Anton Popov)。
  • 添加了对 SHOW MERGES 查询的支持。 #55815 (megao)。
  • 引入了设置 create_table_empty_primary_key_by_default 以默认使用 ORDER BY ()#55899 (Srikanth Chekuri)。

性能提升

  • 添加了选项 query_plan_preserve_num_streams_after_window_functions,以在评估窗口函数后保留流的数量,从而允许并行流处理。 #50771 (frinkr)。
  • 如果数据量小,则释放更多流。 #53867 (Jiebin Sun)。
  • RoaringBitmaps 在序列化之前进行了优化。 #55044 (UnamedRus)。
  • 倒排索引中的倒排列表现在已优化为使用尽可能小的内部位图表示形式。根据数据的重复性,这可能会显着减少倒排索引的空间消耗。 #55069 (Harry Lee)。
  • 修复了 Context 锁上的争用,这显着提高了大量短时并发查询的性能。 #55121 (Maksim Kita)。
  • 将倒排索引创建的性能提高了 30%。这是通过将 std::unordered_map 替换为 absl::flat_hash_map 实现的。 #55210 (Harry Lee)。
  • 支持 ORC 过滤器下推(行组级别)。 #55330 (李扬)。
  • 提高了具有大量临时文件的外部聚合的性能。 #55489 (Maksim Kita)。
  • 默认情况下,为二级索引的标记缓存设置合理的尺寸,以避免重复加载标记。 #55654 (Alexey Milovidov)。
  • 在读取跳跃索引时,避免不必要的索引粒度重建。这解决了 #55653#55683 (Amos Bird)。
  • 在执行期间缓存 set 中的 CAST 函数,以提高 set 元素类型与列类型不完全匹配时函数 IN 的性能。 #55712 (Duc Canh Le)。
  • ColumnVector::insertManyColumnVector::insertManyFrom 的性能提升。 #55714 (frinkr)。
  • 通过预测下一行的键位置并减少比较次数,优化了 Map 下标操作。 #55929 (lgbo)。
  • 支持 Parquet 中的 struct 字段裁剪(在以前的版本中,在某些情况下不起作用)。 #56117 (lgbo)。
  • 添加了根据要读取的行数估计来调整查询执行中使用的并行副本数量的功能。 #51692 (Raúl Marín)。
  • 优化了生成大量临时文件时的外部聚合内存消耗。 #54798 (Nikita Taranov)。
  • async_socket_for_remote 模式(默认)下执行的分布式查询现在遵循 max_threads 限制。以前,某些查询可能会创建过多的线程(最多 max_distributed_connections),从而导致服务器性能问题。 #53504 (filimonov)。
  • 从 Zookeeper 分布式 DDL 队列执行 DDL 时,缓存可跳过的条目。 #54828 (Duc Canh Le)。
  • 实验性倒排索引不存储具有过多匹配项的 token(即倒排列表中的行 ID)。这节省了空间,并避免了在顺序扫描同样快或更快时进行无效的索引查找。先前控制何时不存储 token 的启发式方法(传递给索引定义的 density 参数)对于用户来说太令人困惑了。引入了更简单的启发式方法,该方法基于参数 max_rows_per_postings_list(默认值:64k),该参数直接控制倒排列表中允许的最大行 ID 数。 #55616 (Harry Lee)。
  • 提高了 EmbeddedRocksDB 表的写入性能。 #55732 (Duc Canh Le)。
  • 提高了 ClickHouse 在分区内有大量 part(超过 1000 个)时的整体弹性。它可以减少 TOO_MANY_PARTS 错误的数量。 #55526 (Nikita Mikhaylov)。
  • 减少了加载分层字典期间的内存消耗。 #55838 (Nikita Taranov)。
  • 所有字典都支持设置 dictionary_use_async_executor#55839 (vdimir)。
  • 防止反序列化 AggregateFunctionTopKGenericData 时过度使用内存。 #55947 (Raúl Marín)。
  • 在具有大量 watch 的 Keeper 上,AsyncMetrics 线程可能会在 DB::KeeperStorage::getSessionsWithWatchesCount 中消耗 100% 的 CPU 相当长的时间。修复方法是避免遍历繁重的 watcheslist_watches 集合。 #56054 (Alexander Gololobov)。
  • 添加了设置 optimize_trivial_approximate_count_query 以将 count 近似值用于存储 EmbeddedRocksDB。为 StorageJoin 启用简单计数。 #55806 (Duc Canh Le)。

改进

  • 函数 toDayOfWeek(MySQL 别名:DAYOFWEEK)、toYearWeekYEARWEEK)和 toWeekWEEK)现在支持 String 参数。这使其行为与 MySQL 的行为一致。 #55589 (Robert Schulze)。
  • 引入了设置 date_time_overflow_behavior,其可能的值为 ignorethrowsaturate,用于控制从 Date、Date32、DateTime64、Integer 或 Float 转换为 Date、Date32、DateTime 或 DateTime64 时的溢出行为。 #55696 (Andrey Zvonov)。
  • ALTER TABLE ... ACTION PARTITION [ID] {parameter_name:ParameterType} 实现查询参数支持。合并了 #49516。关闭了 #49449#55604 (alesapin)。
  • 在 EXPLAIN 中以更漂亮的方式打印处理器 ID。 #48852 (Vlad Seliverstov)。
  • 创建具有 lifetime 字段的直接字典将在创建时被拒绝(因为 lifetime 对于直接字典没有意义)。修复:#27861#49043 (Rory Crispin)。
  • 允许在带有分区的查询中使用参数,例如 ALTER TABLE t DROP PARTITION。关闭了 #49449#49516 (Nikolay Degterinsky)。
  • system.zookeeper_connection 添加了一个新列 xid#50702 (helifu)。
  • 在配置重新加载后,在 system.server_settings 中显示正确的服务器设置。 #53774 (helifu)。
  • 在查询中添加了对数学减号 字符的支持,类似于 -#54100 (Alexey Milovidov)。
  • 为实验性的 Replicated 数据库引擎添加了副本组。关闭了 #53620#54421 (Nikolay Degterinsky)。
  • 最好重试可重试的 s3 错误,而不是完全失败查询。默认情况下,将 s3_retry_attempts 设置为更大的值。 #54770 (Sema Checherinda)。
  • 添加了负载均衡模式 hostname_levenshtein_distance#54826 (JackyWoo)。
  • 改进了日志中隐藏密钥的功能。 #55089 (Vitaly Baranov)。
  • 目前,投影分析将仅在查询计划之上执行。设置 query_plan_optimize_projection 已过时(很久以前默认启用)。 #55112 (Nikita Mikhaylov)。
  • 当在具有命名元素的元组上调用函数 untuple 并且它本身具有别名时(例如 select untuple(tuple(1)::Tuple(element_alias Int)) AS untuple_alias),结果列名称现在从 untuple 别名和元组元素别名生成(在示例中为:“untuple_alias.element_alias”)。 #55123 (garcher22)。
  • 添加了设置 describe_include_virtual_columns,该设置允许将表的虚拟列包含到 DESCRIBE 查询的结果中。添加了设置 describe_compact_output。如果设置为 true,则 DESCRIBE 查询仅返回列的名称和类型,而不包含额外信息。 #55129 (Anton Popov)。
  • 有时,OPTIMIZEoptimize_throw_if_noop=1 可能会因错误 unknown reason 而失败,而其真正原因是不同 part 中的投影不同。此行为已修复。 #55130 (Nikita Mikhaylov)。
  • 允许有多个 MaterializedPostgreSQL 表跟随同一个 Postgres 表。默认情况下,此行为未启用(为了兼容性,因为它是一个向后不兼容的更改),但可以使用设置 materialized_postgresql_use_unique_replication_consumer_identifier 启用。关闭了 #54918#55145 (Kseniia Sumarokova)。
  • 允许从短字符串解析负 DateTime64 和带有小数部分的 DateTime#55146 (Andrey Zvonov)。
  • 为了提高与 MySQL 的兼容性,1. information_schema.tables 现在包含了新的字段 table_rows,以及 2. information_schema.columns 现在包含了新的字段 extra#55215 (Robert Schulze)。
  • 如果 clickhouse-client 返回结果为零行并且抛出异常,则不会显示 "0 rows in set"。 #55240 (Salvatore Mesoraca)。
  • 支持在重命名表时省略关键字 TABLE,例如 RENAME db.t1 to db.t2#55373 (凌涛)。
  • system.clusters 添加了 internal_replication 字段。 #55377 (Konstantin Morozov)。
  • 根据请求协议选择远程代理解析器,添加了代理功能文档,并移除了 DB::ProxyConfiguration::Protocol::ANY#55430 (Arthur Passos)。
  • 避免在表关闭后对 INSERT 操作重试 Keeper 操作。 #55519 (Azat Khuzhin)。
  • 如果启用设置 use_mysql_types_in_show_columnsSHOW COLUMNS 现在可以正确地将 FixedString 类型报告为 BLOB。此外,还添加了两个新的设置 mysql_map_string_to_text_in_show_columnsmysql_map_fixed_string_to_text_in_show_columns,用于将 StringFixedString 类型的输出切换为 TEXTBLOB#55617 (Serge Klochkov)。
  • 在 ReplicatedMergeTree 表启动期间,ClickHouse 服务器会检查零件集合中是否存在意外零件(本地存在,但在 ZooKeeper 中不存在)。所有意外零件都会移动到 detached 目录,服务器会尝试恢复一些祖先(覆盖)零件来代替它们。现在,服务器会尝试恢复最近的祖先零件,而不是随机的覆盖零件。 #55645 (alesapin)。
  • 高级仪表板现在支持在触摸设备上拖动图表。这解决了 #54206 问题。 #55649 (Alexey Milovidov)。
  • 如果声明了默认查询格式,则在使用 http_write_exception_in_output_format 输出异常时使用该格式。 #55739 (Raúl Marín)。
  • 为常见的 MATERIALIZED VIEW 陷阱提供更友好的消息。 #55826 (Raúl Marín)。
  • 如果您删除了当前数据库,您仍然可以在 clickhouse-local 中运行一些查询并切换到另一个数据库。这使得行为与 clickhouse-client 一致。这解决了 #55834 问题。 #55853 (Alexey Milovidov)。
  • 函数 (add|subtract)(Year|Quarter|Month|Week|Day|Hour|Minute|Second|Millisecond|Microsecond|Nanosecond) 现在支持字符串编码的日期参数,例如 SELECT addDays('2023-10-22', 1)。这提高了与 MySQL 的兼容性,并且 Tableau Online 需要此功能。 #55869 (Robert Schulze)。
  • 禁用设置 apply_deleted_mask 后,允许读取被轻量级 DELETE 查询标记为已删除的行。这对于调试很有用。 #55952 (Alexander Gololobov)。
  • 允许在将 Tuple 序列化为 JSON 对象时跳过 null 值,这使得与 Spark 的 to_json 函数保持兼容性成为可能,这也对 Gluten 有用。 #55956 (李扬)。
  • 函数 (add|sub)Date 现在支持字符串编码的日期参数,例如 SELECT addDate('2023-10-22 11:12:13', INTERVAL 5 MINUTE)。加号和减号运算符也添加了对字符串编码日期参数的相同支持,例如 SELECT '2023-10-23' + INTERVAL 1 DAY。这提高了与 MySQL 的兼容性,并且 Tableau Online 需要此功能。 #55960 (Robert Schulze)。
  • 允许 CSV 格式中包含 CR (\r) 的非引用字符串。解决了 #39930 问题。 #56046 (Kruglov Pavel)。
  • 允许使用嵌入式配置运行 clickhouse-keeper#56086 (Maksim Kita)。
  • 设置 queued.min.messages 的最大配置值限制,以避免 Kafka 启动获取数据时出现问题。 #56121 (Stas Morozov)。
  • 修复了 SQL 函数 minSampleSizeContinous 中的拼写错误(已重命名为 minSampleSizeContinuous)。为了向后兼容性,保留了旧名称。这解决了: #56139 问题。 #56143 (Dorota Szeremeta)。
  • 在关闭服务器之前,打印磁盘上损坏零件的路径。在此更改之前,如果零件在磁盘上损坏且服务器无法启动,则几乎不可能了解哪个零件损坏。此问题已修复。 #56181 (Duc Canh Le)。

构建/测试/打包改进

  • 如果 Docker 中的数据库已初始化,则在后续启动时无需再次初始化。这可以潜在地解决数据库在 1000 次尝试内加载失败时容器无限重启的问题(与非常大的数据库和多节点设置相关)。 #50724 (Alexander Nikolaev)。
  • 包含子模块的源代码资源在 Darwin 特殊构建任务中构建。它可用于构建 ClickHouse 而无需检出子模块。 #51435 (Ilya Yatsishin)。
  • 当全局启用 AVX 系列指令(不建议这样做)构建 ClickHouse 时,会发生错误。原因是 Snappy 未启用 SNAPPY_HAVE_X86_CRC32#55049 (monchickey)。
  • 解决了从 clickhouse-server 包启动独立的 clickhouse-keeper 的问题。 #55226 (Mikhail f. Shiryaev)。
  • 在测试中,RabbitMQ 版本已更新至 3.12.6。改进了 RabbitMQ 测试的日志收集。 #55424 (Ilya Yatsishin)。
  • 修改了 openssl 和 boringssl 之间错误消息的差异,以修复功能测试。 #55975 (MeenaRenganathan22)。
  • 对 Apache DataSketches 使用上游仓库。 #55787 (Nikita Taranov)。

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

ClickHouse 23.9 版本发布,2023-09-28

向后不兼容的变更

  • 移除了 status_info 配置选项以及默认 Prometheus 处理程序中的字典状态。 #54090 (Alexey Milovidov)。
  • 从代码库中移除了实验性的零件元数据缓存。 #54215 (Alexey Milovidov)。
  • 默认禁用设置 input_format_json_try_infer_numbers_from_strings,因此我们默认情况下不会尝试从 JSON 格式的字符串中推断数字,以避免当示例数据包含看起来像数字的字符串时可能发生的解析错误。 #55099 (Kruglov Pavel)。

新功能

  • 改进了从 JSON 格式推断模式的功能:1) 现在可以在 JSON 格式中使用设置 input_format_json_try_infer_named_tuples_from_objects 从 JSON 对象中推断命名元组,而无需实验性的 JSON 类型。以前,在没有实验性 JSON 类型的情况下,我们只能将 JSON 对象推断为 String 或 Map,现在我们可以推断命名元组。生成的元组类型将包含在模式推断期间在数据样本中读取的所有对象的键。这对于读取没有稀疏对象的结构化 JSON 数据很有用。该设置默认启用。2) 允许在设置 input_format_json_read_arrays_as_strings 下将 JSON 数组解析为 String 类型的列。这可以帮助读取具有不同类型值的数组。3) 允许在设置 input_format_json_infer_incomplete_types_as_strings 下对示例数据中具有未知类型 (null/[]/{}) 的 JSON 键使用 String 类型。现在,在 JSON 格式中,我们可以将任何值读取到 String 列中,并且我们可以通过对未知类型使用 String 类型来避免在模式推断期间出现错误 Cannot determine type for column 'column_name' by first 25000 rows of data, most likely this column contains only Nulls or empty Arrays/Maps,从而成功读取数据。 #54427 (Kruglov Pavel)。
  • 为远程磁盘添加了 IO 调度支持。磁盘类型为 s3s3_plainhdfsazure_blob_storage 的存储配置现在可以包含 read_resourcewrite_resource 元素,这些元素持有资源名称。可以在单独的服务器配置部分 resources 中配置这些资源的调度策略。可以使用设置 workload 标记查询,并使用服务器配置部分 workload_classifiers 对查询进行分类,以实现不同的资源调度目标。更多详细信息请参阅 文档#47009 (Sergei Trifonov)。添加了 "bandwidth_limit" IO 调度节点类型。它允许您在通过此节点的流量上指定 max_speedmax_burst 约束。 #54618 (Sergei Trifonov)。
  • 添加了基于 SSH 密钥的新型身份验证。它仅适用于原生 TCP 协议。 #41109 (George Gamezardashvili)。
  • 为 MergeTree 表添加了新的列 _block_number#44532#47532 (SmitaRKulkarni)。
  • DROP TABLE 查询添加了 IF EMPTY 子句。 #48915 (Pavel Novitskiy)。
  • SQL 函数 toString(datetime, timezone)formatDateTime(datetime, format, timezone) 现在支持非常量时区参数。 #53680 (Yarik Briukhovetskyi)。
  • 添加了对 ALTER TABLE MODIFY COMMENT 的支持。注意:很久以前,一位外部贡献者添加了类似的功能,但该功能根本不起作用,只会让用户感到困惑。这解决了 #36377 问题。 #51304 (Alexey Milovidov)。注意:此命令不会在副本之间传播,因此表的副本可能具有不同的注释。
  • 添加了 GCD,也称为 “最大公约数”,作为一种新的数据压缩编解码器。该编解码器计算所有列值的 GCD,然后将每个值除以 GCD。GCD 编解码器是一种数据准备编解码器(类似于 Delta 和 DoubleDelta),不能单独使用。它适用于整数、decimal 和日期/时间类型的数据。GCD 编解码器的一个可行用例是列值以 GCD 的倍数变化(增加/减少),例如 24 - 28 - 16 - 24 - 8 - 24(假设 GCD = 4)。 #53149 (Alexander Nam)。
  • 添加了两个新的类型别名 DECIMAL(P)(作为 DECIMAL(P, 0) 的快捷方式)和 DECIMAL(作为 DECIMAL(10, 0) 的快捷方式)。这使得 ClickHouse 更兼容 MySQL 的 SQL 方言。 #53328 (Val Doroshchuk)。
  • 添加了一个新的系统日志表 backup_log,用于跟踪所有 BACKUPRESTORE 操作。 #53638 (Victor Krasnov)。
  • 添加了一个格式设置 output_format_markdown_escape_special_characters (默认值: false)。此设置控制是否在 Markdown 输出格式中转义特殊字符,如 !, #, $ 等 (即在特殊字符前添加反斜杠)。#53860 (irenjj)。
  • 添加函数 decodeHTMLComponent#54097 (Bharat Nallan)。
  • query_log 表中添加了 peak_threads_usage 列。#54335 (Alexey Gerasimchuck)。
  • 为 clickhouse-client 添加 SHOW FUNCTIONS 支持。#54337 (Julia Kartseva)。
  • 添加了函数 toDaysSinceYearZero,别名为 TO_DAYS (为了与 MySQL 兼容),该函数返回自 0001-01-01 (公历) 以来经过的天数。#54479 (Robert Schulze)。函数 toDaysSinceYearZero 现在支持 DateTimeDateTime64 类型的参数。#54856 (Serge Klochkov)。
  • 添加了函数 YYYYMMDDtoDate, YYYYMMDDtoDate32, YYYYMMDDhhmmssToDateTimeYYYYMMDDhhmmssToDateTime64。它们将以整数形式编码的日期或带时间的日期 (例如 20230911) 转换为原生日期或带时间的日期。 因此,它们提供了与现有函数 YYYYMMDDToDate, YYYYMMDDToDateTime, YYYYMMDDhhmmddToDateTime, YYYYMMDDhhmmddToDateTime64 相反的功能。#54509 (Quanfa Fu) (Robert Schulze)。
  • 添加了多个字符串距离函数,包括 byteHammingDistance, editDistance#54935 (flynn)。
  • 允许使用 VALID UNTIL datetime 子句指定用户凭据的过期日期,并可选择指定时间。#51261 (Nikolay Degterinsky)。
  • 允许表函数 s3, gcs, oss 使用 S3 风格的 URL。URL 会自动转换为 HTTP。示例:'s3://clickhouse-public-datasets/hits.csv' 会转换为 'https://clickhouse-public-datasets.s3.amazonaws.com/hits.csv'#54931 (Yarik Briukhovetskyi)。
  • 添加了新的设置 print_pretty_type_names,用于打印美观的深度嵌套类型,如 Tuple/Maps/Arrays。#55095 (Kruglov Pavel)。

性能提升

  • 默认启用预取以加速从 S3 读取数据。#53709 (Alexey Milovidov)。
  • 如果对于带有 FINAL 的查询不是必需的,则不再隐式读取孤立数据分区的 PK 和版本列。#53919 (Duc Canh Le)。
  • 优化按常量键分组。将优化在 https://github.com/ClickHouse/ClickHouse/pull/53529 之后按 _file/_path 分组的查询。#53549 (Kruglov Pavel)。
  • 提高了 Decimal 列排序的性能。提高了当 ORDER BY 子句包含 Decimal 列时,插入 MergeTree 表的性能。提高了当数据已经排序或接近排序时的排序性能。#35961 (Maksim Kita)。
  • 提高了大型查询分析的性能。修复了 #51224#51469 (frinkr)。
  • 如果从带有 GROUP BY 的子查询中选择,则将 COUNT(DISTINCT ...) 和各种 uniq 变体重写为 count 的优化。#52082 #52645 (JackyWoo)。
  • 移除了手动调用 mmap/mremap/munmap,并将所有这些工作委托给 jemalloc - 这稍微提高了性能。#52792 (Nikita Taranov)。
  • 修复了使用 NATS 时 CPU 消耗过高的问题。#54399 (Vasilev Pyotr)。
  • 由于我们使用单独的指令来执行带有 datetime 参数的 toString,因此可以稍微提高非 datetime 参数的性能,并使某些代码部分更简洁。跟进 #53680#54443 (Yarik Briukhovetskyi)。
  • 此 PR 尝试将序列化结果直接放入 ColumnString,而不是将 json 元素序列化到 std::stringstream 中。#54613 (lgbo)。
  • 在表位于视图之后的情况下,为从 MergeTree 表中按相应顺序读取数据启用 ORDER BY 优化。#54628 (Vitaly Baranov)。
  • 通过重用 GeneratorJSONPath 并移除多个共享指针来改进 JSON SQL 函数。#54735 (lgbo)。
  • Keeper 尝试批量刷新请求以获得更好的性能。#53049 (Antonio Andelic)。
  • 现在,对于 INFILE 'glob_expression' 的情况,clickhouse-client 并行处理文件。关闭了 #54218#54533 (Max K.)。
  • 允许对 IN 函数使用主键,其中主键列类型与 IN 函数右侧的列类型不同。示例:SELECT id FROM test_table WHERE id IN (SELECT '5')。关闭了 #48936#54544 (Maksim Kita)。
  • Hash JOIN 尝试缩小内部缓冲区,消耗最大可用内存 (由 max_bytes_in_join 设置) 的一半。#54584 (vdimir)。
  • 对于数组 join,遵循 max_block_size 以避免可能的 OOM。关闭了 #54290#54664 (李扬)。
  • s3 表函数中重用 HTTP 连接。#54812 (Michael Kolupaev)。
  • MergeTreeRangeReader::Stream::ceilRowsToCompleteGranules 中的线性搜索替换为二分搜索。#54869 (usurai)。

实验性功能

  • 现在可以使用设置 max_threads_for_annoy_index_creation 并行创建 Annoy 索引。#54047 (Robert Schulze)。
  • 分布式并行副本不再从所有副本读取数据。#54199 (Igor Nikonov)。

改进

  • 允许将 MergeTree 数据分区中列文件的长名称替换为名称的哈希值。这有助于在某些情况下避免 File name too long 错误。#50612 (Anton Popov)。
  • 如果解析元数据失败,则将 JSON 格式的数据解析为 JSONEachRow。这将允许读取扩展名为 .json 的文件,即使实际格式是 JSONEachRow。关闭了 #45740#54405 (Kruglov Pavel)。
  • 在 HTTP 查询执行期间发生异常时,输出有效的 JSON/XML。添加了设置 http_write_exception_in_output_format 以启用/禁用此行为 (默认启用)。#52853 (Kruglov Pavel)。
  • 视图 information_schema.tables 现在有一个新字段 data_length,显示磁盘上数据的大概大小。Amazon QuickSight 生成的查询需要此字段。#55037 (Robert Schulze)。
  • MySQL 接口获得了预处理语句的最小实现,足以允许 Tableau Online 通过 MySQL 连接器连接到 ClickHouse。#54115 (Serge Klochkov)。请注意:预处理语句的实现非常简单,我们尚不支持参数绑定,这在 Tableau Online 的特定用例中不是必需的。如果在 Tableau Online 的广泛测试中发现问题,我们将作为后续工作来实现它。
  • regexp_tree 字典中支持不区分大小写和 dot-all 匹配模式。#50906 (Johann Gan)。
  • Keeper 改进:添加了 createIfNotExists Keeper 命令。#48855 (Konstantin Bogdanov)。
  • 更精确的整数类型推断,修复了 #51236#53003 (Chen768959)。
  • 为 MaterializedMySQL 中字符串字面量引入了字符集解析。#53220 (Val Doroshchuk)。
  • 修复了极少数情况下极少使用的 EmbeddedRocksDB 表引擎的细微问题:有时在 NFS 中运行 DROP TABLE 后,EmbeddedRocksDB 表引擎无法正确关闭文件。#53502 (Mingliang Pan)。
  • RESTORE TABLE ON CLUSTER 必须在主机上创建具有匹配 UUID 的复制表。否则,在 RESTORE 之后,ZooKeeper 路径中的宏 {uuid} 将无法正常工作。此 PR 实现了这一点。#53765 (Vitaly Baranov)。
  • 添加了 restore 设置 restore_broken_parts_as_detached:如果为 true,则 RESTORE 过程在恢复时不会因损坏的分区而停止,而是将所有损坏的分区复制到带有前缀 `broken-from-backup` 的 detached 文件夹中。如果为 false,则 RESTORE 过程将在第一个损坏的分区 (如果有) 上停止。默认值为 false。#53877 (Vitaly Baranov)。
  • 向 HTTP 标头 X-ClickHouse-Progress 和 X-ClickHouse-Summary 添加了 elapsed_ns 字段。#54179 (joelynch)。
  • 为 keeper-client 实现了 reconfig (https://github.com/ClickHouse/ClickHouse/pull/49450), sync, 和 exists 命令。#54201 (pufit)。
  • clickhouse-localclickhouse-client 现在允许多次指定 --query 参数,例如 ./clickhouse-client --query "SELECT 1" --query "SELECT 2"。此语法比 ./clickhouse-client --multiquery "SELECT 1;SELECT 2" 稍微直观一些,更易于编写脚本 (例如 queries.push_back('--query "$q"')),并且与现有参数 --queries-file 的行为更一致 (例如 ./clickhouse client --queries-file queries1.sql --queries-file queries2.sql)。#54249 (Robert Schulze)。
  • formatReadableTimeDelta 添加了亚秒级精度。#54250 (Andrey Zvonov)。
  • 默认启用 allow_remove_stale_moving_parts#54260 (vdimir)。
  • 修复了使用缓存中的计数,并改进了从存档读取数据的进度条。#54271 (Kruglov Pavel)。
  • 添加了使用 SSO 的 S3 凭据支持。要定义与 SSO 一起使用的配置文件,请设置 AWS_PROFILE 环境变量。#54347 (Antonio Andelic)。
  • 支持将 NULL 作为嵌套类型 Array/Tuple/Map 的输入格式的默认值。关闭了 #51100#54351 (Kruglov Pavel)。
  • 允许从 Arrow/Parquet 格式读取一些不寻常的 chunk 配置。#54370 (Arthur Passos)。
  • 为与 MySQL 兼容,向 stddevPop 函数添加了 STD 别名。关闭了 #54274#54382 (Nikolay Degterinsky)。
  • 为了与 MySQL 兼容,添加了 addDate 函数,并为了保持一致性,添加了 subDate 函数。参考 #54275#54400 (Nikolay Degterinsky)。
  • system.detached_parts 中添加了 modification_time 列。#54506 (Azat Khuzhin)。
  • 添加了一个设置 splitby_max_substrings_includes_remaining_string,用于控制参数 "max_substring" > 0 的 "splitBy*()" 函数是否在结果数组中包含剩余字符串 (如果有) (Python/Spark 语义)。默认行为不变。#54518 (Robert Schulze)。
  • 更好的 Int64/UInt64 字段的整数类型推断。#53003 的延续。现在它也适用于数组的数组等嵌套类型以及 map/tuple 等函数。问题:#51236#54553 (Kruglov Pavel)。
  • 为标量添加了数组运算,用于乘法、除法和取模。每种方式都适用,例如 5 * [5, 5][5, 5] * 5 - 两种情况都可能。#54608 (Yarik Briukhovetskyi)。
  • keeper-clientrm 命令中添加了可选的 version 参数,以支持更安全的删除。#54708 (János Benjamin Antal)。
  • 禁用了 systemd 杀死服务器 (当使用 Buffer 表时可能会导致数据丢失)。#54744 (Azat Khuzhin)。
  • 在系统表 system.functions 中添加了字段 is_deterministic,指示函数的结果在两次调用之间 (给定完全相同的输入) 是否稳定。#54766 #55035 (Robert Schulze)。
  • 使 information_schema 模式中的视图与 MySQL 中的等效视图更加兼容 (即修改和扩展了它们),达到 Tableau Online 能够连接到 ClickHouse 的程度。更具体地说:1. 字段 information_schema.tables.table_type 的类型从 Enum8 更改为 String。2. 向视图 information_schema.table 添加了字段 table_commenttable_collation。3. 添加了视图 information_schema.key_column_usagereferential_constraints。4. 将 information_schema 视图中的大写别名替换为具体的大写列。#54773 (Serge Klochkov)。
  • 如果用户尝试缓存带有非确定性函数 (如 now, randomStringdictGet) 的查询结果,则查询缓存现在会返回错误。与之前的行为 (静默地不缓存结果) 相比,这减少了用户的困惑和意外。#54801 (Robert Schulze)。
  • 禁止对 file/s3/url/... 存储使用 materialized/ephemeral/alias 等特殊列,修复了从文件插入 ephemeral 列的问题。关闭了 #53477#54803 (Kruglov Pavel)。
  • 备份的元数据收集更可配置。#54804 (Vitaly Baranov)。
  • clickhouse-local 的日志文件 (如果使用 --server_logs_file 标志启用) 现在将像 clickhouse-server 一样,在每行前添加时间戳、线程 ID 等。#54807 (Michael Kolupaev)。
  • 系统表 system.merge_tree_settings 中的字段 is_obsolete - 对于过时的 merge tree 设置,现在为 1。以前,只有描述表明该设置已过时。#54837 (Robert Schulze)。
  • 使在使用间隔字面量时可以使用复数。INTERVAL 2 HOURS 应等同于 INTERVAL 2 HOUR#54860 (Jordi Villar)。
  • 始终允许创建带有 Nullable PK 的 projection。这修复了 #54814#54895 (Amos Bird)。
  • 在连接重置失败后,重试备份的 S3 操作。#54900 (Vitaly Baranov)。
  • 在设置的最大值小于最小值的情况下,使异常消息更准确。#54925 (János Benjamin Antal)。
  • LIKE, match 和其他正则表达式匹配函数现在允许使用包含非 UTF-8 子字符串的模式进行匹配,方法是回退到二进制匹配。示例:您可以使用 string LIKE '\xFE\xFF%' 来检测 BOM。这关闭了 #54486#54942 (Alexey Milovidov)。
  • 添加了 ContextLockWaitMicroseconds profile event。#55029 (Maksim Kita)。
  • Keeper 动态调整日志级别。#50372 (helifu)。
  • 添加了函数 timestamp 以与 MySQL 兼容。关闭了 #54275#54639 (Nikolay Degterinsky)。

构建/测试/打包改进

  • 将 ClickHouse 官方构建和持续集成构建的编译器从 Clang 16 升级到 17。#53831 (Robert Schulze)。
  • 为查找重新生成了 tld 数据 (tldLookup.generated.cpp)。#54269 (Bharat Nallan)。
  • 移除了冗余的 clickhouse-keeper-client 符号链接。#54587 (Tomas Barton)。
  • 使用 /usr/bin/env 解析 bash - 现在它支持 Nix OS。#54603 (Fionera)。
  • CMake 添加了 PROFILE_CPU 选项,执行 perf record 时无需使用 DWARF 调用图。#54917 (Maksim Kita)。
  • 如果链接器与 LLD 不同,则以致命错误停止。#55036 (Alexey Milovidov)。
  • 将处理 (编码/解码) base64 值的库从 Turbo-Base64 替换为 aklomp-base64。两者都在 x86 和 ARM 上进行了 SIMD 加速,但 1. 后者的许可证 (BSD-2) 对 ClickHouse 更有利,Turbo64 同时切换到了 GPL-3,2. aklomp-base64 拥有更多的 GitHub 星星,似乎更具前瞻性,3. aklomp-base64 具有稍微更友好的 API (这可以说是主观的),并且 4. aklomp-base64 不需要我们绕过错误 (例如非线程安全初始化)。注意:aklomp-base64 拒绝未填充的 base64 值,而 Turbo-Base64 会尽最大努力解码它们。RFC-4648 对填充是否是强制性的保持开放态度,但根据上下文,这可能是需要注意的行为更改。#54119 (Mikhail Koviazin)。

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

ClickHouse 23.8 LTS 版本发布,2023-08-31

向后不兼容的变更

  • 如果动态磁盘包含名称,则应在磁盘函数参数中将其指定为 disk = disk(name = 'disk_name', ...)。在以前的版本中,它可以指定为 disk = disk_<disk_name>(...),但不再支持。 #52820 (Kseniia Sumarokova)。
  • 当使用 --concurrency 且值大于 1 时,clickhouse-benchmark 将并行建立连接。以前,如果您从欧洲向美国运行 1000 个并发连接,它将不可用。修正了高延迟连接的 QPS 的正确计算方法。向后不兼容的变更:删除了 clickhouse-benchmark 的 JSON 输出选项。如果您使用过此选项,您还可以从 system.query_log 中以 JSON 格式提取数据作为替代方案。 #53293 (Alexey Milovidov)。
  • system.text_log 中删除了 microseconds 列,并从 system.metric_log 中删除了 milliseconds 列,因为在存在 event_time_microseconds 列的情况下,它们是冗余的。 #53601 (Alexey Milovidov)。
  • 弃用元数据缓存功能。它是实验性的,我们从未使用过它。该功能存在风险:#51182。删除 system.merge_tree_metadata_cache 系统表。元数据缓存在此版本中仍然可用,但很快将被删除。关闭了 #39197#51303 (Alexey Milovidov)。
  • 禁用 TLS 连接中对 3DES 的支持。 #52893 (Kenji Noguchi)。

新功能

  • 直接从 zip/7z/tar 存档导入。示例:file('*.zip :: *.csv')#50321 (nikitakeba)。
  • trace_type = 'MemorySample'system.trace_log 添加列 ptr。此列包含分配的地址。添加了函数 flameGraph,它可以构建包含已分配但未释放内存的火焰图。重做了 #38391#45322 (Nikolai Kochetov)。
  • 添加了表函数 azureBlobStorageCluster。支持的功能集与表函数 s3Cluster 非常相似。 #50795 (SmitaRKulkarni)。
  • 允许在问题 #50808 中使用不带表名的 clusterclusterAllReplicasremoteremoteSecure#50848 (Yangkuan Liu)。
  • 一个用于监控 Kafka consumers 的系统表。 #50999 (Ilya Golshtein)。
  • 添加了 max_sessions_for_user 设置。 #51724 (Alexey Gerasimchuck)。
  • 新增函数 toUTCTimestamp/fromUTCTimestamp,其作用与 spark 的 to_utc_timestamp/from_utc_timestamp 相同。 #52117 (KevinyhZou)。
  • 添加了新函数 structureToCapnProtoSchema/structureToProtobufSchema,用于将 ClickHouse 表结构转换为 CapnProto/Protobuf 格式 schema。允许在没有外部格式 schema 的情况下,使用表结构自动生成的 schema 输入/输出 CapnProto/Protobuf 格式的数据(由设置 format_capn_proto_use_autogenerated_schema/format_protobuf_use_autogenerated_schema 控制)。允许在使用设置 output_format_schema 进行输入/输出时导出自动生成的 schema。 #52278 (Kruglov Pavel)。
  • system.query_log 中的新字段 query_cache_usage 现在显示查询缓存是否被使用以及如何被使用。 #52384 (Robert Schulze)。
  • 添加了新函数 startsWithUTF8endsWithUTF8#52555 (李扬)。
  • 允许 TSV/CustomSeparated/JSONCompactEachRow 中可变数量的列,使 schema 推断能够处理可变数量的列。添加了设置 input_format_tsv_allow_variable_number_of_columnsinput_format_custom_allow_variable_number_of_columnsinput_format_json_compact_allow_variable_number_of_columns#52692 (Kruglov Pavel)。
  • 添加了 SYSTEM STOP/START PULLING REPLICATION LOG 查询(用于测试 ReplicatedMergeTree)。 #52881 (Alexander Tokmakov)。
  • 允许在 initiator 上对 mutations 执行常量非确定性函数。 #53129 (Anton Popov)。
  • 添加了输入格式 One,它不读取任何数据,并且始终返回单行,其中列 dummy 的类型为 UInt8,值为 0,类似于 system.one。它可以与 _file/_path 虚拟列一起使用,以列出 file/s3/url/hdfs/etc 表函数中的文件,而无需读取任何数据。 #53209 (Kruglov Pavel)。
  • 添加了 tupleConcat 函数。关闭了 #52759#53239 (Nikolay Degterinsky)。
  • 支持 TRUNCATE DATABASE 操作。 #53261 (Bharat Nallan)。
  • 添加了 max_threads_for_indexes 设置,以限制用于主键处理的线程数。 #53313 (jorisgio)。
  • 重新添加了 SipHash keyed 函数。 #53525 (Salvatore Mesoraca)。
  • (#52755 , #52895) 添加了函数 arrayRotateLeftarrayRotateRightarrayShiftLeftarrayShiftRight#53557 (Mikhail Koviazin)。
  • system.clusters 中添加了列 name 作为 cluster 的别名。 #53605 (irenjj)。
  • 高级仪表板现在允许批量编辑(保存/加载)。 #53608 (Alexey Milovidov)。
  • 高级仪表板现在可以选择最大化图表并移动它们。 #53622 (Alexey Milovidov)。
  • 添加了对数组加减法的支持:[5,2] + [1,7]。由于点乘和参数的标量积之间的混淆,因此未实现除法和乘法。关闭了 #49939#52625 (Yarik Briukhovetskyi)。
  • 添加了对将字符串字面量用作表名的支持。关闭了 #52178#52635 (hendrik-m)。

实验性功能

  • 添加了新的表引擎 S3Queue,用于从 s3 流式导入数据。关闭了 #37012#49086 (s-kat)。它尚未准备好使用。请勿使用它。
  • 启用通过分布式表从副本并行读取。与 #49708 相关。 #53005 (Igor Nikonov)。
  • 添加了对 HNSW 作为近似最近邻搜索方法的实验性支持。 #53447 (Davit Vardanyan)。目前仅供继续进行实现工作的人员使用。请勿使用它。

性能提升

  • Parquet 过滤器下推。即,在读取 Parquet 文件时,会根据 WHERE 条件和每列的最小值/最大值跳过行组(文件块)。特别是,如果文件大致按某些列排序,则按该列的短范围进行过滤的查询将更快。 #52951 (Michael Kolupaev)。
  • 通过在 Parquet 中将小行组批处理在一起,优化读取小行组。关闭了 #53069#53281 (Kruglov Pavel)。
  • 优化了大多数输入格式文件中 count 的计算。关闭了 #44334#53637 (Kruglov Pavel)。
  • url/file/hdfs 表函数中,在读取之前使用按文件/路径过滤。 #53529 (Kruglov Pavel)。
  • 为 AArch64、PowerPC、SystemZ、RISC-V 启用 JIT 编译。 #38217 (Maksim Kita)。
  • 添加了设置 rewrite_count_distinct_if_with_count_distinct_implementation,以使用 count_distinct_implementation 重写 countDistinctIf。关闭了 #30642#46051 (flynn)。
  • 通过并行化合并前的转换,加速合并 uniquniqExact 聚合函数状态。 #50748 (Jiebin Sun)。
  • 在使用大量可变长度键时,优化了 nullable string 键的聚合性能。 #51399 (LiuNeng)。
  • 在 Analyzer 中添加了一个 pass,用于使用 preimage 进行时间过滤器优化。在 ICX 设备(Intel Xeon Platinum 8380 CPU,80 核,160 线程)上进行的 SSB 性能实验表明,当启用实验性 analyzer 时,此更改可以将 geomean QPS 提高 8.5%。 #52091 (Zhiguo Zhou)。
  • 如果 uniqExact (COUNT DISTINCT) 函数中的所有哈希集都是单级的,则优化合并。 #52973 (Jiebin Sun)。
  • Join 表引擎:不要克隆包含所有列的哈希连接数据结构。 #53046 (Duc Canh Le)。
  • 实现了不使用 "apache arrow" 库的 native ORC 输入格式,以提高性能。 #53324 (李扬)。
  • 仪表板将告知服务器压缩数据,这对于通过慢速互联网连接传输大时间范围的数据非常有用。例如,一个包含 86400 个点的图表,未压缩时为 1.5 MB,使用 br 压缩后为 60 KB。 #53569 (Alexey Milovidov)。
  • 更好地利用线程池进行 BACKUP 和 RESTORE 操作。 #53649 (Nikita Mikhaylov)。
  • 在启动时并行加载文件系统缓存元数据。通过 load_metadata_threads(默认值:1)缓存配置设置进行配置。与 #52037 相关。 #52943 (Kseniia Sumarokova)。
  • 改进了 move_primary_key_columns_to_end_of_prewhere#53337 (Han Fei)。
  • 这优化了与 ClickHouse Keeper 的交互。以前,调用者可以多次注册相同的 watch 回调。在这种情况下,每个条目都会消耗内存,并且会多次调用相同的回调,这没有多大意义。为了避免这种情况,调用者可以有一些逻辑来避免多次添加相同的 watch。通过此更改,如果 watch 回调通过 shared_ptr 传递,则会在内部完成此去重。 #53452 (Alexander Gololobov)。
  • 缓存文件中的行数,以便在 file/s3/url/hdfs/azure 函数中进行 count 操作。可以通过设置 use_cache_for_count_from_files(默认启用)来启用/禁用缓存。是 https://github.com/ClickHouse/ClickHouse/pull/53637 的延续。 #53692 (Kruglov Pavel)。
  • 更仔细的线程管理将使 S3 表函数在处理大量文件时的速度提高 25% 以上。 #53668 (pufit)。

改进

  • 添加了 stderr_reaction 配置/设置,以控制当外部命令 stderr 具有数据时的反应(none、log 或 throw)。这有助于更轻松地调试外部命令。 #43210 (Amos Bird)。
  • system part_log 和 merge 表中添加了 partition 列。 #48990 (Jianfei Hu)。
  • 现在可以在运行时动态配置(index)未压缩/mark、mmap 和查询缓存的大小(无需服务器重启)。 #51446 (Robert Schulze)。
  • 如果使用复杂键创建字典,则自动选择 "complex key" 布局变体。 #49587 (xiebin)。
  • 添加了设置 use_concurrency_control,以便更好地测试新的并发控制功能。 #49618 (Alexey Milovidov)。
  • 添加了针对数据库和表错误键入名称的建议。 #49801 (Yarik Briukhovetskyi)。
  • 当 Gluten 读取 HDFS 中的小文件时,我们发现与直接通过 Spark 查询相比,它将花费更多时间。我们对此做了一些改进。 #50063 (KevinyhZou)。
  • 会话过期后有太多无价值的错误日志,我们不喜欢这样。 #50171 (helifu)。
  • 引入了时间绑定的回退 ZooKeeper 会话。修复了 DNS 地址的 system.zookeeper_connection 中的 index 列。 #50424 (Anton Kozlov)。
  • 添加了在达到 max_partitions_per_insert_block 时记录日志的功能。 #50948 (Sean Haynes)。
  • 为 clickhouse-keeper-client 添加了一堆自定义命令(主要是为了使 ClickHouse 调试更容易)。 #51117 (pufit)。
  • 更新了 azureBlobStorage 表函数中连接字符串的检查,因为带有 "sas" 的连接字符串并不总是以默认端点开头,并且在将 Azure 的容器添加到 URL 后,更新了连接 URL 以包含 "sas" 令牌。 #51141 (SmitaRKulkarni)。
  • 修复了 full_sorting_merge JOIN 算法中过滤集的描述。 #51329 (Tanay Tummalapalli)。
  • 修复了当 max_block_size 很大时 Aggregator 中的内存消耗问题。 #51566 (Nikita Taranov)。
  • 添加了 SYSTEM SYNC FILESYSTEM CACHE 命令。它将比较文件系统缓存的内存状态与磁盘上的状态,并在需要时修复内存状态。只有在您手动干预磁盘数据时才需要这样做,但这非常不鼓励。 #51622 (Kseniia Sumarokova)。
  • 尝试为 CH 创建通用代理解析器,同时保持与现有 S3 存储配置代理解析器的向后兼容性。 #51749 (Arthur Passos)。
  • 支持从 file/s3/hdfs/url/azureBlobStorage 表函数读取 tuple 子列。 #51806 (Kruglov Pavel)。
  • 函数 arrayIntersect 现在返回值时,其顺序与第一个参数相对应。关闭了 #27622#51850 (Yarik Briukhovetskyi)。
  • 添加了新的查询,允许在指定的访问存储中创建/删除访问实体,或将访问实体从一个访问存储移动到另一个访问存储。 #51912 (pufit)。
  • 使 ALTER TABLE FREEZE 查询在 Replicated 数据库引擎中不进行复制。 #52064 (Mike Kot)。
  • 增加了在意外关闭时刷新系统表的可能性。 #52174 (Alexey Gerasimchuck)。
  • 修复了 s3 表函数拒绝使用预签名 URL 的情况。关闭了 #50846#52310 (chen)。
  • system.eventssystem.metrics 表中,添加列 name 作为 eventmetric 的别名。关闭了 #51257#52315 (chen)。
  • 在解析器中添加了对语法 CREATE UNIQUE INDEX 的支持,作为无操作,以提高 SQL 兼容性。不支持 UNIQUE 索引。设置 create_index_ignore_unique = 1 以忽略查询中的 UNIQUE 关键字。 #52320 (Ilya Yatsishin)。
  • 在某些 Kafka 引擎设置(topic、consumer、client_id 等)中添加了对预定义宏 ({database}{table}) 的支持。 #52386 (Yury Bogomolov)。
  • 在备份/恢复期间禁用更新文件系统缓存。文件系统缓存在备份/恢复期间不应更新,因为它似乎只是减慢了进程速度,没有任何好处(因为 BACKUP 命令可以读取大量数据,并且将所有数据放入文件系统缓存并立即驱逐它没有用处)。 #52402 (Vitaly Baranov)。
  • S3 端点的配置允许从根目录使用它,并在需要时自动附加 '/'。 #47809#52600 (xiaolei565)。
  • 对于 clickhouse-local,允许位置选项并填充全局 UDF 设置 (user_scripts_path 和 user_defined_executable_functions_config)。 #52643 (Yakov Olkhovskiy)。
  • system.asynchronous_metrics 现在包含指标 "QueryCacheEntries" 和 "QueryCacheBytes" 以检查查询缓存。 #52650 (Robert Schulze)。
  • BACKUP 语句的 SETTINGS 子句中,为备份到 S3 添加了使用 s3_storage_class 参数的可能性。 #52658 (Roman Vasin)。
  • 添加了实用程序 print-backup-info.py,它解析备份元数据文件并打印有关备份的信息。 #52690 (Vitaly Baranov)。
  • 关闭了 #49510。目前,数据库和表名是区分大小写的,但 BI 工具有时以小写,有时以大写查询 information_schema。因此,我们有包含小写表的 information_schema 数据库,例如 information_schema.tables,以及包含大写表的 INFORMATION_SCHEMA 数据库,例如 INFORMATION_SCHEMA.TABLES。但有些工具正在查询 INFORMATION_SCHEMA.tablesinformation_schema.TABLES。建议的解决方案是在小写和大写 information_schema 数据库中复制小写和大写表。 #52695 (Yarik Briukhovetskyi)。
  • 查询 CHECK TABLE 具有更好的性能和可用性(发送进度更新,可取消)。 #52745 (vdimir)。
  • 添加了对元组的 modulointDivintDivOrZero 的支持,通过在元组元素之间分配它们。 #52758 (Yakov Olkhovskiy)。
  • xml 之后,在 clickhouse-client 中搜索默认的 yamlyml 配置文件。 #52767 (Alexey Milovidov)。
  • 当合并到非 'clickhouse' 根配置时,具有不同根节点名称的配置将被绕过,而不会引发异常。 #52770 (Yakov Olkhovskiy)。
  • 现在可以为使用采样内存分析器跟踪的分配指定最小 (memory_profiler_sample_min_allocation_size) 和最大 (memory_profiler_sample_max_allocation_size) 大小。 #52779 (alesapin)。
  • 添加了 precise_float_parsing 设置来切换浮点解析方法(快速/精确)。 #52791 (Andrey Zvonov)。
  • clickhouse-keeper (符号链接) 使用与 clickhouse-keeper (可执行文件) 相同的默认路径。 #52861 (Vitaly Baranov)。
  • 改进了表函数 remote 的错误消息。关闭了 #40220#52959 (jiyoungyoooo)。
  • RESTORE 查询的 SETTINGS 子句中添加了指定自定义存储策略的可能性。 #52970 (Victor Krasnov)。
  • 添加了限制备份操作(BACKUPRESTORE 命令现在遵循 s3_max_[get/put]_[rps/burst])中 S3 请求的能力。 #52974 (Daniel Pozo Escalona)。
  • 添加了设置以忽略管理复制的用户定义函数或具有复制存储的访问控制实体的查询中的 ON CLUSTER 子句。 #52975 (Aleksei Filatov)。
  • EXPLAIN JOIN 步骤的操作。 #53006 (Maksim Kita)。
  • 使 hasTokenOrNullhasTokenCaseInsensitiveOrNull 对于空 needles 返回 null。 #53059 (ltrk2)。
  • 允许限制文件系统缓存的允许路径。主要用于动态磁盘。如果在服务器配置中指定了 filesystem_caches_path,则所有文件系统缓存的路径都将限制为此目录。例如,如果缓存配置中的 path 是相对路径 - 它将被放置在 filesystem_caches_path 中;如果缓存配置中的 path 是绝对路径,则它必须位于 filesystem_caches_path 内。如果配置中未指定 filesystem_caches_path,则行为将与早期版本相同。 #53124 (Kseniia Sumarokova)。
  • 添加了一系列自定义命令(主要是为了使 ClickHouse 调试更容易)。 #53127 (pufit)。
  • 在模式推断期间添加了有关文件名的诊断信息 - 当您使用 glob 处理多个文件时,这很有帮助。 #53135 (Alexey Milovidov)。
  • 如果第二个连接不允许创建会话,客户端将使用主连接加载建议。 #53177 (Alexey Gerasimchuck)。
  • SYSTEM STOP/START LISTEN QUERIES [ALL/DEFAULT/CUSTOM] 查询添加 EXCEPT 子句,例如 SYSTEM STOP LISTEN QUERIES ALL EXCEPT TCP, HTTP#53280 (Nikolay Degterinsky)。
  • max_concurrent_queries 的默认值从 100 更改为 1000。如果并发查询不重,并且主要等待网络,则拥有许多并发查询是可以接受的。注意:不要混淆并发查询和 QPS:例如,ClickHouse 服务器可以在少于 100 个并发查询的情况下执行数万个 QPS。 #53285 (Alexey Milovidov)。
  • 限制并发后台分区优化合并的数量。 #53405 (Duc Canh Le)。
  • 添加了设置 allow_moving_table_directory_to_trash,允许在复制/恢复 Replicated 数据库时忽略 Directory for table data already exists 错误。 #53425 (Alexander Tokmakov)。
  • 如果服务器设置 asynchronous_metrics_update_period_sasynchronous_heavy_metrics_update_period_s 配置错误为 0,现在会优雅地失败,而不是终止应用程序。 #53428 (Robert Schulze)。
  • ClickHouse 服务器现在在重新加载其配置时尊重通过 cgroups 更改的内存限制。 #53455 (Robert Schulze)。
  • 添加了在 DETACHDROP 或服务器关闭时关闭刷新 Distributed 表的能力。 #53501 (Azat Khuzhin)。
  • domainRFC 函数现在支持方括号中的 IPv6。 #53506 (Chen768959)。
  • 为 S3 CopyObject 请求使用更长的超时时间,这些请求用于备份。 #53533 (Michael Kolupaev)。
  • 添加了服务器设置 aggregate_function_group_array_max_element_size。此设置用于限制序列化时 groupArray 函数的数组大小。默认值为 16777215#53550 (Nikolai Kochetov)。
  • 添加了 SCHEMA 作为 DATABASE 的别名,以提高 MySQL 兼容性。 #53587 (Daniël van Eeden)。
  • 添加了关于系统数据库中表的异步指标。例如,TotalBytesOfMergeTreeTablesSystem。这关闭了 #53603#53604 (Alexey Milovidov)。
  • Play UI 和 Dashboard 中的 SQL 编辑器将不使用 Grammarly。 #53614 (Alexey Milovidov)。
  • 作为专家级设置,现在可以 (1) 配置 [index] 标记/未压缩缓存的 size_ratio(即受保护队列的相对大小),(2) 配置索引标记和索引未压缩缓存的缓存策略。 #53657 (Robert Schulze)。
  • 在 TCPHandler 中的查询数据包中添加了客户端信息验证。 #53673 (Alexey Gerasimchuck)。
  • 在与 Microsoft Azure 交互时,重试加载零件以处理网络错误。 #53750 (SmitaRKulkarni)。
  • 异常的堆栈跟踪,Materailized view 异常被传播。 #53766 (Ilya Golshtein)。
  • 如果没有指定主机名或端口,keeper 客户端将尝试在 ClickHouse 的 config.xml 中搜索连接字符串。 #53769 (pufit)。
  • 添加了 profile event PartsLockMicroseconds,它显示了我们在 MergeTree 表引擎系列中持有数据部分锁的微秒数。 #53797 (alesapin)。
  • 使 keeper 中 RAFT 限制的重新连接限制可配置。此配置可以帮助 keeper 在当前连接断开时更快地重建与对等节点的连接。 #53817 (Pengyuan Bian)。
  • 忽略表定义中的外键以提高与 MySQL 的兼容性,因此用户无需重写其 SQL 的外键部分,参考 #53380#53864 (jsc0218)。

构建/测试/打包改进

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

ClickHouse 23.7 版本发布,2023-07-27

向后不兼容的变更

  • 添加 NAMED COLLECTION 访问类型 (别名 USE NAMED COLLECTION, NAMED COLLECTION USAGE)。此 PR 是向后不兼容的,因为此访问类型默认情况下是禁用的 (因为父访问类型 NAMED COLLECTION ADMIN 也默认禁用)。在 #50277 中提出。要授权使用,请使用 GRANT NAMED COLLECTION ON collection_name TO userGRANT NAMED COLLECTION ON * TO user,为了能够授予这些权限,需要在配置中配置 named_collection_admin (之前名为 named_collection_control,因此将保留作为别名)。#50625 (Kseniia Sumarokova)。
  • 修复了 system.parts 列名 last_removal_attemp_time 中的拼写错误。现在已更名为 last_removal_attempt_time#52104 (filimonov)。
  • 默认情况下将 distributed_ddl_entry_format_version 版本提升至 5 (启用 opentelemetry 和 initial_query_idd 传递)。这将导致降级后无法处理现有的 distributed DDL 条目 (但请注意,通常不应该存在此类未处理的条目)。#52128 (Azat Khuzhin)。
  • 以与检查普通元数据相同的方式检查 projection 元数据。此更改可能会阻止服务器在存在带有无效 projection 的表时启动。例如,projection 在 PK 中创建了位置列 (例如 projection p (select * order by 1, 4),这在表 PK 中是不允许的,并且可能在 insert/merge 期间导致崩溃)。在更新之前删除此类 projection。修复了 #52353#52361 (Nikolai Kochetov)。
  • 由于存在 bug,实验性功能 hashid 已被移除。该功能的实现质量从一开始就值得怀疑,并且未能通过实验性状态。关闭了 #52406#52449 (Alexey Milovidov)。

新功能

  • 添加了 Overlay 数据库引擎,用于将多个数据库合并为一个。添加了 Filesystem 数据库引擎,用于将文件系统中的目录表示为一组隐式可用的表,并自动检测格式和结构。新的 S3 数据库引擎允许以只读方式与 s3 存储交互,将前缀表示为一组表。新的 HDFS 数据库引擎允许以相同的方式与 HDFS 存储交互。#48821 (alekseygolub)。
  • 在 Keeper 中添加了对外部磁盘的支持,用于存储快照和日志。#50098 (Antonio Andelic)。
  • 添加了对多目录选择 ({}) glob 的支持。#50559 (Andrey Zvonov)。
  • Kafka 连接器可以使用 url 编码的凭据从 schema registry 中获取 Avro schema,并支持基本身份验证。#49664 (Ilya Golshtein)。
  • 添加了函数 arrayJaccardIndex,用于计算两个数组之间的 Jaccard 相似度。#50076 (FFFFFFFHHHHHHH)。
  • system.settings 和类似的表中添加了列 is_obsolete。关闭了 #50819#50826 (flynn)。
  • 实现了对配置文件中加密元素的支持。增加了在配置文件的叶子元素中使用加密文本的可能性。文本使用 <encryption_codecs> 部分的加密编解码器进行加密。#50986 (Roman Vasin)。
  • Grace Hash Join 算法现在适用于 FULL 和 RIGHT JOIN。#49483#51013 (lgbo)。
  • 添加了 SYSTEM STOP LISTEN 查询,以便更优雅地终止。关闭了 #47972#51016 (Nikolay Degterinsky)。
  • 添加了 input_format_csv_allow_variable_number_of_columns 选项。#51273 (Dmitry Kardymon)。
  • 另一个枯燥的功能:添加了函数 substring_index,与 Spark 或 MySQL 中的功能相同。#51472 (李扬)。
  • 系统表 jemalloc_bins 用于显示 jemalloc bins 的统计信息。示例 SELECT *, size * (nmalloc - ndalloc) AS allocated_bytes FROM system.jemalloc_bins WHERE allocated_bytes > 0 ORDER BY allocated_bytes DESC LIMIT 10。请享用。#51674 (Alexander Gololobov)。
  • 添加了 RowBinaryWithDefaults 格式,在每列之前添加一个额外的字节作为使用列默认值的标志。关闭了 #50854#51695 (Kruglov Pavel)。
  • 添加了 default_temporary_table_engine 设置。与 default_table_engine 相同,但用于临时表。#51292#51708 (velavokr)。
  • 添加了新的 initcap / initcapUTF8 函数,将每个单词的首字母转换为大写,其余字母转换为小写。#51735 (Dmitry Kardymon)。
  • Create table 现在支持列定义中的 PRIMARY KEY 语法。列按照定义的顺序添加到主索引中。#51881 (Ilya Yatsishin)。
  • 在日志和错误日志文件名中添加了使用日期和时间格式说明符的可能性,可以在配置文件 (logerrorlog 标签) 或命令行参数 (--log-file--errorlog-file) 中使用。#51945 (Victor Krasnov)。
  • 向 HTTP 标头添加了峰值内存使用量统计信息。#51946 (Dmitry Kardymon)。
  • 添加了新的 hasSubsequence (及其 CaseInsensitiveUTF8 版本) 函数,用于匹配字符串中的子序列。#52050 (Dmitry Kardymon)。
  • 为了与 PostgreSQL 兼容,添加了 array_agg 作为 groupArray 的别名。关闭了 #52100。 ### 用户可见更改的文档条目。#52135 (flynn)。
  • 添加了 any_value 作为 any 聚合函数的兼容性别名。关闭了 #52140#52147 (flynn)。
  • 为了与 BigQuery 兼容,添加了聚合函数 array_concat_agg,它是 groupArrayArray 的别名。关闭了 #52139#52149 (flynn)。
  • 添加了 OCTET_LENGTH 作为 length 的别名。关闭了 #52153#52176 (FFFFFFFHHHHHHH)。
  • 添加了 firstLine 函数,用于从多行字符串中提取第一行。关闭了 #51172#52209 (Mikhail Koviazin)。
  • 实现了 Interval 数据类型的 KQL 风格格式。这仅仅是为了与 Kusto 查询语言兼容。#45671 (ltrk2)。
  • 添加了查询 SYSTEM FLUSH ASYNC INSERT QUEUE,用于将所有待处理的异步插入刷新到目标表。添加了服务器端设置 async_insert_queue_flush_on_shutdown (默认为 true),用于确定是否在优雅关闭时刷新异步插入队列。设置 async_insert_threads 现在是服务器端设置。#49160 (Anton Popov)。
  • 为了与 PostgreSQL 兼容,添加了别名 current_database 和新函数 current_schemas#51076 (Pedro Riera)。
  • 为函数 today (现在可以使用 curdate/current_date 名称) 和 now (current_timestamp) 添加了别名。#52106 (Lloyd-Pottiger)。
  • 支持异步插入的 async_deduplication_token#52136 (Han Fei)。
  • 添加了新设置 disable_url_encoding,允许禁用 URL 引擎中 uri 的路径解码/编码。#52337 (Kruglov Pavel)。

性能提升

  • 默认启用自动选择稀疏序列化格式。这提高了性能。该格式自 22.1 版本起支持。此更改后,可能无法降级到低于 22.1 的版本。降级可能需要设置 ratio_of_defaults_for_sparse_serialization=0.9375 55153。您可以通过为 MergeTree 表提供 ratio_of_defaults_for_sparse_serialization = 1 设置来关闭稀疏序列化格式的使用。#49631 (Alexey Milovidov)。
  • 默认启用 move_all_conditions_to_prewhereenable_multiple_prewhere_read_steps 设置。#46365 (Alexander Gololobov)。
  • 通过调整分配器,提高了一些查询的性能。#46416 (Azat Khuzhin)。
  • 现在我们在 MergeTreePrefetchedReadPool 中使用固定大小的任务,就像在 MergeTreeReadPool 中一样。此外,从现在开始,我们对 S3 请求使用连接池。#49732 (Nikita Taranov)。
  • 更多条件下推到 join 的右侧。#50532 (Nikita Taranov)。
  • 通过预留哈希表的大小来改进 grace_hash join (重新提交)。#50875 (lgbo)。
  • 有时 OpenedFileCache 中的锁等待可能会很明显。我们将其分片为多个子映射 (每个子映射都有自己的锁) 以避免竞争。#51341 (Nikita Taranov)。
  • 将带有主键列的条件移动到 PREWHERE 链的末尾。这样做的目的是,带有 PK 列的条件很可能在 PK 分析中使用,并且不会对 PREWHERE 过滤做出更多贡献。#51958 (Alexander Gololobov)。
  • 通过内联 SipHash 加速 String 类型的 COUNT(DISTINCT)。在 ICX 设备 (Intel Xeon Platinum 8380 CPU,80 核,160 线程) 上进行的 OnTime 性能实验表明,此更改可以为查询 Q8 的 QPS 带来 11.6% 的提升,而对其他查询没有影响。#52036 (Zhiguo Zhou)。
  • 默认启用 allow_vertical_merges_from_compact_to_wide_parts。这将节省 merge 期间的内存使用量。#52295 (Alexey Milovidov)。
  • 修复了使主键失效的不正确的 projection 分析。此问题仅在 query_plan_optimize_primary_key = 1, query_plan_optimize_projection = 1 时存在。修复了 #48823。修复了 #51173#52308 (Amos Bird)。
  • 减少 FileCache::loadMetadata 中的系统调用次数 - 如果配置了文件系统缓存,这将加快服务器启动速度。#52435 (Raúl Marín)。
  • 允许为文件段大小设置严格的下限,通过在后台下载剩余数据来实现。文件段的最小大小 (如果实际文件大小更大) 配置为缓存配置设置 boundary_alignment,默认为 4Mi。后台线程数配置为缓存配置设置 background_download_threads,默认为 2。此外,在此 PR 中,max_file_segment_size8Mi 增加到 32Mi#51000 (Kseniia Sumarokova)。
  • 将 S3 的默认超时时间从 30 秒减少到 3 秒,将其他 HTTP 的默认超时时间从 180 秒减少到 30 秒。#51171 (Michael Kolupaev)。
  • 添加了新的设置 merge_tree_determine_task_size_by_prewhere_columns。如果设置为 true,则仅考虑来自 PREWHERE 部分的列的大小来确定读取任务大小。否则,将考虑查询中的所有列。#52606 (Nikita Taranov)。

改进

  • 在 s3/file/url/... 表函数中使用 read_bytes/total_bytes_to_read 作为进度条,以获得更好的进度指示。#51286 (Kruglov Pavel)。
  • 引入表设置 wait_for_unique_parts_send_before_shutdown_ms,指定副本在关闭用于复制发送的 interserver handler 之前等待的时间量。此外,修复了表和 interserver handler 关闭时的不一致性:现在服务器首先关闭表,然后在关闭 interserver handler。#51851 (alesapin)。
  • 允许 SQL 标准 FETCH 不带 OFFSET。请参阅 https://antonz.org/sql-fetch/#51293 (Alexey Milovidov)。
  • 允许使用配置文件中新的 http_forbid_headers 部分来过滤 URL/S3 表函数的 HTTP 标头。提供精确匹配和正则表达式过滤器。#51038 (Nikolay Degterinsky)。
  • 不要在日志中显示关于 16 EiB 可用空间的消息,因为它们没有意义。关闭了 #49320#49342 (Alexey Milovidov)。
  • 正确检查 sleepEachRow 函数的限制。添加了设置 function_sleep_max_microseconds_per_block。这是通用查询模糊测试器所需要的。#49343 (Alexey Milovidov)。
  • 修复了 geoHash 函数中的两个问题。#50066 (李扬)。
  • 将异步插入刷新查询记录到 system.query_log 中。#51160 (Raúl Marín)。
  • 函数 date_diffage 现在支持毫秒/微秒单位,并以微秒精度工作。#51291 (Dmitry Kardymon)。
  • 改进了 clickhouse-keeper-client 中路径的解析。#51359 (Azat Khuzhin)。
  • 依赖于 ClickHouse 的第三方产品 (Gluten: 一个使 Spark SQL 性能翻倍的插件) 存在 bug。此修复避免了该第三方产品在从 HDFS 读取时发生堆溢出。#51386 (李扬)。
  • 添加了禁用 S3 原生复制的能力 (BACKUP/RESTORE 的设置 allow_s3_native_copy,以及 s3/s3_plain 磁盘的 s3_allow_native_copy)。#51448 (Azat Khuzhin)。
  • system.parts 表添加了列 primary_key_size,以显示磁盘上压缩的主键大小。关闭了 #51400#51496 (Yarik Briukhovetskyi)。
  • 允许在没有 procfs、没有 home 目录存在以及没有来自 glibc 的名称解析插件的情况下运行 clickhouse-local#51518 (Alexey Milovidov)。
  • 在 rename_files_after_processing 设置中为 rule 文件名添加了占位符 %a#51603 (Kruglov Pavel)。
  • system.parts_columns 添加了列 modification_time#51685 (Azat Khuzhin)。
  • 为 CSV 格式添加了新设置 input_format_csv_use_default_on_bad_values,允许在单个字段解析失败时插入默认值。#51716 (KevinyhZou)。
  • 在意外崩溃后,添加了崩溃日志刷新到磁盘的功能。#51720 (Alexey Gerasimchuck)。
  • 修复了仪表板页面中未显示与身份验证无关的错误的行为。同时修复了“重叠”图表行为。#51744 (Zach Naimon)。
  • 允许 UUID 到 UInt128 的转换。#51765 (Dmitry Kardymon)。
  • 添加了对 Nullable 参数的 range 函数的支持。#51767 (Dmitry Kardymon)。
  • toyear(x) = c 这样的条件转换为 c1 <= x < c2#51795 (Han Fei)。
  • 改进了语句 SHOW INDEX 的 MySQL 兼容性。#51796 (Robert Schulze)。
  • 修复了 use_structure_from_insertion_table_in_table_functions 不适用于 MATERIALIZEDALIAS 列的问题。关闭了 #51817。关闭了 #51019#51825 (flynn)。
  • 缓存字典现在仅从源请求唯一键。关闭了 #51762#51853 (Maksim Kita)。
  • 修复了当提供 FORMAT 时,设置未应用于 EXPLAIN 查询的情况。#51859 (Nikita Taranov)。
  • 允许在 DESCRIBE TABLE 查询中在 FORMAT 之前使用 SETTINGS,以与 SELECT 查询兼容。关闭了 #51544#51899 (Nikolay Degterinsky)。
  • Var-Int 编码的整数 (例如,native 协议使用的) 现在可以使用完整的 64 位范围。建议第三方客户端相应地更新其 var-int 代码。#51905 (Robert Schulze)。
  • 在证书更改时更新证书,而无需手动 SYSTEM RELOAD CONFIG。#52030 (Mike Kot)。
  • 添加了 allow_create_index_without_type 设置,允许忽略未指定 TYPEADD INDEX 查询。标准 SQL 查询将成功执行,但不会更改表架构。#52056 (Ilya Yatsishin)。
  • 日志消息从服务器启动时开始写入到 system.text_log 中。#52113 (Dmitry Kardymon)。
  • 如果 HTTP 端点具有多个 IP 地址,并且第一个 IP 地址无法访问,则会抛出超时异常。现在创建会话时会处理所有已解析的端点。#52116 (Aleksei Filatov)。
  • Avro 输入格式现在支持 Union,即使它只包含单个类型。关闭了 #52131#52137 (flynn)。
  • 添加了设置 optimize_use_implicit_projections,用于禁用隐式 projection (目前仅限 min_max_count projection)。#52152 (Amos Bird)。
  • 可能使用函数 hasToken 导致无限循环。现在已消除这种可能性。关闭了 #52156#52160 (Alexey Milovidov)。
  • 乐观地创建 ZK ancestors。#52195 (Raúl Marín)。
  • 修复了 #50582。避免在某些按顺序读取和常量的情况下出现 Not found column ... in block 错误。#52259 (Chen768959)。
  • 尽早在 ClickHouse 端检查 S2 geo primitives 是否无效。关闭了:#27090#52260 (Nikita Mikhaylov)。
  • query_plan_optimize_projection = 1 时,添加回丢失的 projection QueryAccessInfo。修复了 #50183 。修复了 #50093#52327 (Amos Bird)。
  • ZooKeeperRetriesControl 重新抛出错误时,查看其原始堆栈跟踪比查看 ZooKeeperRetriesControl 自身的堆栈跟踪更有用。 #52347 (Vitaly Baranov)。
  • 即使某些磁盘不支持零拷贝复制锁,也要等待它。 #52376 (Raúl Marín)。
  • 现在,只有在表关闭后才会关闭 interserver 端口。 #52498 (alesapin)。

实验性功能

  • 写入 parquet 文件速度提升 10 倍,现在是多线程的。速度几乎与读取速度相同。 #49367 (Michael Kolupaev)。这由设置 output_format_parquet_use_custom_encoder 控制,默认情况下禁用,因为此功能尚不完善。
  • 添加了对 PRQL 作为查询语言的支持。 #50686 (János Benjamin Antal)。
  • 允许为自定义磁盘添加磁盘名称。以前,自定义磁盘会使用内部生成的磁盘名称。现在可以使用 disk = disk_<name>(...)(例如,磁盘将具有名称 name)来实现。 #51552 (Kseniia Sumarokova)。此语法可能会在此版本中更改。
  • (实验性 MaterializedMySQL)修复了在 mysqlxx::Pool::Entry 断开连接后使用它时发生的崩溃。 #52063 (Val Doroshchuk)。
  • (实验性 MaterializedMySQL)现在 MaterializedMySQL 中支持 CREATE TABLE ... AS SELECT ..。 #52067 (Val Doroshchuk)。
  • (实验性 MaterializedMySQL)为 MaterializedMySQL 引入了文本类型到 utf8 的自动转换。 #52084 (Val Doroshchuk)。
  • (实验性 MaterializedMySQL)现在 MaterializedMySQL 的 DDL 中支持未加引号的 UTF-8 字符串。 #52318 (Val Doroshchuk)。
  • (实验性 MaterializedMySQL)现在 MaterializedMySQL 中支持双引号注释。 #52355 (Val Doroshchuk)。
  • 1. 将 Intel QPL 从 v1.1.0 升级到 v1.2.0。 2. 将 Intel accel-config 从 v3.5 升级到 v4.0。 3. 修复了设备 IOTLB 未命中对 IAA 加速器性能产生重大影响的问题。 #52180 (jasperzhu)。
  • session_timezone 设置(23.6 版本中的新功能)被降级为实验性功能。 #52445 (Alexey Milovidov)。
  • 为 ClickHouse Keeper 支持 ZooKeeper reconfig 命令,通过增量重新配置,可以通过 keeper_server.enable_reconfiguration 设置启用。支持添加服务器、删除服务器和更改服务器优先级。 #49450 (Mike Kot)。怀疑此功能不完整。

构建/测试/打包改进

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

ClickHouse 23.6 版本发布,2023-06-29

向后不兼容的变更

  • 删除 fs 缓存中的功能 do_not_evict_index_and_mark_files。此功能只会使情况变得更糟。 #51253 (Kseniia Sumarokova)。
  • 删除对实验性 LIVE VIEW 的 ALTER 支持。 #51287 (Alexey Milovidov)。
  • http_max_field_value_sizehttp_max_field_name_size 的默认值降低到 128 KiB。 #51163 (Mikhail f. Shiryaev)。
  • 与 CPU 相关的 CGroups 指标被替换为一个指标 CGroupMaxCPU,以提高可用性。当设置时,Normalized CPU 使用率指标将标准化为 CGroups 限制,而不是 CPU 总数。这关闭了 #50836#50835 (Alexey Milovidov)。

新功能

  • 函数 transform 以及带有值匹配的 CASE 开始支持所有数据类型。这关闭了 #29730。这关闭了 #32387。这关闭了 #50827。这关闭了 #31336。这关闭了 #40493#51351 (Alexey Milovidov)。
  • 添加了选项 --rename_files_after_processing <pattern>。这关闭了 #34207#49626 (alekseygolub)。
  • INTO OUTFILE 子句中添加对 TRUNCATE 修饰符的支持。建议当文件存在时,对 INTO OUTFILE 使用 APPENDTRUNCATE#50950 (alekar)。
  • 添加表引擎 Redis 和表函数 redis。它允许查询外部 Redis 服务器。 #50150 (JackyWoo)。
  • 允许使用设置 s3_skip_empty_fileshdfs_skip_empty_filesengine_file_skip_empty_filesengine_url_skip_empty_files 跳过 file/s3/url/hdfs 表函数中的空文件。 #50364 (Kruglov Pavel)。
  • 添加一个名为 use_mysql_types_in_show_columns 的新设置,以更改 SHOW COLUMNS SQL 语句,以便在客户端通过 MySQL 兼容端口连接时显示 MySQL 等效类型。 #49577 (Thomas Panetti)。
  • Clickhouse-client 现在可以使用连接字符串而不是“--host”、“--port”、“--user”等来调用。 #50689 (Alexey Gerasimchuck)。
  • 添加设置 session_timezone;当未显式指定时,它用作会话的默认时区。 #44149 (Andrey Zvonov)。
  • Codec DEFLATE_QPL 现在通过服务器设置“enable_deflate_qpl_codec”(默认值:false)而不是设置“allow_experimental_codecs”来控制。这标志着 DEFLATE_QPL 不再是实验性的。 #50775 (Robert Schulze)。

性能提升

  • 改进了 ReplicatedMergeTree 中合并选择和清理任务的调度。当没有要合并或清理的内容时,任务不会执行过于频繁。添加了设置 max_merge_selecting_sleep_msmerge_selecting_sleep_slowdown_factormax_cleanup_delay_periodcleanup_thread_preferred_points_per_iteration。它应该关闭 #31919#50107 (Alexander Tokmakov)。
  • 使过滤器下推穿过 cross join。 #50605 (Han Fei)。
  • 使用线程本地 timer_id 而不是全局对象,提高启用 QueryProfiler 时的性能。 #48778 (Jiebin Sun)。
  • 重写 CapnProto 输入/输出格式以提高其性能。映射列名和 CapnProto 字段不区分大小写,修复嵌套结构字段的读取/写入。 #49752 (Kruglov Pavel)。
  • 优化并行线程的 parquet 写入性能。 #50102 (Hongbin Ma)。
  • 禁用处理 MATERIALIZED VIEW 和仅包含一个块的存储的 parallelize_output_from_storages#50214 (Azat Khuzhin)。
  • 合并 PR #46558。如果块已排序,则避免在排序期间进行块置换。 #50697 (Alexey Milovidov, Maksim Kita)。
  • 并行发出多个列表请求到 ZooKeeper,以加快从 system.zookeeper 表读取数据的速度。 #51042 (Alexander Gololobov)。
  • 加速时区 DateTime 查找表的初始化。这应该减少 clickhouse-client 的启动/连接时间,尤其是在调试构建中,因为它相当耗时。 #51347 (Alexander Gololobov)。
  • 修复由于同步 head 请求导致的数据湖缓慢问题。(与 Iceberg/Deltalake/Hudi 在处理大量文件时速度缓慢有关)。 #50976 (Kseniia Sumarokova)。
  • 不要从右侧 GLOBAL JOIN 表中读取所有列。 #50721 (Nikolai Kochetov)。

实验性功能

  • 支持带有 analyzer 的并行副本。 #50441 (Raúl Marín)。
  • 在执行大型合并/mutation 之前添加随机休眠,以便在零拷贝复制的情况下更均匀地分配副本之间的负载。 #51282 (alesapin)。
  • 如果 Replicated 数据库只有一个分片且底层表是 ReplicatedMergeTree,则不要通过 Replicated 数据库复制 ALTER PARTITION 查询和 mutations。 #51049 (Alexander Tokmakov)。

改进

  • 放宽“parts 过多”的阈值以使其更现代化。返回长时间运行的插入查询期间的反压。 #50856 (Alexey Milovidov)。
  • 允许将 IPv6 转换为 CIDR ::ffff:0:0/96 (IPv4 映射地址) 的 IPv4 地址。 #49759 (Yakov Olkhovskiy)。
  • 更新 MongoDB 协议以支持 MongoDB 5.1 版本及更高版本。保留对使用旧协议(<3.6)版本的支持。关闭了 #45621, #49879#50061 (Nikolay Degterinsky)。
  • 添加设置 input_format_max_bytes_to_read_for_schema_inference 以限制在 schema 推断中读取的字节数。关闭了 #50577#50592 (Kruglov Pavel)。
  • 在 schema 推断中遵守设置 input_format_null_as_default#50602 (Kruglov Pavel)。
  • 允许通过设置 input_format_csv_skip_trailing_empty_linesinput_format_tsv_skip_trailing_empty_linesinput_format_custom_skip_trailing_empty_lines(默认禁用)跳过 CSV/TSV/CustomSeparated 格式中的尾随空行。关闭了 #49315#50635 (Kruglov Pavel)。
  • 函数 "toDateOrDefault|OrNull" 和 "accuateCast[OrDefault|OrNull]" 现在可以正确解析数值参数。 #50709 (Dmitry Kardymon)。
  • 支持带有空格或 \t 字段分隔符的 CSV,Spark 中支持这些分隔符。 #50712 (KevinyhZou)。
  • 默认情况下,设置 number_of_mutations_to_delaynumber_of_mutations_to_throw 现在已启用,值分别为 500 和 1000。 #50726 (Anton Popov)。
  • 仪表板正确显示缺失值。 这修复了 #50831#50832 (Alexey Milovidov)。
  • 在函数 parseDateTimeBestEffort*parseDateTime64BestEffort* 中添加了使用 syslog 时间戳格式的日期和时间参数的可能性。 #50925 (Victor Krasnov)。
  • clickhouse-client 中的命令行参数 "--password" 现在只能指定一次。 #50966 (Alexey Gerasimchuck)。
  • 使用 system.parts 中的 hash_of_all_files 来检查集群备份期间 part 的一致性。 #50997 (Vitaly Baranov)。
  • 系统表 zookeeper_connection 的 connected_time 标识连接建立的时间(标准格式),并添加了 session_uptime_elapsed_seconds,用于标记已建立连接会话的持续时间(以秒为单位)。 #51026 (郭小龙)。
  • 通过使用源数据中的 chunk size 并在每个线程中使用增量总大小计数,改进了 file/s3/hdfs/url 表函数的进度条。 修复了 *Cluster 函数的进度条。 这修复了 #47250#51088 (Kruglov Pavel)。
  • 在 TCP 协议的 Progress 数据包中添加 total_bytes_to_read,以获得更好的进度条。 #51158 (Kruglov Pavel)。
  • 更好地检查带有文件系统缓存的磁盘上的数据 part。 #51164 (Anton Popov)。
  • 修复了 fs 缓存中有时不正确的 current_elements_num。 #51242 (Kseniia Sumarokova)。

构建/测试/打包改进

  • 向独立 Keeper 二进制文件添加嵌入式 keeper-client。 #50964 (pufit)。
  • 现在使用实际的 LZ4 版本。 #50621 (Nikita Taranov)。
  • ClickHouse 服务器将在致命错误时打印已更改设置的列表。 这修复了 #51137#51138 (Alexey Milovidov)。
  • 允许使用 clang-17 构建 ClickHouse。 #51300 (Alexey Milovidov)。
  • SQLancer 检查被认为是稳定的,因为它触发的错误已修复。 现在,SQLancer 检查的失败将被报告为检查失败状态。 #51340 (Ilya Yatsishin)。
  • 将 Dockerfile 中巨大的 RUN 拆分为较小的条件式。 在同一 RUN 层中按需安装必要的工具,并在之后将其删除。 仅在开始时升级操作系统一次。 使用现代方法检查签名存储库。 将基础存储库降级到 ubuntu:20.04 以解决旧 docker 版本上的问题。 升级 golang 版本以解决 golang 漏洞。 #51504 (Mikhail f. Shiryaev)。

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

ClickHouse 23.5 版本,2023-06-08

升级说明

  • 默认压缩 marks 和 primary key。 这显著减少了冷查询时间。 升级说明:版本 22.9 中已添加对压缩 marks 和 primary key 的支持。 如果您启用了压缩 marks 或 primary key,或者安装了 23.5 或更高版本(默认情况下启用了压缩 marks 或 primary key),您将无法降级到 22.8 或更早版本。 您还可以通过在服务器配置文件的 <merge_tree> 部分中指定 compress_markscompress_primary_key 设置来显式禁用压缩 marks 或 primary key。 升级说明: 如果您从 22.9 之前的版本升级,您应该一次升级所有副本,或者在升级前禁用压缩,或者通过中间版本升级,例如 23.3,其中支持压缩 marks 但默认情况下未启用。 #42587 (Alexey Milovidov)。
  • 使本地对象存储与 s3 对象存储一致地工作,修复了 append 问题(关闭 #48465),使其可配置为独立的存储。 此更改是向后不兼容的,因为本地对象存储顶部的缓存与以前的版本不兼容。 #48791 (Kseniia Sumarokova)。
  • 实验性功能“内存数据 part”已移除。 数据格式仍然受支持,但这些设置不再起作用,将使用 compact 或 wide part 代替。 这修复了 #45409#49429 (Alexey Milovidov)。
  • 更改了设置 parallelize_output_from_storagesinput_format_parquet_preserve_order 的默认值。 这允许 ClickHouse 在从文件(例如 CSV 或 Parquet)读取时重新排序行,从而在许多情况下大大提高性能。 要恢复保留顺序的旧行为,请使用 parallelize_output_from_storages = 0input_format_parquet_preserve_order = 1#49479 (Michael Kolupaev)。
  • 使 projections 达到生产就绪状态。 添加了 optimize_use_projections 设置来控制是否为 SELECT 查询选择 projections。 设置 allow_experimental_projection_optimization 已过时,不起任何作用。 #49719 (Alexey Milovidov)。
  • joinGet 标记为不确定性函数(以及 dictGet)。 这允许在 mutation 中使用它们,而无需额外的设置。 #49843 (Azat Khuzhin)。
  • 恢复“groupArray 返回值不能为 Nullable”的更改(由于 groupArray/groupArrayLast/groupArraySampleNullable 类型造成的二进制兼容性破坏,这可能会导致 TOO_LARGE_ARRAY_SIZECANNOT_READ_ALL_DATA)。 #49971 (Azat Khuzhin)。
  • 设置 enable_memory_bound_merging_of_aggregation_results 默认启用。 如果您从 22.12 之前的版本更新,我们建议在更新完成之前将此标志设置为 false#50319 (Nikita Taranov)。

新功能

  • 添加了存储引擎 AzureBlobStorage 和 azureBlobStorage 表函数。 支持的功能集与存储/表函数 S3 非常相似 [#50604] (https://github.com/ClickHouse/ClickHouse/pull/50604) (alesapin) (SmitaRKulkarni
  • 添加了原生 ClickHouse Keeper CLI 客户端,它以 clickhouse keeper-client 的形式提供 #47414 (pufit)。
  • 添加 urlCluster 表函数。 重构所有 *Cluster 表函数以减少代码重复。 使 schema 推断适用于所有可能的 *Cluster 函数签名和命名集合。 关闭 #38499#45427 (attack204), Pavel Kruglov。
  • 查询缓存现在可用于生产工作负载。 #47977 (Robert Schulze)。 查询缓存现在可以支持带有 totals 和 extremes 修饰符的查询。 #48853 (Robert Schulze)。 使 allow_experimental_query_cache 设置对于向后兼容性而言已过时。 它在 https://github.com/ClickHouse/ClickHouse/pull/47977 中被移除。 #49934 (Timur Solodovnikov)。
  • 地理数据类型(PointRingPolygonMultiPolygon)已达到生产就绪状态。 #50022 (Alexey Milovidov)。
  • 为 PostgreSQL、MySQL、MeiliSearch 和 SQLite 表引擎添加 schema 推断。 关闭 #49972#50000 (Nikolay Degterinsky)。
  • CREATE USER u IDENTIFIED BY 'p' 等查询中,Password 类型将根据服务器上 config.xml 中的设置 default_password_type 自动设置。 关闭 #42915#44674 (Nikolay Degterinsky)。
  • 添加 bcrypt 密码认证类型。 关闭 #34599#44905 (Nikolay Degterinsky)。
  • 引入新的关键字 INTO OUTFILE 'file.txt' APPEND#48880 (alekar)。
  • 添加了 system.zookeeper_connection 表,该表显示有关 Keeper 连接的信息。 #45245 (mateng915)。
  • 添加新函数 generateRandomStructure,用于生成随机表结构。 它可以与表函数 generateRandom 结合使用。 #47409 (Kruglov Pavel)。
  • 允许在没有 ELSE 分支的情况下使用 CASE,并扩展了 transform 以处理更多类型。 此外,修复了一些问题,这些问题导致当 decimal 类型与其他数字类型混合时,transform() 返回不正确的结果。 #48300 (Salvatore Mesoraca)。 这修复了 #2655。 这修复了 #9596。 这修复了 #38666。
  • 为 S3 表添加了使用 KMS 密钥的 服务器端加密,以及 S3 磁盘的 header 设置。 关闭 #48723#48724 (Johann Gan)。
  • 为后台任务(合并和 mutation)添加 MemoryTracker。 引入了 merges_mutations_memory_usage_soft_limitmerges_mutations_memory_usage_to_ram_ratio 设置,这些设置表示合并和 mutation 的软内存限制。 如果达到此限制,ClickHouse 将不会调度新的合并或 mutation 任务。 此外,还引入了 MergesMutationsMemoryTracking 指标,以允许观察后台任务的当前内存使用情况。 重新提交 #46089。 关闭 #48774#48787 (Dmitry Novik)。
  • 函数 dotProduct 适用于数组。 #49050 (FFFFFFFHHHHHHH)。
  • 支持语句 SHOW INDEX 以提高与 MySQL 的兼容性。 #49158 (Robert Schulze)。
  • 为表函数 url 添加虚拟列 _file_path 支持。 - 改进表函数 url 的错误消息。 - 解决 #49231 - 解决 #49232#49356 (Ziyi Tan)。
  • 在 users.xml 文件中添加 grants 字段,允许为用户指定授权。 #49381 (pufit)。
  • 支持使用 grace hash join 算法进行 full/right join。 #49483 (lgbo)。
  • WITH FILL 修饰符按排序前缀进行分组填充。 由 use_with_fill_by_sorting_prefix 设置控制(默认启用)。 与 #33203#issuecomment-1418736794 相关。 #49503 (Igor Nikonov)。
  • 当缺少 "--query" (或 "-q")时,Clickhouse-client 现在接受 "--multiquery" 之后的查询。 示例:clickhouse-client --multiquery "select 1; select 2;"。 #49870 (Alexey Gerasimchuk)。
  • 为接收来自副本的 Hello 数据包添加单独的 handshake_timeout。 关闭 #48854#49948 (Kruglov Pavel)。
  • 添加了一个函数 "space",它重复指定次数的空格。 #50103 (Robert Schulze)。
  • 添加了 --input_format_csv_trim_whitespaces 选项。 #50215 (Alexey Gerasimchuk)。
  • 允许 dictGetAll 函数对于 regexp tree 字典将来自多个匹配项的值作为数组返回。 关闭 #50254#50255 (Johann Gan)。
  • 添加了 toLastDayOfWeek 函数,用于将日期或带时间的日期向上舍入到最近的星期六或星期日。 #50315 (Victor Krasnov)。
  • 能够通过指定 ignore_data_skipping_indices 来忽略跳过索引。 #50329 (Boris Kuschel)。
  • 添加 system.user_processes 表和 SHOW USER PROCESSES 查询,以显示用户级别的内存信息和 ProfileEvents。 #50492 (János Benjamin Antal)。
  • 添加服务器和格式设置 display_secrets_in_show_and_select,用于显示表、数据库、表函数和字典的 secrets。 添加权限 displaySecretsInShowAndSelect,用于控制哪些用户可以查看 secrets。 #46528 (Mike Kot)。
  • 允许为属于 DATABASE 的所有表设置 ROW POLICY。 #47640 (Ilya Golshtein)。

性能改进

  • 默认压缩 marks 和 primary key。 这显著减少了冷查询时间。 升级说明:版本 22.9 中已添加对压缩 marks 和 primary key 的支持。 如果您启用了压缩 marks 或 primary key,或者安装了 23.5 或更高版本(默认情况下启用了压缩 marks 或 primary key),您将无法降级到 22.8 或更早版本。 您还可以通过在服务器配置文件的 <merge_tree> 部分中指定 compress_markscompress_primary_key 设置来显式禁用压缩 marks 或 primary key。 #42587 (Alexey Milovidov)。
  • 新设置 s3_max_inflight_parts_for_one_file 设置了在单个文件范围内使用多部分上传请求并发加载 part 的限制。 #49961 (Sema Checherinda)。
  • 当从多个文件读取时,减少每个文件的并行解析线程数。 解决 #42192#46661 (SmitaRKulkarni)。
  • 仅当聚合 projection 读取的 granule 少于正常读取时才使用聚合 projection。 这应该有助于查询命中表的 PK 但未命中 projection 的情况。 修复了 #49150#49417 (Nikolai Kochetov)。
  • 如果没有插入任何内容,则不要在 ANY hash join 中存储块。 #48633 (vdimir)。
  • 修复了 JIT 编译时聚合组合器 -If 的问题,并为聚合函数启用 JIT 编译。 关闭 #48120#49083 (Igor Nikonov)。
  • 对于从远程表读取,我们使用较小的任务(而不是读取整个 part)来使任务窃取工作 * 任务大小由要读取的列的大小决定 * 从 s3 读取时始终使用 1mb 缓冲区 * 缓存段的边界与 1mb 对齐,因此即使使用小任务,它们也具有足够的大小。 它还应防止碎片化。 #49287 (Nikita Taranov)。
  • 引入设置:- merge_max_block_size_bytes 限制用于后台操作的内存量。 - vertical_merge_algorithm_min_bytes_to_activate 添加另一个条件来激活垂直合并。 #49313 (Nikita Mikhaylov)。
  • 从本地文件系统读取的读取缓冲区默认大小更改为稍微更好的值。 此外,还引入了两个新设置:max_read_buffer_size_local_fsmax_read_buffer_size_remote_fs#49321 (Nikita Taranov)。
  • 改进 SPARSE_HASHED/HASHED 字典的内存使用率和速度(例如,SPARSE_HASHED 现在消耗的内存减少 2.6 倍,速度提高了约 2 倍)。 #49380 (Azat Khuzhin)。
  • 通过在适当的时候应用 LowCardinality 来优化 system.query_logsystem.query_thread_log 表。 对这些表的查询将更快。 #49530 (Alexey Milovidov)。
  • 在读取本地 Parquet 文件时获得更好的性能(通过并行读取)。 #49539 (Michael Kolupaev)。
  • 在某些情况下,将 RIGHT/FULL JOIN 的性能提高多达 2 倍,尤其是在将小型左表与大型右表连接时。 #49585 (lgbo)。
  • 通过为 Rust 启用 LTO,将 BLAKE3 的性能提高 11%。 #49600 (Azat Khuzhin)。 现在它与 C++ 相当。
  • 优化 system.opentelemetry_span_log 的结构。 在适当的地方使用 LowCardinality。 尽管此表通常很笨拙(即使对于常见属性也使用 Map 数据类型),但它会稍微好一些。 #49647 (Alexey Milovidov)。
  • 尝试在 grace_hash join 中预留哈希表的大小。 #49816 (lgbo)。
  • 并行合并 uniqExactIf 状态。 关闭 #49885#50285 (flynn)。
  • Keeper 改进:向 Keeper 添加 CheckNotExists 请求,这可以提高 Replicated 表的性能。 #48897 (Antonio Andelic)。
  • Keeper 性能改进:避免在处理时两次序列化相同的请求。 缓存大型请求的反序列化结果。 由新的协调设置 min_request_size_for_cache 控制。 #49004 (Antonio Andelic)。
  • 当选择要合并的 part 并且许多分区没有任何要合并的内容时,减少了 List ZooKeeper 请求的数量。 #49637 (Alexander Tokmakov)。
  • 重构 FS 缓存中的锁定 #44985 (Kseniia Sumarokova)。
  • 如果可能进行简单的计数优化,则禁用纯并行副本。#50594 (Raúl Marín)。
  • 在 Iceberg schema 推断中,不要为所有键发送 HEAD 请求,仅为用于读取数据的键发送请求。#50203 (Kruglov Pavel)。
  • 设置 enable_memory_bound_merging_of_aggregation_results 默认启用。#50319 (Nikita Taranov)。

实验性功能

  • DEFLATE_QPL 编解码器将最低 SIMD 版本降低至 SSE 4.2。qpl 中的文档更改 - Intel® QPL 依赖运行时内核调度器和 cpuid 检查来选择最佳可用实现(sse/avx2/avx512)- 重构了 clickhouse 中 qpl 构建的 cmakefile,以与最新的上游 qpl 对齐。#49811 (jasperzhu)。
  • 添加了对使用纯并行副本进行 JOIN 的初始支持。#49544 (Raúl Marín)。
  • 在使用“零拷贝复制”时,在 Outdated parts 删除上实现更高的并行性。#49630 (Alexander Tokmakov)。
  • 并行副本:1) 修复了在使用并行副本和禁用设置 parallel_replicas_for_non_replicated_merge_tree 的非复制存储时出现的错误 NOT_FOUND_COLUMN_IN_BLOCK;2) 现在 allow_experimental_parallel_reading_from_replicas 具有 3 个可能的值 - 0、1 和 2。0 - 禁用,1 - 启用,在失败时静默禁用它们(在 FINAL 或 JOIN 的情况下),2 - 启用,在失败时抛出异常。3) 如果在 SELECT 查询中使用了 FINAL 修饰符并且启用了并行副本,如果 allow_experimental_parallel_reading_from_replicas 设置为 1,ClickHouse 将尝试禁用它们,否则将抛出异常。#50195 (Nikita Mikhaylov)。
  • 当启用并行副本时,它们将始终跳过不可用的服务器(该行为由设置 skip_unavailable_shards 控制,默认启用且只能禁用)。这关闭了:#48565#50293 (Nikita Mikhaylov)。

改进

  • BACKUP 命令在创建备份时不会解密加密磁盘中的数据。相反,数据将以加密形式存储在备份中。此类备份只能恢复到具有相同(或扩展)加密密钥列表的加密磁盘。#48896 (Vitaly Baranov)。
  • 在 ATTACH PARTITION FROM 和 REPLACE PARTITION FROM 的 FROM 部分中添加了使用临时表的可能性。#49436 (Roman Vasin)。
  • MergeTree 表添加了设置 async_insert。它具有与查询级设置 async_insert 相同的含义,并为特定表启用异步插入。注意:它对来自 clickhouse-client 的插入查询无效,在这种情况下请使用查询级设置。#49122 (Anton Popov)。
  • 在 quota 创建语句参数中添加了对大小后缀的支持。#49087 (Eridanus)。
  • 扩展 first_valuelast_value 以接受 NULL。#46467 (lgbo)。
  • extractKeyValuePairs 添加别名 str_to_mapmapFromString。关闭 https://github.com/clickhouse/clickhouse/issues/47185#49466 (flynn)。
  • 为关于内存使用和可用性的异步指标添加了对 CGroup version 2 的支持。这关闭了 #37983#45999 (sichenzhao)。
  • 集群表函数应始终跳过不可用的分片。关闭 #46314#46765 (zk_kiger)。
  • 允许 CSV 文件在其标头中包含空列。#47496 (你不要过来啊)。
  • 添加 Google Cloud Storage S3 兼容表函数 gcs。与 osscosn 函数类似,它只是 s3 表函数的别名,不带来任何新功能。#47815 (Kuba Kaflik)。
  • 添加了对 S3 使用严格 parts 大小的能力(与 CloudFlare R2 S3 Storage 兼容)。#48492 (Azat Khuzhin)。
  • system.clusters 添加了包含关于 Replicated 数据库副本信息的列:database_shard_namedatabase_replica_nameis_active。向 SYSTEM DROP DATABASE REPLICA 查询添加了可选的 FROM SHARD 子句。#48548 (Alexander Tokmakov)。
  • 在 system.replicas 中添加了一个新列 zookeeper_name,用于指示复制表的元数据存储在哪个(辅助)ZooKeeper 集群上。#48549 (cangyin)。
  • IN 运算符支持 DateDate32 的比较。关闭 #48736#48806 (flynn)。
  • HDFS 中支持纠删码,作者:@M1eyu2018,@tomscut。#48833 (M1eyu)。
  • 实现从辅助 ZooKeeper 集群 SYSTEM DROP REPLICA,可能关闭 #48931#48932 (wangxiaobo)。
  • 向 MongoDB 添加 Array 数据类型。关闭 #48598#48983 (Nikolay Degterinsky)。
  • 支持在表中存储 Interval 数据类型。#49085 (larryluogit)。
  • 允许在不显式窗口框架定义的情况下使用 ntile 窗口函数:ntile(3) OVER (ORDER BY a),关闭 #46763#49093 (vdimir)。
  • 添加了设置(number_of_mutations_to_delaynumber_of_mutations_to_throw)以延迟或抛出创建 mutations 的 ALTER 查询(ALTER UPDATEALTER DELETEALTER MODIFY COLUMN、...),以防表已有很多未完成的 mutations。#49117 (Anton Popov)。
  • 捕获文件系统缓存中 create_directories 的异常。#49203 (Kseniia Sumarokova)。
  • 将嵌入式示例复制到 system.functions 中的新字段 example,以补充字段 description#49222 (Dan Roscigno)。
  • 为 MongoDB 字典启用连接选项。示例:xml <source> <mongodb> <host>localhost</host> <port>27017</port> <user></user> <password></password> <db>test</db> <collection>dictionary_source</collection> <options>ssl=true</options> </mongodb> </source> ### 用户可见更改的文档条目。#49225 (MikhailBurdukov)。
  • kolmogorovSmirnovTestasymp 计算方法添加了别名 asymptotic。改进了文档。#49286 (Nikita Mikhaylov)。
  • 聚合函数 groupBitAnd/Or/Xor 现在可以处理有符号整数数据。这使得它们与标量函数 bitAnd/Or/Xor 的行为保持一致。#49292 (exmy)。
  • 将函数文档拆分为更细粒度的字段。#49300 (Robert Schulze)。
  • 使用服务器内所有表共享的多个线程来加载过时的数据 parts。池的大小及其队列由 max_outdated_parts_loading_thread_pool_sizeoutdated_part_loading_thread_pool_queue_size 设置控制。#49317 (Nikita Mikhaylov)。
  • LowCardinality 列在块之间共享字典时,不要高估已处理数据的大小。这关闭了 #49322。另请参阅 #48745#49323 (Alexey Milovidov)。
  • Parquet writer 现在在通过 OUTFILE 调用时使用合理的行组大小。#49325 (Michael Kolupaev)。
  • 如果别名被引用,则允许将受限关键字(如 ARRAY)用作别名。关闭 #49324#49360 (Nikolay Degterinsky)。
  • 数据 parts 加载和删除作业已移动到共享的服务器范围池,而不是每个表的池。池大小通过顶级配置中的设置 max_active_parts_loading_thread_pool_sizemax_outdated_parts_loading_thread_pool_sizemax_parts_cleaning_thread_pool_size 控制。表级设置 max_part_loading_threadsmax_part_removal_threads 已过时。#49474 (Nikita Mikhaylov)。
  • 允许在 Play UI 的 URL 中使用 ?password=pass。密码在浏览器历史记录中被替换。#49505 (Mike Kot)。
  • 允许从远程文件系统读取零大小的对象。(因为空文件未备份,因此我们可能会在元数据文件中得到零 blob)。关闭 #49480#49519 (Kseniia Sumarokova)。
  • ThreadGroup 分离后,将线程 MemoryTracker 附加到 total_memory_tracker#49527 (Dmitry Novik)。
  • 修复当查询参数在查询中多次使用时,参数化视图的问题。#49556 (Azat Khuzhin)。
  • 释放为查询上下文中的最后一个已发送 ProfileEvents 快照分配的内存。后续 #47564#49561 (Dmitry Novik)。
  • 函数 "makeDate" 现在提供 MySQL 兼容的重载(年份和一年中的天数参数)。#49603 (Robert Schulze)。
  • 支持 RegExpTreeDictionarydictionary 表函数。#49666 (Han Fei)。
  • 添加了加权公平 IO 调度策略。添加了动态资源管理器,允许在运行时更新 IO 调度层次结构,而无需重启服务器。#49671 (Sergei Trifonov)。
  • 在上传多分段后添加到 GCS 的 compose 请求。这使得可以在使用多分段上传的对象上使用复制操作。建议将 s3_strict_upload_part_size 设置为某个值,因为 compose 请求可能会在以不同大小的 parts 创建的对象上失败。#49693 (Antonio Andelic)。
  • 对于 extractKeyValuePairs 函数:改进“尽力而为”的解析逻辑,以接受 key_value_delimiter 作为值的有效部分。这也简化了分支,甚至可能稍微加快速度。#49760 (Arthur Passos)。
  • 为 system.processors_profile_log 添加 initial_query_id 字段。#49777 (helifu)。
  • 系统日志表现在可以具有自定义排序键。#49778 (helifu)。
  • system.query_log 的新字段 partitions 用于指示哪些分区参与计算。#49779 (helifu)。
  • ReplicatedMergeTree 添加了 enable_the_endpoint_id_with_zookeeper_name_prefix 设置(默认禁用)。启用后,它会将 ZooKeeper 集群名称添加到表的 interserver 通信端点。这避免了当具有相同路径但不同辅助 ZooKeeper 的复制表时出现 Duplicate interserver IO endpoint 错误。#49780 (helifu)。
  • clickhouse-local 添加查询参数。关闭 #46561#49785 (Nikolay Degterinsky)。
  • 默认情况下允许从 YAML 加载字典和函数。在以前的版本中,它需要编辑配置文件中的 dictionaries_configuser_defined_executable_functions_config,因为它们期望 *.xml 文件。#49812 (Alexey Milovidov)。
  • Kafka 表引擎现在允许使用别名列。#49824 (Aleksandr Musorin)。
  • 添加设置以限制 extractKeyValuePairs 生成的最大对数,这是一种避免使用过多内存的安全措施。#49836 (Arthur Passos)。
  • 添加对 IN 运算符中的参数是单元素元组的(不常见)情况的支持。#49844 (MikhailBurdukov)。
  • bitHammingDistance 函数支持 StringFixedString 数据类型。关闭 #48827#49858 (flynn)。
  • 修复 OS X 上客户端的超时重置错误。#49863 (alekar)。
  • 在函数 bitCount 中添加对大整数(例如 UInt128、Int128、UInt256 和 Int256)的支持。这为 AI 应用启用了大型位掩码上的汉明距离。#49867 (Alexey Milovidov)。
  • 指纹将用于代替加密磁盘中的密钥 ID。这简化了加密磁盘的配置。#49882 (Vitaly Baranov)。
  • 向 PostgreSQL 添加 UUID 数据类型。关闭 #49739#49894 (Nikolay Degterinsky)。
  • 函数 toUnixTimestamp 现在接受 DateDate32 参数。#49989 (Victor Krasnov)。
  • 仅对字典收取服务器内存费用。#49995 (Azat Khuzhin)。
  • 服务器将允许使用 SQL_* 设置(例如 SQL_AUTO_IS_NULL)作为 MySQL 兼容性的 no-ops。这关闭了 #49927#50013 (Alexey Milovidov)。
  • 为 ON CLUSTER 查询保留 initial_query_id,这对于内省很有用(在 distributed_ddl_entry_format_version=5 下)。#50015 (Azat Khuzhin)。
  • 通过使用别名(optimize_use_projectionsallow_experimental_projection_optimizationenable_lightweight_deleteallow_experimental_lightweight_delete)来保留重命名设置的向后不兼容性。#50044 (Azat Khuzhin)。
  • 支持通过设置 my_hostname 传递 FQDN 以在 keeper 中注册集群节点。添加 invisible 设置以支持多计算组。计算组作为一个集群,对其他计算组不可见。#50186 (Yangkuan Liu)。
  • 修复 PostgreSQL 读取所有数据的问题,即使可以指定 LIMIT n#50187 (Kseniia Sumarokova)。
  • 为带有子查询的查询添加新的 profile events(QueriesWithSubqueries/SelectQueriesWithSubqueries/InsertQueriesWithSubqueries)。#50204 (Azat Khuzhin)。
  • 在 users.xml 文件中添加 roles 字段,允许通过配置文件指定具有授权的角色。#50278 (pufit)。
  • 在 AsynchronousMetrics 中报告 CGroupCpuCfsPeriodCGroupCpuCfsQuota。- 在服务器启动期间遵守 cgroup v2 内存限制。#50379 (alekar)。
  • 为 SIGQUIT 添加信号处理程序,使其与 SIGINT 的工作方式相同。关闭 #50298#50435 (Nikolay Degterinsky)。
  • 如果 JSON 解析由于对象过大而失败,则输出最后一个位置以允许调试。#50474 (Valentin Alexeev)。
  • 支持具有不固定大小的 decimals。关闭 #49130#50586 (Kruglov Pavel)。

构建/测试/打包改进

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

ClickHouse 23.4 版本,2023-04-26

向后不兼容的变更

  • 函数 formatDateTime() 中的格式化程序 '%M' 现在打印月份名称而不是分钟。这使得行为与 MySQL 一致。可以使用设置 "formatdatetime_parsedatetime_m_is_month_name = 0" 恢复之前的行为。#47246 (Robert Schulze)。
  • 此更改仅在您使用虚拟文件系统缓存时才有意义。如果虚拟文件系统缓存配置中的 path 不为空且不是绝对路径,则它将放置在 <clickhouse server data directory>/caches/<path_from_cache_config> 中。#48784 (Kseniia Sumarokova)。
  • 现在会拒绝具有相同表达式的主/二级索引和排序键。可以使用设置 allow_suspicious_indices 禁用此行为。#48536 (凌涛)。

新功能

  • 支持新的聚合函数 quantileGK/quantilesGK,类似于 Spark 中的 approx_percentile。Greenwald-Khanna 算法请参考 http://infolab.stanford.edu/~datar/courses/cs361a/papers/quantiles.pdf#46428 (李扬)。
  • 添加语句 SHOW COLUMNS,它显示来自 system.columns 的精简信息。#48017 (Robert Schulze)。
  • SYSTEM SYNC REPLICA 查询添加了 LIGHTWEIGHTPULL 修饰符。LIGHTWEIGHT 版本仅等待 fetches 和 drop-ranges(忽略 merges 和 mutations)。PULL 版本从 ZooKeeper 拉取新条目,不等待它们。修复了 #47794#48085 (Alexander Tokmakov)。
  • 添加 kafkaMurmurHash 函数以兼容 Kafka DefaultPartitioner。关闭了 #47834#48185 (Nikolay Degterinsky)。
  • 允许使用 GRANT CURRENT GRANTS 轻松创建与当前用户具有相同权限的用户。#48262 (pufit)。
  • 添加统计聚合函数 kolmogorovSmirnovTest。关闭了 #48228#48325 (FFFFFFFHHHHHHH)。
  • system.replicas 表中添加了 lost_part_count 列。该列值显示了对应表中丢失 part 的总数。该值存储在 ZooKeeper 中,可以代替非持久性的 ReplicatedDataLoss profile 事件进行监控。#48526 (Sergei Trifonov)。
  • 添加 soundex 函数以实现兼容性。关闭了 #39880#48567 (FriendLey)。
  • 支持 JSONExtract 的 Map 类型。#48629 (李扬)。
  • 添加 PrettyJSONEachRow 格式以输出带有换行符分隔符和 4 个空格缩进的漂亮 JSON。#48898 (Kruglov Pavel)。
  • 添加 ParquetMetadata 输入格式以读取 Parquet 文件元数据。#48911 (Kruglov Pavel)。
  • 添加 extractKeyValuePairs 函数以从字符串中提取键值对。输入字符串可能包含噪声(即日志文件/不需要 100% 格式化为键值对格式),该算法将查找与传递给函数的参数匹配的键值对。目前,该函数接受以下参数:data_column(必需),key_value_pair_delimiter(默认为 :),pair_delimiters(默认为 \space \, \;)和 quoting_character(默认为双引号)。#43606 (Arthur Passos)。
  • 函数 replaceOne()、replaceAll()、replaceRegexpOne() 和 replaceRegexpAll() 现在可以使用非 const pattern 和 replacement 参数调用。#46589 (Robert Schulze)。
  • 添加了用于处理 Map 类型列的函数:mapConcatmapSortmapExists#48071 (Anton Popov)。

性能提升

  • 现在读取 Parquet 格式的文件速度更快。IO 和解码是并行化的(由 max_threads 设置控制),并且仅读取所需的数据范围。#47964 (Michael Kolupaev)。
  • 如果我们运行一个带有 IN (子查询) 的 mutation,例如:ALTER TABLE t UPDATE col='new value' WHERE id IN (SELECT id FROM huge_table),并且表 t 具有多个 part,则对于每个 part,都会在内存中构建子查询 SELECT id FROM huge_table 的集合。如果有很多 part,则可能会消耗大量内存(并导致 OOM)和 CPU。解决方案是引入一个短期的集合缓存,该缓存由 mutation 任务当前正在构建。如果同时执行同一 mutation 的另一个任务,则它可以查找缓存中的集合,等待其构建并重用它。#46835 (Alexander Gololobov)。
  • 仅在应用 ALTER TABLE 查询时,才在必要时检查依赖项。#48062 (Raúl Marín)。
  • 优化函数 mapUpdate#48118 (Anton Popov)。
  • 现在,内部查询显式发送到本地副本,并从环回接口接收数据。设置 prefer_localhost_replica 不适用于并行副本。这是为了更好的调度并使代码更简洁:发起者仅负责协调读取过程和合并结果,持续响应请求,而所有辅助查询都读取数据。注意:使用环回接口的性能不是很高,否则某些副本可能会因任务匮乏而导致查询执行速度甚至更慢,并且无法利用所有可能的资源。协调器的初始化现在更加延迟。所有传入的请求都包含有关读取算法的信息,我们在第一个请求到达时使用该信息初始化协调器。如果任何副本决定使用不同的算法读取,则会抛出异常,并且查询将被中止。#48246 (Nikita Mikhaylov)。
  • 当子查询的 IN 子句仅用于跳过索引的分析,并且它们被设置禁用 (use_skip_indexes=0) 时,不要为子查询的 IN 子句的右侧构建集合。以前,这可能会影响查询的性能。#48299 (Anton Popov)。
  • 在读取 FROM file(...) 后立即并行化查询处理。与 #38755 相关。#48525 (Igor Nikonov)。在从任何数据源读取数据后立即并行化查询处理。受影响的数据源主要是简单的或外部存储,如表函数 urlfile#48727 (Igor Nikonov)。这由设置 parallelize_output_from_storages 控制,默认情况下未启用。
  • 降低了 ThreadPool 互斥锁的争用(可能会提高大量小型作业的性能)。#48750 (Sergei Trifonov)。
  • 减少多个 ALTER DELETE mutation 的内存使用量。#48522 (Nikolai Kochetov)。
  • 如果启用了 skip_unavailable_shards 设置,则删除过多的连接尝试。#48771 (Azat Khuzhin)。

实验性功能

改进

  • connect_timeout_with_failover_ms 的默认值增加到 1000 毫秒(由于在 https://github.com/ClickHouse/ClickHouse/pull/47229 中添加了异步连接)。关闭了 #5188#49009 (Kruglov Pavel)。
  • 围绕数据湖的一些改进: - 使 Iceberg 能够处理非分区数据。 - 支持 Iceberg 格式版本 v2(之前仅支持 v1) - 支持读取 DeltaLake/Hudi 的分区数据 - 通过使用 Delta 的 checkpoint 文件更快地读取 DeltaLake 元数据 - 修复了不正确的 Hudi 读取:之前它错误地选择了要读取的数据,因此只能正确读取小尺寸表 - 使这些引擎能够拾取已更改数据的更新(以前状态是在表创建时设置的) - 为 Iceberg/DeltaLake/Hudi 使用 Spark 进行适当的测试。#47307 (Kseniia Sumarokova)。
  • 添加异步连接到 socket 和异步写入 socket。使跨分片创建连接和发送查询/外部表异步化。使用 fibers 重构代码。关闭了 #46931。在此 PR 之后,我们将能够默认增加 connect_timeout_with_failover_ms (https://github.com/ClickHouse/ClickHouse/issues/5188)。#47229 (Kruglov Pavel)。
  • 支持配置部分 keeper/keeper_server 作为 zookeeper 的替代方案。关闭了 #34766 , #34767#35113 (李扬)。
  • 可以在 named_collections 中为具有 ClickHouse 表源的字典设置 secure 标志。解决了 #38450#46323 (Ilya Golshtein)。
  • bitCount 函数支持 FixedStringString 数据类型。#49044 (flynn)。
  • 为 Backup 查询的所有 [Zoo]Keeper 操作添加了可配置的重试。#47224 (Nikita Mikhaylov)。
  • 默认情况下为 S3 启用 use_environment_credentials,以便默认构建整个提供程序链。#47397 (Antonio Andelic)。
  • 目前,JSON_VALUE 函数类似于 Spark 的 get_json_object 函数,它支持通过类似 '$.key' 的路径从 JSON 字符串中获取值。但仍然有一些不同 - 1. 在 Spark 的 get_json_object 中,当路径不存在时将返回 null,但在 JSON_VALUE 中将返回空字符串; - 2. 在 Spark 的 get_json_object 中将返回复杂类型的值,例如 JSON 对象/数组值,但在 JSON_VALUE 中将返回空字符串。#47494 (KevinyhZou)。
  • 对于 use_structure_from_insertion_table_in_table_functions,更灵活的插入表结构传播到表函数。修复了名称映射和使用虚拟列的问题。不再需要 'auto' 设置。#47962 (Yakov Olkhovskiy)。
  • 如果查询被终止或超出限制,则不要继续重试连接到 Keeper。#47985 (Raúl Marín)。
  • 支持 BSONEachRow 中的 Enum 输出/输入,允许所有 map 键类型,并避免输出时进行额外的计算。#48122 (Kruglov Pavel)。
  • ORC/Arrow/Parquet 格式中支持更多 ClickHouse 类型:Enum(8|16)、(U)Int(128|256)、Decimal256 (for ORC),允许从 Int32 值读取 IPv4 (ORC 输出 IPv4 为 Int32,我们无法读取回来),修复从 ORC 的二进制数据中读取 Nullable(IPv6)。#48126 (Kruglov Pavel)。
  • 为表 system.storage_policies 添加列 perform_ttl_move_on_insertload_balancing,修改列 volume_type 类型为 Enum8#48167 (lizhuoyu5)。
  • 添加了 BACKUP ALL 命令,该命令备份所有表和数据库,包括临时表和系统表。#48189 (Vitaly Baranov)。
  • 函数 mapFromArrays 支持 Map 类型作为输入。#48207 (李扬)。
  • 现在对某些 SHOW PROCESSLIST 的输出进行了排序。#48241 (Robert Schulze)。
  • 每个查询/每个服务器的远程 IO/本地 IO/BACKUP 节流(服务器设置:max_remote_read_network_bandwidth_for_servermax_remote_write_network_bandwidth_for_servermax_local_read_bandwidth_for_servermax_local_write_bandwidth_for_servermax_backup_bandwidth_for_server,设置:max_remote_read_network_bandwidthmax_remote_write_network_bandwidthmax_local_read_bandwidthmax_local_write_bandwidthmax_backup_bandwidth)。#48242 (Azat Khuzhin)。
  • CapnProto 格式中支持更多类型:Map、(U)Int(128|256)、Decimal(128|256)。允许在输入/输出期间进行整数转换。#48257 (Kruglov Pavel)。
  • 不要为正常行为抛出 CURRENT_WRITE_BUFFER_IS_EXHAUSTED。#48288 (Raúl Marín)。
  • 添加新设置 keeper_map_strict_mode,该设置对在 KeeperMap 表之上执行的操作强制执行额外的保证。#48293 (Antonio Andelic)。
  • 检查简单字典的主键类型是否为原生无符号整型。添加设置 check_dictionary_primary_key 以实现兼容性(设置 check_dictionary_primary_key =false 以禁用检查)。 #48335 (lizhuoyu5)。
  • 不要为 KeeperMap 复制 mutation 操作,因为这是不必要的。 #48354 (Antonio Andelic)。
  • 允许在 Protobuf 格式中将未命名的元组写入/读取为嵌套消息。元组元素和消息字段按位置匹配。 #48390 (Kruglov Pavel)。
  • 在新 planner 中支持 additional_table_filtersadditional_result_filter 设置。此外,为 additional_result_filter 添加了文档条目。 #48405 (Dmitry Novik)。
  • parseDateTime 现在理解格式字符串 '%f' (小数秒)。 #48420 (Robert Schulze)。
  • formatDateTime() 中的格式字符串 "%f" 现在在格式化值没有小数秒时打印 "000000",可以使用设置 "formatdatetime_f_prints_single_zero = 1" 恢复之前的行为(单个零)。 #48422 (Robert Schulze)。
  • 不要为 KeeperMap 复制 DELETE 和 TRUNCATE 操作。 #48434 (Antonio Andelic)。
  • 在 generateRandom 函数中生成有效的 Decimal 和 Bool 类型。 #48436 (Kruglov Pavel)。
  • 允许在 SELECT 查询的表达式列表中使用尾随逗号,例如 SELECT a, b, c, FROM table。 关闭 #37802#48438 (Nikolay Degterinsky)。
  • 使用 --user--password 客户端参数覆盖 CLICKHOUSE_USERCLICKHOUSE_PASSWORD 环境变量。 关闭 #38909#48440 (Nikolay Degterinsky)。
  • 在发生可重试错误时,为 MergeTree 表中数据部分的加载添加重试机制。 #48442 (Anton Popov)。
  • arrayMinarrayMaxarrayDifference 函数添加对 DateDate32DateTimeDateTime64 数据类型的支持。 关闭 #21645#48445 (Nikolay Degterinsky)。
  • {server_uuid} 宏添加支持。当在运行时不断添加和删除新副本时,这对于在自动缩放集群中识别副本非常有用。 这关闭了 #48554#48563 (Alexey Milovidov)。
  • 如果可能,安装脚本将创建硬链接而不是复制。 #48578 (Alexey Milovidov)。
  • 支持与 SHOW CREATE TABLE 含义相同的 SHOW TABLE 语法。 关闭 #48580#48591 (flynn)。
  • HTTP 临时缓冲区现在支持通过从虚拟文件系统缓存中逐出数据来工作。 #48664 (Vladimir C)。
  • 使 Schema 推断适用于 CREATE AS SELECT。 关闭 #47599#48679 (flynn)。
  • ReplicatedMergeTree 添加了 replicated_max_mutations_in_one_entry 设置,该设置允许限制每个 MUTATE_PART 条目的 mutation 命令数(默认为 10000)。 #48731 (Alexander Tokmakov)。
  • 在 AggregateFunction 类型中,不要将未使用的 arena 字节数计为 read_bytes#48745 (Raúl Marín)。
  • 修复了一些与 MySQL 相关的设置,这些设置在使用 MySQL 字典源 + 命名集合时未被处理。 关闭 #48402#48759 (Kseniia Sumarokova)。
  • 如果用户将 max_single_part_upload_size 设置为非常大的值,则可能由于 AWS S3 SDK 中的错误而导致崩溃。 此修复了 #47679#48816 (Alexey Milovidov)。
  • 修复了 RabbitMQ 中的数据竞争 (报告),重构了代码。 #48845 (Kseniia Sumarokova)。
  • system.partssystem.part_log 添加别名 namepart_name。 关闭 #48718#48850 (sichenzhao)。
  • 函数 "arrayDifferenceSupport()"、"arrayCumSum()" 和 "arrayCumSumNonNegative()" 现在支持宽整型 (U)Int128/256 的输入数组。 #48866 (cluster)。
  • clickhouse-client 中的多行历史记录现在不再填充。这使得粘贴更加自然。 #48870 (Joanna Hulboj)。
  • 针对 ClickHouse 在 LXC 中运行且使用了 LXCFS 的罕见情况,实现了一个小的改进。LXCFS 存在一个问题:有时在从 /proc 中的文件读取时,它会返回错误 "Transport endpoint is not connected"。此错误已正确记录到 ClickHouse 的服务器日志中。我们还通过重新打开文件来解决此问题。这是一个微小的更改。 #48922 (Real)。
  • 改进了预取功能的内存核算。在 CI 中随机化预取设置。 #48973 (Kseniia Sumarokova)。
  • 正确设置 GCS 上原生复制操作的标头。 #48981 (Antonio Andelic)。
  • 添加了对在命令行中使用短划线而不是下划线来指定设置名称的支持,例如,--max-threads 而不是 --max_threads。 此外,支持 Unicode 短划线字符,如 而不是 -- - 当您与另一家公司的团队沟通,并且该团队的经理从 MS Word 复制粘贴代码时,这非常有用。 #48985 (alekseygolub)。
  • 当使用 SSL 用户证书进行身份验证失败时,添加回退到密码身份验证。 关闭 #48974#48989 (Nikolay Degterinsky)。
  • 改进了嵌入式仪表板。 关闭 #46671#49036 (Kevin Zhang)。
  • 为日志消息添加 profile events,以便您可以轻松查看按严重程度划分的日志消息计数。 #49042 (Alexey Milovidov)。
  • 在以前的版本中,当启用或未启用并行解析时,LineAsString 格式在存在 DOS 或 macOS Classic 换行符的情况下工作不一致。 这关闭了 #49039#49052 (Alexey Milovidov)。
  • 关于未解析查询参数的异常消息也将告知参数的名称。 重新实现 #48878。 关闭 #48772#49061 (Alexey Milovidov)。

构建/测试/打包改进

  • 更新时区。 以下时区已更新:Africa/Cairo, Africa/Casablanca, Africa/El_Aaiun, America/Bogota, America/Cambridge_Bay, America/Ciudad_Juarez, America/Godthab, America/Inuvik, America/Iqaluit, America/Nuuk, America/Ojinaga, America/Pangnirtung, America/Rankin_Inlet, America/Resolute, America/Whitehorse, America/Yellowknife, Asia/Gaza, Asia/Hebron, Asia/Kuala_Lumpur, Asia/Singapore, Canada/Yukon, Egypt, Europe/Kirov, Europe/Volgograd, Singapore。 #48572 (Alexey Milovidov)。
  • 减少头文件中的依赖项数量,以加快构建速度。 #47984 (Dmitry Novik)。
  • 在测试中随机化标记和索引的压缩。 #48286 (Alexey Milovidov)。
  • 将内部 ZSTD 从 1.5.4 升级到 1.5.5。 #46797 (Robert Schulze)。
  • 在测试中随机化从 compact part 到 wide part 的垂直合并。 #48287 (Raúl Marín)。
  • 支持 HDFS 中的 CRC32 校验和。 修复性能问题。 #48614 (Alexey Milovidov)。
  • 删除 GCC 支持的残余代码。 #48671 (Robert Schulze)。
  • 添加启用新分析器基础架构的 CI 运行。 #48719 (Dmitry Novik)。

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

ClickHouse 23.3 LTS 版本,2023-03-30

升级说明

  • 轻量级 DELETE 功能已可用于生产环境,并默认启用。 现在默认情况下可以使用 MergeTree 表的 DELETE 查询。
  • *domain*RFCnetloc 函数的行为略有更改:放宽了 URL authority 中允许的符号集,以获得更好的符合性。 #46841 (Azat Khuzhin)。
  • 禁止为列使用 DEFAULT/EPHEMERAL/ALIAS/MATERIALIZED 语句创建基于 KafkaEngine 的表。 #47138 (Aleksandr Musorin)。
  • 删除了“异步连接耗尽”功能。相关的设置和指标也被删除。这是一个内部功能,因此删除不应影响从未听说过该功能的用户。 #47486 (Alexander Tokmakov)。
  • arraySum/Min/Max/Avg/Product, arrayCumSum/CumSumNonNegative, arrayDifference, 数组构造,IN 运算符,查询参数,groupArrayMovingSum,统计函数,min/max/any/argMin/argMax,PostgreSQL wire 协议,MySQL 表引擎和函数,sumMap, mapAdd, mapSubtract, arrayIntersect 中支持 256 位 Decimal 数据类型(超过 38 位数字)。 在 arrayIntersect 中添加对大整数的支持。 涉及矩的统计聚合函数(例如 corr 或各种 TTest)将使用 Float64 作为其内部表示形式(在此更改之前它们使用 Decimal128,但这毫无意义),并且这些函数在无限方差的情况下可以返回 nan 而不是 inf。 某些函数在以前的版本中允许用于 Decimal256 数据类型,但返回 Decimal128 - 现在已修复。 这关闭了 #47569。 这关闭了 #44864。 这关闭了 #28335#47594 (Alexey Milovidov)。
  • 将 backup_threads/restore_threads 设为服务器设置(而不是用户设置)。 #47881 (Azat Khuzhin)。
  • 不允许常量和非确定性二级索引 #46839 (Anton Popov)。

新功能

  • 添加了一种使用设置 parallel_replicas_custom_keyparallel_replicas_custom_key_filter_type 拆分副本工作的新模式。 如果集群由具有多个副本的单个分片组成,则最多将随机选择 max_parallel_replicas 个副本并将其转换为分片。 对于每个分片,在发送到分片之前,会在启动器上查询中添加相应的过滤器。 如果集群由多个分片组成,它的行为将与 sample_key 相同,但可以定义任意键。 #45108 (Antonio Andelic)。
  • 取消时显示部分结果的选项:添加了查询设置 partial_result_on_first_cancel,允许取消的查询(例如由于 Ctrl-C)返回部分结果。 #45689 (Alexey Perevyshin)。
  • 为临时表添加了对任意表引擎的支持(Replicated 和 KeeperMap 引擎除外)。 关闭 #31497#46071 (Roman Vasin)。
  • 添加了使用 Keeper 中的集中式存储复制用户定义的 SQL 函数的支持。 #46085 (Aleksei Filatov)。
  • 实现 system.server_settings(类似于 system.settings),它将包含服务器配置。 #46550 (pufit)。
  • 支持 UNDROP TABLE 查询。 关闭 #46811#47241 (chen)。
  • 允许为命名集合设置单独的授权 (例如,能够仅向某些集合授予 SHOW/CREATE/ALTER/DROP named collection 访问权限,而不是一次全部授予)。 关闭 #40894。 添加新的访问类型 NAMED_COLLECTION_CONTROL,除非显式添加到用户配置中,否则不会授予用户默认权限(需要能够执行 GRANT ALL),此外,show_named_collections 不再是强制手动为用户默认指定,以便能够像 23.2 版本中那样拥有完全访问权限。 #46241 (Kseniia Sumarokova)。
  • 允许嵌套的自定义磁盘。 以前,自定义磁盘仅支持扁平磁盘结构。 #47106 (Kseniia Sumarokova)。
  • 引入函数 widthBucket (为了兼容性,别名为 WIDTH_BUCKET)。 #42974#46790 (avoiderboi)。
  • 根据指定的格式字符串添加新函数 parseDateTime/parseDateTimeInJodaSyntax。 parseDateTime 在 MySQL 语法中将 String 解析为 DateTime,parseDateTimeInJodaSyntax 在 Joda 语法中解析。 #46815 (李扬)。
  • 为表函数 null 的默认结构使用 dummy UInt8。 关闭 #46930#47006 (flynn)。
  • parseDateTimeBestEffort 函数中支持带有逗号的日期格式,例如 Dec 15, 2021。 关闭 #46816#47071 (chen)。
  • 添加设置 http_wait_end_of_queryhttp_response_buffer_size,它们分别对应于 HTTP 接口的 URL 参数 wait_end_of_querybuffer_size。 这允许在 profile 中更改这些设置。 #47108 (Vladimir C)。
  • 添加 system.dropped_tables 表,该表显示从 Atomic 数据库中删除但尚未完全删除的表。 #47364 (chen)。
  • 添加 INSTR 作为 positionCaseInsensitive 的别名,以实现 MySQL 兼容性。 关闭 #47529#47535 (flynn)。
  • 添加了 toDecimalString 函数,允许将数字转换为具有固定精度的字符串。 #47838 (Andrey Zvonov)。
  • 添加 merge tree 设置 max_number_of_mutations_for_replica。 它限制每个副本的 part mutation 数量为指定数量。 零表示对每个副本的 mutation 数量没有限制(执行仍然可能受到其他设置的约束)。 #48047 (Vladimir C)。
  • 添加与 Map 相关的函数 mapFromArrays,该函数允许从一对数组创建 map。 #31125 (李扬)。
  • 允许控制 Parquet/ORC/Arrow 输出格式的压缩,并增加了对更多压缩输入格式的支持。 这关闭了 #13541#47114 (Kruglov Pavel)。
  • 为原生协议添加 SSL 用户证书身份验证。 关闭 #47077#47596 (Nikolay Degterinsky)。
  • parseDateTime 添加 *OrNull() 和 *OrZero() 变体,为 MySQL 对等性添加别名 str_to_date#48000 (Robert Schulze)。
  • 添加运算符 REGEXP(类似于运算符 "LIKE"、"IN"、"MOD" 等),以更好地与 MySQL 兼容 #47869 (Robert Schulze)。

性能提升

  • 内存中的标记现在已压缩,内存使用量减少了 3-6 倍。 #47290 (Michael Kolupaev)。
  • 备份大量文件在之前的版本中速度慢得令人难以置信。现在不再如此了。现在它们快得令人难以置信。 #47251 (Alexey Milovidov)。为备份的 IO 操作引入了单独的线程池。这将允许独立于其他池对其进行扩展并提高性能。 #47174 (Nikita Mikhaylov)。在备份处理的最后阶段,使用 MultiRead 请求和重试来收集元数据。 #47243 (Nikita Mikhaylov)。如果备份和恢复数据都在 S3 中,那么从现在开始应该使用服务器端复制。 #47546 (Vitaly Baranov)。
  • 修复了带有 FINAL 的查询中过度读取的问题。 #47801 (Nikita Taranov)。
  • max_final_threads 设置将会在服务器启动时设置为核心数(与 max_threads 使用相同的算法)。这提高了在具有大量 CPU 的服务器上 final 执行的并发性。 #47915 (Nikita Taranov)。
  • 允许在多线程中为具有 CLICKHOUSE 源的 DIRECT 字典执行读取管道。要启用此功能,请在 CREATE DICTIONARY 语句的源的 SETTINGS 部分中设置 dictionary_use_async_executor=1#47986 (Vladimir C)。
  • 优化了一个可为空键的聚合性能。 #45772 (LiuNeng)。
  • hasTokenOrNullhasTokenCaseInsensitivehasTokenCaseInsensitiveOrNull 实现了小写 tokenbf_v1 索引的利用。 #46252 (ltrk2)。
  • 通过使用 SIMD 搜索前两个字符来优化函数 positionLIKE#46289 (Jiebin Sun)。
  • 优化了来自 system.detached_parts 的查询,该表可能非常大。添加了几个关于块大小限制的源;在每个块中,使用 IO 线程池并行计算 part 大小,即并行执行 syscall。 #46624 (Sema Checherinda)。
  • 将 ReplicatedMergeTree 表的 max_replicated_merges_in_queue 默认值从 16 增加到 1000。这允许在具有大量副本的集群上进行更快的后台合并操作,例如 ClickHouse Cloud 中具有共享存储的集群。 #47050 (Alexey Milovidov)。
  • 更新了 clickhouse-copier 以使用 GROUP BY 代替 DISTINCT 来获取分区列表。对于大型表,这使得选择时间从超过 500 秒减少到 1 秒以下。 #47386 (Clayton McClure)。
  • 修复了 ASOF JOIN 中的性能下降问题。 #47544 (Ongkong)。
  • Keeper 中进行了更多的批处理。通过避免在读取请求时中断批处理来提高性能。 #47978 (Antonio Andelic)。
  • 允许为 Merge 表的 PREWHERE 使用不同的列 DEFAULT 表达式。 #46831 (Azat Khuzhin)。

实验性功能

  • 并行副本:通过更好地利用本地副本提高了整体性能,并且默认情况下禁止从非复制的 MergeTree 中使用并行副本进行读取。 #47858 (Nikita Mikhaylov)。
  • 如果启用了实验性分析器,则支持将过滤器下推到带有 JoinDictionaryEmbeddedRocksDB 表的 JOIN 的左表。 #47280 (Maksim Kita)。
  • 现在,使用零拷贝复制的 ReplicatedMergeTree 对 Keeper 的负载更小。 #47676 (alesapin)。
  • 修复了使用 MaterializedPostgreSQL 创建物化视图的问题 #40807 (Maksim Buren)。

改进

  • 默认启用 input_format_json_ignore_unknown_keys_in_named_tuple#46742 (Kruglov Pavel)。
  • 允许在推送到物化视图时忽略错误(添加新设置 materialized_views_ignore_errors,默认值为 false,但对于将日志刷新到 system.*_log 表,则无条件设置为 true)。 #46658 (Azat Khuzhin)。
  • 在内存中跟踪分布式发送的文件队列。 #45491 (Azat Khuzhin)。
  • 现在,X-ClickHouse-Query-IdX-ClickHouse-Timezone 标头已添加到通过 HTTP 协议的所有查询的响应中。以前仅针对 SELECT 查询执行此操作。 #46364 (Anton Popov)。
  • 来自 MongoDB 的外部表:支持通过带有主机:端口枚举的 URI 连接到副本集,并支持 MongoDB 字典中的 readPreference 选项。URI 示例:mongodb://db0.example.com:27017,db1.example.com:27017,db2.example.com:27017/?replicaSet=myRepl&readPreference=primary。 #46524 (artem-yadr)。
  • 此改进对于用户应该是不可见的。在查询计划之上重新实现了投影分析。添加了设置 query_plan_optimize_projection=1 以在旧版本和新版本之间切换。修复了 #44963#46537 (Nikolai Kochetov)。
  • 默认情况下,在输出格式中使用 Parquet 格式 v2 而不是 v1。添加了设置 output_format_parquet_version 以控制 parquet 版本,可能的值为 1.02.42.62.latest(默认)。 #46617 (Kruglov Pavel)。
  • 现在可以使用新的配置语法来配置名称中带有句点 (.) 的 Kafka 主题。 #46752 (Robert Schulze)。
  • 修复了检查超扫描模式是否存在重复问题的启发式方法。 #46819 (Robert Schulze)。
  • 当块由不同的副本并发创建时,不要向 system.errors 报告 ZK 节点已存在。 #46820 (Raúl Marín)。
  • 增加 clickhouse-local 中打开文件的限制。它将能够从具有大量 CPU 核心的服务器上的 web 表中读取数据。如果打开的文件过多,则不要回退从 URL 表引擎读取数据。这关闭了 #46852#46853 (Alexey Milovidov)。
  • 当无法解析数字时抛出的异常现在具有更易于阅读的异常消息。 #46917 (Robert Schulze)。
  • 在每个处理的任务之后添加了更新 system.backups,以跟踪备份的进度。 #46989 (Aleksandr Musorin)。
  • 允许 Native 输入格式中的类型转换。添加了设置 input_format_native_allow_types_conversion 来控制它(默认启用)。 #46990 (Kruglov Pavel)。
  • 允许在 range 函数中使用 IPv4 以生成 IP 范围。 #46995 (Yakov Olkhovskiy)。
  • 改进了当无法将 part 从一个卷/磁盘移动到另一个卷/磁盘时的异常消息。 #47032 (alesapin)。
  • 支持 JSONType 函数中的 Bool 类型。以前,对于布尔值,错误地返回了 Null 类型。 #47046 (Anton Popov)。
  • 使用 _request_body 参数配置预定义的 HTTP 查询。 #47086 (Constantine Peresypkin)。
  • 在内置 UI SQL 编辑器中按下 Enter 键时自动缩进。 #47113 (Alexey Korepanov)。
  • 带有 'sudo' 的自解压将尝试将解压文件的 uid 和 gid 设置为正在运行的用户。 #47116 (Yakov Olkhovskiy)。
  • 以前,repeat 函数的第二个参数仅接受无符号整数类型,这意味着它无法接受诸如 -1 之类的值。此行为与 Spark 函数的行为不同。在此更新中,repeat 函数已修改为与 Spark 函数的行为匹配。它现在接受相同类型的输入,包括负整数。已进行了广泛的测试以验证更新后的实现的正确性。 #47134 (KevinyhZou)。注意:此变更日志条目由 ChatGPT 重写。
  • 从堆栈跟踪中删除 ::__1 部分。在堆栈跟踪中将 std::basic_string<char, ... 显示为 String#47171 (Mike Kot)。
  • 重新实现了 interserver 模式以避免重放攻击(请注意,此更改向后兼容旧服务器)。 #47213 (Azat Khuzhin)。
  • 改进了正则表达式组的识别并改进了 regexp_tree 字典。 #47218 (Han Fei)。
  • Keeper 改进:添加新的 4LW clrs 以清理 Keeper 使用的资源(例如,释放未使用的内存)。 #47256 (Antonio Andelic)。
  • 为编解码器 DoubleDelta(bytes_size)Gorilla(bytes_size)FPC(level, float_size) 添加了可选参数,这允许在 clickhouse-compressor 中使用这些编解码器而无需列类型。修复了 clickhouse-compressor 中使用这些编解码器时可能发生的中止和算术错误。修复: https://github.com/ClickHouse/ClickHouse/discussions/47262#47271 (Kruglov Pavel)。
  • runningDifference 函数添加了对大整数类型的支持。关闭了 #47194#47322 (Nikolay Degterinsky)。
  • 为具有过期时间的 S3 凭证添加了过期窗口,以避免在某些边缘情况下出现 ExpiredToken 错误。可以使用 expiration_window_seconds 配置来控制它,默认值为 120 秒。 #47423 (Antonio Andelic)。
  • Avro 格式中支持 Decimal 和 Date32。 #47434 (Kruglov Pavel)。
  • 如果检测到从 OrdinaryAtomic 的中断转换,则不要启动服务器,并打印更好的错误消息以及故障排除说明。 #47487 (Alexander Tokmakov)。
  • system.opentelemetry_span_log 添加了一个新列 kind。此列保存了 OpenTelemtry 中定义的 SpanKind 的值。 #47499 (Frank Chen)。
  • 允许在 Protobuf 格式中读取/写入嵌套数组,仅使用根字段名称作为列名。以前,列名应包含所有嵌套字段名称(如 a.b.c Array(Array(Array(UInt32))),现在您可以仅使用 a Array(Array(Array(UInt32)))#47650 (Kruglov Pavel)。
  • SYSTEM SYNC REPLICA 添加了一个可选的 STRICT 修饰符,该修饰符使查询等待复制队列变为空(就像在 https://github.com/ClickHouse/ClickHouse/pull/45648 之前的工作方式一样)。 #47659 (Alexander Tokmakov)。
  • 改进了一些 OpenTelemetry span 日志的命名。 #47667 (Frank Chen)。
  • 防止使用过长的聚合函数组合器链(它们可能导致分析阶段的查询速度变慢)。这关闭了 #47715#47716 (Alexey Milovidov)。
  • 参数化视图中支持子查询;解决了 #46741 #47725 (SmitaRKulkarni)。
  • 修复了 MySQL 集成中的内存泄漏(使用 connection_auto_close=1 重现)。 #47732 (Kseniia Sumarokova)。
  • 改进了与 Decimal 参数相关的代码中的错误处理,从而产生了更具信息量的错误消息。以前,当提供不正确的 Decimal 参数时,生成的错误消息不清楚或无济于事。通过此更新,已修复打印的错误消息,以提供更详细和有用的信息,从而更容易识别和纠正与 Decimal 参数相关的问题。 #47812 (Yu Feng)。注意:此变更日志条目由 ChatGPT 重写。
  • 参数 exact_rows_before_limit 用于使 rows_before_limit_at_least 旨在准确反映达到限制之前返回的行数。此拉取请求解决了当查询涉及跨多个分片的分布式处理或排序操作时遇到的问题。在此更新之前,这些场景未按预期运行。 #47874 (Amos Bird)。
  • ThreadPools 指标内省。 #47880 (Azat Khuzhin)。
  • 添加了 WriteBufferFromS3MicrosecondsWriteBufferFromS3RequestsErrors 性能事件。 #47885 (Antonio Andelic)。
  • 为 ClickHouse 安装添加了 --link--noninteractive (-y) 选项。关闭了 #47750#47887 (Nikolay Degterinsky)。
  • 修复了附加到物化视图时出现的 UNKNOWN_TABLE 异常,该物化视图具有不可用的依赖表。当尝试从备份还原状态时,这可能很有用。 #47975 (MikhailBurdukov)。
  • 修复了(可选)路径未添加到加密磁盘配置中的情况。 #47981 (Kseniia Sumarokova)。
  • 参数化视图中支持 CTE 实现:更新为允许在评估标量子查询时使用查询参数。 #48065 (SmitaRKulkarni)。
  • 支持大整数 (U)Int128/(U)Int256、具有任何键类型的 Map 和具有任何精度(不仅是 3 和 6)的 DateTime64#48119 (Kruglov Pavel)。
  • 允许跳过与行输入格式中未知枚举值相关的错误。 #48133 (Alexey Milovidov)。

构建/测试/打包改进

  • ClickHouse 现在使用 C++23 构建。 #47424 (Robert Schulze)。
  • 在 AST Fuzzer 中模糊测试 EXPLAIN 查询。 #47803 #47852 (flynn)。
  • 拆分压力测试和自动向后兼容性检查(现在为升级检查)。 #44879 (Kruglov Pavel)。
  • 更新了 Docker 的 Ubuntu 镜像,以平息一些虚假的安全报告。 #46784 (Julio Jimenez)。请注意,ClickHouse 没有依赖项,也不需要 Docker。
  • 当使用 "curl | sh" 下载 ClickHouse 时,添加提示以允许删除现有的 clickhouse 下载。提示是 "ClickHouse binary clickhouse already exists. Overwrite? [y/N]"。 #46859 (Dan Roscigno)。
  • 修复了在旧发行版(例如 Amazon Linux 2)和 ARM 上服务器启动期间 glibc 2.28 符号未找到的错误。 #47008 (Robert Schulze)。
  • 为 clang 16 做好准备。 #47027 (Amos Bird)。
  • 添加了 CI 检查,以确保 ClickHouse 可以在 ARM 上使用旧的 glibc 运行。 #47063 (Robert Schulze)。
  • 添加样式检查以防止错误使用 NDEBUG 宏。 #47699 (Alexey Milovidov)。
  • 稍微加快构建速度。 #47714 (Alexey Milovidov)。
  • vectorscan 升级到 5.4.9。 #47955 (Robert Schulze)。
  • 添加单元测试以断言 Apache Arrow 的致命日志记录不会中止。它涵盖了 ClickHouse/arrow#16 中的更改。 #47958 (Arthur Passos)。
  • 恢复了本机 macOS 调试服务器构建启动的能力。 #48050 (Robert Schulze)。注意:此更改仅与开发相关,因为 ClickHouse 官方构建是通过交叉编译完成的。

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

ClickHouse 23.2 版本,2023-02-23

向后不兼容的变更

  • 扩展函数 "toDayOfWeek()" (别名: "DAYOFWEEK"),增加一个 mode 参数,用于编码一周是从星期一还是星期日开始,以及计数是从 0 还是 1 开始。为了与其他日期时间函数保持一致,mode 参数被插入到时间和时区参数之间。这破坏了现有的(之前未文档化的)双参数语法 "toDayOfWeek(time, time_zone)" 的用法。一个修复方法是将函数重写为 "toDayOfWeek(time, 0, time_zone)"。 #45233 (Robert Schulze)。
  • 将设置 max_query_cache_size 重命名为 filesystem_cache_max_download_size#45614 (Kseniia Sumarokova)。
  • 默认情况下,default 用户将没有访问类型 SHOW NAMED COLLECTION 的权限(例如,default 用户将不再能够像以前那样授予其他用户 ALL 权限,因此此 PR 是向后不兼容的)。 #46010 (Kseniia Sumarokova)。
  • 如果 SETTINGS 子句在 FORMAT 子句之前指定,则设置也将应用于格式化。 #46003 (Azat Khuzhin)。
  • 移除对设置 materialized_postgresql_allow_automatic_update 的支持(默认情况下已关闭)。 #46106 (Kseniia Sumarokova)。
  • 略微提高了 countDigits 在真实数据集上的性能。这关闭了 #44518。在以前的版本中,countDigits(0) 返回 0;现在它返回 1,这更正确,并且符合现有的文档。 #46187 (Alexey Milovidov)。
  • 禁止创建使用编解码器 "Delta" 或 "DoubleDelta" 后跟编解码器 "Gorilla" 或 "FPC" 组合压缩的新列。可以使用设置 "allow_suspicious_codecs = true" 绕过此限制。 #45652 (Robert Schulze)。

新功能

  • 添加 StorageIceberg 和表函数 iceberg 以访问 S3 上的 iceberg 表存储。 #45384 (flynn)。
  • 允许将存储配置为 SETTINGS disk = '<disk_name>'(而不是 storage_policy)以及显式磁盘创建 SETTINGS disk = disk(type=s3, ...)#41976 (Kseniia Sumarokova)。
  • system.part_log 中公开 ProfileEvents 计数器。 #38614 (Bharat Nallan)。
  • 增强现有的 ReplacingMergeTree 引擎以允许重复插入。它在一个 MergeTree 引擎中利用了 ReplacingMergeTreeCollapsingMergeTree 的功能。删除的数据在查询时不会返回,但也不会从磁盘中删除。 #41005 (youennL-cs)。
  • 添加 generateULID 函数。关闭 #36536#44662 (Nikolay Degterinsky)。
  • 添加 corrMatrix 聚合函数,用于计算每两列之间的相关性。此外,由于聚合函数 covarSampcovarPopcorr 类似,因此顺便添加了 covarSampMatrixcovarPopMatrix。@alexey-milovidov 关闭了 #44587#44680 (FFFFFFFHHHHHHH)。
  • 引入 arrayShuffle 函数用于随机数组排列。 #45271 (Joanna Hulboj)。
  • 在 Arrow 中支持 FIXED_SIZE_BINARY 类型,在 Parquet 中支持 FIXED_LENGTH_BYTE_ARRAY 类型,并将它们匹配到 FixedString。添加设置 output_format_parquet_fixed_string_as_fixed_byte_array/output_format_arrow_fixed_string_as_fixed_byte_array 以控制 FixedString 的默认输出类型。关闭 #45326#45340 (Kruglov Pavel)。
  • 向 system.replication_queue 添加一个新的列 last_exception_time#45457 (Frank Chen)。
  • 添加两个新的函数,允许用户自定义 SipHash 的密钥/种子128#45513 (Salvatore Mesoraca)。
  • 允许表函数 format 使用三参数版本。关闭 #45808#45873 (FFFFFFFHHHHHHH)。
  • 为 'x'、'w'、'S' 添加 JodaTime 格式支持。参考 https://joda-time.sourceforge.net/apidocs/org/joda/time/format/DateTimeFormat.html#46073 (zk_kiger)。
  • 支持窗口函数 ntile。 (lgbo)。
  • 添加设置 final 以隐式地将 FINAL 修饰符应用于每个表。 #40945 (Arthur Passos)。
  • 添加了 arrayPartialSortarrayPartialReverseSort 函数。 #46296 (Joanna Hulboj)。
  • 新的 http 参数 client_protocol_version 允许使用 Native 格式为 HTTP 响应设置客户端协议版本。 #40397#46360 (Geoff Genz)。
  • 添加新的函数 regexpExtract,类似于 spark 函数 REGEXP_EXTRACT,以实现兼容性。它与现有的函数 extract 类似。 #46469 (李扬)。
  • 添加新的函数 JSONArrayLength,它返回最外层 JSON 数组中元素的数量。如果输入的 JSON 字符串无效,则该函数返回 NULL。 #46631 (李扬)。

性能提升

  • 引入的逻辑在 PREWHERE 条件是多个条件(cond1 AND cond2 AND ...)的合取时起作用。它将需要读取相同列的条件分组到步骤中。在每个步骤之后,计算完整条件的相应部分,并可能过滤结果行。这允许在后续步骤中读取更少的行,从而节省 IO 带宽并减少计算量。此逻辑目前默认禁用。在未来的版本中,一旦已知没有任何回归,它将默认启用,因此强烈建议用于测试。它可以通过 2 个设置控制:"enable_multiple_prewhere_read_steps" 和 "move_all_conditions_to_prewhere"。 #46140 (Alexander Gololobov)。
  • 如果表分区键和 group by 键兼容,则添加了一个选项来独立聚合分区。由设置 allow_aggregate_partitions_independently 控制。由于适用性有限,默认禁用(请参阅文档)。 #45364 (Nikita Taranov)。
  • 允许将 Vertical 合并算法与 Compact 格式的分区一起使用。这将允许 ClickHouse 服务器为后台操作使用更少的内存。这关闭了 #46084#45681 #46282 (Anton Popov)。
  • 通过使用批处理读取器来优化 Parquet 读取器。 #45878 (LiuNeng)。
  • 添加新的 local_filesystem_read_method 方法 io_uring,它基于异步 Linux io_uring 子系统,与默认的 pread 方法相比,几乎普遍提高了读取性能。 #38456 (Saulius Valatka)。
  • 当逻辑等效时,将带有 if 表达式作为参数的聚合函数重写。例如,avg(if(cond, col, null)) 可以重写为 avgIf(cond, col)。这有助于提高性能。 #44730 (李扬)。
  • 使用 avx512 指令提高 lower/upper 函数的性能。 #37894 (yaqi-zhao)。
  • 移除在 >=32 核且 SMT 被禁用的系统上,ClickHouse 仅使用一半内核的限制(在 BIOS 中禁用超线程的情况)。 #44973 (Robert Schulze)。
  • 通过列式执行提高函数 multiIf 的性能,速度提升 2.3 倍。 #45296 (李扬)。
  • 当 needle 为空时,为函数 position 添加快速路径。 #45382 (李扬)。
  • 默认启用 query_plan_remove_redundant_sorting 优化。优化在 #45420 中实现。 #45567 (Igor Nikonov)。
  • 增加 HTTP Transfer Encoding chunk size,以提高使用 HTTP 接口的大型查询的性能。 #45593 (Geoff Genz)。
  • 修复了从具有大量 Array/Map/Nested 列的表中读取数据的短 SELECT 查询的性能问题。 #45630 (Anton Popov)。
  • 提高大整数和 decimal 类型过滤的性能。 #45949 (李扬)。
  • 此更改可以有效减少从 ColumnNullable(UInt8) 获取过滤器的开销,并提高整体查询性能。为了评估此更改的影响,我们采用了 TPC-H 基准测试,但将列类型从不可空更改为可空,并将查询的 QPS 作为性能指标进行了测量。 #45962 (Zhiguo Zhou)。
  • 使 _part_partition_id 虚拟列成为 LowCardinality(String) 类型。关闭 #45964#45975 (flynn)。
  • 提高 scale 不变时 Decimal 转换的性能。 #46095 (Alexey Milovidov)。
  • 允许增加读取数据的预取。 #46168 (Kseniia Sumarokova)。
  • 重写 arrayExists(x -> x = 1, arr) -> has(arr, 1),性能提升 1.34 倍。 #46188 (李扬)。
  • 修复非远程磁盘上垂直合并的内存使用过大的问题。对于远程磁盘,遵循 max_insert_delayed_streams_for_parallel_write 设置。 #46275 (Nikolai Kochetov)。
  • 将 zstd 更新到 v1.5.4。它在性能和压缩率方面有一些小的改进。如果您运行具有不同 ClickHouse 版本的副本,您可能会看到合理的错误消息 Data after merge/mutation is not byte-identical to data on another replicas. 并附带解释。这些消息是正常的,您不必担心。 #46280 (Raúl Marín)。
  • 修复由 #39737 引起的性能下降。 #46309 (Alexey Milovidov)。
  • 即使在复制队列很大的情况下,replicas_status 处理程序也会快速响应。 #46310 (Alexey Milovidov)。
  • 为聚合函数 sum、函数一元算术、函数比较添加 avx512 支持。 #37870 (zhao zhou)。
  • 重写了围绕标记分布和读取的整体协调的代码,以实现最大的性能提升。这关闭了 #34527#43772 (Nikita Mikhaylov)。
  • 删除查询(子查询)中冗余的 DISTINCT 子句。在查询计划之上实现。它执行与 optimize_duplicate_order_by_and_distinct 类似的关于 DISTINCT 子句的优化。可以通过 query_plan_remove_redundant_distinct 设置启用。与 #42648 相关。 #44176 (Igor Nikonov)。
  • 一些查询重写优化:sumIf(123, cond) -> 123 * countIf(1, cond)sum(if(cond, 123, 0)) -> 123 * countIf(cond)sum(if(cond, 0, 123)) -> 123 * countIf(not(cond)) #44728 (李扬)。
  • 改进了顶层查询计划中内存绑定合并和聚合的交互方式。以前,在某些情况下,当实际上不需要 AIO 时,我们会回退到显式排序。 #45892 (Nikita Taranov)。
  • 默认情况下,并发合并使用轮询调度,以确保公平且无饥饿的操作。以前,在负载过重的分片中,由于使用了严格的优先级调度,大型合并可能会被较小的合并饿死。添加了 background_merges_mutations_scheduling_policy 服务器配置选项,用于选择调度算法(round_robinshortest_task_first)。 #46247 (Sergei Trifonov)。

改进

  • 默认情况下,在 ZooKeeper 会话丢失的情况下启用 INSERT 重试。我们已经在生产环境中使用它。 #46308 (Alexey Milovidov)。
  • 添加忽略命名元组的 JSON 对象中未知键的功能 (input_format_json_ignore_unknown_keys_in_named_tuple)。 #45678 (Azat Khuzhin)。
  • 支持优化带有 final 的查询,将带有排序键表达式的 where 子句移动到 prewhere#38893#38950 (hexiaoting)。
  • 为备份添加新的指标:num_processed_files 和 processed_files_size 描述了实际处理的文件数量。 #42244 (Aleksandr)。
  • 添加了对 interserver DNS 错误的重试。 #43179 (Anton Kozlov)。
  • Keeper 改进:尝试在磁盘上预先分配空间,以避免未定义的空间不足问题。为 Keeper 的 Raft 日志文件的最大大小引入设置 max_log_file_size#44370 (Antonio Andelic)。
  • 在副本为只读的情况下,优化副本延迟 api 逻辑的行为。 #45148 (mateng915)。
  • 在空密码错误的情况下,在 clickhouse-client 中以交互方式询问密码。关闭 #46702#46730 (Nikolay Degterinsky)。
  • 将非 Float* 类型的列上的 Gorilla 压缩标记为可疑。 #45376 (Robert Schulze)。
  • postpone_reason 列中显示正在执行合并的副本名称。 #45458 (Frank Chen)。
  • 在 part_log 中保存异常堆栈跟踪。 #45459 (Frank Chen)。
  • regexp_tree 字典已完善,现在它与 https://github.com/ua-parser/uap-core 兼容。 #45631 (Han Fei)。
  • 更新了 SYSTEM SYNC REPLICA 的检查,解决了 #45508 #45648 (SmitaRKulkarni)。
  • 将设置 replication_alter_partitions_sync 重命名为 alter_sync#45659 (Antonio Andelic)。
  • generateRandom 表函数和引擎现在支持 LowCardinality 数据类型。这对于测试很有用,例如,您可以编写 INSERT INTO table SELECT * FROM generateRandom() LIMIT 1000。这是调试 #45590 所需的。 #45661 (Alexey Milovidov)。
  • 实验性查询结果缓存现在提供了更模块化的配置设置。 #45679 (Robert Schulze)。
  • 将 “query result cache” 重命名为 “query cache”。 #45682 (Robert Schulze)。
  • 添加 SYSTEM SYNC FILE CACHE 命令。它将执行 sync 系统调用。 #8921#45685 (DR)。
  • 添加新的 S3 设置 allow_head_object_request。此 PR 使使用 GetObjectAttributes 请求代替 https://github.com/ClickHouse/ClickHouse/pull/45288 中引入的 HeadObject 成为可选(并默认禁用)。 #45701 (Vitaly Baranov)。
  • 添加基于连接名称覆盖连接设置的功能(也就是说,现在您可以忘记为每个连接存储密码,您可以简单地将所有内容放入 ~/.clickhouse-client/config.xml 中,甚至可以使用不同的历史记录文件,这也可能很有用)。 #45715 (Azat Khuzhin)。
  • Arrow 格式:支持 duration 类型。关闭 #45669#45750 (flynn)。
  • 扩展查询缓存中的日志记录,以改进对缓存行为的调查。 #45751 (Robert Schulze)。
  • 查询缓存的服务器级别设置现在可以在运行时重新配置。 #45758 (Robert Schulze)。
  • 当使用命名集合指定表函数的参数时,隐藏日志中的密码。 #45774 (Vitaly Baranov)。
  • 改进内部 S3 客户端,以正确推断不同类型 URL 的区域和重定向。 #45783 (Antonio Andelic)。
  • 在 generateRandom 中添加对 Map、IPv4 和 IPv6 类型的支持。主要用于测试。 #45785 (Raúl Marín)。
  • 支持 IP 类型的 empty/notEmpty。 #45799 (Yakov Olkhovskiy)。
  • num_processed_files 被拆分为两列:num_files(用于 BACKUP)和 files_read(用于 RESTORE)。列 processed_files_size 被拆分为两列:total_size(用于 BACKUP)和 bytes_read(用于 RESTORE)。 #45800 (Vitaly Baranov)。
  • 为 MySQL 兼容性添加对 SHOW ENGINES 查询的支持。 #45859 (Filatenkov Artur)。
  • 改进了混淆器处理查询的方式。 #45867 (Raúl Marín)。
  • 改进将边界值 65535 (2149-06-06) 转换为 Date 类型的行为。#46042 #45914 (Joanna Hulboj)。
  • 添加设置 check_referential_table_dependencies 以检查 DROP TABLE 上的引用依赖关系。此 PR 解决了 #38326 问题。#45936 (Vitaly Baranov)。
  • 修复 tupleElement 在使用 Null 参数时返回 Null 的问题。关闭了 #45894 问题。#45952 (flynn)。
  • 在没有文件满足 S3 通配符时抛出错误。关闭了 #45587 问题。#45957 (chen)。
  • 使用集群状态数据来检查并发备份/恢复。#45982 (SmitaRKulkarni)。
  • ClickHouse 客户端:对模糊搜索使用“精确”匹配,它具有正确的忽略大小写功能以及更适合匹配 SQL 查询的算法。#46000 (Azat Khuzhin)。
  • 禁止错误的 CREATE View 语法 CREATE View X TO Y AS SELECT。关闭了 #4331 问题。#46043 (flynn)。
  • Storage Log 系列支持设置 storage_policy。关闭了 #43421 问题。#46044 (flynn)。
  • 改进 JSONColumns 格式在结果为空时的表现。关闭了 #46024 问题。#46053 (flynn)。
  • 为 SipHash128 添加参考实现。#46065 (Salvatore Mesoraca)。
  • 添加一个新的指标来记录使用 mmap 的分配时间和字节数。#46068 (李扬)。
  • 目前对于 leftPad, rightPad, leftPadUTF8, rightPadUTF8 等函数,第二个参数 length 必须是 UInt8|16|32|64|128|256 类型。对于 ClickHouse 用户来说,这太严格了,而且与 arrayResize, substring 等其他类似函数不一致。#46103 (李扬)。
  • 修复调试版本中 welchTTest 函数在结果统计量为 NaN 时的断言。统一了与其他类似函数的行为。更改了 studentTTest 的行为,使其返回 NaN 而不是抛出异常,因为之前的行为不方便。这关闭了 #41176#42162 问题。#46141 (Alexey Milovidov)。
  • 更方便地使用大整数和 ORDER BY WITH FILL。允许在 ORDER BY 大整数(128 位和 256 位)时,在 WITH FILL 中使用普通整数作为起点和终点。修复了具有负起点或终点的大整数的错误结果。这关闭了 #16733 问题。#46152 (Alexey Milovidov)。
  • issue 中,向 system.tables 添加了 parts, active_partstotal_marks 列。#46161 (attack204)。
  • 函数 "multi[Fuzzy]Match(Any|AnyIndex|AllIndices}" 现在拒绝在 vectorscan 中可能评估非常慢的正则表达式。#46167 (Robert Schulze)。
  • 当启用 insert_null_as_default 且列没有定义默认值时,将使用列类型的默认值。此外,此 PR 修复了在 LowCardinality 列的情况下对 null 使用默认值的问题。#46171 (Kruglov Pavel)。
  • 优先为 S3 客户端使用显式定义的访问密钥。如果 use_environment_credentials 设置为 true,并且用户通过查询或配置提供了访问密钥,则将使用这些密钥,而不是来自环境变量的密钥。#46191 (Antonio Andelic)。
  • 为函数 "formatDateTime()" 添加别名 "DATE_FORMAT()",以提高与 MySQL 的 SQL 方言的兼容性,并使用替换符 "a", "b", "c", "h", "i", "k", "l" "r", "s", "W" 扩展了函数 formatDateTime。 ### 用户可见更改的文档条目 用户可读的简短描述:DATE_FORMATformatDateTime 的别名。根据给定的格式字符串格式化时间。(提供指向 formatDateTime 的链接)。#46302 (Jake Bamrah)。
  • 为并行副本的回调任务(s3ClusterMergeTree 表)添加 ProfileEventsCurrentMetrics#46313 (Alexey Milovidov)。
  • 为使用 KeeperMap 存储引擎的表添加对 DELETEUPDATE 的支持。#46330 (Antonio Andelic)。
  • 允许编写带有查询参数的 RENAME 查询。解决了 #45778 问题。#46407 (Nikolay Degterinsky)。
  • 修复了带有 REPLACE 转换器的参数化 SELECT 查询。解决了 #33002 问题。#46420 (Nikolay Degterinsky)。
  • 从异步指标 "NumberOfDatabases" 的计算中排除用于临时/外部表的内部数据库。这使得行为与系统表 "system.databases" 一致。#46435 (Robert Schulze)。
  • 向 distribution_queue 表添加了 last_exception_time 列。#46564 (Aleksandr)。
  • 支持参数化视图中带有参数的 IN 子句。#46583 (SmitaRKulkarni)。
  • 不要在服务器启动时加载命名集合(改为在首次访问时加载)。#46607 (Kseniia Sumarokova)。

构建/测试/打包改进

  • 引入由 LLVM 运行时实现的 GWP-ASan。这关闭了 #27039 问题。#45226 (Han Fei)。
  • 我们希望使我们的测试更不稳定和更容易出错:在测试中为 MergeTree 设置添加随机化。#38983 (Anton Popov)。
  • 在 PowerPC 中启用 HDFS 支持,这有助于修复以下功能测试 02113_hdfs_assert.sh, 02244_hdfs_cluster.sql 和 02368_cancel_write_into_hdfs.sh。#44949 (MeenaRenganathan22)。
  • 为 clickhouse-keeper 添加 systemd.service 文件。修复了 #44293 问题。#45568 (Mikhail f. Shiryaev)。
  • ClickHouse 的 poco 分支已从 "contrib/" 移动到 "base/poco/"。#46075 (Robert Schulze)。
  • clickhouse-watchdog 添加一个选项来重启子进程。这用途不大。#46312 (Alexey Milovidov)。
  • 如果环境变量 CLICKHOUSE_DOCKER_RESTART_ON_EXIT 设置为 1,则 Docker 容器将运行 clickhouse-server 作为子进程而不是第一个进程,并在退出时重启它。#46391 (Alexey Milovidov)。
  • 修复 Systemd 服务文件。#46461 (SuperDJY)。
  • 将构建 ClickHouse 所需的最低 Clang 版本从 12 提高到 15。#46710 (Robert Schulze)。
  • 将 Intel QPL 从 v0.3.0 升级到 v1.0.0 2. 构建 libaccel-config 并将其静态链接到 QPL 库,而不是动态链接。#45809 (jasperzhu)。

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

  • StorageRabbitMQ 中,完全按照 rabbitmq_flush_interval_msrabbitmq_max_block_size 刷新数据。关闭了 #42389#45160 问题。#44404 (Kseniia Sumarokova)。
  • 在 sparkBar 函数中使用 PODArray 进行渲染,以便我们可以控制内存使用。关闭了 #44467 问题。#44489 (Duc Canh Le)。
  • 修复函数 (quantilesExactExclusive, quantilesExactInclusive) 返回未排序数组元素的问题。#45379 (wujunfu)。
  • 修复启用 OpenTelemetry 时 HTTPHandler 中未捕获的异常。#45456 (Frank Chen)。
  • 不要从 8 位数字推断 Date 类型。这可能导致读取错误的数据。#45581 (Kruglov Pavel)。
  • 修复了正确使用 odbc_bridge_use_connection_pooling 设置的问题。#45591 (Bharat Nallan)。
  • 当调用缓存中的回调时,此缓存可能已被销毁。为了保持安全,我们按值捕获成员。对于任务调度也是安全的,因为它将在存储被销毁之前被停用。解决了 #45548 问题。#45601 (Han Fei)。
  • 修复了当 Delta 或 DoubleDelta 编解码器与 Gorilla 编解码器组合使用时的数据损坏问题。#45615 (Robert Schulze)。
  • 在使用 N-gram 布隆过滤器索引时正确检查类型,以避免无效读取。#45617 (Antonio Andelic)。
  • 围绕 c-ares 报告了一些段错误。它们是在我之前的 pull 请求中引入的。在 Alexander Tokmakov 的帮助下,我已经修复了它们。#45629 (Arthur Passos)。
  • 修复了遇到重复主键时的键描述。这可能发生在投影中。有关详细信息,请参见 #45590#45686 (Amos Bird)。
  • 为备份设置压缩方法和级别。关闭了 #45690 问题。#45737 (Pradeep Chhetri)。
  • 应使用 select_query_typed.limitByOffset 而不是 select_query_typed.limitOffset#45817 (刘陶峰)。
  • 当使用实验性分析器时,诸如 SELECT number FROM numbers(100) LIMIT 10 OFFSET 10; 之类的查询会得到错误的结果(此 sql 的空结果)。这是由计划器添加的不必要的 offset 步骤引起的。#45822 (刘陶峰)。
  • 向后兼容性 - 允许从 UInt64 到 IPv4 的隐式窄化转换 - “INSERT ... VALUES ...” 表达式需要此功能。#45865 (Yakov Olkhovskiy)。
  • 修复了混合 ip4 地址(如 ::.1.2.3)缺少第一个八位字节的 IPv6 解析器。#45871 (Yakov Olkhovskiy)。
  • query_kind 列添加到 system.processes 表和 SHOW PROCESSLIST 查询中。删除重复代码。它修复了一个错误:全局配置参数 max_concurrent_select_queries 不适用于带有 INTERSECTEXCEPT 链的查询。#45872 (Alexey Milovidov)。
  • 修复了函数 stochasticLinearRegression 中的崩溃。由 WingFuzz 发现。#45985 (Nikolai Kochetov)。
  • 修复了带有 INTERSECTEXCEPT 修饰符的 SELECT 查询在从启用稀疏列的表(由设置 ratio_of_defaults_for_sparse_serialization 控制)读取数据时发生的崩溃。#45987 (Anton Popov)。
  • 修复了带有 FINAL 的 DESC 排序的按顺序读取优化,关闭了 #45815 问题。#46009 (Vladimir C)。
  • 修复了在紧凑部件中读取不存在的多级嵌套列的问题。#46045 (Azat Khuzhin)。
  • 修复了 system.processes 中的 elapsed 列(10 倍误差)。#46047 (Azat Khuzhin)。
  • 对替换域 IP 类型 (IPv4, IPv6) 的后续修复,使用原生类型 https://github.com/ClickHouse/ClickHouse/pull/43221#46087 (Yakov Olkhovskiy)。
  • 修复了当参数已经有值时,配置中的环境变量替换问题。这关闭了 #46131#9547 问题。#46144 (pufit)。
  • 修复了带有 grouping sets 的错误谓词下推。关闭了 #45947 问题。#46151 (flynn)。
  • 修复了在具有常量键的 fulls_sorting_join 上可能发生的管道卡住错误。#46175 (Vladimir C)。
  • 永远不要在格式化期间将元组函数重写为字面量,以避免不正确的结果。#46232 (Salvatore Mesoraca)。
  • 修复了在 Arrow 格式中读取 LowCardinality(Nullable) 时可能发生的越界错误。#46270 (Kruglov Pavel)。
  • 修复了 SYSTEM UNFREEZE 查询因异常 CANNOT_PARSE_INPUT_ASSERTION_FAILED 而失败的问题。#46325 (Aleksei Filatov)。
  • 修复了在反序列化存储 HashTable 的函数的聚合状态时可能由整数溢出引起的崩溃。#46349 (Nikolai Kochetov)。
  • 修复了在格式为 VALUES 的无效数据异步插入中可能发生的 LOGICAL_ERROR#46350 (Anton Popov)。
  • 修复了尝试执行 ALTER ... MOVE PART ... TO TABLE 时发生的 LOGICAL_ERROR。实际上从未支持过这种类型的查询。#46359 (Alexander Tokmakov)。
  • 修复了当启用 parallel_distributed_insert_select 时,并行分布式插入选择中 s3Cluster 的模式推断。#46381 (Kruglov Pavel)。
  • 修复了诸如 ALTER TABLE ... UPDATE nested.arr1 = nested.arr2 ... 之类的查询,其中 arr1arr2 是同一 Nested 列的字段。#46387 (Anton Popov)。
  • 调度程序可能无法调度任务。如果发生这种情况,应中止整个 MulityPartUpload,并且 UploadHelper 必须等待已调度的任务。#46451 (Dmitry Novik)。
  • 修复了 Merge 的 PREWHERE,其中默认类型不同(修复了当列的默认类型不同时的一些 NOT_FOUND_COLUMN_IN_BLOCK 错误,还允许在列的类型在表之间相同时使用 PREWHERE,并且仅在类型不同时禁止使用)。#46454 (Azat Khuzhin)。
  • 修复了当在 ORDER BY 中使用常量值时可能发生的崩溃。修复了 #46466 问题。#46493 (Nikolai Kochetov)。
  • 如果查询级别指定了 disk 设置,但配置 merge tree 设置部分指定了 storage_policy,则不要抛出异常。disk 将覆盖配置中的设置。#46533 (Kseniia Sumarokova)。
  • 修复了函数 arrayMap 中常量 LowCardinality 参数的无效处理。此错误可能导致发布版本中的段错误,以及调试版本中的逻辑错误 Bad cast#46569 (Alexey Milovidov)。
  • 修复了 #46557 问题。#46611 (Alexander Gololobov)。
  • 修复了如果服务器无法在 1 分 30 秒内启动,clickhouse-server systemd 单元的无限重启问题(禁用从 systemd 服务启动 clickhouse-server 的超时逻辑)。#46613 (Azat Khuzhin)。
  • 异步插入期间分配的内存缓冲区在全局上下文中被释放,并且相应用户和查询的 MemoryTracker 计数器未正确更新。这导致了误报的 OOM 异常。#46622 (Dmitry Novik)。
  • 更新为不清除 table_join 中的 on_expression,因为它被未来的分析运行使用,解决了 #45185 问题。#46487 (SmitaRKulkarni)。

ClickHouse 23.1 版本,2023-01-26

ClickHouse 23.1 版本

升级说明

  • SYSTEM RESTART DISK 查询变为 no-op。#44647 (alesapin)。
  • HASHED/SPARSE_HASHED 字典的 PREALLOCATE 选项变为 no-op。#45388 (Azat Khuzhin)。它不再提供明显的优势。
  • 禁止在非 Float32 或非 Float64 类型的列上使用 Gorilla 编解码器。#45252 (Robert Schulze)。这是毫无意义的,并且会导致不一致。
  • 并行仲裁插入可能无法与使用已弃用语法创建的 *MergeTree 表格一起正常工作。因此,对于此类表格,完全禁用了并行仲裁插入支持。这不会影响使用新语法创建的表格。#45430 (Alexander Tokmakov)。
  • 使用 GetObjectAttributes 请求而不是 HeadObject 请求来获取 AWS S3 中对象的大小。此更改修复了更新 AWS SDK 后处理没有显式区域的端点的问题,例如。#45288 (Vitaly Baranov)。AWS S3 和 Minio 已经过测试,但请记住,各种 S3 兼容服务(GCS、R2、B2)可能存在细微的不兼容性。此更改还可能需要您调整 ACL 以允许 GetObjectAttributes 请求。
  • 禁止时区名称中的路径。例如,像 /usr/share/zoneinfo/Asia/Aden 这样的时区名称是不允许的;应使用 IANA 时区数据库名称,例如 Asia/Aden#44225 (Kruglov Pavel)。
  • 由于结果不正确,禁止组合等值连接和常量表达式的查询(例如,JOIN ON t1.x = t2.x AND 1 = 1)。#44016 (Vladimir C)。

新功能

  • 字典源,用于通过遍历正则表达式树来提取键。它可用于 User-Agent 解析。#40878 (Vage Ogannisian)。#43858 (Han Fei)。
  • 添加了参数化视图功能,现在可以为 View 表引擎指定查询参数。解决了 #40907 问题。#41687 (SmitaRKulkarni)。
  • 添加 quantileInterpolatedWeighted/quantilesInterpolatedWeighted 函数。#38252 (Bharat Nallan)。
  • Map 类型支持数组 join,类似于 Spark 中的 "explode" 函数。#43239 (李扬)。
  • 支持 SQL 标准二进制和十六进制字符串字面量。#43785 (Mo Xuan)。
  • 允许以 Joda-Time 样式格式化 DateTime。请参阅 Joda-Time 文档#43818 (李扬)。
  • formatDateTime 实现了小数秒格式化程序 (%f)。#44060 (ltrk2)。#44497 (Alexander Gololobov)。
  • 添加了 age 函数,用于计算两个日期或日期与时间值之间的差异,以完整单位数表示。关闭了 #41115 问题。#44421 (Robert Schulze)。
  • 为字典添加 Null 源。关闭了 #44240 问题。#44502 (mayamika)。
  • 允许使用 s3_storage_class 配置选项配置 S3 存储类。例如 <s3_storage_class>STANDARD/INTELLIGENT_TIERING</s3_storage_class> 关闭了 #44443 问题。#44707 (chen)。
  • 在解析命名元组时,如果 JSON 对象中缺少元素,则插入默认值。添加了设置 input_format_json_defaults_for_missing_elements_in_named_tuple 来控制此行为。关闭了 #45142#issuecomment-1380153217 问题。#45231 (Kruglov Pavel)。
  • 在 ProfileEvents 中记录服务器启动时间 (ServerStartupMilliseconds)。解决了 #43188 问题。#45250 (SmitaRKulkarni)。
  • 重构并改进流引擎 Kafka/RabbitMQ/NATS,并添加对所有格式的支持,同时稍微重构格式:- 修复以行式格式生成带有后缀/前缀的消息的问题。现在,每个消息都使用所有分隔符完整格式化,并且可以使用输入格式解析回来。 - 支持基于块的格式,如 Native、Parquet、ORC 等。每个块都格式化为单独的消息。一个消息中的行数取决于块大小,因此您可以通过设置 max_block_size 来控制它。 - 添加新的引擎设置 kafka_max_rows_per_message/rabbitmq_max_rows_per_message/nats_max_rows_per_message。它们控制在行式格式的一个消息中格式化的行数。默认值:1。 - 修复 NATS 表引擎中的高内存消耗问题。 - 支持 NATS 生产者中的任意二进制数据(以前仅适用于以 \0 结尾的字符串) - 在文档中添加缺少的 Kafka/RabbitMQ/NATS 引擎设置。 - 重构 Kafka/RabbitMQ/NATS 中的生产和消费,将其与 WriteBuffers/ReadBuffers 语义分离。 - 重构输出格式:删除 Kafka/RabbitMQ/NATS 中使用的每行回调(现在我们不在那里使用回调),允许直接使用 IRowOutputFormat,阐明行尾和行间分隔符,使重置输出格式以重新开始格式化成为可能 - 在 formatRow 函数中添加正确的实现(格式重构后的奖励)。 #42777 (Kruglov Pavel)。
  • 支持在 CapnProto 格式中读/写 Nested 表,作为 StructList。将 Decimal32/64 读/写为 Int32/64。 关闭 #43319#43379 (Kruglov Pavel)。
  • system.text_log 中添加了 message_format_string 列。该列包含用于格式化消息的模式。 #44543 (Alexander Tokmakov)。这允许对 ClickHouse 日志进行各种分析。
  • 尝试为 CSV/TSV/CustomSeparated 输入格式自动检测带有列名(以及可能的类型)的标头。添加设置 input_format_tsv/csv/custom_detect_header 以启用此行为(默认启用)。 关闭 #44640#44953 (Kruglov Pavel)。

实验性功能

  • 添加实验性的倒排索引作为新的二级索引类型,以实现高效的文本搜索。 #38667 (larryluogit)。
  • 添加实验性查询结果缓存。 #43797 (Robert Schulze)。
  • 为 IO 请求添加了可扩展和可配置的调度子系统(尚未与 IO 代码本身集成)。 #41840 (Sergei Trifonov)。此功能目前没有任何作用,请欣赏。
  • 添加了 SYSTEM DROP DATABASE REPLICA,用于删除 Replicated 数据库的已失效副本的元数据。解决 #41794#42807 (Alexander Tokmakov)。

性能提升

  • MergeTree 表启动时,不加载非活跃的 parts。 #42181 (Anton Popov)。
  • 改进了从存储 S3 和表函数 s3 读取大量小文件时的延迟。现在,从存储 S3 读取时,设置 remote_filesystem_read_methodremote_filesystem_read_prefetch 生效。 #43726 (Anton Popov)。
  • 优化了读取 Parquet/ORC 文件中的 struct 字段。仅加载所需的字段。 #44484 (lgbo)。
  • 两级聚合算法在 HTTP 接口的查询中被错误地禁用了。现已重新启用,这将带来重大的性能提升。 #45450 (Nikolai Kochetov)。
  • 为 StorageFile 添加了 mmap 支持,这应该可以提高 clickhouse-local 的性能。 #43927 (pufit)。
  • 在 HashedDictionary 中添加了分片支持,以允许并行加载(几乎与分片数量呈线性扩展)。 #40003 (Azat Khuzhin)。
  • 加速查询解析。 #42284 (Raúl Marín)。
  • 始终将 OR 链 expr = x1 OR ... OR expr = xN 替换为 expr IN (x1, ..., xN),在 exprLowCardinality 列的情况下。在这种情况下,设置 optimize_min_equality_disjunction_chain_length 将被忽略。 #42889 (Guo Wangyang)。
  • 通过优化 ThreadStatus 周围的代码,略微提高性能。 #43586 (Zhiguo Zhou)。
  • 通过实现自动向量化来优化按列的三元逻辑求值。在这个 微基准测试 的性能测试中,我们观察到在 ICX 设备(Intel Xeon Platinum 8380 CPU)上获得了 21 倍 的峰值 性能提升#43669 (Zhiguo Zhou)。
  • 尽可能避免在 system.tables 表中获取读锁。 #43840 (Raúl Marín)。
  • 优化 ThreadPool。在 ICX 设备(Intel Xeon Platinum 8380 CPU,80 核,160 线程)上进行的 SSB(星型模式基准测试)性能实验表明,此更改可以有效地将 ThreadPoolImpl::mutex 的锁争用减少 75%,从而提高 CPU 利用率并将整体性能提高 2.4%#44308 (Zhiguo Zhou)。
  • 现在,哈希表大小预测优化仅在缓存的哈希表大小足够大时才应用(阈值是凭经验确定的并硬编码)。 #44455 (Nikita Taranov)。
  • 远程文件系统异步读取的小幅性能提升。 #44868 (Kseniia Sumarokova)。
  • 为以下情况添加快速路径:- col like '%%';- col like '%';- col not like '%';- col not like '%';- match(col, '.*')#45244 (李扬)。
  • 略微改进了过滤(WHERE 子句)中的 happy path 优化。 #45289 (Nikita Taranov)。
  • toUnixTimestamp64* 提供单调性信息,以便为索引分析启用更多代数优化。 #44116 (Nikita Taranov)。
  • 允许配置用于查询处理的临时数据(溢出到磁盘)以与文件系统缓存协作(占用缓存磁盘的空间) #43972 (Vladimir C)。这主要改进了 ClickHouse Cloud,但如果您知道该怎么做,也可以用于自管理设置。
  • 使 system.replicas 表并行获取副本状态。 关闭 #43918#43998 (Nikolay Degterinsky)。
  • 优化备份到 S3 期间的内存消耗:现在到 S3 的文件将直接复制,而无需使用 WriteBufferFromS3(这可能会占用大量内存)。 #45188 (Vitaly Baranov)。
  • 为异步块 ID 添加缓存。这将减少启用异步插入去重时 ZooKeeper 的请求数量。 #45106 (Han Fei)。

改进

  • 在不带参数的 generateRandom 中使用来自插入表的结构。 #45239 (Kruglov Pavel)。
  • 允许在 JSONExtract 函数中将 JSON 字符串字段中存储的浮点数隐式转换为整数。 例如,JSONExtract('{"a": "1000.111"}', 'a', 'UInt64') -> 1000,以前返回 0。 #45432 (Anton Popov)。
  • 为表 system.formats 添加了字段 supports_parallel_parsingsupports_parallel_formatting,以便更好地进行内省。 #45499 (Anton Popov)。
  • 改进了 CustomSeparated/Template 格式中 CSV 字段的读取。 关闭 #42352 关闭 #39620#43332 (Kruglov Pavel)。
  • 统一查询经过时间测量。 #43455 (Raúl Marín)。
  • 改进了在 select 查询中存在虚拟列时,表函数 file/hdfs/s3 自动使用来自插入表的结构,修复了可能的错误 Block structure mismatchnumber of columns mismatch#43695 (Kruglov Pavel)。
  • 在函数 range 中添加了对带符号参数的支持。修复 #43333#43733 (sanyu)。
  • 删除冗余排序,例如,子查询中与 ORDER BY 子句相关的排序。在查询计划之上实现。它执行类似于 optimize_duplicate_order_by_and_distinct 关于 ORDER BY 子句的优化,但更通用,因为它应用于任何冗余排序步骤(不仅由 ORDER BY 子句引起),并且应用于任何深度的子查询。相关于 #42648#43905 (Igor Nikonov)。
  • 添加了禁用 BACKUP 文件去重的功能(对于没有去重的备份,可以使用 ATTACH 代替完整的 RESTORE)。例如 BACKUP foo TO S3(...) SETTINGS deduplicate_files=0 (默认 deduplicate_files=1)。 #43947 (Azat Khuzhin)。
  • 重构并改进文本格式的模式推断。添加新设置 schema_inference_make_columns_nullable,用于控制使结果类型为 Nullable (默认启用)。 #44019 (Kruglov Pavel)。
  • 更好地支持 PROXYv1 协议。 #44135 (Yakov Olkhovskiy)。
  • system.parts 表中添加了有关清理线程最新 part 检查的信息。 #44244 (Dmitry Novik)。
  • 在只读模式下禁用表函数进行插入操作。 #44290 (SmitaRKulkarni)。
  • 添加设置 simultaneous_parts_removal_limit,以允许限制 CleanupThread 的一次迭代处理的 parts 数量。 #44461 (Dmitry Novik)。
  • 当查询中只需要虚拟列时,不要初始化 ReadBufferFromS3。 这可能有助于 #44246#44493 (chen)。
  • 防止重复的列名提示。 关闭 #44130#44519 (Joanna Hulboj)。
  • 允许在磁盘端点中进行宏替换。 解决 #40951#44533 (SmitaRKulkarni)。
  • 改进了启用 input_format_json_read_object_as_string 时的模式推断。 #44546 (Kruglov Pavel)。
  • 添加用户级设置 database_replicated_allow_replicated_engine_arguments,该设置允许禁止在 DatabaseReplicated 中使用参数创建 ReplicatedMergeTree 表。 #44566 (alesapin)。
  • 防止用户错误地为 index_granularity 指定零(无效)值。 这关闭了 #44536#44578 (Alexey Milovidov)。
  • 在 config.xml 的 kerberos 部分的 keytab 参数中添加了设置服务 keytab 文件路径的可能性。 #44594 (Roman Vasin)。
  • 使用查询的已写入部分进行模糊搜索(传递给 skim 库,该库用 Rust 编写并静态链接到 ClickHouse)。 #44600 (Azat Khuzhin)。
  • 默认启用 input_format_json_read_objects_as_strings,以便在 JSON Object 类型为实验性时能够读取嵌套的 JSON 对象。 #44657 (Kruglov Pavel)。
  • 改进异步插入的去重:当用户执行重复的异步插入时,我们应该在查询 Keeper 之前在内存中进行去重。 #44682 (Han Fei)。
  • 输入/输出 Avro 格式将解析 bool 类型为 ClickHouse bool 类型。 #44684 (Kruglov Pavel)。
  • 在 Arrow/Parquet/ORC 中支持 Bool 类型。 关闭 #43970#44698 (Kruglov Pavel)。
  • 读取 UUID 时,不要贪婪地解析引号之外的内容 - 这可能会导致错误地成功解析不正确的数据。 #44686 (Raúl Marín)。
  • 在 Int64 溢出的情况下推断 UInt64,并修复模式推断中的一些转换。 #44696 (Kruglov Pavel)。
  • 以前,Replicated 数据库内部的依赖项解析是以一种 hacky 的方式完成的,现在使用显式图来正确完成。 #44697 (Nikita Mikhaylov)。
  • 修复 output_format_pretty_row_numbers 不会跨块保留计数器的问题。 关闭 #44815#44832 (flynn)。
  • 不要报告 system.errors 中的错误,这些错误是由于 parts 与后台清理过程并发合并而引起的。 #44874 (Raúl Marín)。
  • 优化和修复分布式异步 INSERT 的指标。 #44922 (Azat Khuzhin)。
  • 添加了禁止并发备份和还原的设置,解决 #43891。 实现:* 添加了服务器级设置以禁止并发备份和还原,这些设置在 Context 中创建 BackupWorker 时读取和设置。 * 设置默认为 true。 * 在启动备份或还原之前,添加了检查以查看是否有其他备份/还原正在运行。对于内部请求,它使用 backup_uuid 检查是否来自自身节点。 #45072 (SmitaRKulkarni)。
  • 为系统日志添加 <storage_policy> 配置参数。 #45320 (Stig Bakken)。

构建/测试/打包改进

  • 静态链接 skim 库(它用 Rust 编写)用于 clickhouse 客户端/本地历史记录中的模糊搜索。 #44239 (Azat Khuzhin)。
  • 由于 Rust 的原因,我们移除了对共享链接的支持。实际上,Rust 只是移除此功能的借口,即使没有 Rust 我们也想移除它。 #44828 (Alexey Milovidov)。
  • 从软件包中移除对 adduser 工具的依赖,因为我们不使用它。 这修复了 #44934#45011 (Alexey Milovidov)。
  • SQLite 库已更新到最新版本。它用于 SQLite 数据库和表集成引擎。此外,还修复了一个误报的 TSan 报告。 这关闭了 #45027#45031 (Alexey Milovidov)。
  • CRC-32 更改以解决 PowerPC 中的 WeakHash 冲突问题。 #45144 (MeenaRenganathan22)。
  • 更新 aws-c* 子模块 #43020 (Vitaly Baranov)。
  • 自动合并绿色的 backport PR 和绿色的 approved PR #41110 (Mikhail f. Shiryaev)。
  • 引入一个 网站,用于显示 ClickHouse CI 的状态。 Source

Bug 修复

  • 将域 IP 类型 (IPv4, IPv6) 替换为原生类型。 #43221 (Yakov Olkhovskiy)。它自动修复了代码中一些缺失的实现。
  • 修复了在备份过程中 mutation 被终止时的备份过程。 #45351 (Vitaly Baranov)。
  • 修复了 Chunk 中的行数无效 异常消息。 #41404#42126 (Alexander Gololobov)。
  • 修复了在排序后执行表达式后可能使用未初始化值的问题。 关闭 #43386 #43635 (Kruglov Pavel)。
  • 更好地处理聚合组合器中的 NULL,修复了在使用晦涩的优化 optimize_rewrite_sum_if_to_count_if 时可能发生的段错误/逻辑错误。 关闭 #43758#43813 (Kruglov Pavel)。
  • 修复 CREATE USER/ROLE 查询设置约束。 #43993 (Nikolay Degterinsky)。
  • 修复了表元数据中 EPHEMERAL 列的不可解析默认值的 bug。 #44026 (Yakov Olkhovskiy)。
  • 修复了从兼容性设置中解析错误版本的问题。 #44224 (Kruglov Pavel)。
  • 使 datetime 的间隔减法与加法保持一致。 #44241 (ltrk2)。
  • 删除对 view 结果最大大小的限制。 #44261 (lizhuoyu5)。
  • 修复了如果 do_not_evict_index_and_mrk_files=1 时缓存中可能存在的逻辑错误。 关闭 #42142#44268 (Kseniia Sumarokova)。
  • 修复了在 write-through 缓存中可能存在的过早缓存写入中断(当不应该中断时,由于错误的假设而可能停止缓存)。 #44289 (Kseniia Sumarokova)。
  • 修复了在使用常量参数的 IN 函数作为常量参数与 LowCardinality 一起使用时可能发生的崩溃。 修复 #44221#44346 (Nikolai Kochetov)。
  • 修复了对参数化聚合函数的复杂参数(如数组)的支持。 这关闭了 #30975。 聚合函数 sumMapFiltered 在此更改之前在分布式查询中不可用。 #44358 (Alexey Milovidov)。
  • 修复了 BSON 模式推断中 ObjectId 的读取。 #44382 (Kruglov Pavel)。
  • 修复了可能导致在 ReplicatedMergeTree 中合并完成之前过早移除临时 parts 的竞争条件。 此问题可能导致类似 No such file or directory: xxx 的错误。 修复 #43983#44383 (alesapin)。
  • 某些无效的 SYSTEM ... ON CLUSTER 查询在未指定集群名称时以意外的方式工作。 此问题已修复,现在无效查询应抛出 SYNTAX_ERROR 错误。 修复了 #44264. #44387 (Alexander Tokmakov)。
  • 修复了读取 ORC 格式中 Map 类型的问题。 #44400 (Kruglov Pavel)。
  • 修复了读取 Parquet/ORC 格式中输入数据中不存在的列的问题。 之前这可能会导致 INCORRECT_NUMBER_OF_COLUMNS 错误。 关闭了 #44333#44405 (Kruglov Pavel)。
  • 以前,bar 函数使用相同的 '▋' (U+258B "Left five eighths block") 字符来显示 5/8 和 6/8 的条形图。 此更改通过使用 '▊' (U+258A "Left three quarters block") 来显示 6/8 的条形图来纠正此行为。 #44410 (Alexander Gololobov)。
  • 在配置文件中将 profile 设置放在 profile 设置约束之后会导致约束失效。 #44411 (Konstantin Bogdanov)。
  • 修复了运行带有数据的 EXPLAIN AST INSERT 查询时出现的 SYNTAX_ERROR 错误。 关闭了 #44207#44413 (save-my-heart)。
  • 修复了在 CSV 格式中读取带有 CRLF 的 bool 值的问题。 关闭了 #44401#44442 (Kruglov Pavel)。
  • 不要在 LowCardinality 字典上执行 and/or/if/multiIf,这样结果类型就不能是 LowCardinality。 这可能会在某些情况下导致 Illegal column ColumnLowCardinality 错误。 修复了 #43603#44469 (Kruglov Pavel)。
  • 修复了带有 max_streams_for_merge_tree_reading 设置的 Mutations。 #44472 (Anton Popov)。
  • 修复了 ASTSelectQuery::formatImpl 中 GROUPING SETS 可能出现的空指针解引用问题 (#43049)。 #44479 (Robert Schulze)。
  • 根据设置验证表函数参数、CAST 函数参数、JSONAsObject 模式推断中的类型。 #44501 (Kruglov Pavel)。
  • 修复了带有 LowCardinality 和 const 列的 IN 函数,关闭了 #44503#44506 (Duc Canh Le)。
  • 修复了 CREATE TABLE 语句中 DEFAULT 表达式规范化中的一个错误。 函数 in 的第二个参数(或运算符 IN 的右侧参数)可能会在 CREATE 查询执行期间被其评估结果替换。 修复了 #44496#44547 (Alexander Tokmakov)。
  • Projections 在存在 WITH ROLLUP、WITH CUBE 和 WITH TOTALS 的情况下无法工作。 在之前的版本中,查询会产生异常而不是跳过 projections 的使用。 这关闭了 #44614。 这关闭了 #42772#44615 (Alexey Milovidov)。
  • 异步块未被清理,因为函数 get all blocks sorted by time 没有获取异步块。 #44651 (Han Fei)。
  • 修复了带有子查询、UNION 和 TOTALS 的 JOIN 的 LOGICAL_ERROR The top step of the right pipeline should be ExpressionStep 错误。 修复了 #43687#44673 (Nikolai Kochetov)。
  • 避免 Executable 表引擎中出现 std::out_of_range 异常。 #44681 (Kruglov Pavel)。
  • 不要将 optimize_syntax_fuse_functions 应用于 AST 上的 quantiles,关闭了 #44712#44713 (Vladimir C)。
  • 修复了 Merge 表和 PREWHERE 中类型错误的 bug,关闭了 #43324#44716 (Vladimir C)。
  • 修复了关闭期间(销毁 TraceCollector 时)可能发生的崩溃。 修复了 #44757#44758 (Nikolai Kochetov)。
  • 修复了分布式查询处理中可能发生的崩溃。 如果带有 totals 或 extremes 的查询返回空结果,并且 Distributed 表和本地表中的类型不匹配,则可能发生崩溃。 修复了 #44738#44760 (Nikolai Kochetov)。
  • 修复了 fetches 的 fsync (min_compressed_bytes_to_fsync_after_fetch)/mutations 中小文件 (ttl.txt, columns.txt) 的 fsync (min_rows_to_fsync_after_merge/min_compressed_bytes_to_fsync_after_merge)。 #44781 (Azat Khuzhin)。
  • 在磁盘之间移动 parts 的情况下,查询 system.partssystem.parts_columns 表时可能出现罕见的竞争条件。 在 #41145 中引入。 #44809 (Alexey Milovidov)。
  • 修复了启用 projections 优化时可能出现的 Context has expired 错误。 可以使用带有特定函数(如在运行时使用 context 的 dictHas/dictGet)的查询重现。 修复了 #44844#44850 (Nikolai Kochetov)。
  • 修复了从远程 fs 读取 LowCardinality 字典时可能发生的 Cannot read all data 错误。 修复了 #44709#44875 (Nikolai Kochetov)。
  • 忽略硬件监视器传感器无法读取的情况,而不是在日志中显示完整的异常消息。 #44895 (Raúl Marín)。
  • 如果计算出的 INSERT 延迟时间超过设置值,则使用 max_delay_to_insert 值。 与 #44902 相关。 #44916 (Igor Nikonov)。
  • 修复了带有 UNION 的查询的 Different order of columns in UNION subquery 错误。 修复了 #44866#44920 (Nikolai Kochetov)。
  • INSERT 的延迟计算可能不正确,这可能导致始终使用 max_delay_to_insert 设置作为延迟,而不是正确的值。 使用简单的公式 max_delay_to_insert * (parts_over_threshold/max_allowed_parts_over_threshold),即延迟与超出阈值的部分成比例增长。 关闭了 #44902#44954 (Igor Nikonov)。
  • 修复了宽 part 具有轻量级删除掩码时 alter table TTL 错误。 #44959 (Mingliang Pan)。
  • 后续修复了替换域 IP 类型 (IPv4, IPv6) 为 native #43221 的问题。 #45024 (Yakov Olkhovskiy)。
  • 后续修复了替换域 IP 类型 (IPv4, IPv6) 为 native https://github.com/ClickHouse/ClickHouse/pull/43221 的问题。 #45043 (Yakov Olkhovskiy)。
  • parser 中可能存在缓冲区溢出。 由 fuzzer 发现。 #45047 (Alexey Milovidov)。
  • 修复了 storage FileLog 中可能发生的 cannot-read-all-data 错误。 关闭了 #45051, #38257#45057 (Kseniia Sumarokova)。
  • 当查询中存在 grouping sets 时,内存高效聚合(设置 distributed_aggregation_memory_efficient)被禁用。 #45058 (Nikita Taranov)。
  • 修复了 RANGE_HASHED 字典在指定 update_field 时,将范围列计为更新期间主键一部分的问题。 关闭了 #44588#45061 (Maksim Kita)。
  • 修复了嵌套 lambda 的 LowCardinality 捕获参数的 Cannot capture column 错误。 修复了 #45028#45065 (Nikolai Kochetov)。
  • 修复了在使用 minmax/count projection 的情况下 additional_table_filters 的错误查询结果(未应用额外的过滤器)。 #45133 (Nikolai Kochetov)。
  • 修复了 histogram 函数接受负值的 bug。 #45147 (simpleton)。
  • 修复了 StoreageJoin 中错误的列可空性,关闭了 #44940#45184 (Vladimir C)。
  • 修复了 background_fetches_pool_size 设置重载(在运行时增加)。 #45189 (Raúl Marín)。
  • 正确处理 KV 引擎(例如 KeeperMap、EmbeddedRocksDB)上使用子查询生成不同类型的键的 INSELECT 查询。 #45215 (Antonio Andelic)。
  • 修复了 SEMI JOIN & join_use_nulls 在某些情况下的逻辑错误,关闭了 #45163, 关闭了 #45209#45230 (Vladimir C)。
  • 修复了从 s3 读取时发生的 heap-use-after-free 错误。 #45253 (Kruglov Pavel)。
  • 修复了 Avro Union 类型为 ['null', Nested type] 时的 bug,关闭了 #45275。 修复了错误地将 bytes 类型推断为 Float 的 bug。 #45276 (flynn)。
  • 当显式 PREWHERE 不能与使用 storage engine Merge 的表一起使用时,抛出正确的异常。 #45319 (Antonio Andelic)。
  • 在 WSL1 Ubuntu 下,自解压 ClickHouse 由于不一致而无法解压缩 - /proc/self/maps 报告 32 位文件的 inode,而 stat 报告 64 位 inode。 #45339 (Yakov Olkhovskiy)。
  • 修复了 Distributed 表启动时的竞争条件(可能导致多次处理异步 INSERT 文件)。 #45360 (Azat Khuzhin)。
  • 修复了在 ListObject 请求失败的情况下,从 storage S3 和 table function s3 读取时可能发生的崩溃。 #45371 (Anton Popov)。
  • 修复了当存在结构错误的字典(例如 XML config 中的类型不正确)时,SELECT ... FROM system.dictionaries 异常。 #45399 (Aleksei Filatov)。
  • 修复了在 INSERT INTO ... SELECT * FROM s3Cluster 查询中使用插入表的结构时,s3Cluster 模式推断的问题。 #45422 (Kruglov Pavel)。
  • 修复了使用 HTTP 的 JSON/BSONEachRow 解析中的 bug,该 bug 可能导致对某些列使用默认值而不是数据中的值。 #45424 (Kruglov Pavel)。
  • 修复了从文本源进行 IP 类型类型化解析时出现的 bug (Code: 632. DB::Exception: Unexpected data ... after parsed IPv6 value ...)。 #45425 (Yakov Olkhovskiy)。
  • 关闭了 #45297 添加了对空正则表达式的检查。 #45428 (Han Fei)。
  • 修复了可能发生的(可能是分布式的)查询挂起。 #45448 (Azat Khuzhin)。
  • 修复了在 ThreadPool::schedule 出现异常的情况下,启用 allow_asynchronous_read_from_io_pool_for_merge_tree 时可能发生的死锁。 #45481 (Nikolai Kochetov)。
  • 修复了 DETACH 后可能发生的 table in-use 问题。 #45493 (Azat Khuzhin)。
  • 修复了在查询被取消并且在执行期间使用了并行解析的情况下,可能发生的罕见 abort。 #45498 (Anton Popov)。
  • 修复了 Distributed 表创建和 INSERT 到表中的竞争(可能导致在 INSERT 到表时出现 CANNOT_LINK 错误)。 #45502 (Azat Khuzhin)。
  • 为缓存策略 getter 添加了正确的默认值 (SLRU)。 关闭了 #45514#45524 (Kseniia Sumarokova)。
  • 禁止在 mutations 中使用 array join,关闭了 #42637 #44447 (SmitaRKulkarni)。
  • 修复了带有别名表名和列转换器的限定星号的问题。 解决了 #44736#44755 (SmitaRKulkarni)。

2022 年的更新日志

  • 目录
  • ClickHouse 23.12 版本,2023-12-28
  • ClickHouse 23.11 版本,2023-12-06
  • ClickHouse 23.10 版本,2023-11-02
  • ClickHouse 23.9 版本,2023-09-28
  • ClickHouse 23.8 LTS 版本,2023-08-31
  • ClickHouse 23.7 版本,2023-07-27
  • ClickHouse 23.6 版本,2023-06-29
  • ClickHouse 23.5 版本,2023-06-08
  • ClickHouse 23.4 版本,2023-04-26
  • ClickHouse 23.3 LTS 版本,2023-03-30
  • ClickHouse 23.2 版本,2023-02-23
  • ClickHouse 23.1 版本,2023-01-26
  • ClickHouse 23.1 版本
  • 2022 年更新日志