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 = 1
或SET compatibility = '23.11'
重新允许。关闭了 #37286。 #51858 (Alexey Milovidov)。 - MergeTree 设置
clean_deleted_rows
已弃用,不再起作用。默认情况下不允许OPTIMIZE
的CLEANUP
关键字(可以使用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
控制,有两个可能的值 -default
和union
。关闭了 #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)。 - 加速原生类型的
MIN
和MAX
。 #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_timeout
和replicated_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
类型一起使用。以前,第一个函数参数必须是String
或FixedString
类型的值。这提高了与第三方工具(如通过 MySQL 接口的 Tableau)的兼容性。 #57277 (Serge Klochkov)。 - 函数
format
现在支持任意参数类型(而不仅仅是String
和FixedString
参数)。这对于计算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_drop
和max_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.backups
和system.backup_log
表添加基本备份名称 #58178 (Pradeep Chhetri)。 - 在 clickhouse-local 的命令行中添加对指定查询参数的支持 #58210 (Pradeep Chhetri)。
构建/测试/打包改进
- 随机化更多设置 #39663 (Anton Popov)。
- 在 CI 中随机化禁用的优化 #57315 (Raúl Marín)。
- 允许在 macOS 上使用 Azure 相关的表引擎/函数。 #51866 (Alexey Milovidov)。
- ClickHouse Fast Test 现在使用 Musl 而不是 GLibc。 #57711 (Alexey Milovidov)。完全静态的 Musl 构建版本可从 CI 下载。
- 为每次提交运行 ClickBench。这关闭了 #57708。 #57712 (Alexey Milovidov)。
- 从外部库中删除有害的 C/POSIX
select
函数的使用。 #57467 (Igor Nikonov)。 - 仅在 ClickHouse Cloud 中可用的设置也将在开源 ClickHouse 构建版本中提供,以方便使用。 #57638 (Nikita Mikhaylov)。
Bug 修复(官方稳定版本中用户可见的错误行为)
- 修复了 TTL GROUP BY 中排序顺序可能被破坏的问题 #49103 (Nikita Mikhaylov)。
- 修复:拆分
lttb
bucket 策略,第一个 bucket 和最后一个 bucket 应该只包含单个点 #57003 (FFish)。 - 修复了错误后同步期间
Template
格式中可能发生的死锁 #57004 (Kruglov Pavel)。 - 修复了在跳过大量错误时,过早停止解析文件的问题 #57006 (Kruglov Pavel)。
- 防止通过
dictionary
表函数绕过字典的 ACL #57362 (Salvatore Mesoraca)。 - 修复了 Fuzzer 发现的另一个 "non-ready set" 错误案例。 #57423 (Nikolai Kochetov)。
- 修复了关于 PostgreSQL
array_ndims
用法的几个问题。 #57436 (Ryan Jacobs)。 - 修复了写入锁超时后 RWLock 不一致的问题 #57454 (Vitaly Baranov)。再次修复写入锁超时后 RWLock 不一致的问题 #57733 (Vitaly Baranov)。
- 修复:在构建推送到视图链时,不要排除瞬时列 #57461 (Yakov Olkhovskiy)。
- MaterializedPostgreSQL (实验性问题): 修复问题 #41922,为 #41923 添加测试 #57515 (Kseniia Sumarokova)。
- 忽略用于管理复制访问实体的 grant/revoke 查询中的 ON CLUSTER 子句。 #57538 (MikhailBurdukov)。
- 修复 clickhouse-local 中的崩溃 #57553 (Nikolay Degterinsky)。
- Hash JOIN 的修复。 #57564 (vdimir)。
- 修复 PostgreSQL 源中可能出现的错误 #57567 (Kseniia Sumarokova)。
- 修复 Hash JOIN 中嵌套 LowCardinality 的类型校正。 #57614 (vdimir)。
- 通过正确禁止从
system.stack_trace
并行读取来避免其挂起。 #57641 (Azat Khuzhin)。 - 修复了使用
any(...) RESPECT NULL
聚合稀疏列时出现的错误 #57710 (Azat Khuzhin)。 - 修复一元运算符解析 #57713 (Nikolay Degterinsky)。
- 修复实验性表引擎
MaterializedPostgreSQL
的依赖加载。 #57754 (Kseniia Sumarokova)。 - 修复 BACKUP/RESTORE ON CLUSTER 断开连接节点的重试 #57764 (Vitaly Baranov)。
- 修复部分物化投影情况下外部聚合的结果 #57790 (Anton Popov)。
- 修复带有
*Map
组合器的聚合函数中的合并 #57795 (Anton Popov)。 - 禁用
system.kafka_consumers
,因为它存在 bug。 #57822 (Azat Khuzhin)。 - 修复 Merge JOIN 中对 LowCardinality 键的支持。 #57827 (vdimir)。
- 与示例块相关的
InterpreterCreateQuery
的修复。 #57855 (Maksim Kita)。 - PostgreSQL 命名集合中的
addresses_expr
被忽略。 #57874 (joelynch)。 - 修复 BLAKE3 (Rust) 中的无效内存访问 #57876 (Raúl Marín)。然后为了更好的内存安全,它从 Rust 重写为 C++。 #57994 (Raúl Marín)。
- 规范化
CREATE INDEX
中的函数名 #57906 (Alexander Tokmakov)。 - 修复首次请求发生之前不可用副本的处理 #57933 (Nikita Taranov)。
- 修复字面量别名误分类 #57988 (Chen768959)。
- 修复 Keeper 上的无效预处理 #58069 (Antonio Andelic)。
- 修复
Poco
库中与UTF32Encoding
相关的整数溢出 #58073 (Andrey Fedotov)。 - 修复存在带有大整数值的标量子查询时,并行副本(实验性功能)的问题 #58118 (Alexey Milovidov)。
- 修复
accurateCastOrNull
对于超出范围的DateTime
的处理 #58139 (Andrey Zvonov)。 - 修复在 MergeTree 中从宽 part 读取子列时可能出现的
PARAMETER_OUT_OF_BOUND
错误 #58175 (Kruglov Pavel)。 - 修复了带有大量子查询的 CREATE VIEW 的减速问题 #58220 (Tao Wang)。
- 修复 JSONCompactEachRow 的并行解析 #58181 (Alexey Milovidov)。 #58250 (Kruglov Pavel)。
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)。- 您不能再将聚合函数
avgWeighted
与Decimal
类型的参数一起使用。解决方法:将参数转换为Float64
。这关闭了 #43928。这关闭了 #31768。这关闭了 #56435。如果您在带有Decimal
参数的物化视图或投影中使用了此函数,请联系 [email protected]。修复了聚合函数sumMap
中的错误,并使其速度降低了约 1.5..2 倍。但这无关紧要,因为该函数本来就是垃圾。这关闭了 #54955。这关闭了 #53134。这关闭了 #55148。修复了函数groupArraySample
中的一个 bug - 如果在一个查询中生成多个聚合状态,它会使用相同的随机种子。 #56350 (Alexey Milovidov)。
新功能
- 添加了服务器设置
async_load_databases
,用于异步加载数据库和表。加快了服务器启动时间。适用于具有Ordinary
、Atomic
和Replicated
引擎的数据库。它们的表异步加载元数据。查询表会提高加载作业的优先级并等待其完成。添加了一个新的表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)。 - 优化从
map
、arrayElement
获取值。这将带来约 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).
- 改进了
File
和HDFS
存储的 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). - 修复了在
TRUNCATE
或DROP 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
(值为false
或true
)已被标记为过时。它被设置query_cache_nondeterministic_function_handling
替换,这是一个三值枚举,用于控制查询缓存如何处理具有非确定性函数的查询:a) 抛出异常(默认行为),b) 无条件保存非确定性查询结果,或 c) 忽略,即不抛出异常,也不缓存结果。 #56519 (Robert Schulze). - 在 JOIN ON 部分重写带有
is null
检查的相等性。 实验性仅限分析器。 #56538 (vdimir). - 函数
concat
现在支持任意参数类型(而不仅仅是 String 和 FixedString 参数)。这使其行为更类似于 MySQLconcat
实现。例如,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 Program 由 https://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_bytes
和total_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-local
和clickhouse-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 修复(官方稳定版本中用户可见的错误行为)
- 修复了实验性分析器 - 来自引用插入表的子查询的选择的插入应该只处理插入块。 #50857 (Yakov Olkhovskiy).
- 修复了
str_to_map
函数中的错误。 #56423 (Arthur Passos). - Keeper
reconfig
:在让出/获取领导权之前添加超时 #53481 (Mike Kot). - 修复了 grace hash join 和 filter pushdown 中的错误标头 #53922 (vdimir).
- 从基于表函数的表选择系统表。 #55540 (MikhailBurdukov).
- RFC:修复了带有 LIMIT BY 的分布式查询的 “Cannot find column X in source stream” 错误 #55836 (Azat Khuzhin).
- 修复了在后台运行客户端时 “Cannot read from file:” 的错误 #55976 (Kruglov Pavel).
- 修复了 clickhouse-local 在错误的 send_logs_level 设置下退出的问题 #55994 (Kruglov Pavel).
- Bug 修复 explain ast 与参数化视图 #56004 (SmitaRKulkarni).
- 修复了启动时加载表期间的崩溃 #56232 (Nikolay Degterinsky).
- 修复了具有显式查询的 ClickHouse 源字典 #56236 (Nikolay Degterinsky).
- 修复了 Keeper 信号处理程序中的段错误 #56266 (Antonio Andelic).
- 修复了 view() 函数中 UNION 的不完整查询结果。 #56274 (Nikolai Kochetov).
- 修复了 “cast('0' as DateTime64(3))” 和 “cast('0' as Nullable(DateTime64(3)))” 的不一致性 #56286 (李扬).
- 修复了与内存分配失败相关的罕见竞争条件 #56303 (alesapin).
- 修复了使用
flatten_nested
和data_type_default_nullable
从备份还原的问题 #56306 (Kseniia Sumarokova). - 修复了在添加 Object(JSON) 类型的列时发生的崩溃 #56307 (Nikita Mikhaylov).
- 修复了 filterPushDown 中的崩溃 #56380 (vdimir).
- 修复了从备份还原带有物化视图和已删除源表的问题 #56383 (Kseniia Sumarokova).
- 修复了 Kerberos 初始化期间的段错误 #56401 (Nikolay Degterinsky).
- 修复了 T64 中的缓冲区溢出 #56434 (Alexey Milovidov).
- 修复了 final 中的可空主键 (2) #56452 (Amos Bird).
- 修复了初始节点上没有数据库的 ON CLUSTER 查询 #56484 (Nikolay Degterinsky).
- 修复了由于 TTL 依赖性导致的启动失败 #56489 (Nikolay Degterinsky).
- 修复了 ON CLUSTER 的 ALTER COMMENT 查询 #56491 (Nikolay Degterinsky).
- 修复了带有 ALIAS 的 ALTER COLUMN #56493 (Nikolay Degterinsky).
- 修复了空的 NAMED COLLECTION #56494 (Nikolay Degterinsky).
- 修复了投影分析的两种情况。 #56502 (Amos Bird).
- 修复了查询缓存中别名的处理 #56545 (Robert Schulze).
- 修复了从
Nullable(Enum)
到Nullable(String)
的转换问题 #56644 (Nikolay Degterinsky)。 - Keeper 中更可靠的日志处理 #56670 (Antonio Andelic)。
- 修复了具有替换属性的节点的配置合并问题 #56694 (Konstantin Bogdanov)。
- 修复了表函数 input() 的重复使用问题。 #56695 (Nikolai Kochetov)。
- 修复:RabbitMQ OpenSSL 动态加载问题 #56703 (Igor Nikonov)。
- 修复了 GCD 编解码器在数据中存在零值时的崩溃问题 #56704 (Nikita Mikhaylov)。
- 修复了在 clickhouse-local 中插入函数时出现的“mutex lock failed: Invalid argument”错误 #56710 (Kruglov Pavel)。
- 修复了乐观路径中的 Date 文本解析 #56765 (Kruglov Pavel)。
- 修复了 FPC 编解码器中的崩溃问题 #56795 (Alexey Milovidov)。
- DatabaseReplicated:修复了副本恢复后 DDL 查询超时的问题 #56796 (Alexander Tokmakov)。
- 修复了 MySQL 二进制协议中不正确的 nullable 列报告 #56799 (Serge Klochkov)。
- 支持元数据存储表中的 Iceberg 元数据文件 #56810 (Kruglov Pavel)。
- 修复了 transform 下的 TSAN 报告 #56817 (Raúl Marín)。
- 修复了 SET 查询和 SETTINGS 格式化 #56825 (Nikolay Degterinsky)。
- 修复了由于 joinGet 中的表依赖关系而导致启动失败的问题 #56828 (Nikolay Degterinsky)。
- 修复了在 ADD COLUMN 期间展平现有 Nested 列的问题 #56830 (Nikolay Degterinsky)。
- 修复了允许 csv 使用 cr 换行符的问题 #56901 (KevinyhZou)。
- 修复了
tryBase64Decode
函数在输入无效时的错误 #56913 (Robert Schulze)。 - 修复了 CapnProto/Protobuf 模式中生成深度嵌套列的问题 #56941 (Kruglov Pavel)。
- 防止了投影列的不兼容 ALTER 操作 #56948 (Amos Bird)。
- 修复了 sqlite 文件路径验证 #56984 (San)。
- S3Queue:修复了元数据引用计数增加的问题 #56990 (Kseniia Sumarokova)。
- S3Queue 次要修复 #56999 (Kseniia Sumarokova)。
- 修复了 DatabaseFileSystem 的文件路径验证 #57029 (San)。
- 修复了
fuzzBits
与ARRAY JOIN
结合使用的问题 #57033 (Antonio Andelic)。 - 修复了与 joined_subquery_re... 的部分合并连接中的 Nullptr 解引用问题 #57048 (vdimir)。
- 修复了 RemoteSource 中的竞争条件 #57052 (Raúl Marín)。
- 实现了大整数的
bitHammingDistance
函数 #57073 (Alexey Milovidov)。 - S3 风格链接的错误修复 #57075 (Yarik Briukhovetskyi)。
- 修复了具有多个数字路径的 JSON_QUERY 函数 #57096 (KevinyhZou)。
- 修复了 Gorilla 编解码器中的缓冲区溢出 #57107 (Nikolay Degterinsky)。
- 在身份验证之前关闭任何异常的 interserver 连接 #57142 (Antonio Andelic)。
- 修复了使用 Nullable MATERIALIZED 列进行 ALTER UPDATE 后的段错误 #57147 (Nikolay Degterinsky)。
- 修复了使用部分物化的正常投影进行 JOIN 计划优化时出现的不正确问题 #57196 (Amos Bird)。
- 在比较列描述时忽略注释 #57259 (Antonio Andelic)。
- 修复了所有情况下的
ReadonlyReplica
指标 #57267 (Antonio Andelic)。 - 后台合并正确地在缓存中使用临时数据存储 #57275 (vdimir)。
- Keeper 修复了变更日志和快照的问题 #57299 (Antonio Andelic)。
- 如果主机名已更改,则忽略已完成的 ON CLUSTER 任务 #57339 (Alexander Tokmakov)。
- MergeTree mutations 重用源 part 索引粒度 #57352 (Maksim Kita)。
- FS 缓存:为后台下载添加限制 #57424 (Kseniia Sumarokova)。
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.s3queue
和system.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
表添加了字段substreams
和filenames
。 #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::insertMany
和ColumnVector::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 相当长的时间。修复方法是避免遍历繁重的watches
和list_watches
集合。 #56054 (Alexander Gololobov)。 - 添加了设置
optimize_trivial_approximate_count_query
以将count
近似值用于存储 EmbeddedRocksDB。为 StorageJoin 启用简单计数。 #55806 (Duc Canh Le)。
改进
- 函数
toDayOfWeek
(MySQL 别名:DAYOFWEEK
)、toYearWeek
(YEARWEEK
)和toWeek
(WEEK
)现在支持String
参数。这使其行为与 MySQL 的行为一致。 #55589 (Robert Schulze)。 - 引入了设置
date_time_overflow_behavior
,其可能的值为ignore
、throw
、saturate
,用于控制从 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)。 - 有时,
OPTIMIZE
与optimize_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_columns
,SHOW COLUMNS
现在可以正确地将FixedString
类型报告为BLOB
。此外,还添加了两个新的设置mysql_map_string_to_text_in_show_columns
和mysql_map_fixed_string_to_text_in_show_columns
,用于将String
和FixedString
类型的输出切换为TEXT
或BLOB
。 #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 修复(官方稳定版本中用户可见的错误行为)
- 在 Mutation 中跳过硬链接倒排索引文件 #47663 (cangyin)。
- 修复了
match
函数(正则表达式)与包含 alternation 的模式生成不正确键条件的错误。解决了 #53222 问题。 #54696 (Yakov Olkhovskiy)。 - 修复了 ARRAY JOIN 的按顺序读取优化中 “找不到列” 的问题 #51746 (Nikolai Kochetov)。
- 支持查询中遗漏的实验性
Object(Nullable(json))
子列。 #54052 (zps)。 - 重新添加了
accurateCastOrNull
的修复 #54629 (Salvatore Mesoraca)。 - 修复了在没有 AS 子句的情况下创建的 Distributed 表的列检测
DEFAULT
的问题 #55060 (Vitaly Baranov)。 - 在 ShellCommandSource 的构造函数中发生异常时进行正确的清理 #55103 (Alexander Gololobov)。
- 修复了 LDAP 分配角色更新中的死锁 #55119 (Julian Maicher)。
- 抑制内部异常的错误统计信息更新 #55128 (Robert Schulze)。
- 修复了备份中的死锁 #55132 (alesapin)。
- 修复了存储 Iceberg 文件检索的问题 #55144 (Kseniia Sumarokova)。
- 修复了集合中额外列的分区裁剪。 #55172 (Amos Bird)。
- 修复了当表具有自适应粒度时,ALTER UPDATE 查询中跳过索引的重新计算 #55202 (Duc Canh Le)。
- 修复了 fs 缓存中的后台下载问题 #55252 (Kseniia Sumarokova)。
- 避免了压缩器在缺少缓冲区最终化的情况下可能发生的内存泄漏 #55262 (Azat Khuzhin)。
- 修复了对稀疏列执行函数的问题 #55275 (Azat Khuzhin)。
- 修复了 SELECT FINAL FROM SummingMergeTree 的 Nested 列的错误合并 #55276 (Azat Khuzhin)。
- 修复了在没有零拷贝的情况下无法在 S3 之上删除复制合并树中 detached 分区的错误 #55309 (alesapin)。
- 修复了 MergeSortingPartialResultTransform 中的崩溃(由于
remerge
之后出现零个 chunk) #55335 (Azat Khuzhin)。 - 修复了 CreatingSetsTransform 中的数据竞争(在错误时),原因是抛出共享异常 #55338 (Azat Khuzhin)。
- 修复了垃圾优化(在一定程度上) #55353 (Alexey Milovidov)。
- 修复了 StorageHDFS 中的泄漏 #55370 (Azat Khuzhin)。
- 修复了在 cast 运算符中解析数组的问题 #55417 (Anton Popov)。
- 修复了查询中使用 OR 过滤器对虚拟列进行过滤的问题 #55418 (Azat Khuzhin)。
- 修复了 MongoDB 连接问题 #55419 (Nikolay Degterinsky)。
- 修复了 MySQL 接口布尔值表示 #55427 (Serge Klochkov)。
- 修复了 MySQL 文本协议 DateTime 格式化和 LowCardinality(Nullable(T)) 类型报告 #55479 (Serge Klochkov)。
- 使
use_mysql_types_in_show_columns
仅影响SHOW COLUMNS
#55481 (Robert Schulze)。 - 修复了堆栈符号器错误解析
DW_FORM_ref_addr
且有时崩溃的问题 #55483 (Michael Kolupaev)。 - 销毁 AsyncTaskExecutor 中 cancelBefore 发生异常时的 fiber #55516 (Kruglov Pavel)。
- 修复了查询参数在自定义 HTTP 处理程序中不起作用的问题 #55521 (Konstantin Bogdanov)。
- 修复了 Values 格式未处理数据的检查 #55527 (Azat Khuzhin)。
- 修复了 odbc 与 MS SQL Server 交互时的 “无效游标状态” #55558 (vdimir)。
- 修复了最大执行时间和 “break” 溢出模式 #55577 (Alexander Gololobov)。
- 修复了 QueryNormalizer 中带有循环别名的崩溃 #55602 (vdimir)。
- 禁用错误的优化并添加一个测试 #55609 (Alexey Milovidov)。
- 合并 #52352 #55621 (Alexey Milovidov)。
- 添加一个测试以避免不正确的 decimal 排序 #55662 (Amos Bird)。
- 修复了对于没有 glob 的 URL 的 s3 和 Azure Cluster 函数的进度条 #55666 (Kruglov Pavel)。
- 修复了查询中使用 OR 过滤器对虚拟列进行过滤的问题(重新提交) #55678 (Azat Khuzhin)。
- Iceberg 存储的修复和改进 #55695 (Kruglov Pavel)。
- 修复了 CreatingSetsTransform 中的数据竞争 (v2) #55786 (Azat Khuzhin)。
- 如果 precise_float_parsing 为 true,则在解析非法字符串为 float 时抛出异常 #55861 (李扬)。
- 如果 CTE 包含有状态函数,则禁用谓词下推 #55871 (Raúl Marín)。
- 修复了 normalize ASTSelectWithUnionQuery,因为它会从查询中剥离
FORMAT
#55887 (flynn)。 - 尝试修复 Native ORC 输入格式中可能发生的段错误 #55891 (Kruglov Pavel)。
- 修复了稀疏列情况下的窗口函数。 #55895 (János Benjamin Antal)。
- 修复:StorageNull 支持子列 #55912 (FFish)。
- 不要将 Replicated mutate/merge 的可重试错误写入错误日志 #55944 (Azat Khuzhin)。
- 修复
SHOW DATABASES LIMIT <N>
#55962 (Raúl Marín)。 - 修复了带有下划线字段的自动生成 Protobuf 模式 #55974 (Kruglov Pavel)。
- 修复了非默认 scale 的 dateTime64ToSnowflake64() #55983 (Robert Schulze)。
- 修复了 Arrow 字典列的输出/输入 #55989 (Kruglov Pavel)。
- 修复了 AvroConfluent 中从模式注册表获取模式的问题 #55991 (Kruglov Pavel)。
- 修复了 Buffer 表中并发 ALTER 和 INSERT 操作的 “Block structure mismatch” #55995 (Michael Kolupaev)。
- 修复了 least_used JBOD 策略的错误可用空间计算 #56030 (Azat Khuzhin)。
- 修复了在表函数内部评估子查询时缺少标量的问题 #56057 (Amos Bird)。
- 修复了 http_write_exception_in_output_format=1 时错误的查询结果 #56135 (Kruglov Pavel)。
- 修复了更改设置后 fallback JSON->JSONEachRow 的模式缓存 #56172 (Kruglov Pavel)。
- 向 odbc-bridge 添加了错误处理程序 #56185 (Yakov Olkhovskiy)。
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 调度支持。磁盘类型为
s3
、s3_plain
、hdfs
和azure_blob_storage
的存储配置现在可以包含read_resource
和write_resource
元素,这些元素持有资源名称。可以在单独的服务器配置部分resources
中配置这些资源的调度策略。可以使用设置workload
标记查询,并使用服务器配置部分workload_classifiers
对查询进行分类,以实现不同的资源调度目标。更多详细信息请参阅 文档。 #47009 (Sergei Trifonov)。添加了 "bandwidth_limit" IO 调度节点类型。它允许您在通过此节点的流量上指定max_speed
和max_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
,用于跟踪所有BACKUP
和RESTORE
操作。 #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
现在支持DateTime
和DateTime64
类型的参数。#54856 (Serge Klochkov)。 - 添加了函数
YYYYMMDDtoDate
,YYYYMMDDtoDate32
,YYYYMMDDhhmmssToDateTime
和YYYYMMDDhhmmssToDateTime64
。它们将以整数形式编码的日期或带时间的日期 (例如 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-local
和clickhouse-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-client
的rm
命令中添加了可选的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_comment
和table_collation
。3. 添加了视图information_schema.key_column_usage
和referential_constraints
。4. 将information_schema
视图中的大写别名替换为具体的大写列。#54773 (Serge Klochkov)。 - 如果用户尝试缓存带有非确定性函数 (如
now
,randomString
和dictGet
) 的查询结果,则查询缓存现在会返回错误。与之前的行为 (静默地不缓存结果) 相比,这减少了用户的困惑和意外。#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 修复 (官方稳定版本中用户可见的错误行为)
- 修复了使用零拷贝复制的 REPLACE/MOVE PARTITION (注意:“零拷贝复制”是一项实验性功能) #54193 (Alexander Tokmakov)。
- 修复了带有硬链接的零拷贝锁 (注意:“零拷贝复制”是一项实验性功能) #54859 (Alexander Tokmakov)。
- 修复了零拷贝垃圾 (注意:“零拷贝复制”是一项实验性功能) #54550 (Alexander Tokmakov)。
- 将 HTTP 重试超时时间以毫秒为单位传递 (以前不正确)。#54438 (Duc Canh Le)。
- 修复了 OUTFILE 与
CapnProto
/Protobuf
结合使用时误导性的错误消息 #52870 (Kruglov Pavel)。 - 修复了带有 LIMIT 的并行副本的摘要报告 #53050 (Raúl Marín)。
- 修复了从/到 S3 的 BACKUP 的限流 (在未使用原生复制的情况下) 以及在其他一些地方的限流 #53336 (Azat Khuzhin)。
- 修复了复制整个目录期间的 IO 限流 #53338 (Azat Khuzhin)。
- 修复:移动到 prewhere 条件的操作可能会丢失列 #53492 (Yakov Olkhovskiy)。
- 修复了替换为字节相等分区时的内部错误 #53735 (Pedro Riera)。
- 修复:需要参与 interpolate 表达式的列 #53754 (Yakov Olkhovskiy)。
- 修复了集群发现初始化 + 在配置中设置故障点 #54113 (vdimir)。
- 修复了
accurateCastOrNull
中的问题 #54136 (Salvatore Mesoraca)。 - 修复了带有 FINAL 修饰符的可空主键 #54164 (Amos Bird)。
- 修复了在存在重复数据的情况下,阻止插入复制物化视图中的新数据的错误。#54184 (Pedro Riera)。
- 修复:允许
IPv6
用于 bloom filter #54200 (Yakov Olkhovskiy)。 - 修复了
IPv4
可能存在的类型不匹配问题 #54212 (Bharat Nallan)。 - 修复了重建索引后
system.data_skipping_indices
的问题 #54225 (Artur Malchanau)。 - 修复了多个 join rewriter v2 的名称冲突问题 #54240 (Tao Wang)。
- 修复了 join 后
system.errors
中意外错误的问题 #54306 (vdimir)。 - 修复了
isZeroOrNull(NULL)
的问题 #54316 (flynn)。 - 修复了:使用
prefer_localhost_replica
= 1 时,分布式并行副本的问题 #54334 (Igor Nikonov)。 - 修复了垂直合并 + ReplacingMergeTree + 优化清理中的逻辑错误 #54368 (alesapin)。
- 修复了
s3
表函数中可能出现的URI contains invalid characters
错误 #54373 (Kruglov Pavel)。 - 修复了
arrayExists
函数 AST 优化中的段错误 #54379 (Nikolay Degterinsky)。 - 检查
analysisOfVariance
函数中加法运算前的溢出 #54385 (Antonio Andelic)。 - 重现并修复了 removeSharedRecursive 中的错误 #54430 (Sema Checherinda)。
- 修复了在 PREWHERE 和 FINAL 中使用 SimpleAggregateFunction 可能产生不正确结果的问题 #54436 (Azat Khuzhin)。
- 修复了非分析器 (non analyzer) 的 indexHint 的部分过滤问题 #54449 (Azat Khuzhin)。
- 修复了具有规范化状态 (normalized states) 的聚合 projections 问题 #54480 (Amos Bird)。
clickhouse-local
: 针对 multiquery 参数的一些改进 #54498 (CuiShuoGuo)。clickhouse-local
支持--database
命令行参数 #54503 (vdimir)。- 修复了禁用
input_format_with_names_use_header
时,-WithNames
格式中可能出现的解析错误 #54513 (Kruglov Pavel)。 - 修复了罕见的 CHECKSUM_DOESNT_MATCH 错误 #54549 (alesapin)。
- 修复了对已排序结果的 UNION ALL 进行排序的问题 #54564 (Vitaly Baranov)。
- 修复了 Keeper 中的快照安装问题 #54572 (Antonio Andelic)。
- 修复了
ColumnUnique
中的竞争条件 #54575 (Nikita Taranov)。 - Annoy/Usearch 索引:修复了使用默认值构建时出现的 LOGICAL_ERROR #54600 (Robert Schulze)。
- 修复了
ColumnDecimal
的序列化问题 #54601 (Nikita Taranov)。 - 修复了 *Cluster 函数对包含空格的列名的 schema 推断问题 #54635 (Kruglov Pavel)。
- 修复了在存在默认值和显式插入列的情况下,使用插入表的结构的问题 #54655 (Kruglov Pavel)。
- 修复:避免使用可能包含 alternation 的正则表达式匹配作为键条件 #54696 (Yakov Olkhovskiy)。
- 修复了 ReplacingMergeTree 与垂直合并和清理的问题 #54706 (SmitaRKulkarni)。
- 修复了虚拟列在 ORDER BY 之后具有不正确值的问题 #54811 (Michael Kolupaev)。
- 修复了非分析器 (non analyzer) 的 indexHint 的部分过滤问题 #54825 #54449 (Azat Khuzhin)。
- 修复了 Keeper 在关闭期间的段错误 #54841 (Antonio Andelic)。
- 修复了 MaterializedPostgreSQL 中的
Invalid number of rows in Chunk
错误 #54844 (Kseniia Sumarokova)。 - 将过时的格式设置移动到单独的部分 #54855 (Kruglov Pavel)。
- 当分区键被修改时,重建
minmax_count_projection
#54943 (Amos Bird)。 - 修复了函数
if
中到ColumnVector<Int128>
的错误转换 #55019 (Kruglov Pavel)。 - 防止从具有不同 projections 或 indices 的表附加 parts #55062 (János Benjamin Antal)。
- 为空子查询结果在标量结果映射中存储 NULL #52240 (vdimir)。
- 修复了
FINAL
在极少数情况下产生无效读取范围的问题 #54934 (Nikita Taranov)。 - 修复:insert quorum 在没有 keeper 重试的情况下 #55026 (Igor Nikonov)。
- 修复了具有 nullable 的 simple state 问题 #55030 (Pedro Riera)。
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 中使用不带表名的
cluster
、clusterAllReplicas
、remote
和remoteSecure
。 #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)。- 添加了新函数
startsWithUTF8
和endsWithUTF8
。 #52555 (李扬)。 - 允许 TSV/CustomSeparated/JSONCompactEachRow 中可变数量的列,使 schema 推断能够处理可变数量的列。添加了设置
input_format_tsv_allow_variable_number_of_columns
、input_format_custom_allow_variable_number_of_columns
、input_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) 添加了函数
arrayRotateLeft
、arrayRotateRight
、arrayShiftLeft
、arrayShiftRight
。 #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)。 - 通过并行化合并前的转换,加速合并
uniq
和uniqExact
聚合函数状态。 #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.events
和system.metrics
表中,添加列name
作为event
和metric
的别名。关闭了 #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.tables
和information_schema.TABLES
。建议的解决方案是在小写和大写information_schema
数据库中复制小写和大写表。 #52695 (Yarik Briukhovetskyi)。 - 查询
CHECK TABLE
具有更好的性能和可用性(发送进度更新,可取消)。 #52745 (vdimir)。 - 添加了对元组的
modulo
、intDiv
、intDivOrZero
的支持,通过在元组元素之间分配它们。 #52758 (Yakov Olkhovskiy)。 - 在
xml
之后,在 clickhouse-client 中搜索默认的yaml
和yml
配置文件。 #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)。 - 添加了限制备份操作(
BACKUP
和RESTORE
命令现在遵循s3_max_[get/put]_[rps/burst]
)中 S3 请求的能力。 #52974 (Daniel Pozo Escalona)。 - 添加了设置以忽略管理复制的用户定义函数或具有复制存储的访问控制实体的查询中的 ON CLUSTER 子句。 #52975 (Aleksei Filatov)。
- EXPLAIN JOIN 步骤的操作。 #53006 (Maksim Kita)。
- 使
hasTokenOrNull
和hasTokenCaseInsensitiveOrNull
对于空 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_s
和asynchronous_heavy_metrics_update_period_s
配置错误为 0,现在会优雅地失败,而不是终止应用程序。 #53428 (Robert Schulze)。 - ClickHouse 服务器现在在重新加载其配置时尊重通过 cgroups 更改的内存限制。 #53455 (Robert Schulze)。
- 添加了在
DETACH
、DROP
或服务器关闭时关闭刷新 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)。
构建/测试/打包改进
- 不要将 ClickHouse 二进制文件中的符号暴露给动态链接器。它可能会修复 #43933。 #47475 (Alexey Milovidov)。
- 将
clickhouse-keeper-client
符号链接添加到 clickhouse-server 包。 #51882 (Mikhail f. Shiryaev)。 - 将 https://github.com/elliotchance/sqltest 添加到 CI 以报告 SQL 2016 一致性。 #52293 (Alexey Milovidov)。
- 将 PRQL 升级到 0.9.3。 #53060 (Maximilian Roos)。
- 来自 CI 检查的系统表已导出到 ClickHouse Cloud。 #53086 (Alexey Milovidov)。
- 编译器的 profile 数据 (
-ftime-trace
) 已上传到 ClickHouse Cloud。 #53100 (Alexey Milovidov)。 - 加速 Debug 和 Tidy 构建。 #53178 (Alexey Milovidov)。
- 通过删除大量垃圾来加速构建。其中一个经常包含的头文件被 boost 污染了。 #53180 (Alexey Milovidov)。
- 删除更多垃圾。 #53182 (Alexey Milovidov)。
- 函数
arrayAUC
正在使用繁重的 C++ 模板 - 已放弃它们。 #53183 (Alexey Milovidov)。 - 某些翻译单元始终被重建,而与 ccache 无关。罪魁祸首已找到并修复。 #53184 (Alexey Milovidov)。
- 编译器的 profile 数据 (
-ftime-trace
) 已上传到 ClickHouse Cloud,这是继 #53100 之后的第二次尝试。 #53213 (Alexey Milovidov)。 - 将 CI 中状态测试的日志导出到 ClickHouse Cloud。 #53351 (Alexey Milovidov)。
- 导出 CI 中压力测试的日志。 #53353 (Alexey Milovidov)。
- 导出 CI 中模糊测试的日志。 #53354 (Alexey Milovidov)。
- 在
clickhouse start
命令中保留环境变量参数。修复了 #51962。 #53418 (Mikhail f. Shiryaev)。 - 跟进 #53418。install_check.py 的小改进,为正确的 ENV 参数传递到
init.d start
上的主进程添加了测试。 #53457 (Mikhail f. Shiryaev)。 - 重新组织 CMake 中的文件管理以防止潜在的重复。例如,
indexHint.cpp
在dbms_sources
和clickhouse_functions_sources
中都重复了。 #53621 (Amos Bird)。 - 将 snappy 升级到 1.1.10。 #53672 (李扬)。
- 通过清理一些依赖项并删除一些重复项,稍微改进 cmake 构建。每个提交都包含对所做更改的简短描述。 #53759 (Amos Bird)。
Bug 修复(官方稳定版本中用户可见的错误行为)
- 在构建具有多个标记的 Annoy 索引期间,不要重置(实验性的)Annoy 索引 #51325 (Tian Xinhui)。
- 修复 RESTORE 期间临时目录的使用 #51493 (Azat Khuzhin)。
- 修复 Nullable(IPv4) 的二进制算术 #51642 (Yakov Olkhovskiy)。
- 支持 IPv4 和 IPv6 数据类型作为字典属性 #51756 (Yakov Olkhovskiy)。
- 修复压缩标记的校验和 #51777 (SmitaRKulkarni)。
- 修复在 CSV 最佳努力解析中错误地将逗号解析为日期时间的一部分 #51950 (Kruglov Pavel)。
- 当可执行 UDF 具有参数时不抛出异常 #51961 (Nikita Taranov)。
- 修复
ALTER DELETE
查询中跳过索引和投影的重新计算 #52530 (Anton Popov)。 - MaterializedMySQL:修复 ReadBuffer::read 中的无限循环 #52621 (Val Doroshchuk)。
- 仅使用
clickhouse
方言加载建议 #52628 (János Benjamin Antal)。 - 根据需要初始化和销毁 ares 通道。 #52634 (Arthur Passos)。
- 修复使用 OR 表达式按虚拟列进行过滤 #52653 (Azat Khuzhin)。
- 修复函数
tuple
中一个稀疏列参数的崩溃 #52659 (Anton Popov)。 - 修复集群上的命名集合 #52687 (Al Korgun)。
- 修复多阶段
PREWHERE
的情况下读取不必要的列 #52689 (Anton Popov)。 - 修复多列上 nulls first 方向的意外排序结果 #52761 (copperybean)。
- 修复 Keeper 重新配置中的数据竞争 #52804 (Antonio Andelic)。
- 修复具有大限制的稀疏列的排序 #52827 (Anton Popov)。
- clickhouse-keeper:修复使用 poll 的服务器的实现。 #52833 (Andy Fiddaman)。
- 使 regexp 分析器识别命名捕获组 #52840 (Han Fei)。
- 修复 clickhouse-local 中
~PushingAsyncPipelineExecutor
中可能出现的断言 #52862 (Kruglov Pavel)。 - 修复读取空的
Nested(Array(LowCardinality(...)))
#52949 (Anton Popov)。 - 为 session_log 添加了新测试,并修复了登录和注销之间的不一致性。 #52958 (Alexey Gerasimchuck)。
- 修复 show create mysql table 中的密码泄露 #52962 (Duc Canh Le)。
- 在 CreateSetAndFilterOnTheFlyStep 中将稀疏列格式转换为完整格式 #53000 (vdimir)。
- 修复 fs 缓存中空键前缀目录删除的罕见竞争条件 #53055 (Kseniia Sumarokova)。
- 修复 ZstdDeflatingWriteBuffer 有时截断输出的问题 #53064 (Michael Kolupaev)。
- 修复具有异步刷新查询的 part_log 中的 query_id #53103 (Raúl Marín)。
- 修复缓存中可能出现的错误 "Read unexpected size" #53121 (Kseniia Sumarokova)。
- 禁用新的 parquet 编码器 #53130 (Alexey Milovidov)。
- 修复 "Not-ready Set" 异常 #53162 (Nikolai Kochetov)。
- 修复 PostgreSQL 引擎中的字符转义 #53250 (Nikolay Degterinsky)。
- 实验性的 session_log 表:为 session_log 添加了新测试,并修复了登录和注销之间的不一致性。 #53255 (Alexey Gerasimchuck)。修复了登录成功和注销之间的不一致性 #53302 (Alexey Gerasimchuck)。
- 修复将亚秒间隔添加到 DateTime #53309 (Michael Kolupaev)。
- 修复字典中的 "Context has expired" 错误 #53342 (Alexey Milovidov)。
- 修复不正确的普通投影 AST 格式 #53347 (Amos Bird)。
- 当执行 Scalar 时,禁止在表函数中使用 use_structure_from_insertion_table_in_table_functions #53348 (flynn)。
- 修复在 system.table select 查询期间加载惰性数据库 #53372 (SmitaRKulkarni)。
- 修复了 MaterializedMySQL 的 system.data_skipping_indices #53381 (Filipp Ozinov)。
- 修复 TSV 文件分段引擎中处理单个回车符的问题 #53407 (Kruglov Pavel)。
- 正确修复
Context has expired
错误 #53433 (Michael Kolupaev)。 - 修复当 IN 的右侧 (rhs) 存在子查询时
timeout_overflow_mode
的问题 #53439 (Duc Canh Le)。 - 修复了 #53152 中一个意外的行为 #53440 (Zhiguo Zhou)。
- 修复了当路径 (path) 全为数字时 JSON_QUERY 函数的解析错误 #53470 (KevinyhZou)。
- 修复了并行 FINAL 查询的错误列顺序。#53489 (Nikolai Kochetov)。
- 修复了从 ReplacingMergeTree 中使用 do_not_merge_across_partitions_select_final 进行 SELECT 查询的问题 #53511 (Vasily Nemkov)。
- 在关闭时首先刷新异步插入队列 #53547 (joelynch)。
- 修复了在稀疏列上进行 join 操作时发生的崩溃 #53548 (vdimir)。
- 修复了 Set 跳跃索引中,由于函数参数不正确可能导致的未定义行为 (UB) #53559 (Azat Khuzhin)。
- 修复了倒排索引 (实验性功能) 中可能存在的未定义行为 (UB) #53560 (Azat Khuzhin)。
- 修复:interpolate 表达式使用了源列,而不是从 select 表达式中别名出来的同名列。#53572 (Yakov Olkhovskiy)。
- 修复了 EXPLAIN PLAN index=1 中丢弃的粒度 (granules) 数量 #53616 (wangxiaobo)。
- 正确处理带有
DelayedSource
的 totals 和 extremes。#53644 (Antonio Andelic)。 - 修复了 mutation pipeline 中 Prepared set cache 卡住的问题 #53645 (Nikolai Kochetov)。
- 修复了在 UPDATE 和 DELETE 查询的谓词 (predicates) 中,JSON 类型子列上的 mutation 错误。#53677 (VanDarkholme7)。
- 修复了 full_sorting_merge join 的 filter pushdown #53699 (vdimir)。
- 尝试修复
NULL::LowCardinality(Nullable(...)) NOT IN
的 bug #53706 (Andrey Zvonov)。 - 修复:带有稀疏列的 sorted distinct #53711 (Igor Nikonov)。
transform
:正确处理具有多行的 default column #53742 (Salvatore Mesoraca)。- 修复了 parseDateTime 中的 fuzzer 崩溃 #53764 (Robert Schulze)。
- MaterializedPostgreSQL: 修复了 getCreateTableQueryImpl 中未捕获的异常 #53832 (Kseniia Sumarokova)。
- 修复了使用 PostgreSQL engine 时可能发生的段错误 (segfault) #53847 (Kseniia Sumarokova)。
- 修复了 named_collection_admin 别名 #54066 (Kseniia Sumarokova)。
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 user
或GRANT 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)。 - 在日志和错误日志文件名中添加了使用日期和时间格式说明符的可能性,可以在配置文件 (
log
和errorlog
标签) 或命令行参数 (--log-file
和--errorlog-file
) 中使用。#51945 (Victor Krasnov)。 - 向 HTTP 标头添加了峰值内存使用量统计信息。#51946 (Dmitry Kardymon)。
- 添加了新的
hasSubsequence
(及其CaseInsensitive
和UTF8
版本) 函数,用于匹配字符串中的子序列。#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_prewhere
和enable_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_size
从8Mi
增加到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_diff
和age
现在支持毫秒/微秒单位,并以微秒精度工作。#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
不适用于MATERIALIZED
和ALIAS
列的问题。关闭了 #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
设置,允许忽略未指定TYPE
的ADD 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)。怀疑此功能不完整。
构建/测试/打包改进
- 为 CI 添加 Linux RISC-V 64 的实验性 ClickHouse 构建。 #31398 (Alexey Milovidov)。
- 添加启用 Analyzer 的集成测试检查。 #50926 #52210 (Dmitry Novik)。
- Rust 的可重现构建。 #52395 (Azat Khuzhin)。
- 更新 Cargo 依赖项。 #51721 (Raúl Marín)。
- 使函数
CHColumnToArrowColumn::fillArrowArrayWithArrayColumnData
能够处理可空数组,这在 ClickHouse 中是不可能的,但 Gluten 需要。 #52112 (李扬)。 - 我们已将 CCTZ 库更新到 master 分支,但没有用户可见的更改。 #52124 (Alexey Milovidov)。
system.licenses
表现在包含硬分叉的库 Poco。这关闭了 #52066。 #52127 (Alexey Milovidov)。- 检查是否存在不良标点符号的情况:逗号前有空格,例如
Hello ,world
而不是Hello, world
。 #52549 (Alexey Milovidov)。
Bug 修复(官方稳定版本中用户可见的错误行为)
- 修复 MaterializedPostgreSQL syncTables #49698 (Kseniia Sumarokova)。
- 修复带有 optimize_aggregators_of_group_by_keys 的 projection #49709 (Amos Bird)。
- 修复带有 JOIN 的 optimize_skip_unused_shards #51037 (Azat Khuzhin)。
- 修复 formatDateTime() 与 fractional negative datetime64 #51290 (Dmitry Kardymon)。
- 函数
hasToken*
完全错误。为 #43358 添加测试 #51378 (Alexey Milovidov)。 - 修复将函数移动到排序之前的优化。 #51481 (Nikolai Kochetov)。
- 修复 FINAL 的 Pipe::unitePipes 中的 Block 结构不匹配 #51492 (Nikita Taranov)。
- 修复跨所有分片权重为零的集群的 SIGSEGV(修复了 INSERT INTO FUNCTION clusterAllReplicas()) #51545 (Azat Khuzhin)。
- 修复 hedged 请求的超时 #51582 (Azat Khuzhin)。
- 修复带有 NULL 的 ANTI join 中的逻辑错误 #51601 (vdimir)。
- 修复将 'IN' 条件移动到 PREWHERE 的问题 #51610 (Alexander Gololobov)。
- 不要为 ASOF/ANTI join 应用 PredicateExpressionsOptimizer #51633 (vdimir)。
- 修复使用合并算法的 ReplicatedMergeTree 的异步插入和重复数据删除 #51676 (Antonio Andelic)。
- 修复从
parseSipHashKey
中的空列读取数据的问题 #51804 (Nikita Taranov)。 - 修复创建无效的 EmbeddedRocksdb 表时发生的段错误 #51847 (Duc Canh Le)。
- 修复插入 MongoDB 表的问题 #51876 (Nikolay Degterinsky)。
- 修复 DatabaseCatalog 关闭时的死锁 #51908 (Alexander Tokmakov)。
- 修复子查询运算符中的错误 #51922 (Alexey Milovidov)。
- 修复异步连接到具有多个 IP 的主机的问题 #51934 (Kruglov Pavel)。
- 在 ActionsDAG::merge 之后不要删除输入 #51947 (Nikolai Kochetov)。
- 在
RemoveManyObjectStorageOperation::finalize
而不是execute
中检查引用计数 #51954 (vdimir)。 - 允许参数化 UDF #51964 (Alexey Milovidov)。
- 修复 toDateTime64() 对于 2283-12-31 之后的日期的一个小问题 #52130 (Andrey Zvonov)。
- 修复 ORDER BY WINDOW 函数元组 #52145 (Alexey Milovidov)。
- 修复当聚合表达式包含单调函数时,projection 分析不正确的问题 #52151 (Amos Bird)。
- 修复
groupArrayMoving
函数中的错误 #52161 (Alexey Milovidov)。 - 禁用范围字典的直接 join #52187 (Duc Canh Le)。
- 修复粘性 mutations 测试(以及极其罕见的竞争条件) #52197 (alesapin)。
- 修复 Web 磁盘中的竞争 #52211 (Kseniia Sumarokova)。
- 修复服务器返回未知数据包时 Connection::setAsyncCallback 中的数据竞争 #52219 (Kruglov Pavel)。
- 修复启动时临时数据删除,添加测试 #52275 (vdimir)。
- 在计数可空列时,不要使用 minmax_count projections #52297 (Amos Bird)。
- MergeTree/ReplicatedMergeTree 应该为日志条目使用服务器时区 #52325 (Azat Khuzhin)。
- 修复带有 cte 和多次使用的参数化视图 #52328 (SmitaRKulkarni)。
- 禁用时间间隔的表达式模板 #52335 (Alexander Tokmakov)。
- 修复 Keeper 中的
apply_snapshot
#52358 (Antonio Andelic)。 - 更新 build-osx.md #52377 (AlexBykovski)。
- 修复
countSubstrings
在 needle 为空且 haystack 为列时挂起的问题 #52409 (Sergei Trifonov)。 - 修复带有 merge 表的 normal projection #52432 (Amos Bird)。
- 修复 Aggregator 中可能发生的 double-free #52439 (Nikita Taranov)。
- 修复了插入 Buffer 引擎的问题 #52440 (Vasily Nemkov)。
- AnyHash 的实现不符合规范。 #52448 (Alexey Milovidov)。
- 检查 OptimizedRegularExpression 中的递归深度 #52451 (Alexey Milovidov)。
- 修复 data-race DatabaseReplicated::startupTables()/canExecuteReplicatedMetadataAlter() #52490 (Azat Khuzhin)。
- 修复函数
transform
中的中止 #52513 (Alexey Milovidov)。 - 修复删除 projection 后轻量级删除失败的问题 #52517 (Anton Popov)。
- 修复可能出现的错误“Cannot drain connections: cancel first” #52585 (Kruglov Pavel)。
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_size
和http_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
使用APPEND
或TRUNCATE
。 #50950 (alekar)。 - 添加表引擎
Redis
和表函数redis
。它允许查询外部 Redis 服务器。 #50150 (JackyWoo)。 - 允许使用设置
s3_skip_empty_files
、hdfs_skip_empty_files
、engine_file_skip_empty_files
、engine_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_ms
、merge_selecting_sleep_slowdown_factor
、max_cleanup_delay_period
和cleanup_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_lines
、input_format_tsv_skip_trailing_empty_lines
和input_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_delay
和number_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 修复(官方稳定版本中用户可见的错误行为)
- 正确报告可执行字典的加载状态 #48775 (Anton Kozlov)。
- 正确地 mutation 跳过索引和 projections #50104 (Amos Bird)。
- 清理 moving parts #50489 (vdimir)。
- 修复聚合函数中 IP 类型哈希的向后兼容性 #50551 (Yakov Olkhovskiy)。
- 修复 Log 系列表在 truncate 后返回错误的行数 #50585 (flynn)。
- 修复
uniqExact
并行合并中的错误 #50590 (Nikita Taranov)。 - 恢复最近的 grace hash join 更改 #50699 (vdimir)。
- 查询缓存:尝试修复从
ColumnConst
到ColumnVector<char8_t>
的错误转换 #50704 (Robert Schulze)。 - 避免在 Keeper 中存储包含未知操作的日志 #50751 (Antonio Andelic)。
- SummingMergeTree 支持 DateTime64 #50797 (Jordi Villar)。
- 为非 const 时区添加兼容性设置 #50834 (Robert Schulze)。
- 修复缓存条目中 LDAP 参数的哈希 #50865 (Julian Maicher)。
- 在 Parquet 格式中,回退到从 String 解析大整数而不是抛出异常 #50873 (Kruglov Pavel)。
- 修复在写入备份时过于频繁地检查锁文件的问题 #50889 (Vitaly Baranov)。
- 如果启用了 read-in-order,则不应用 projection。 #50923 (Nikolai Kochetov)。
- 修复 Azure blob 存储迭代器中的竞争条件 #50936 (SmitaRKulkarni)。
- 修复
CreatingSets
中错误的sort_description
传播 #50955 (Nikita Taranov)。 - 修复 Iceberg v2 可选元数据解析 #50974 (Kseniia Sumarokova)。
- MaterializedMySQL:为空表覆盖保留括号 #50977 (Val Doroshchuk)。
- 修复 BackupCoordinationStageSync::setError() 中的崩溃 #51012 (Vitaly Baranov)。
- 修复 ColumnLowCardinality 字典微妙的写时复制问题 #51064 (Michael Kolupaev)。
- 生成安全的 IV #51086 (Salvatore Mesoraca)。
- 修复子查询的 SELECT 语句的无效查询缓存 #51132 (Robert Schulze)。
- 修复带有常量可空比较的 Set 索引。 #51205 (Nikolai Kochetov)。
- 修复 s3 和 s3Cluster 函数中的崩溃 #51209 (Nikolay Degterinsky)。
- 修复编译表达式的崩溃 #51231 (LiuNeng)。
- 修复切换 URL 时 StorageURL 中的 use-after-free 错误 #51260 (Michael Kolupaev)。
- 更新了参数化视图的检查 #51272 (SmitaRKulkarni)。
- 修复了将同一文件多次写入备份的问题 #51299 (Vitaly Baranov)。
- 修复 ActionsDAG 中的模糊测试失败 #51301 (Alexey Milovidov)。
- 删除函数
transform
中的垃圾代码 #51350 (Alexey Milovidov)。
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_marks
和compress_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_storages
和input_format_parquet_preserve_order
的默认值。 这允许 ClickHouse 在从文件(例如 CSV 或 Parquet)读取时重新排序行,从而在许多情况下大大提高性能。 要恢复保留顺序的旧行为,请使用parallelize_output_from_storages = 0
,input_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
/groupArraySample
对Nullable
类型造成的二进制兼容性破坏,这可能会导致TOO_LARGE_ARRAY_SIZE
或CANNOT_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)。 - 地理数据类型(
Point
、Ring
、Polygon
和MultiPolygon
)已达到生产就绪状态。 #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_limit
和merges_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_marks
和compress_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_fs
和max_read_buffer_size_remote_fs
。 #49321 (Nikita Taranov)。 - 改进
SPARSE_HASHED
/HASHED
字典的内存使用率和速度(例如,SPARSE_HASHED
现在消耗的内存减少 2.6 倍,速度提高了约 2 倍)。 #49380 (Azat Khuzhin)。 - 通过在适当的时候应用
LowCardinality
来优化system.query_log
和system.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_value
和last_value
以接受 NULL。#46467 (lgbo)。 - 为
extractKeyValuePairs
添加别名str_to_map
和mapFromString
。关闭 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
。与oss
和cosn
函数类似,它只是s3
表函数的别名,不带来任何新功能。#47815 (Kuba Kaflik)。 - 添加了对 S3 使用严格 parts 大小的能力(与 CloudFlare R2 S3 Storage 兼容)。#48492 (Azat Khuzhin)。
- 向
system.clusters
添加了包含关于Replicated
数据库副本信息的列:database_shard_name
、database_replica_name
、is_active
。向SYSTEM DROP DATABASE REPLICA
查询添加了可选的FROM SHARD
子句。#48548 (Alexander Tokmakov)。 - 在 system.replicas 中添加了一个新列
zookeeper_name
,用于指示复制表的元数据存储在哪个(辅助)ZooKeeper 集群上。#48549 (cangyin)。 IN
运算符支持Date
和Date32
的比较。关闭 #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_delay
,number_of_mutations_to_throw
)以延迟或抛出创建 mutations 的ALTER
查询(ALTER UPDATE
、ALTER DELETE
、ALTER 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)。 - 为
kolmogorovSmirnovTest
的asymp
计算方法添加了别名asymptotic
。改进了文档。#49286 (Nikita Mikhaylov)。 - 聚合函数 groupBitAnd/Or/Xor 现在可以处理有符号整数数据。这使得它们与标量函数 bitAnd/Or/Xor 的行为保持一致。#49292 (exmy)。
- 将函数文档拆分为更细粒度的字段。#49300 (Robert Schulze)。
- 使用服务器内所有表共享的多个线程来加载过时的数据 parts。池的大小及其队列由
max_outdated_parts_loading_thread_pool_size
和outdated_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_size
、max_outdated_parts_loading_thread_pool_size
和max_parts_cleaning_thread_pool_size
控制。表级设置max_part_loading_threads
和max_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)。
- 支持
RegExpTreeDictionary
的dictionary
表函数。#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_config
或user_defined_executable_functions_config
,因为它们期望*.xml
文件。#49812 (Alexey Milovidov)。 - Kafka 表引擎现在允许使用别名列。#49824 (Aleksandr Musorin)。
- 添加设置以限制
extractKeyValuePairs
生成的最大对数,这是一种避免使用过多内存的安全措施。#49836 (Arthur Passos)。 - 添加对
IN
运算符中的参数是单元素元组的(不常见)情况的支持。#49844 (MikhailBurdukov)。 bitHammingDistance
函数支持String
和FixedString
数据类型。关闭 #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
现在接受Date
和Date32
参数。#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_projections
的allow_experimental_projection_optimization
,enable_lightweight_delete
的allow_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 中报告
CGroupCpuCfsPeriod
和CGroupCpuCfsQuota
。- 在服务器启动期间遵守 cgroup v2 内存限制。#50379 (alekar)。 - 为 SIGQUIT 添加信号处理程序,使其与 SIGINT 的工作方式相同。关闭 #50298。#50435 (Nikolay Degterinsky)。
- 如果 JSON 解析由于对象过大而失败,则输出最后一个位置以允许调试。#50474 (Valentin Alexeev)。
- 支持具有不固定大小的 decimals。关闭 #49130。#50586 (Kruglov Pavel)。
构建/测试/打包改进
- 全新且改进的
keeper-bench
。所有内容都可以从 YAML/XML 文件自定义:- 请求生成器 - 每种类型的请求生成器都可以有一组特定的字段 - 可以通过在multi
键下执行相同的操作来生成多请求 - 对于多请求中的每个请求或子请求,可以定义weight
字段来控制分布 - 定义测试运行需要设置的树 - 可以定义主机,所有超时都是可自定义的,并且可以控制为每个主机生成多少会话 - 使用min_value
和max_value
字段定义的整数是随机数生成器。#48547 (Antonio Andelic)。 - Io_uring 在 macos 上不受支持,在本地运行测试时不要选择它,以避免偶尔失败。#49250 (Frank Chen)。
- 支持命名故障注入以进行测试。#49361 (Han Fei)。
- 允许在
prctl
(进程控制)系统调用不可用的操作系统(例如 AWS Lambda)中运行 ClickHouse。#49538 (Alexey Milovidov)。 - 修复了 contrib/isa-l 和 qpl 中的 isa-l 之间的构建冲突问题 49296。#49584 (jasperzhu)。
- Utilities 现在仅在显式请求时(“-DENABLE_UTILS=1”)构建,而不是默认构建,这减少了典型开发构建中的链接时间。#49620 (Robert Schulze)。
- 将 idxd-config 的构建描述拉取到单独的 CMake 文件中,以避免将来意外删除。#49651 (jasperzhu)。
- 在 master 中添加启用分析器的 CI 检查。后续 #49562。#49668 (Dmitry Novik)。
- 切换到 LLVM/clang 16。#49678 (Azat Khuzhin)。
- 允许使用 clang-17 构建 ClickHouse。#49851 (Alexey Milovidov)。 #50410 (Alexey Milovidov)。
- ClickHouse 现在更容易集成到其他 cmake 项目中。#49991 (Amos Bird)。 (强烈不建议这样做 - Alexey Milovidov)。
- 修复 #47151 之后奇怪的额外 QEMU 日志记录,请参阅 https://s3.amazonaws.com/clickhouse-test-reports/50078/a4743996ee4f3583884d07bcd6501df0cfdaa346/stateless_tests__release__databasereplicated__[3_4].html。#50442 (Mikhail f. Shiryaev)。
- ClickHouse 可以在 Linux RISC-V 6.1.22 上工作。这关闭了 #50456。#50457 (Alexey Milovidov)。
- 将内部 protobuf 升级到 v3.18(修复了虚假的 CVE-2022-1941)。#50400 (Robert Schulze)。
- 将内部 libxml2 升级到 v2.10.4(修复了虚假的 CVE-2023-28484 和虚假的 CVE-2023-29469)。#50402 (Robert Schulze)。
- 将 c-ares 升级到 v1.19.1(虚假的 CVE-2023-32067,虚假的 CVE-2023-31130,虚假的 CVE-2023-31147)。#50403 (Robert Schulze)。
- 修复 libgsasl 中的虚假 CVE-2022-2469。#50404 (Robert Schulze)。
Bug 修复(官方稳定版本中用户可见的错误行为)
- ActionsDAG:修复错误的优化 #47584 (Salvatore Mesoraca)。
- 正确处理 Keeper 中的并发快照 #48466 (Antonio Andelic)。
- MergeTreeMarksLoader 持有 DataPart 而不是 DataPartStorage #48515 (SmitaRKulkarni)。
- Sequence 状态修复 #48603 (Ilya Golshtein)。
- Back/Restore 并发性检查之前的失败 #48726 (SmitaRKulkarni)。
- 修复附加具有不存在的 ZK 路径的表不会增加 ReadonlyReplica 指标的问题 #48954 (wangxiaobo)。
- 修复在某些地方可能因未捕获的异常而调用 terminate 的问题 #49112 (Kruglov Pavel)。
- 修复具有多个 StorageJoin 的查询的 key not found 错误 #49137 (vdimir)。
- 修复使用可为空主键时出现错误查询结果的问题 #49172 (Duc Canh Le)。
- 修复大端机器上的 reinterpretAs*() #49198 (Suzy Wang)。
- (实验性零拷贝复制)更原子地锁定零拷贝 parts #49211 (alesapin)。
- 修复 Outdated parts 加载时的竞争条件 #49223 (Alexander Tokmakov)。
- 修复所有键值都为空并且 group use rollup 返回错误答案的问题 #49282 (Shuai li)。
- 修复计算带有 SHARDS 的 HASHED 字典的 load_factor #49319 (Azat Khuzhin)。
- 禁止为别名列配置压缩 CODECs #49363 (Timur Solodovnikov)。
- 修复删除现有 part 目录中的错误 #49365 (alesapin)。
- 正确修复使用 HMAC 时的 GCS #49390 (Antonio Andelic)。
- 修复从 remote() 读取时未构建子查询集合的模糊测试错误 #49425 (Alexander Gololobov)。
- 反转
shutdown_wait_unfinished_queries
#49427 (Konstantin Bogdanov)。 - (实验性零拷贝复制)修复另一个零拷贝错误 #49473 (alesapin)。
- 修复 postgres 数据库设置 #49481 (Mal Curtis)。
- 正确处理
s3Cluster
参数 #49490 (Antonio Andelic)。 - 修复 TraceCollector 析构函数中的错误。#49508 (Yakov Olkhovskiy)。
- 修复 AsynchronousReadIndirectBufferFromRemoteFS 在短寻道时崩溃的问题 #49525 (Michael Kolupaev)。
- 修复字典加载顺序 #49560 (Alexander Tokmakov)。
- 禁止更改 Object('json') 列的数据类型 #49563 (Nikolay Degterinsky)。
- 修复压力测试(逻辑错误:预期 7134 >= 11030) #49623 (Kseniia Sumarokova)。
- 修复 DISTINCT 中的错误 #49628 (Alexey Milovidov)。
- 修复:非排序列中零值的 DISTINCT in order #49636 (Igor Nikonov)。
- 修复 UBSan 和模糊测试器发现的大整数中的一次性错误 #49645 (Alexey Milovidov)。
- 修复重启后从稀疏列读取数据的问题 #49660 (Anton Popov)。
- 修复 SpanHolder::finish() 中使用 fibers 时的断言 #49673 (Kruglov Pavel)。
- 修复短路函数和带有稀疏参数的 mutations #49716 (Anton Popov)。
- 修复将附加文件写入增量备份的问题 #49725 (Vitaly Baranov)。
- 修复在具有 Object 列的表上执行轻量级删除 mutation 时出现的“表中没有物理列 _row_exists”错误。#49737 (Alexander Gololobov)。
- 修复 randomStringUTF8(uneven number) 中的 msan 问题 #49750 (Robert Schulze)。
- 修复聚合函数 kolmogorovSmirnovTest #49768 (FFFFFFFHHHHHHH)。
- 修复原生协议中的设置别名 #49776 (Azat Khuzhin)。
- 修复带有单参数元组数组的
arrayMap
#49789 (Anton Popov)。 - 修复每个查询的 IO/BACKUP 节流设置 #49797 (Azat Khuzhin)。
- 修复在 profile 定义中设置 NULL 的问题 #49831 (Vitaly Baranov)。
- 修复 projections 和 aggregate_functions_null_for_empty 设置(用于 query_plan_optimize_projection)的错误 #49873 (Amos Bird)。
- 修复重启后分布式异步 INSERT 的待处理批处理 #49884 (Azat Khuzhin)。
- 修复 CacheMetadata::doCleanup 中的断言 #49914 (Kseniia Sumarokova)。
- 修复 OptimizeRegularExpression 中的
is_prefix
#49919 (Han Fei)。 - 修复指标
WriteBufferFromS3Bytes
、WriteBufferFromS3Microseconds
和WriteBufferFromS3RequestsErrors
#49930 (Aleksandr Musorin)。 - 修复 protobuf 中的 IPv6 编码 #49933 (Yakov Olkhovskiy)。
- 修复文本格式的错误 Nullable 解析可能导致的逻辑错误 #49960 (Kruglov Pavel)。
- 添加设置 output_format_parquet_compliant_nested_types 以生成更兼容的 Parquet 文件 #50001 (Michael Kolupaev)。
- 修复压力测试中的逻辑错误 “没有足够的空间来添加...” #50021 (Kseniia Sumarokova)。
- 避免在
ReplicatedMergeTree
的附加线程中启动表时发生死锁 #50026 (Antonio Andelic)。 - 修复 SpanHolder::finish() 中使用 fibers 的断言,第二次尝试 #50034 (Kruglov Pavel)。
- 为 DDL OpenTelemetry 上下文序列化添加适当的转义 #50045 (Azat Khuzhin)。
- 修复报告损坏的 projection 部分 #50052 (Amos Bird)。
- JIT 编译 not equals NaN 修复 #50056 (Maksim Kita)。
- 修复在没有参数的情况下使用 Replicated 数据库崩溃的问题 #50058 (Azat Khuzhin)。
- 修复
multiIf
和常量条件以及 nullable 参数一起使用时崩溃的问题 #50123 (Anton Popov)。 - 修复日期相关键的无效索引分析 #50153 (Amos Bird)。
- 当没有 order by 列时,不允许修改 order by #50154 (Han Fei)。
- 修复当二元运算符包含空常量参数时,索引分析被破坏的问题 #50177 (Amos Bird)。
- clickhouse-client:禁止同时使用
--query
和--queries-file
#50210 (Alexey Gerasimchuk)。 - 修复 INTO OUTFILE 扩展(APPEND / AND STDOUT)和 WATCH EVENTS 的 UB #50216 (Azat Khuzhin)。
- 修复 CustomSeparatedIgnoreSpaces 格式中跳过行尾空格的问题 #50224 (Kruglov Pavel)。
- 修复 Iceberg 元数据解析 #50232 (Kseniia Sumarokova)。
- 修复 WITH 子句中的嵌套分布式 SELECT #50234 (Azat Khuzhin)。
- 修复 keyed siphash 中的 msan 问题 #50245 (Robert Schulze)。
- 修复 Poco sockets 在非阻塞模式下的错误,使用真正的非阻塞 sockets #50252 (Kruglov Pavel)。
- 修复备份条目的校验和计算 #50264 (Vitaly Baranov)。
- 比较函数 NaN 修复 #50287 (Maksim Kita)。
- JIT 聚合 nullable 键修复 #50291 (Maksim Kita)。
- 修复 clickhouse-local 在写入空 Arrow 或 Parquet 输出时崩溃的问题 #50328 (Michael Kolupaev)。
- 修复调用 Pool::Entry::disconnect() 时崩溃的问题 #50334 (Val Doroshchuk)。
- 改进了 fetch part,延长了目录锁的持有时间 #50339 (SmitaRKulkarni)。
- 修复带有两个常量参数的 bitShift* 函数 #50343 (Kruglov Pavel)。
- 修复 Keeper 在预处理请求时发生异常时死锁的问题。#50387 (frinkr)。
- 修复常量整数值的哈希 #50421 (Robert Schulze)。
- 修复数据跳过索引的 merge_tree_min_rows_for_seek/merge_tree_min_bytes_for_seek #50432 (Azat Khuzhin)。
- 限制加载过时 part 的 in-flight 任务数量 #50450 (Nikita Mikhaylov)。
- Keeper 修复:在快照安装后应用未提交的状态 #50483 (Antonio Andelic)。
- 修复不正确的常量折叠 #50536 (Alexey Milovidov)。
- 修复压力测试中的逻辑错误(没有足够的空间来添加 ...) #50583 (Kseniia Sumarokova)。
- 修复在 values 表函数中将 Null 转换为 LowCardinality(Nullable) 的问题 #50637 (Kruglov Pavel)。
- 恢复无效的 RegExpTreeDictionary 优化 #50642 (Johann Gan)。
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
查询添加了LIGHTWEIGHT
和PULL
修饰符。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
类型列的函数:mapConcat
、mapSort
、mapExists
。#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)。在从任何数据源读取数据后立即并行化查询处理。受影响的数据源主要是简单的或外部存储,如表函数url
、file
。#48727 (Igor Nikonov)。这由设置parallelize_output_from_storages
控制,默认情况下未启用。 - 降低了 ThreadPool 互斥锁的争用(可能会提高大量小型作业的性能)。#48750 (Sergei Trifonov)。
- 减少多个
ALTER DELETE
mutation 的内存使用量。#48522 (Nikolai Kochetov)。 - 如果启用了
skip_unavailable_shards
设置,则删除过多的连接尝试。#48771 (Azat Khuzhin)。
实验性功能
- 查询缓存中的条目现在被压缩为 max_block_size 并进行压缩。#45912 (Robert Schulze)。
- 现在可以在查询缓存中定义每个用户的配额。#48284 (Robert Schulze)。
- 并行副本的一些修复 #48433 (Nikita Mikhaylov)。
- 在加密磁盘上实现零拷贝复制(实验性功能)。#48741 (Vitaly Baranov)。
改进
- 将
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
函数支持FixedString
和String
数据类型。#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_insert
、load_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_server
、max_remote_write_network_bandwidth_for_server
、max_local_read_bandwidth_for_server
、max_local_write_bandwidth_for_server
、max_backup_bandwidth_for_server
,设置:max_remote_read_network_bandwidth
、max_remote_write_network_bandwidth
、max_local_read_bandwidth
、max_local_write_bandwidth
、max_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_filters
和additional_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_USER
和CLICKHOUSE_PASSWORD
环境变量。 关闭 #38909。 #48440 (Nikolay Degterinsky)。 - 在发生可重试错误时,为
MergeTree
表中数据部分的加载添加重试机制。 #48442 (Anton Popov)。 - 为
arrayMin
、arrayMax
、arrayDifference
函数添加对Date
、Date32
、DateTime
、DateTime64
数据类型的支持。 关闭 #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.parts
和system.part_log
添加别名name
和part_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 修复(官方稳定版本中用户可见的错误行为)
- 修复了从后台线程推送的 MV 的 system.query_views_log #46668 (Azat Khuzhin)。
- 修复了几个
RENAME COLUMN
的错误 #46946 (alesapin)。 - 修复了 clickhouse-format 中的次要高亮问题 #47610 (Natasha Murashkina)。
- 修复了 LLVM 的 libc++ 中的一个错误,该错误导致上传到 S3 的 part 大小大于 INT_MAX 时崩溃 #47693 (Azat Khuzhin)。
- 修复了
sparkbar
函数中的溢出 #48121 (Vladimir C)。 - 修复了 S3 中的竞争条件 #48190 (Anton Popov)。
- 由于行为不一致,禁用聚合函数的 JIT #48195 (Alexey Milovidov)。
- 修复 alter 格式化(次要) #48289 (Natasha Murashkina)。
- 修复了 RabbitMQ 中的 CPU 使用率(在 23.2 版本中,#44404 之后恶化) #48311 (Kseniia Sumarokova)。
- 修复了 EXPLAIN PIPELINE for Merge over Distributed 中的崩溃 #48320 (Azat Khuzhin)。
- 修复了将 LowCardinality 序列化为 Arrow 字典的问题 #48361 (Kruglov Pavel)。
- 在 TemporaryFileStream 中重置缓存文件段的下载器 #48386 (Vladimir C)。
- 修复了在 DROP/REPLACE PARTITION 的情况下可能发生的 SYSTEM SYNC REPLICA 卡住的问题 #48391 (Azat Khuzhin)。
- 修复了加载依赖于字典的分布式表时的启动错误 #48419 (MikhailBurdukov)。
- 在自动重命名系统表时不检查依赖项 #48431 (Raúl Marín)。
- 仅更新 KeeperMap 存储中受影响的行 #48435 (Antonio Andelic)。
- 修复了 VFS 缓存中可能发生的段错误 #48469 (Kseniia Sumarokova)。
- 当未提供常量字符串时,
toTimeZone
函数抛出错误 #48471 (Jordi Villar)。 - 修复了 Protobuf 中 IPv4 的逻辑错误,添加了对 Date32 的支持 #48486 (Kruglov Pavel)。
- 对于具有多个值的设置,system.settings 中的 "changed" 标志计算不正确 #48516 (MikhailBurdukov)。
- 修复了启用压缩的存储
Memory
#48517 (Anton Popov)。 - 修复了在客户端重新连接的情况下,带括号粘贴模式会搞乱密码输入的问题 #48528 (Michael Kolupaev)。
- 修复了 IP 和 UUID 类型键的嵌套 map #48556 (Yakov Olkhovskiy)。
- 修复了哈希字典并行加载程序中未捕获的异常 #48571 (Azat Khuzhin)。
groupArray
聚合函数在可空类型的空结果上正确工作 #48593 (lgbo)。- 修复了 Keeper 中的一个 bug,该 bug 导致有时节点未使用 ACL 中的 scheme
auth
创建。 #48595 (Aleksei Filatov)。 - 允许 IPv4 与 UInt 的比较运算符 #48611 (Yakov Olkhovskiy)。
- 修复了缓存中可能发生的错误 #48636 (Kseniia Sumarokova)。
- 带有空数据的异步插入将不再抛出异常。 #48663 (Anton Popov)。
- 修复了 RENAME TABLE 失败时表依赖项的问题 #48683 (Azat Khuzhin)。
- 如果主键具有重复列(仅在投影中可能),则在以前的版本中可能会导致 bug #48838 (Amos Bird)。
- 修复了 ZooKeeper 中加入 send_thread/receive_thread 时的竞争条件 #48849 (Alexander Gololobov)。
- 修复了尝试使用零拷贝复制删除忽略的 detached part 时出现意外 part name 错误的问题 #48862 (Michael Lex)。
- 修复了将
Date32
Parquet/Arrow 列读取到非Date32
列的问题 #48864 (Kruglov Pavel)。 - 修复了从具有行策略和带有点的列的表中选择时出现的
UNKNOWN_IDENTIFIER
错误 #48976 (Kruglov Pavel)。 - 修复了按空可空字符串聚合的问题 #48999 (LiuNeng)。
ClickHouse 23.3 LTS 版本,2023-03-30
升级说明
- 轻量级 DELETE 功能已可用于生产环境,并默认启用。 现在默认情况下可以使用 MergeTree 表的
DELETE
查询。 *domain*RFC
和netloc
函数的行为略有更改:放宽了 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_key
和parallel_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_query
和http_response_buffer_size
,它们分别对应于 HTTP 接口的 URL 参数wait_end_of_query
和buffer_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)。
- 为
hasTokenOrNull
、hasTokenCaseInsensitive
和hasTokenCaseInsensitiveOrNull
实现了小写tokenbf_v1
索引的利用。 #46252 (ltrk2)。 - 通过使用 SIMD 搜索前两个字符来优化函数
position
和LIKE
。 #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)。
- 如果启用了实验性分析器,则支持将过滤器下推到带有
Join
、Dictionary
和EmbeddedRocksDB
表的 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-Id
和X-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.0
、2.4
、2.6
、2.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)。 - 如果检测到从
Ordinary
到Atomic
的中断转换,则不要启动服务器,并打印更好的错误消息以及故障排除说明。 #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)。
- 添加了
WriteBufferFromS3Microseconds
和WriteBufferFromS3RequestsErrors
性能事件。 #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 官方构建是通过交叉编译完成的。
错误修复(官方稳定版本中用户可见的错误行为)
- 修复了格式解析器重置的问题,测试了
Kafka
中处理错误消息的情况 #45693 (Kruglov Pavel)。 - 修复了 Keeper 中的数据大小计算 #46086 (Antonio Andelic)。
- 修复了
ReplicatedMergeTree
表和Atomic
数据库的DROP TABLE
查询自动重试中的一个错误。在极少数情况下,如果 ZooKeeper 会话在 DROP 期间过期,并且并行创建了 ZooKeeper 中具有相同路径的新复制表,则可能导致Can't get data for node /zk_path/log_pointer
和The specified key does not exist
错误。 #46384 (Alexander Tokmakov)。 - 修复了在规范化查询时,不正确的别名递归阻止了一些查询运行的问题。 #46609 (Raúl Marín)。
- 修复了二进制格式中 IPv4/IPv6 序列化/反序列化的问题 #46616 (Kruglov Pavel)。
- ActionsDAG:在优化期间不要更改
and
的结果 #46653 (Salvatore Mesoraca)。 - 改进了客户端死亡时的查询取消 #46681 (Alexander Tokmakov)。
- 修复了聚合优化中的算术运算 #46705 (Duc Canh Le)。
- 修复了
clickhouse-local
在 JSONEachRow 模式推断时可能发生的中止 #46731 (Kruglov Pavel)。 - 修复了更改过期的角色 #46772 (Vitaly Baranov)。
- 修复了来自多个步骤的组合 PREWHERE 列累积 #46785 (Alexander Gololobov)。
- 使用初始范围在 HTTP 读取缓冲区中获取文件大小。没有此更改,某些远程文件可能无法处理。 #46824 (Antonio Andelic)。
- 修复了使用 URL 表时进度条不正确的问题 #46830 (Antonio Andelic)。
- 修复了
maxIntersections
函数中的 MSan 报告 #46847 (Alexey Milovidov)。 - 修复了
Map
数据类型中的一个错误 #46856 (Alexey Milovidov)。 - 修复了当 LIKE 模式包含带引号的不可引号字符时,某些 LIKE 搜索的错误结果 #46875 (Robert Schulze)。
- 修复了 - 当 Filling Transform 处理空块时,WITH FILL 会产生中止的问题 #46897 (Yakov Olkhovskiy)。
- 修复了 JSON 中从字符串推断日期和 int 的问题 #46972 (Kruglov Pavel)。
- 修复了在提取期间零拷贝复制磁盘选择中的错误 #47010 (alesapin)。
- 修复了 systemd 服务定义中的拼写错误 #47051 (Palash Goel)。
- 修复了 CROSS JOIN 和 algorithm = auto 的 NOT_IMPLEMENTED 错误 #47068 (Vladimir C)。
- 修复了当 'part_type' 配置为 'InMemory' 模式(实验性功能)时,'ReplicatedMergeTree' 表无法插入两个相似数据的问题。 #47121 (liding1992)。
- 外部字典 / library-bridge:修复了错误 "unknown library method 'extDict_libClone'" #47136 (alex filatov)。
- 修复带 limit 的 grace hash join 中的竞态条件 #47153 (Vladimir C)。
- 修复 concrete columns PREWHERE 支持 #47154 (Azat Khuzhin)。
- 修复 Query Status 中可能的死锁 #47161 (Kruglov Pavel)。
- 禁止对同一个
Join
表进行 insert select 操作,因为它会导致死锁 #47260 (Vladimir C)。 - 跳过
min_age_to_force_merge_seconds
合并的已合并分区 #47303 (Antonio Andelic)。 - 修改 find_first_symbols,使其能像 find_first_not_symbols 一样正常工作 #47304 (Arthur Passos)。
- 修复 CSV 中大数字的推断 #47410 (Kruglov Pavel)。
- 禁用带有别名的表达式的逻辑表达式优化器。 #47451 (Nikolai Kochetov)。
- 修复
decodeURLComponent
中的错误 #47457 (Alexey Milovidov)。 - 修复带有 projection 的 explain graph #47473 (flynn)。
- 修复查询参数 #47488 (Alexey Milovidov)。
- 参数化视图:一个 bug 修复。 #47495 (SmitaRKulkarni)。
- 数据格式的 Fuzzer,以及相应的修复。 #47519 (Alexey Milovidov)。
- 修复
DateTime64
的单调性检查 #47526 (Antonio Andelic)。 - 修复 Nullable LowCardinality 列的 “block structure mismatch” 错误 #47537 (Nikolai Kochetov)。
- 正确修复 Apache Parquet 中的一个 bug #45878 #47538 (Kruglov Pavel)。
- 修复当文档大小无效时
BSONEachRow
的并行解析 #47540 (Kruglov Pavel)。 - 在
SYSTEM FLUSH DISTRIBUTED
时保留system.distribution_queue
中的错误 #47541 (Azat Khuzhin)。 - 检查
BSONEachRow
格式中重复的列 #47609 (Kruglov Pavel)。 - 修复移动期间等待零拷贝锁的问题 #47631 (alesapin)。
- 修复按分区聚合 #47634 (Nikita Taranov)。
- 修复
BSONEachRow
格式中 tuple 作为数组序列化时的 bug #47690 (Kruglov Pavel)。 - 修复
polygonsSymDifferenceCartesian
中的崩溃 #47702 (pufit)。 - 修复从使用
zlib
和gzip
压缩的 storageFile
压缩文件中读取数据的问题 #47796 (Anton Popov)。 - 改进 PostgreSQL 的空查询检测(用于 pgx golang 驱动程序) #47854 (Azat Khuzhin)。
- 修复 LowCardinality 类型的 DateTime 单调性检查 #47860 (Antonio Andelic)。
- 对 RESTORE ASYNC 使用 restore_threads (而不是 backup_threads) #47861 (Azat Khuzhin)。
- 修复带有 projections 的 ReplicatedMergeTree 的 DROP COLUMN #47883 (Antonio Andelic)。
- Replicated database 恢复的修复 #47901 (Alexander Tokmakov)。
- HTTP 中过于冗长的警告的热修复 #47903 (Alexander Tokmakov)。
- 修复
catboostEvaluate
中的 “Field value too long” 错误 #47970 (Robert Schulze)。 - 修复 #36971: Watchdog: 如果子进程退出,则以非零代码退出 #47973 (Коренберг Марк)。
- 修复 “index file
cidx
is unexpectedly long” 错误 #48010 (SmitaRKulkarni)。 - 修复 MaterializedPostgreSQL 查询以获取属性(replica-identity) #48015 (Solomatov Sergei)。
- parseDateTime(): 修复 UB(有符号整数溢出) #48019 (Robert Schulze)。
- 在 Avro 中为 Records 使用唯一的名称,以避免重用其 schema #48057 (Kruglov Pavel)。
- 正确设置 Keeper 中的 TCP/HTTP 套接字超时 #48108 (Antonio Andelic)。
- 修复
Avro
格式中可能在空指针上调用成员函数的错误 #48184 (Kruglov Pavel)。
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 引擎中利用了ReplacingMergeTree
和CollapsingMergeTree
的功能。删除的数据在查询时不会返回,但也不会从磁盘中删除。 #41005 (youennL-cs)。 - 添加
generateULID
函数。关闭 #36536。 #44662 (Nikolay Degterinsky)。 - 添加
corrMatrix
聚合函数,用于计算每两列之间的相关性。此外,由于聚合函数covarSamp
和covarPop
与corr
类似,因此顺便添加了covarSampMatrix
和covarPopMatrix
。@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)。 - 添加了
arrayPartialSort
和arrayPartialReverseSort
函数。 #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_robin
或shortest_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_parts
和total_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_FORMAT
是formatDateTime
的别名。根据给定的格式字符串格式化时间。(提供指向 formatDateTime 的链接)。#46302 (Jake Bamrah)。 - 为并行副本的回调任务(
s3Cluster
和MergeTree
表)添加ProfileEvents
和CurrentMetrics
。#46313 (Alexey Milovidov)。 - 为使用
KeeperMap
存储引擎的表添加对DELETE
和UPDATE
的支持。#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_ms
或rabbitmq_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
不适用于带有INTERSECT
或EXCEPT
链的查询。#45872 (Alexey Milovidov)。 - 修复了函数
stochasticLinearRegression
中的崩溃。由 WingFuzz 发现。#45985 (Nikolai Kochetov)。 - 修复了带有
INTERSECT
和EXCEPT
修饰符的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 ...
之类的查询,其中arr1
和arr2
是同一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
表,作为Struct
的List
。将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_method
和remote_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)
,在expr
是LowCardinality
列的情况下。在这种情况下,设置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_parsing
和supports_parallel_formatting
,以便更好地进行内省。 #45499 (Anton Popov)。 - 改进了 CustomSeparated/Template 格式中 CSV 字段的读取。 关闭 #42352 关闭 #39620。 #43332 (Kruglov Pavel)。
- 统一查询经过时间测量。 #43455 (Raúl Marín)。
- 改进了在 select 查询中存在虚拟列时,表函数 file/hdfs/s3 自动使用来自插入表的结构,修复了可能的错误
Block structure mismatch
或number 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.parts
或system.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)上使用子查询生成不同类型的键的
IN
的SELECT
查询。 #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
请求失败的情况下,从 storageS3
和 table functions3
读取时可能发生的崩溃。 #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)。