2020 变更日志
ClickHouse 20.12 版本
ClickHouse v20.12.5.14-stable 发布,2020-12-28
Bug 修复
- 在合并期间禁用使用 AIO 写入,因为这在极其罕见的情况下可能导致合并过程中主键列数据损坏。 #18481 (alesapin)。
- 修复在对类型为
Nullable(String)的参数执行toType(...)函数(toDate、toUInt32等)时出现的value is too short错误。现在此类函数在解析错误时返回NULL,而不是抛出异常。修复 #7673。 #18445 (tavplubix)。 - 限制从宽部件到紧凑部件的合并。在垂直合并的情况下,这会导致生成损坏的结果部件。 #18381 (Anton Popov)。
- 修复填充表
system.settings_profile_elements的问题。此 PR 修复了 #18231。 #18379 (Vitaly Baranov)。 - 修复在使用两级聚合时,带有组合器
Distinct的聚合函数可能发生的崩溃。修复 #17682。 #18365 (Anton Popov)。 - 修复查询
MODIFY COLUMN ... REMOVE TTL实际上没有移除列 TTL 的错误。 #18130 (alesapin)。
构建/测试/打包改进
ClickHouse v20.12.4.5-stable 发布,2020-12-24
Bug 修复
- 修复了在具有双栈 IPv4/IPv6 的机器上,服务器无法访问
clickhouse-odbc-bridge进程的问题;修复了在使用格式错误的查询执行 ODBC 字典更新时可能导致崩溃的问题;可能修复了 #14489。#18278(Denis Glazachev)。 - 修复了 Enum 和 Int 类型之间键值比较的问题。修复了 #17989。#18214(Amos Bird)。
- 修复了在
MaterializeMySQL数据库引擎中唯一键转换导致崩溃的问题。修复了 #18186 并修复了 #16372。#18211(Winter Zhang)。 - 修复了在解析 S3 URL 时出现
std::out_of_range: basic_string的问题。#18059(Vladimir Chebotarev)。 - 修复了某些表无法从 MySQL 同步到 ClickHouse 的问题,该问题是由于
MaterializeMySQL不支持转换 MySQL 前缀索引导致的。修复了 #15187 并修复了 #17912。#17944(Winter Zhang)。 - 修复了当查询包含
ARRAY JOIN时,查询优化可能产生错误结果的问题。#17887(sundyli)。 - 修复了
topK聚合函数中可能发生的段错误。关闭了 #17404。#17845(Maksim Kita)。 - 修复了服务器以守护进程模式运行时
system.stack_trace表为空的问题。#17630(Amos Bird)。
ClickHouse release v20.12.3.3-stable, 2020-12-13
不向后兼容的变更
- 默认启用
use_compact_format_in_distributed_parts_names(具体说明参见文档)。#16728(Azat Khuzhin)。 - 在创建使用
File引擎的表时,在SETTINGS子句中接受与文件格式相关的用户设置(例如format_csv_delimiter),并在所有INSERT和SELECT中使用这些设置。在当前用户会话中更改的文件格式设置,或在 DML 查询自身的SETTINGS子句中指定的设置,将不再影响该查询。#16591(Alexander Kuzmenkov)。
新特性
- 添加对
*.xz压缩/解压缩的支持。这使得可以在file()函数中使用*.xz。修复了 #8828。#16578(Abi Palagashvili)。 - 引入查询
ALTER TABLE ... DROP|DETACH PART 'part_name'。#15511(nvartolomei)。 - 新增
ALTER UPDATE/DELETE IN PARTITION语法。#13403(Vladimir Chebotarev)。 - 允许在使用 JSON 输入/输出格式时,将命名元组格式化为 JSON 对象,由
output_format_json_named_tuples_as_objects设置控制,默认禁用。#17175(Alexander Kuzmenkov)。 - 默认情况下,允许在 TSV 和 CSV 格式中以其 ID(枚举值编号)形式输入枚举值。#16834(Kruglov Pavel)。
- 为 Nullable、LowCardinality、Array 和 Tuple(其嵌套类型为 String)添加 COLLATE 支持。同时重构 ColumnString.cpp 中与排序规则相关的代码。#16273(Kruglov Pavel)。
- 新增
tcpPort函数,用于返回该服务器监听的 TCP 端口。#17134(Ivan)。 - 添加新的数学函数:
acosh、asinh、atan2、atanh、cosh、hypot、log1p、sinh。#16636(Konstantin Malanchev)。 - 支持在不同副本之间分配合并任务。引入
execute_merges_on_single_replica_time_thresholdMergeTree 设置。#16424(filimonov)。 - 添加设置
aggregate_functions_null_for_empty以实现 SQL 标准兼容性。该选项会重写查询中的所有聚合函数,为它们添加 -OrNull 后缀。实现了 10273。#16123(flynn)。 - 更新了 DateTime、DateTime64 的解析,以接受字符串形式的 Date 字面量格式。#16040(Maksim Kita)。
- 现在可以在
clickhouse-client中使用--history_file参数修改历史文件路径。#15960(Maksim Kita)。
Bug 修复
- 修复了一个在极少数情况下会导致服务器停止接受连接的问题。#17542 (Amos Bird)。
- 修复了在 Windows Subsystem for Linux 上运行的 ClickHouse 中,对
Atomic数据库执行RENAME查询时出现的Function not implemented错误。修复了 #17661。#17664(tavplubix)。 - 如果禁用了
in_memory_parts_enable_wal,则不要从 WAL 恢复数据分片。 #17802 (detailyang)。 - 修正 MergeTreeWriterSettings 中将
max_compress_block_size误初始化为min_compress_block_size的问题。 #17833 (flynn). - 关于可删除的最大表大小的异常消息显示不正确。 #17764 (alexey-milovidov).
- 修复了在向
Distributed表插入数据时因空间不足可能导致的段错误问题。 #17737 (tavplubix). - 修复了 ClickHouse 无法重新建立与 MySQL 服务器连接的问题。 #17681 (Alexander Kazakov)。
- 在执行
ON CLUSTER查询时,如果pool_size> 1,由于竞争条件,可能会错误地判断集群是否为环形(交叉)复制集群。该问题已修复。 #17640 (tavplubix). - 对于 MergeTree 表,现在可以在后台日志中记录
fmt::v7::format_error异常。此更改修复了 #17613。#17615(alexey-milovidov)。 - 当在交互模式下使用 clickhouse-client 运行多行查询时,单行注释会被错误地扩展到整个查询的末尾。修复了 #13654。#17565(alexey-milovidov)。
- 修复了当相应的 mutation 在其他副本上被终止时,
ALTER查询发生挂起的问题。修复 #16953。#17499(alesapin)。 - 修复 ClickHouse 低估 mark 缓存大小的问题。当存在大量包含标记(mark)的小文件时,可能会发生这种情况。#17496 (alesapin)。
- 修复在启用设置
optimize_redundant_functions_in_order_by时ORDER BY的问题。 #17471 (Anton Popov). - 修复由于不正确的优化导致在
DISTINCT之后仍可能出现的重复数据。修复了 #17294。#17296(li chengxiang)。#17439(Nikolai Kochetov)。 - 修复从包含
LowCardinality类型的JOIN表读取时发生的崩溃。修复 #17228。#17397(Nikolai Kochetov)。 - 修复
toInt256(inf)引发的栈溢出问题。Int256 目前属于实验性功能。已关闭 #17235。#17257(flynn)。 - 修复在带有
LIMIT的 Distributed 查询中可能记录的Unexpected packet Data received from client错误。#17254 (Azat Khuzhin). - 修复在子查询中存在常量列时的 set 索引失效问题。此修复解决了 #17246。#17249(Amos Bird)。
- 修复在索引比较双方类型不同时可能出现错误索引分析的问题。此更改修复了 #17122。#17145(Amos Bird)。
- 修复了会导致崩溃的 ColumnConst 比较问题。已修复 #17088。#17135(Amos Bird)。
- 针对 MaterializeMySQL(实验性功能)进行了多项修复,修复了 #16923、#15883,以及在修改 MySQL
binlog_checksum时导致的 MaterializeMySQL SYNC 失败问题。#17091 (Winter Zhang). - 修复一个问题:在非主节点的
ReplicatedMergeTree表上执行ON CLUSTER查询时,可能会一直处于挂起状态。 #17089 (alesapin). - 修复了在执行
CREATE TABLE ... AS some_table查询时的崩溃问题,该问题会在some_table通过AS table_function()创建时触发。修复 #16944。#17072(tavplubix)。 - 函数 fuzzBits 存在未完成实现的缺陷,相关 Issue:#16980。#17051(hexiaoting)。
- 修复当 CFA 寄存器为 RAX 时 LLVM 的 libunwind 行为异常的问题。这是 bug,位于 LLVM 的 libunwind 中。我们已经为此 bug 提供了变通方案。#17046(alexey-milovidov)。
- 避免对在执行过程中可能被取消的远程查询产生不必要的网络错误,例如带有
LIMIT的查询。#17006 (Azat Khuzhin). - 修复在仅包含 OFFSET 的查询中
optimize_distributed_group_by_sharding_key设置(默认禁用)的行为。#16996 (Azat Khuzhin)。 - 修复在 Distributed 表之上创建的 Merge 表执行 JOIN 时的问题。 #16993 (Azat Khuzhin).
- 修复从 double 转换为大整数(128、256 位)时结果错误的问题。大整数支持仍为实验性功能。#16986 (Mike)。
- 修复在执行
ALTER TABLE ... MODIFY COLUMN ... NewType期间,如果有对正在修改的列带有WHERE表达式的SELECT查询,且该ALTER尚未完成时,可能导致服务器崩溃的问题。#16968 (Amos Bird)。 clickhouse-git-import中的 blame 信息计算不正确。#16959 (alexey-milovidov)。- 修复基于单调函数的 ORDER BY 优化问题。修复 #16107。#16956(Anton Popov)。
- 修复在启用
optimize_aggregators_of_group_by_keys设置并使用 JOIN 时对 GROUP BY 的优化问题。解决了 #12604。#16951(Anton Popov)。 - 修复可能导致在带有
ORDER BY的查询中出现Illegal type of argument错误的问题。修复 #16580。#16928(Nikolai Kochetov)。 - 修复 InterpreterShowAccessQuery 中的异常代码。#16866 (tavplubix)。
- 防止在使用函数
timeSeriesGroupSum时导致 ClickHouse 服务器崩溃。该函数已在较新的 ClickHouse 版本中移除。#16865(filimonov)。 - 修复在启用 query profiler 且 ClickHouse 安装在某些 glibc 版本(据称其对部分函数的异步展开表存在问题)的操作系统上时出现的罕见静默崩溃问题。修复了 #15301。修复了 #13098。#16846(alexey-milovidov)。
- 修复在未传入任何参数时使用
any导致的崩溃。对应 #16803。cc @azat。#16826(Amos Bird)。 - 如果在将表元数据写入磁盘时无法分配内存,可能会写出损坏的元数据文件。#16772(alexey-milovidov)。
- 修复使用分区谓词时的简单查询优化问题。#16767 (Azat Khuzhin).
- 修复在启用
transform_null_in设置时,IN运算符在多列和元组上的行为。修复了 #15310。#16722(Anton Popov)。 - 通过 MySQL 协议执行的 INSERT 查询现在会返回受影响的行数。之前 ClickHouse 始终返回 0;该问题已修复。修复了 #16605。#16715(Winter Zhang)。
- 修复在使用带有 'if' 后缀的聚合函数时发生的远程查询失败问题。修复 #16574 和 #16231 #16610(Winter Zhang)。
- 修复由于
select_sequential_consistency导致的在优化后的简单 count 查询以及 system.tables 上出现的不一致行为。#16309 (Hao Chen)。
改进
- 在经过 TTL、变更(mutation)或折叠合并算法清理后,移除空数据部分。 #16895 (Anton Popov)。
- 为 Distributed 表的异步发送启用目录的紧凑格式:参数
use_compact_format_in_distributed_parts_names的默认值为 1。#16788 (Azat Khuzhin)。 - 如果没有数据写入 S3,则中止分段上传。#16840 (Pavel Kovalenko)。
- 在发生错误时重新解析
format_avro_schema_registry_url的 IP。#16985(filimonov)。 - 在 system.distribution_queue 中对 data_path 中的密码进行掩码处理。 #16727 (Azat Khuzhin).
- 当使用列转换器替换不存在的列时抛出错误。 #16183 (hexiaoting).
- 当没有足够的内存让所有线程同时工作时,关闭并行解析。此外,当有人尝试插入极其庞大的行(> min_chunk_bytes_for_parallel_parsing)时,可能会出现类似 "Memory limit exceeded" 的异常,因为每个要解析的片段都必须是一组相互独立的字符串(一个或多个)。 #16721 (Nikita Mikhaylov)。
- 安装脚本应始终在配置目录中创建子目录。此更改仅适用于使用自定义配置的 Docker 构建。#16936 (filimonov).
- 修正 JSONEachRow、JSONCompactEachRow 和 RegexpRow 输入格式中错误信息的语法。#17205 (nico piderman).
- 将
SOURCE(CLICKHOUSE(...))的host和port参数默认设置为当前实例,并将user的默认值设置为'default'。 #16997 (vdimir)。 - 在执行
ATTACH/DETACH TABLE <DICTIONARY>时抛出一条更具说明性的错误信息。在此 PR 之前,detach table <dict>虽然可以执行,但会导致内存中的元数据格式不正确。#16885 (Amos Bird)。 - 新增 cutToFirstSignificantSubdomainWithWWW()。#16845 (Azat Khuzhin).
- 在提供错误配置(缺少
metric_log.collect_interval_milliseconds)时,服务器将拒绝启动并抛出异常信息。 #16815 (Ivan). - 在未配置分布式 DDL 的情况下提供更清晰的异常消息。修复了 #5075。#16769(Nikita Mikhaylov)。
- 可用性改进:当在
CREATE TABLE查询中将CODEC表达式放错位置时,在语法错误消息中提供更有用的建议。修复了 #12493。#16768(alexey-milovidov)。 - 在 Distributed 引擎启动时,删除用于异步 INSERT 的空目录。#16729 (Azat Khuzhin)。
- 针对通过 nginx 服务器作为代理访问 S3 的变通方案。Nginx 目前不接受路径为空的 URL,例如
http://domain.com?delete,但原生 aws-sdk-cpp 会生成这种 URL。该提交改用打过补丁的 aws-sdk-cpp 版本,在这种情况下会生成以 "/" 作为路径的 URL,例如http://domain.com/?delete。#16709 (ianton-ru)。 - 允许
reinterpretAs*函数用于位宽相同的整数和浮点数。实现了 16640。#16657(flynn)。 - 现在,可以在
config.xml中修改<auxiliary_zookeepers>配置,并在无需重启服务器的情况下重新加载。#16627 (Amos Bird)。 - 在通过 HTTPS 连接远程资源时支持 SNI,从而可以连接到要求使用 SNI 的 Cloudflare 服务器。修复了 #10055。#16252(alexey-milovidov)。
- 支持连接到需要 SNI 的
clickhouse-server安全端点。当clickhouse-server通过 TLS 代理对外提供服务时,可以实现这一点。#16938 (filimonov)。 - 修复在创建物化视图循环时可能出现的栈溢出问题。修复了 #15732。#16048(alexey-milovidov)。
- 简化 MergeTree 表引擎系列的后台任务处理实现。对用户而言不应有任何可见变化。 #15983 (alesapin).
- 改进了 MaterializeMySQL(实验性特性)。当 MySQL 同步用户的权限配置错误时,抛出异常以提示所需的同步权限。#15977 (TCeason).
- 将
indexOf()改为使用 BloomFilter。 #14977 (achimbab)。
性能改进
- 使用 Floyd-Rivest 算法,它是最适合 ClickHouse 局部排序场景的算法。基准测试见 https://github.com/danlark1/miniselect 和 这里。#16825(Danila Kutenin)。
- 现在
ReplicatedMergeTree引擎家族为副本拉取使用单独的线程池。线程池的大小由设置background_fetches_pool_size限制,可通过重启服务器进行调整。该设置的默认值为 3,这意味着最大并行拉取数量为 3(并且可以充分利用 10G 网络)。修复 #520。#16390(alesapin)。 - 修复了
quantileTDigest状态不受控增长的问题。#16680(hrissan)。 - 在
EXPLAIN中增加VIEW子查询描述。为VIEW启用 LIMIT 下推优化。将Distributed的本地副本添加到查询计划中。#14936(Nikolai Kochetov)。 - 修复在
max_threads > 0且ORDER BY中存在表达式时optimize_read_in_order/optimize_aggregation_in_order的问题。#16637(Azat Khuzhin)。 - 修复在大量
MergeTree表之上的Merge表读取性能问题。修复 #7748。#16988(Anton Popov)。 - 现在我们可以在精确匹配的情况下安全地进行分区裁剪。一个有用的场景:假设表按
intHash64(x) % 100分区,并且查询中的条件也是对intHash64(x) % 100的原样表达,而不是对 x 本身。#16253(Amos Bird)。
实验特性
构建 / 测试 / 打包改进
- 提升构建镜像过程中的测试覆盖率。#17233 (alesapin).
- 将内置时区数据更新到 2020d 版本(同时将 cctz 更新到最新的 master)。#17204 (filimonov).
- 修复 Poco 中 UBSan 报告的问题,并关闭 #12719。#16765 (alexey-milovidov).
- 不再使用 UBSan 对第三方库进行插桩。#16764 (alexey-milovidov).
- 修复缓存字典中 UBSan 报告的问题,并关闭 #12641。#16763 (alexey-milovidov).
- 修复在尝试将无穷大浮点数转换为整数时 UBSan 报告的问题,并关闭 #14190。#16677 (alexey-milovidov).
ClickHouse 版本 20.11
ClickHouse 版本 v20.11.7.16-stable,2021-03-02
改进
Bug 修复
- BloomFilter 索引崩溃问题修复。修复了 #19757。#19884(Maksim Kita)。
- 在启用 system.text_log 时可能发生死锁。此修复解决了 #19874。#19875(alexey-milovidov)。
- 在之前的版本中,函数 arrayEnumerateUniq 的非常规参数可能会导致崩溃或陷入无限循环。此更改解决了 #19787 中提出的问题。#19788(alexey-milovidov)。
- 修复在对算术类型与字符串类型进行精确比较时出现的栈溢出问题。#19773 (tavplubix)。
- 修复
bitmapAndnot函数中的段错误。对应修复 #19668。#19713(Maksim Kita)。 - 某些使用大整数的函数可能会导致段错误。大整数目前为实验性特性。此更改关闭了 #19667。#19672(alexey-milovidov)。
- 修复函数
neighbor在LowCardinality参数上的错误结果。解决了 #10333。#19617(Nikolai Kochetov)。 - 修复在断开连接后
Connection中CompressedWriteBuffer的 use-after-free 错误。#19599 (Azat Khuzhin). DROP/DETACH TABLE table ON CLUSTER cluster SYNC查询可能会卡住的问题已修复。修复了 #19568。#19572(tavplubix)。- 修复
CREATE DICTIONARY查询中的id表达式问题。#19571 (Maksim Kita). - 修复在 merge_tree_min_rows_for_concurrent_read/merge_tree_min_bytes_for_concurrent_read=0/UINT64_MAX 时出现的 SIGSEGV 段错误。 #19528 (Azat Khuzhin).
- 如果使用特意构造的参数调用
addMonth函数,在读取内存时可能发生缓冲区溢出。此更改修复了 #19441 和 #19413。#19472(alexey-milovidov)。 - 如果某个文件中出现空数据块,则将分布式批次标记为损坏。 #19449 (Azat Khuzhin).
- 修复 Uber H3 库中可能存在的缓冲区溢出问题。参见 https://github.com/uber/h3/issues/392。此更改关闭了 #19219。#19383(alexey-milovidov)。
- 修复
system.parts表的state列(由于顺序不正确,在查询该列时会触发LOGICAL_ERROR错误)。 #19346 (Azat Khuzhin). - 修复错误
Cannot convert column now64() because it is constant but values of constants are different in source and result。作为对 #7156 的后续修复。#19316(Nikolai Kochetov)。 - 修复一个错误:并发执行
ALTER和DROP查询在处理 ReplicatedMergeTree 表时可能导致挂起。#19237 (alesapin). - 修复以
ORC格式读取文件时出现的无限循环读取问题(该问题在 #10580 中引入)。修复了 #19095。#19134(Nikolai Kochetov)。 - 修复了一个启动时的 bug:当 ClickHouse 无法从
LowCardinality(Nullable(...))读取压缩编解码器并抛出异常Attempt to read after EOF时会出错。修复了 #18340。#19101(alesapin)。 - 修复了通过 HTTP 接口使用
Template或CustomSeparated格式插入数据时出现的There is no checkpoint错误,修复了 #19021。#19072 (tavplubix)。 - 限制对采用旧语法创建的
MergeTree表执行MODIFY TTL查询。之前这些查询虽然会成功执行,但实际上不起任何作用。#19064(Anton Popov)。 - 确保
groupUniqArray对 Enum 类型的参数返回正确的类型。此更改解决了 #17875。#19019(alexey-milovidov)。 - 修复在将
ignore函数配合LowCardinality参数使用时可能出现的Expected single dictionary argument for function错误。修复了 #14275。#19016(Nikolai Kochetov)。 - 修复了向使用
TinyLog引擎的表中插入LowCardinality列时出现的问题。对应修复 #18629。#19010(Nikolai Kochetov)。 - 禁用
optimize_move_functions_out_of_any,因为该优化在某些情况下并不正确。关闭了 #18051。关闭了 #18973。#18981(alexey-milovidov)。 - 修复了在关闭过程中极少见的死锁。 #18977 (tavplubix).
- 修复对包含某些转义文本的 mutation(例如
ALTER ... UPDATE e = CAST('foo', 'Enum8(\'foo\' = 1'))进行处理时的错误序列化问题。修复了 #18878。#18944(alesapin)。 - ATTACH PARTITION 应重置 mutation。 #18804。 #18935 (fastio)。
- 修复
clickhouse-local在关闭时可能出现的挂起问题。修复了 #18891。#18893(alexey-milovidov)。 - 修复 *If 组合子在与一元函数及 Nullable 类型一起使用时的问题。#18806 (Azat Khuzhin)。
- 如果全局将
network_compression_method设置为非默认值,服务器可能会拒绝异步分布式 INSERT。此更改修复了 #18741。#18776(alexey-milovidov)。 - 修复了在尝试将类型为
Nullable(String)的NULLCAST为Nullable(Decimal(P, S))时出现的Attempt to read after eof错误。现在当无法从可为空字符串中解析出 decimal 时,CAST函数会返回NULL。修复了 #7690。#18718(Winter Zhang)。 - 修复 Logger 参数数量不匹配的问题。 #18717 (sundyli).
- 添加对 FixedString 数据类型的支持。从 MySQL 向 ClickHouse 复制数据时,会遇到异常 “Code: 50, e.displayText() = DB::Exception: Unsupported type FixedString(1)”。此补丁修复了缺陷 #18450,同时也修复了 #6556。#18553(awesomeleo)。
- 修复在包含
RIGHT或FULLJOIN 的子查询之后使用ORDER BY时可能出现的Pipeline stuck错误。#18550(Nikolai Kochetov)。 - 修复了一个 bug,该 bug 可能导致在终止对应 mutation 后
ALTER查询挂起。由线程 fuzzer 发现。#18518 (alesapin)。 - 在合并过程中禁用基于 AIO 的写入,因为在极其罕见的情况下,它可能在合并期间导致主键列数据损坏。 #18481 (alesapin).
- 在分析阶段,如果无法计算结果,则禁用对子查询的常量折叠。 #18446 (Azat Khuzhin).
- 修复了在执行
toType(...)函数(toDate、toUInt32等)且参数类型为Nullable(String)时出现的value is too short错误。现在此类函数在解析出错时会返回NULL,而不是抛出异常。修复了 #7673。#18445(tavplubix)。 - 限制从 wide 分片到 compact 分片的合并。在进行 vertical merge 时,这会导致生成的结果分片损坏。#18381 (Anton Popov).
- 修复向表
system.settings_profile_elements填充数据时的问题。此 PR 修复了 #18231。#18379(Vitaly Baranov)。 - 修复对包含常量参数的二元函数的索引分析错误,该问题会导致查询结果不正确。此修复对应 #18364。#18373(Amos Bird)。
- 修复在使用两级聚合时,带有
Distinct组合器的聚合函数中可能发生的崩溃问题。修复了 #17682。 #18365(Anton Popov)。 - 现在,即使只能从该
table中选择一列,SELECT count() FROM table也可以执行。此 PR 修复了 #10639。#18233(Vitaly Baranov)。 SELECT JOIN现在要求对每个参与 JOIN 的表都具备SELECT权限。此 PR 修复了 #17654。#18232(Vitaly Baranov)。- 修复了在发生读取退避(日志中出现消息
<Debug> MergeTreeReadPool: Will lower number of threads)时,从MergeTree*表读取可能导致查询结果不完整的问题。该问题最初在 #16423 中引入。本次修复解决了 #18137 中的问题。#18216(Nikolai Kochetov)。 - 修复在执行
MODIFY COLUMN ... REMOVE TTL查询时未真正移除列 TTL 的错误。#18130(alesapin)。 - 通过谓词优化器修复非确定性函数。这修复了 #17244。#17273(Winter Zhang)。
- 在执行
MOVE或REPLACE PARTITION之后,或者在少数情况下执行DETACH或DROP PARTITION之后,变更操作可能会因为等待某个不存在的 part 而挂起。该问题已修复。#15537 (tavplubix)。
构建/测试/打包改进
ClickHouse 发布 v20.11.6.6-stable,2020-12-24
缺陷修复
- 修复了在具备 IPv4/IPv6 双栈的机器上,服务器无法访问
clickhouse-odbc-bridge进程的问题,并修复了使用格式错误的查询执行 ODBC 字典更新时以及/或更新过程导致崩溃时出现的问题。这可能解决了 #14489。#18278(Denis Glazachev)。 - 修复了 Enum 与 Int 类型之间的键比较问题,解决了 #17989。#18214(Amos Bird)。
- 修复了
MaterializeMySQL数据库引擎中唯一键转换时发生的崩溃问题。此修复解决了 #18186,并同时修复了 #16372 和 #18211(Winter Zhang)。 - 修复了在解析 S3 URL 时出现的
std::out_of_range: basic_string异常。#18059(Vladimir Chebotarev)。 - 修复了由于 MaterializeMySQL 不支持转换 MySQL 前缀索引而导致部分表无法从 MySQL 同步到 ClickHouse 的问题。此更改修复了 #15187、#17912 和 #17944(Winter Zhang)。
- 修复了当查询包含
ARRAY JOIN时,查询优化产生错误结果的问题。#17887 (sundyli). - 修复了可能导致
topK聚合函数出现段错误的问题。已关闭 #17404。#17845(Maksim Kita)。 - 当
in_memory_parts_enable_wal被禁用时,不从 WAL 恢复数据片段。#17802 (detailyang)。 - 修复了 ClickHouse 无法重新建立与 MySQL 服务器连接时出现的问题。 #17681 (Alexander Kazakov).
- 修复了在使用分区谓词时
optimize_trivial_count_query行为不一致的问题。 #17644 (Azat Khuzhin). - 修复了服务器以守护进程模式运行时
system.stack_trace表为空的问题。#17630 (Amos Bird)。 - 修复了在 MergeTree 表中后台可能记录异常
fmt::v7::format_error的问题。此修复解决了 #17613。#17615(alexey-milovidov)。 - 修复了在交互模式下使用 clickhouse-client 执行多行查询时的行为,此前单行注释会被错误地延伸至整个查询的末尾。修复了 #13654。#17565(alexey-milovidov)。
- 修复了在极少数情况下服务器可能停止接受连接的问题。 #17542 (alexey-milovidov).
- 修复了当相应的 mutation 在其他副本上被终止时
ALTER查询会挂起的问题。此修复对应 #16953。#17499(alesapin)。 - 修复了 ClickHouse 对标记缓存大小估算不足的问题。当存在大量包含标记的小文件时,可能会出现这种情况。 #17496 (alesapin).
- 修复在启用设置
optimize_redundant_functions_in_order_by时ORDER BY的处理问题。#17471 (Anton Popov). - 修复了由于不正确的优化导致在执行
DISTINCT后仍可能出现的重复行问题。修复了 #17294。#17296(li chengxiang)。#17439(Nikolai Kochetov)。 - 修复了从包含
LowCardinality类型的JOIN表读取数据时发生的崩溃问题。此修复解决了 #17228。#17397(Nikolai Kochetov)。 - 修复了在子查询中存在
const列时 set 索引失效的问题。修复了 #17246。#17249(Amos Bird)。 - 修复了在索引比较两侧的类型不同时可能产生的错误索引分析问题。此修复对应 #17122。#17145(Amos Bird)。
- 修复了会导致崩溃的
ColumnConst比较问题。已解决 #17088。#17135(Amos Bird)。 - 修复了一个问题:在非 leader 的
ReplicatedMergeTree表上执行ON CLUSTER查询时,可能会导致查询一直处于挂起状态。 #17089 (alesapin). - 修复了
fuzzBits函数中由 fuzzer 发现的 bug,解决了 #16980。#17051(hexiaoting)。 - 避免对在执行期间可能被取消的远程查询(例如包含
LIMIT的查询)产生不必要的网络错误。#17006 (Azat Khuzhin)。 - 修复了从 double 类型转换为大整数(128、256 位)时结果错误的问题。 #16986 (Mike).
- 在出错时重新解析
format_avro_schema_registry_url的 IP。#16985(filimonov)。 - 修复了在执行
ALTER TABLE ... MODIFY COLUMN ... NewType期间,当某个SELECT在正在被修改的列上带有WHERE表达式且该ALTER尚未完成时可能导致服务器崩溃的问题。 #16968 (Amos Bird). clickhouse-git-import中的 blame 信息未被正确计算。#16959 (alexey-milovidov)。- 修复了使用单调函数的 ORDER BY 优化。修复了 #16107。#16956(Anton Popov)。
- 修复了在启用
optimize_aggregators_of_group_by_keys设置且存在 JOIN 时,GROUP BY的优化问题。此更改修复了 #12604。#16951(Anton Popov)。 - 安装脚本应始终在配置目录中创建子目录。这仅与使用自定义配置的 Docker 构建相关。#16936 (filimonov)。
- 修复了在包含
ORDER BY的查询中可能出现的Illegal type of argument错误。此更改修复了 #16580。#16928(Nikolai Kochetov)。 - 如果没有向 WriteBufferFromS3 写入任何数据,则中止分段上传。 #16840 (Pavel Kovalenko).
- 修复了在未传入任何参数时调用
any会导致崩溃的问题。此修复解决了 #16803。#16826(Amos Bird)。 - 修复了通过 MySQL 协议执行
INSERT查询时,ClickHouse 之前总是返回 0 而非受影响行数的问题。此更改修复了 #16605。#16715(Winter Zhang)。 - 修复了 TDigest 的无法控制的增长问题。 #16680 (hrissan).
- 修复了在 Aggregate 函数中使用后缀
if时导致远程查询失败的问题。该修复解决了 #16574、#16231 和 #16610 中报告的问题(Winter Zhang)。 - 修复了由于
select_sequential_consistency导致的优化后的简单计数查询与 system.tables 表之间的行为不一致问题。#16309(Hao Chen)。 - 在使用 ColumnTransformer 替换不存在的列时,现在会抛出错误。 #16183 (hexiaoting).
ClickHouse 发行版 v20.11.3.3-stable,2020-11-13
Bug Fix
- 修复了在启用查询分析器,并且 ClickHouse 安装在使用某些函数的异步展开表(unwind tables)被认为已损坏的 glibc 版本的操作系统上时,极少数情况下会出现的静默崩溃问题。修复了 #15301。修复了 #13098。#16846(alexey-milovidov)。
ClickHouse 发行版 v20.11.2.1,2020-11-11
不向后兼容的变更
- 如果在
distributed_ddl配置节中指定了某个profile,那么该 profile 可能会在服务器启动时覆盖defaultprofile 的设置。该问题已修复,现在分布式 DDL 查询的设置不会再影响全局服务器设置。#16635(tavplubix)。 - 限制在键(Sorting key、Primary key、Partition key 等)中使用不可比较的数据类型(如
AggregateFunction)。#16601(alesapin)。 - 移除
ANALYZE和AST查询,并将设置项enable_debug_queries标记为废弃,因为它现在已经成为全功能EXPLAIN查询的一部分。#16536(Ivan)。 - 聚合函数
boundingRatio、rankCorr、retention、timeSeriesGroupSum、timeSeriesGroupRateSum、windowFunnel被错误地实现为大小写不敏感。现在它们的名称已按设计改为区分大小写。只有那些在 SQL 标准中指定的函数、为与其他 DBMS 兼容而提供的函数,或与这些函数类似的函数才应该是大小写不敏感的。#16407(alexey-milovidov)。 - 使
rankCorr函数在数据不足时返回 NaN #16124。#16135(hexiaoting)。 - 当从早于 20.5 的版本升级时,如果执行滚动更新,且集群中同时包含大于等于 20.5 和小于 20.5 的版本,如果在存在较新版本的情况下重启旧版本的 ClickHouse 节点,并启动了旧版本,可能会导致
Part ... intersects previous part错误。为防止该错误,应先在所有集群节点上安装新的 clickhouse-server 软件包,然后再进行重启(这样,当 clickhouse-server 重启时,将以新版本启动)。
新特性
- 增加了对将 LDAP 用作本地不存在的用户目录的支持。#12736 (Denis Glazachev)。
- 新增
system.replicated_fetches表,用于显示当前正在运行的后台拉取操作。 #16428 (alesapin)。 - 新增
date_time_output_format设置。#15845 (Maksim Kita)。 - 为 ClickHouse 添加了一个基础的 Web UI。 #16158 (alexey-milovidov).
- 允许一次性读写单个 protobuf 消息(不带长度分隔符)。 #15199 (filimonov).
- 新增了对 OpenTelemetry 的初始支持。ClickHouse 现在可以通过 Native 和 HTTP 协议接收 OpenTelemetry traceparent 请求头,并在某些情况下将其向下游传递。已执行查询的 trace span 会保存到
system.opentelemetry_span_log表中。#14195 (Alexander Kuzmenkov)。 - 允许在
CREATE TABLE查询的列列表中指定主键,以提高与其他 SQL 方言的兼容性。#15823 (Maksim Kita). - 在包含 ORDER BY 子句的 SELECT 查询中实现
OFFSET offset_row_count {ROW | ROWS} FETCH {FIRST | NEXT} fetch_row_count {ROW | ROWS} {ONLY | WITH TIES}。这是在 SQL 标准中指定LIMIT的方式。#15855(hexiaoting)。 errorCodeToName函数 —— 返回错误码对应的名称(用于分析query_log等)。system.errors表 —— 显示每种错误发生的次数(遵循system_events_show_zero_values)。#16438 (Azat Khuzhin)。- 新增了函数
untuple,这是一种特殊函数,可以通过展开具名元组向 SELECT 列表中引入新的列。#16242 (Nikolai Kochetov, Amos Bird)。 - 现在我们可以通过查询参数传递标识符。这些参数可以作为表对象或列使用。#16594(Amos Bird)。
- 为 MergeTree BloomFilter 索引新增了对大整数(UInt256、Int128、Int256)和 UUID 数据类型的支持。大整数类型为实验性特性。#16642(Maksim Kita)。
- 添加
farmFingerprint64函数(非加密的字符串哈希)。#16570 (Jacob Hayes)。 - 添加
log_queries_min_query_duration_ms,只有执行时间超过该设置值的查询才会写入query_log/query_thread_log(类似于 MySQL 中的slow_query_log)。 #16529 (Azat Khuzhin)。 - 支持基于
Alpine构建 Docker 镜像。使用来自 Ubuntu 20.04 的预编译二进制文件和 glibc 组件。#16479 (filimonov)。 - 新增
toUUIDOrNull、toUUIDOrZero类型转换函数。 #16337 (Maksim Kita)。 - 添加
max_concurrent_queries_for_all_users设置,使用场景参见 #6636。#16154(nvartolomei)。 - 为 clickhouse-client 添加一个新选项
print_query_id。它允许使用客户端当前生成的查询 ID 来生成任意字符串,并在 clickhouse-client 中默认打印查询 ID。#15809 (Amos Bird)。 - 添加
tid和logTrace函数。这修复了问题 #9434。#15803(flynn)。 - 添加函数
formatReadableTimeDelta,用于将时间差格式化为更易读的字符串……#15497(Filipe Caixeta)。 - 为多磁盘配置中的卷新增了
disable_merges选项。#13956 (Vladimir Chebotarev)。
实验性特性
- 新增函数
encrypt、aes_encrypt_mysql、decrypt、aes_decrypt_mysql。这些函数当前执行较慢,因此被视为实验性特性。 #11844 (Vasily Nemkov).
Bug 修复
- 对
system.distribution_queue中 data_path 的密码进行掩码处理。 #16727 (Azat Khuzhin). - 修复在启用
transform_null_in设置时,对多列和元组使用IN运算符的问题。修复了 #15310。#16722(Anton Popov)。 - 如果被查询的表未启用采样,
max_parallel_replicas设置会工作不正确。该修复解决了 #5733。#16675(alexey-milovidov)。 - 修复在
max_threads> 0 且ORDER BY中包含表达式时optimize_read_in_order/optimize_aggregation_in_order的问题。#16637 (Azat Khuzhin). - 计算
DEFAULT表达式时可能会发生名称冲突(尽管这种情况几乎不可能出现)。这修复了 #9359。#16612(alexey-milovidov)。 - 修正
query_thread_log.query_duration_ms的单位。#16563 (Azat Khuzhin)。 - 修复在使用 MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL 引擎时的一个问题。
MaterializeMySQL是一个实验性功能。#16504 (TCeason)。 - 为
round函数配合Decimal特殊构造的参数会导致出现整数除零错误。此修复解决了 #13338。#16451(alexey-milovidov)。 - 修复 Distributed 表的
DROP TABLE(与INSERT并发时存在竞争条件)。 #16409 (Azat Khuzhin). - 修复复制队列中超大条目的处理。在表结构极其庞大(接近 1 MB)时,ALTER 查询中可能会出现超大条目。此修复解决了 #16307 的问题。#16332(alexey-milovidov)。
- 修复了这样一种不一致的行为:当用于过滤的集合尚未创建时,返回数据的部分内容可能会被丢弃。 #16308 (Nikita Mikhaylov).
- 修复 sharding_key 中对 dictGet 的使用(以及类似场景,例如函数上下文被持久保存时)。 #16205 (Azat Khuzhin)。
- 修复了在使用
clickhouse-local执行OPTIMIZE命令时抛出的异常。修复了 #16076。#16192(filimonov)。 - 修复了 #15780 引入的回归问题,例如
indexOf([1, 2, 3], toLowCardinality(1))现在被禁止,但本不应如此。#16038(Mike)。 - 修复与 MySQL 数据库相关的 bug。当作为数据库引擎使用的 MySQL 服务器宕机时,一些查询会抛出异常,因为它们会尝试从已停用的服务器获取表,而这是不必要的。比如,查询
SELECT ... FROM system.parts应该只针对 MergeTree 表起作用,完全不应访问 MySQL 数据库。#16032(Kruglov Pavel)。 - 现在,当使用
ALTER MODIFY COLUMN ... DEFAULT ...且其默认值与列类型不兼容时,将抛出异常。修复了 #15854。#15858(alesapin)。 - 修复了 IPv4CIDRToRange/IPv6CIDRToRange 函数,使其能够接受常量 IP 列值。 #15856 (vladimir-golovchenko)。
改进
- 将
INTERVAL '1 hour'视为等同于INTERVAL 1 HOUR,从而与 Postgres 等系统兼容。修复了 #15637。#15978(flynn)。 - 在 CSV、TSV 和 JSON 输入格式中支持根据其数值 ID 解析枚举值。#15685 (vivarum)。
- 针对 JBOD 架构和
MergeTree存储改进了读取任务调度。新增设置项read_backoff_min_concurrency,用于作为读取线程数量的下限值。#16423 (Amos Bird)。 - 为
Avro格式补充对LowCardinality的支持。#16521(Mike)。 - 用于在通过 Nginx 服务器作为代理使用
S3时的变通方案。Nginx 目前不接受路径为空的 URL(例如http://domain.com?delete),但原生 aws-sdk-cpp 会生成这种 URL。此提交使用了打过补丁的 aws-sdk-cpp 版本,在这种情况下会生成以 "/" 作为路径的 URL,例如http://domain.com/?delete。#16814(ianton-ru)。 - 针对输入数据解析错误提供更完善的诊断信息。现在会在
Cannot read all data错误中提供行号。 #16644 (alexey-milovidov). - 使
minMap和maxMap的行为更符合预期。现在结果中不会再跳过零值。修复了 #16087。#16631(Ildus Kurbangaliev)。 - 改进了在运行时更新 ZooKeeper 配置的方式。 #16630 (sundyli).
- 尽可能早地应用
SETTINGS子句,从而允许在查询中修改更多设置。修复了 #3178。#16619(alexey-milovidov)。 - 现在
event_time_microseconds字段使用 Decimal64 类型而不是 UInt64 类型进行存储。#16617 (Nikita Mikhaylov)。 - 现在可以在
APPLY列转换器中使用参数化函数。#16589 (Amos Bird)。 - 改进了用于清理
Atomic数据库中已删除表数据的后台任务的调度方式。如果表实际上没有数据目录,Atomic数据库将不会为该表数据目录创建损坏的符号链接。 #16584 (tavplubix). WITH子句(CTE)中的子查询可以通过名称引用同一WITH子句中先前的子查询。#16575 (Amos Bird)。- 将 current_database 添加到
system.query_thread_log中。 #16558 (Azat Khuzhin). - 允许将当前实例中已提交或已过期的分片(parts)拉取到 detached 目录中。在从另一个集群迁移表并进行 N 对 1 分片映射时非常有用。这也与当前的 fetchPartition 实现保持一致。#16538 (Amos Bird)。
- 对
RabbitMQ进行了多项改进:修复了 #16263 中的缺陷;尽量缩短了事件循环的存活时间;新增了更高效的队列设置。#16426(Kseniia Sumarokova)。 - 修复
quantileDeterministic函数中的调试断言。在先前版本中,它还可能导致通过网络传输的数据量最多增加两倍,尽管并不存在实际错误。此更改修复了 #15683。#16410(alexey-milovidov)。 - 添加
TablesToDropQueueSize指标。其值等于处于等待后台数据清理状态的已删除表的数量。#16364 (tavplubix)。 - 当客户端断开连接时提供了更好的诊断信息。在之前的版本中,
Attempt to read after EOF和Broken pipe异常会记录在服务器日志中。在新版本中,这被替换为一条信息级日志:Client has dropped the connection, cancel the query.。#16329 (alexey-milovidov)。 - 为 Set/Join 表引擎增加对 total_rows/total_bytes(来自 system.tables)的支持。#16306(Azat Khuzhin)。
- 现在可以在 MergeTree 表引擎系列中只指定
PRIMARY KEY而不指定ORDER BY。已关闭 #15591。#16284(alesapin)。 - 如果系统中没有 tmp 目录(chroot、配置错误等),
clickhouse-local会在当前目录下创建一个临时子目录。#16280 (filimonov)。 - 新增对将嵌套数据类型(如命名元组)用作子类型的支持。修复 #15587。#16262(Ivan)。
- 为
DROP DATABASE语句增加对database_atomic_wait_for_drop_and_detach_synchronously/NO DELAY/SYNC的支持。#16127 (Azat Khuzhin)。 - 添加
allow_nondeterministic_optimize_skip_unused_shards(允许在分片键中使用非确定性函数,如rand()或dictGet())。#16105 (Azat Khuzhin)。 - 修复通过 HTTP 发起的查询的
memory_profiler_step/max_untracked_memory(包含测试)。修复这样一个问题:即便在 XML 配置中全局调整该值也无效,因为这些设置根本不会被应用,只会使用默认值(4MB),如此处所示。修复 HTTP 查询最顶层根 ThreadStatus 的query_id(通过在读取 query_id 之后初始化 QueryScope)。#16101(Azat Khuzhin)。 - 现在,无论集群配置中的
<internal_replication>设置为何值,都可以执行ALTER ... ON CLUSTER查询。#16075 (alesapin). - 修复一个罕见问题:
clickhouse-client在加载自动补全建议时,退出过程中可能异常退出。此更改修复了 #16035。#16047(alexey-milovidov)。 - 为使用复杂键的
Redis字典添加对cache布局的支持。#15985 (Anton Popov). - 修复在错误配置(
connections_with_failover_max_tries设置为 0)情况下出现的查询挂起(无限循环)问题。#15876 (Azat Khuzhin). - 将部分日志消息的级别从 information 调整为 debug,从而避免在每次查询时都输出 information 级别的消息。解决了 #5293。#15816(alexey-milovidov)。
- 移除
MemoryTrackingInBackground*指标,从而避免得到可能具有误导性的结果。修复了 #15684。#15813(alexey-milovidov)。 - 为
zookeeper-dump-tree工具添加重连功能。#15711 (alexey-milovidov)。 - 允许在
CREATE TABLE table AS table_function(...)查询中显式指定列的列表。修复 #9249 和 #14214。#14295(tavplubix)。
性能改进
- 在
SELECT FINAL中不要跨分区合并数据片段(parts)。#15938 (Kruglov Pavel)。 - 提升
-OrNull和-OrDefault聚合函数的性能。#16661 (alexey-milovidov)。 - 提升
quantileMerge的性能。在之前的版本中,它的速度非常慢。此变更关闭 #1463。#16643 (alexey-milovidov)。 - 略微提升逻辑函数的性能。#16347 (alexey-milovidov)。
- 改进 MergeTree 表引擎中合并任务分配的性能。对用户而言应当是透明的。#16191 (alesapin)。
- 通过预先分配哈希表,加速 hashed/sparse_hashed 字典的加载。#15454 (Azat Khuzhin)。
- 现在 trivial count 优化变得稍微不那么简单。包含精确分区表达式的谓词也可以被优化。此变更还修复了在
max_parallel_replicas > 1时返回错误计数的 #11092。#15074 (Amos Bird)。
构建/测试/打包改进
- 为无状态测试添加不稳定性检查。它会在合并之前预先检测出潜在的不稳定功能测试。#16238 (alesapin).
- 为
croaring使用合适的版本,而不是使用 amalgamation。#16285 (sundyli). - 改进针对
ya.make构建系统(Arcadia)的构建文件生成。#16700 (alexey-milovidov). - 为
MaterializeMySQL数据库引擎添加 MySQL BinLog 文件检查工具。MaterializeMySQL是一个实验性特性。#16223 (Winter Zhang). - 检查非可执行文件上的可执行位。人们经常会在 Windows 下不小心提交带可执行位的文件。#15843 (alexey-milovidov).
- 检查头文件中是否包含
#pragma once。#15818 (alexey-milovidov). - 修复 libhdfs3 中不规范的代码风格
&vector[idx]。这修复了 libcxx 的调试构建。另见 https://github.com/ClickHouse-Extras/libhdfs3/pull/8 。#15815 (Amos Bird). - 修复在 Mac OS 上构建某个杂项示例工具的问题。需要注意的是,我们在 CI 中并不会在 Mac OS 上构建示例(只构建 ClickHouse 二进制),因此它再次出问题几乎是迟早的事。这修复了 #15804。#15808 (alexey-milovidov).
- 简化 Sys/V init 脚本。#14135 (alexey-milovidov).
- 向
db_generator中添加boost::program_options以提升其易用性。此更改关闭了 #15940。#15973 (Nikita Mikhaylov).
ClickHouse 版本 20.10
ClickHouse 版本 v20.10.7.4-stable,2020-12-24
Bug 修复
- 修复了在具有
IPv4/IPv6双栈的机器上,服务器无法访问clickhouse-odbc-bridge进程的问题,并修复了在使用格式错误的查询执行 ODBC 字典更新时出现的问题(可能导致崩溃)。这可能关闭了 #14489。#18278(Denis Glazachev)。 - 修复 Enum 和 Int 类型之间的键比较问题,解决了 #17989。#18214(Amos Bird)。
- 修复了
MaterializeMySQL数据库引擎中在唯一键转换时发生的崩溃。此更改修复了 #18186、#16372 和 #18211(Winter Zhang)。 - 修复了解析 S3 URL 时出现的
std::out_of_range: basic_string异常。#18059 (Vladimir Chebotarev)。 - 修复了由于 MaterializeMySQL 不支持转换 MySQL 前缀索引而导致部分表无法从 MySQL 同步到 ClickHouse 的问题。本次修复解决了 #15187、#17912 和 #17944(Winter Zhang)。
- 修复
topK聚合函数中可能导致段错误的问题,从而关闭了 #17404。#17845(Maksim Kita)。 - 当
in_memory_parts_enable_wal被禁用时,不要从WAL中恢复数据分片。 #17802 (detailyang). - 修复了 ClickHouse 无法重新建立与 MySQL 服务器连接时出现的问题。#17681 (Alexander Kazakov)。
- 修复了在服务器以守护进程模式运行时
system.stack_trace表为空的问题。#17630 (Amos Bird)。 - 修复了在交互模式下使用
clickhouse-client执行多行查询时,单行注释被错误地延伸到整个查询结尾的问题。此修复解决了 #13654。#17565(alexey-milovidov)。 - 修复了一个问题:在极少数情况下,服务器可能会停止接受连接。 #17542 (alexey-milovidov).
- 修复了在对应的 mutation 在不同副本上被终止时,
ALTER查询会挂起的问题。此修复解决了 #16953。#17499(alesapin)。 - 修复了 ClickHouse 低估 mark 缓存大小的 bug。当存在大量体积很小且包含 mark 的文件时,可能会发生这种情况。#17496 (alesapin)。
- 修复了在启用设置
optimize_redundant_functions_in_order_by时的ORDER BY问题。 #17471 (Anton Popov). - 修复了因不正确的优化导致在
DISTINCT之后仍可能出现的重复数据问题。修复了 #17294。#17296(li chengxiang)。#17439(Nikolai Kochetov)。 - 修复了从包含
LowCardinality类型的JOIN表中读取数据时发生崩溃的问题。这修复了 #17228。#17397(Nikolai Kochetov)。 - 修复了在子查询中存在
const列时 set 索引失效的问题,解决了 #17246。#17249(Amos Bird)。 - 修复了
ColumnConst比较导致的崩溃问题。此修复解决了 #17088。#17135(Amos Bird)。 - 修复了在非 leader 副本上的
ReplicatedMergeTree表中执行ON CLUSTER查询时可能会永久挂起的问题。#17089 (alesapin)。 - 修复了模糊测试器在
fuzzBits函数中发现的 bug。这一更改修复了 #16980。#17051(hexiaoting)。 - 避免在执行过程中可能被取消的远程查询(例如带有
LIMIT的查询)出现不必要的网络错误。#17006 (Azat Khuzhin). - 修复了在将 double 转换为大整数(128 位、256 位)时结果错误的问题。#16986 (Mike).
- 在出现错误时重新解析
format_avro_schema_registry_url的 IP 地址。#16985 (filimonov)。 - 修复了在执行
ALTER TABLE ... MODIFY COLUMN ... NewType时,如果存在针对正在被修改的列并带有WHERE条件的SELECT查询,而该ALTER尚未完成时可能导致服务器崩溃的问题。#16968 (Amos Bird)。 clickhouse-git-import中的 blame 信息计算不正确。#16959 (alexey-milovidov)。- 修复了在单调函数场景下的 ORDER BY 优化问题。修复了 #16107。#16956(Anton Popov)。
- 修复在启用设置
optimize_aggregators_of_group_by_keys且包含 JOIN 时的 GROUP BY 优化问题。此修复解决了 #12604。#16951(Anton Popov)。 - 安装脚本现在会始终在配置目录中创建子目录。此更改仅影响使用自定义配置的 Docker 构建。#16936 (filimonov)。
- 修复在包含
ORDER BY的查询中可能出现的Illegal type of argument错误。此更改修复了 #16580。#16928(Nikolai Kochetov)。 - 如果未向
WriteBufferFromS3写入任何数据,则中止分段上传(multipart upload)。 #16840 (Pavel Kovalenko). - 修复了在调用
any且未传入任何参数时导致的崩溃问题。这修复了 #16803。#16826(Amos Bird)。 - 修复了通过 MySQL 协议执行
INSERT查询时,ClickHouse 先前总是返回 0 而不是返回受影响行数的问题。此修复对应 #16605。#16715(Winter Zhang)。 - 修复了
TDigest的失控增长问题。#16680 (hrissan)。 - 修复了在聚合函数中使用后缀
if时远程查询失败的问题。该修复解决了 #16574、#16231 和 #16610(Winter Zhang)。
ClickHouse 发布 v20.10.4.1-stable,2020-11-13
Bug 修复
- 修复在开启查询分析器且 ClickHouse 安装在某些 glibc 版本(据推测这些版本对部分函数的异步展开表存在问题)的操作系统上时出现的罕见静默崩溃问题。修复了 #15301。修复了 #13098。#16846(alexey-milovidov)。
- 修复在启用
transform_null_in设置时,对多列和元组使用IN运算符的问题。修复了 #15310。#16722(Anton Popov)。 - 修复在
max_threads>0且ORDER BY中包含表达式时,optimize_read_in_order/optimize_aggregation_in_order的问题。#16637(Azat Khuzhin)。 - 现在在从输入解析 AVRO 时,会从类型中移除 LowCardinality。修复了 #16188。#16521(Mike)。
- 修复在使用 MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL 引擎,且在 MySQL Slave 上启用
slave_parallel_worker时元数据快速增长的问题,通过正确缩减 GTID 集合加以解决。修复了 #15951。#16504(TCeason)。 - 修复 Distributed 表的 DROP TABLE 与 INSERT 之间存在竞争条件的问题。#16409(Azat Khuzhin)。
- 修复复制队列中处理超大记录的问题。如果表结构极大(接近 1 MB),则在 ALTER 查询中可能会出现非常大的记录。修复了 #16307。#16332(alexey-milovidov)。
- 修复与 MySQL 数据库相关的 bug。当用作数据库引擎的 MySQL 服务器宕机时,一些查询会抛出异常,因为它们尝试从已失效的服务器获取表,而这其实没有必要。例如,查询
SELECT ... FROM system.parts只应操作 MergeTree 表,完全不应访问 MySQL 数据库。#16032(Kruglov Pavel)。
改进
- 为通过 nginx 服务器作为代理使用 S3 提供变通方案。nginx 当前不接受路径为空的 URL,例如 http://domain.com?delete,但原生 aws-sdk-cpp 会生成这类 URL。此提交使用了打过补丁的 aws-sdk-cpp 版本,在这类情况下会生成以 “/” 作为路径的 URL,例如 http://domain.com/?delete。[#16813](https://github.com/ClickHouse/ClickHouse/pull/16813)([ianton-ru](https://github.com/ianton-ru))。
ClickHouse 发布 v20.10.3.30,2020-10-28
向后不兼容变更
- 将
multiple_joins_rewriter_version标记为过时,移除第一版 joins 重写器。#15472 (Artem Zuikov). - 将
format_regexp_escaping_rule设置(与Regexp格式相关)的默认值更改为Raw(表示将整个子模式作为一个值读取),以使行为更符合用户预期。#15426 (alexey-milovidov). - 在 SQL 中增加对嵌套多行注释
/* comment /* comment */ */的支持。这符合 SQL 标准。#14655 (alexey-milovidov). - 为 MergeTree 增加设置(
max_replicated_merges_with_ttl_in_queue和max_number_of_merges_with_ttl_in_pool),用于控制后台池和复制队列中带 TTL 的合并数量。此更改仅在你使用删除 TTL(delete TTL)时才会与旧版本不兼容。否则,复制仍将保持兼容。如果你一次性更新所有分片副本,或者在完成所有副本更新前执行SYSTEM STOP TTL MERGES,即可避免兼容性问题。如果在复制队列中出现不兼容的条目,首先执行SYSTEM STOP TTL MERGES,然后对分配了不兼容 TTL 合并的分区执行ALTER TABLE ... DETACH PARTITION ...。之后在单个副本上将其重新附加。#14490 (alesapin). - 当从 20.5 之前的版本升级并执行滚动更新时,如果集群中同时存在大于等于 20.5 和小于 20.5 的版本节点,在存在新版本节点的情况下重启旧版本的 ClickHouse 节点并启动旧版本,可能会导致
Part ... intersects previous part错误。为防止该错误,首先在所有集群节点上安装新的 clickhouse-server 软件包,然后再执行重启(也就是说,当 clickhouse-server 被重启时,它将以新版本启动)。
新特性
- 后台数据重新压缩。为 MergeTree 表引擎系列新增支持指定
TTL ... RECOMPRESS codec_name的能力。#14494 (alesapin). - 添加并行 quorum 插入。这解决了 #15601。#15601(Latysheva Alexandra)。
- 用于进一步强化数据持久性的设置。适用于非复制部署。#11948 (Anton Popov)。
- 当一个重复的数据块被写入某个副本节点,而该副本本地尚不存在该数据块(尚未从其他副本拉取)时,不要忽略它,而是应写入本地,以达到与成功完成复制相同的效果。 #11684 (alexey-milovidov).
- 现在我们支持在查询上下文中使用
WITH <identifier> AS (subquery) ...来引入具名子查询。此更改关闭了 #2416。此更改还关闭了 #4967。#14771(Amos Bird)。 - 引入
enable_global_with_statement设置,它会将第一个 SELECT 查询的WITH子句传播到同一层级的其他 SELECT 查询,并使WITH子句中的别名对子查询可见。 #15451 (Amos Bird)。 - 安全的集群间查询执行(使用 initial_user 作为当前查询用户)。 #13156 (Azat Khuzhin). #15551 (Azat Khuzhin).
- 新增了删除列属性和表 TTL 的功能。引入了查询
ALTER TABLE MODIFY COLUMN col_name REMOVE what_to_remove和ALTER TABLE REMOVE TTL。这两种操作都很轻量级,并且只在元数据层面执行。#14742 (alesapin)。 - 添加了
RawBLOB格式。用于在没有任何转义和分隔符的情况下输入或输出单个值。由此关闭了 #15349。#15364(alexey-milovidov)。 - 添加
reinterpretAsUUID函数,用于将大端序字节串转换为 UUID。 #15480 (Alexander Kuzmenkov). - 实现
force_data_skipping_indices设置。#15642 (Azat Khuzhin). - 添加设置
output_format_pretty_row_numbers,用于在 Pretty 格式中为结果添加行号。此更改解决了 #15350。#15443(flynn)。 - 添加了查询混淆工具。这使得可以共享更多查询,以便进行更充分的测试。关闭了 #15268。#15321(alexey-milovidov)。
- 新增表函数
null('structure')。 #14797 (vxider). - 新增了
formatReadableQuantity函数。该函数可以将较大的数字格式化为更易读的形式。#14725 (Artem Hnilov)。 - 添加
LineAsString格式,它接受由换行符分隔的一系列行,并将每一行整体解析为一个单独的 String 字段。#14703 (Nikita Mikhaylov),#13846 (hexiaoting). - 新增
JSONStrings格式,用于将数据输出为字符串数组。#14333 (hcz)。 - 为
Regexp格式新增对 "Raw" 列格式的支持。它允许直接整体提取子模式,而无需任何转义规则。#15363 (alexey-milovidov)。 - 允许为
TSV输出格式配置可自定义的NULL表示。该功能由设置项output_format_tsv_null_representation控制,默认值为\N。由此关闭了 #9375。请注意,该设置仅影响输出格式,而\N是TSV输入格式中唯一支持的NULL表示。#14586(Kruglov Pavel)。 - 为
MaterializeMySQL添加对 Decimal 数据类型的支持。MaterializeMySQL是一个实验性功能。#14535 (Winter Zhang)。 - 新增功能:
SHOW DATABASES LIKE 'xxx'。 #14521 (hexiaoting). - 新增脚本,用于将任意 Git 仓库导入到 ClickHouse 作为示例数据集。#14471(alexey-milovidov)。
- 现在,在列列表中与列转换器一起使用时,
INSERT语句可以包含星号(及其变体)。 #14453 (Amos Bird)。 - 为分布式查询新增查询复杂度限制参数
max_rows_to_read_leaf和max_bytes_to_read_leaf,用于限制在叶节点上读取的最大行数/字节数。该限制仅适用于本地读取操作,不包括根节点上的最终合并阶段。#14221 (Roman Khavronenko)。 - 允许用户在配置文件的
<replicated_merge_tree>部分为ReplicatedMergeTree*存储指定设置。其工作方式与<merge_tree>部分类似。对于ReplicatedMergeTree*存储,会同时应用来自<merge_tree>和<replicated_merge_tree>的设置,但<replicated_merge_tree>中的设置优先级更高。新增system.replicated_merge_tree_settings表。#13573 (Amos Bird)。 - 新增
mapPopulateSeries函数。 #13166 (Ildus Kurbangaliev). - 支持 MySQL 类型:
decimal(映射为 ClickHouseDecimal)以及具备子秒级精度的datetime(映射为DateTime64)。#11512(Vasily Nemkov)。 - 在
system.text_log、system.trace_log、system.query_log和system.query_thread_log表中新增event_time_microseconds字段。#14760(Bharat Nallan)。 - 将
event_time_microseconds添加到system.asynchronous_metric_log和system.metric_log表。#14514(Bharat Nallan)。 - 将
query_start_time_microseconds字段添加到system.query_log和system.query_thread_log表中。#14252(Bharat Nallan)。
Bug 修复
- 修复在忽略限制时可能出现的内存过度分配问题。修复了 #14560。#16206(alexey-milovidov)。
- 修复
executable字典源挂起的问题。在早期版本中,当使用某些格式(例如JSONEachRow)时,在子进程至少输出一些内容之前,数据不会被馈送给该子进程。此更改关闭了 #1697。此更改关闭了 #2455。#14525(alexey-milovidov)。 - 修复在函数
dictGet抛出异常时出现的重复释放内存问题。如果字典在加载时发生错误,就可能触发该问题。#16429 (Nikolai Kochetov)。 - 修复在使用
totals/rollup/cube修饰符以及对GROUP BY键应用min/max函数时的GROUP BY行为问题。修复了 #16393。#16397(Anton Popov)。 - 修复在 prefer_localhost_replica=0 且启用 internal_replication 时异步 Distributed INSERT 的问题。#16358 (Azat Khuzhin).
- 修复了
TwoLevelStringHashTable实现中的一个非常严重的错误,可能导致内存泄漏。#16264 (Amos Bird)。 - 修复在某些 lambda 中错误聚合时出现的段错误(segfault)。 #16082 (Anton Popov).
- 修复在
ReplicatedVersionedCollapsingMergeTree中执行ALTER MODIFY ... ORDER BY查询时出现卡住的问题。此修复解决了 #15980。 #16011(alesapin)。 MaterializeMySQL(实验性功能):修复排序规则名称和字符集名称解析器,并支持字符串类型的length = 0。 #16008 (Winter Zhang).- 允许对键为复杂类型的字典使用
direct布局。#16007 (Anton Popov)。 - 修复在副本空闲一段时间后发生复制错误时会导致副本挂起 5–10 分钟的问题。 #15987 (filimonov).
- 修复在向物化视图插入数据或从中查询的同时并发删除其目标表时(针对 Atomic 数据库引擎)可能出现的罕见段错误。 #15984 (tavplubix).
- 修复了设置配置文件解析时的歧义:
CREATE USER ... SETTINGS profile readonly现在被解释为使用名为readonly的配置文件,而不是名为profile且带有只读约束的设置。这修复了 #15628。#15982(Vitaly Baranov)。 MaterializeMySQL(实验功能):修复在创建数据库失败时出现的崩溃问题。 #15954 (Winter Zhang)。- 修复了在并发重命名表时(针对 Atomic 数据库引擎),
DROP TABLE IF EXISTS因Table ... does not exist错误导致失败的问题。修复了在对多个表并发执行某些 DDL 查询(例如DROP DATABASE和RENAME TABLE)时出现的罕见死锁问题。修复了在并发执行DROP/DETACH TABLE时,DROP/DETACH DATABASE因Table ... does not exist错误导致失败的问题。 #15934 (tavplubix)。 - 修复了在查询
Distributed表且查询包含WHERE、PREWHERE和GLOBAL IN时错误返回空结果的问题。修复了 #15792。#15933(Nikolai Kochetov)。 - 修复 #12513:在重新分析查询时,具有相同别名的差分表达式处理不一致的问题。#15886(Winter Zhang)。
- 修复 RBAC 实现中极少数情况下可能发生的死锁问题。 #15875 (Vitaly Baranov).
- 修复在执行
ALTER MODIFY COLUMN查询后运行的SELECT ... ORDER BY DESC查询中出现的Block structure mismatch异常,解决了 #15800。#15852(alesapin)。 MaterializeMySQL(实验性功能):修复select count()结果不准确的问题。#15767 (tavplubix).- 修复了一些仅查询虚拟列时的情况。之前可能会抛出
Not found column _nothing in block异常。修复了 #12298。#15756(Anton Popov)。 - 修复在 Atomic 数据库中删除带有内部表的物化视图时的问题(由于对该物化视图的内部表执行递归 DROP TABLE,导致工作线程挂起,进而阻塞所有后续的 DROP TABLE 操作)。#15743 (Azat Khuzhin).
- 如果第一次尝试失败,现在支持将数据分片移动到另一个磁盘/卷。 #15723 (Pavel Kovalenko).
- 修复在向
MATERIALIZED VIEW插入时,如果MV的查询包含ARRAY JOIN,可能出现的Cannot find column错误。 #15717 (Nikolai Kochetov). - 修正了
max_replicated_logs_to_keep默认值过低的问题,该问题可能导致副本过于频繁地丢失。通过选择最新的副本作为克隆源,改进丢失副本的恢复过程。同时,对丢失副本上的旧 part 不再执行删除操作,而是将其分离(detach)。 #15701 (tavplubix). - 修复基于 MySQL 的字典和表中罕见的竞态条件。#15686 (alesapin)。
- 修复 AMQP-CPP 中(无害的)竞态条件。#15667(alesapin)。
- 修复在从与目标表结构不同的
Buffer表读取数据时出现的错误Cannot add simple transform to empty Pipe。当目标表对查询返回空结果集时,会触发该问题。修复了 #15529。#15662(Nikolai Kochetov)。 - 在向基于 S3 的 MergeTree 表插入数据时实现了正确的错误处理。基于 S3 的 MergeTree 是一个试验性功能。#15657(Pavel Kovalenko)。
- 修复了 S3 表函数中的一个缺陷:来自 URL 的区域没有被应用到 S3 客户端配置中。#15646(Vladimir Chebotarev)。
- 修正了查询计划中
ReadFromStorage步骤所使用资源的析构顺序。在极少数情况下,这可能会导致崩溃。可能与 #15610 相关。#15645(Nikolai Kochetov)。 - 在分离只读表时减去
ReadonlyReplica指标的计数。#15592 (sundyli). - 修复了在
VALUES、LIMIT或IN运算符右侧使用JSON*函数的结果时出现的Element ... is not a constant expression错误。#15589 (tavplubix)。 - 当发生异常时,查询将更快结束,并会取消在远程副本上的执行。#15578 (Azat Khuzhin).
- 避免出现错误消息
Could not calculate available disk space (statvfs), errno: 4, strerror: Interrupted system call的可能性。此更改修复了 #15541。#15557(alexey-milovidov)。 - 修复在发起端不存在该数据库时,使用
IN和 Distributed 表的查询中出现的Database <db> does not exist.错误。#15538(Artem Zuikov)。 - 在执行
MOVE或REPLACE PARTITION后,或者在极少数情况下执行DETACH或DROP PARTITION后,mutation 可能会因为等待某个不存在的 part 而一直卡住。此问题已修复。 #15537 (tavplubix). - 修复一个错误:当执行使用相同模式的
LIKE后,ILIKE运算符变为区分大小写的问题。 #15536 (alesapin)。 - 修复在选择数据中不存在的列时出现的
Missing columns错误,这些列依赖于其他同样不存在于数据中的列。修复了 #15530。#15532(alesapin)。 - 当仅向 ReplicatedMergeTree 传入一个参数时抛出错误,而不是忽略该参数。#15516 (nvartolomei)。
- 修复
DDLWorker中事件订阅的 Bug,该问题在极少数情况下可能导致ON CLUSTER查询挂起。此问题引入于 #13450。#15477(alesapin)。 - 当
boundingRatio聚合函数的第二个参数类型错误时,会正确报告错误信息。#15407 (detailyang)。 - 修复 #15365:使用 MySQL 引擎执行 ATTACH 数据库操作时抛出异常(因缺少查询上下文)。#15384(Winter Zhang)。
- 修复在
SELECT查询中多次使用列转换器时的处理问题。 #15378 (Amos Bird)。 - 修复了
S3存储中的压缩。#15376(Vladimir Chebotarev)。 - 修复一个错误:执行
SELECT toStartOfDay(today())等查询时,会因为 time_zone 参数为空而失败。 #15319 (Bharat Nallan). - 修复在重命名 MergeTree 表以及后台清理过程中出现的竞态条件。#15304 (alesapin).
- 修复在启用系统日志时,服务器启动期间出现的罕见竞态条件。 #15300 (alesapin).
- 修复了在对同一
MySQL引擎表包含大量子查询时导致查询挂起的问题。此前,如果一个查询中对同一MySQL表的子查询数量超过 16 个,查询会一直挂起。#15299(Anton Popov)。 - 修复 QueryLog 中的 MSan 报告。字段
memory_usage可能会使用未初始化的内存。#15258 (alexey-milovidov)。 - 修复在对 Merge 表执行包含 JOIN 的查询时,GROUP BY 中出现 'Unknown identifier' 错误的问题。 #15242 (Artem Zuikov).
- 修复在使用
joinGet配合LowCardinality类型时导致实例崩溃的问题。已修复 #15214。 #15220(Amos Bird)。 - 修复表引擎
Buffer中的一个 bug,该 bug 会导致在执行ALTER查询后无法向Buffer插入具有新结构的数据。修复了 #15117。#15192(alesapin)。 - 在 MySQL 列定义报文中调整 Decimal 字段大小。 #15152 (maqroll).
- 修复了在
join_algorithm='auto'中出现的Data compressed with different methods错误。在join_algorithm='partial_merge'中保持左表连接键的数据类型为 LowCardinality。 #15088 (Artem Zuikov). - 更新
jemalloc,使用亲和性掩码修复percpu_arena。#15035 (Azat Khuzhin)。#14957 (Azat Khuzhin)。 - 我们已经在 String 和 FixedString 之间使用了填充比较(https://github.com/ClickHouse/ClickHouse/blob/master/src/Functions/FunctionsComparison.h#L333)。此 PR 将相同的逻辑应用于字段比较,从而纠正了将 FixedString 用作主键时的使用方式。此更改修复了 #14908。#15033(Amos Bird)。
- 如果以精心构造的参数调用函数
bar,可能会发生缓冲区溢出。此更改修复了 #13926。#15028(alexey-milovidov)。 - 修复了在 macOS 上通过 Docker 运行 clickhouse-server 时,在 Atomic 数据库中执行 DDL 查询语句时出现的
Cannot rename ... errno: 22, strerror: Invalid argument错误。#15024(tavplubix)。 - 修复在使用
join_algorith='auto'的 RIGHT 或 FULL JOIN 时,当内存超出限制且需要将 HashJoin 替换为 MergeJoin 时发生的崩溃。#15002 (Artem Zuikov)。 - 现在,设置项
number_of_free_entries_in_pool_to_execute_mutation和number_of_free_entries_in_pool_to_lower_max_size_of_merge可以设置为与background_pool_size相同的值。#14975(alesapin)。 - 修复了在子查询包含
finalizeAggregation函数时谓词下推无法生效的问题。修复了 #14847。#14937(filimonov)。 - 按逻辑 CPU 核心在
system.asynchronous_metrics中公开 CPU 频率。这修复了 #14923。#14924(Alexander Kuzmenkov)。 MaterializeMySQL(实验功能):修复.metadata.tmp File exists错误。#14898 (Winter Zhang).- 修复了在某些调用
extractAllGroups函数时可能触发 “Memory limit exceeded” 错误的问题。此修复对应 #13383。#14889(alexey-milovidov)。 - 修复在尝试使用文件描述符向 StorageFile 执行 INSERT 时发生的 SIGSEGV。 #14887 (Azat Khuzhin).
- 修复了
cache字典中的段错误问题 #14837。#14879(Nikita Mikhaylov)。 MaterializeMySQL(实验性特性):修复了在解析 MySQL binlog 事件时的一个问题,该问题会在MaterializeMySQL数据库引擎中导致Attempt to read after EOF和Packet payload is not fully read错误。#14852 (Winter Zhang)。- 修复
SELECT查询中的一个罕见错误:当被查询的列具有依赖于另一列的DEFAULT表达式,而该另一列同样定义了DEFAULT,且既未出现在查询中也不存在于磁盘上时,会触发此错误。部分修复 #14531。#14845(alesapin)。 - 修复了一个问题:当需要从 ZooKeeper 获取配置文件(使用
from_zkinclude 选项)时,服务器在启动过程中与 ZooKeeper 通信可能会卡住。此修复解决了 #14814。#14843(Alexander Kuzmenkov)。 - 修复在对带符号类型执行收缩式
Int -> Int类型转换时的错误单调性检测。该问题可能导致查询结果不正确。此缺陷在 #14513 中被发现。#14783(Amos Bird)。 Replace列转换器应使用克隆后的 AST 来替换标识符。这修复了 #14695。#14734(Amos Bird)。- 修复在执行
ALTER ... MODIFY QUERY时,物化视图元数据中默认数据库名称缺失的问题。#14664 (tavplubix). - 修复在
ALTER UPDATE变更操作中,当赋值表达式包含Nullable列且使用常量值(例如UPDATE x = 42)时,会导致列中出现错误值或触发段错误(segfault)的问题。修复了 #13634、#14045。#14646(alesapin)。 - 修复由于结果列的小数位数(scale)设置错误而导致的 Decimal 乘法结果不正确的问题。 #14603 (Artem Zuikov).
- 修复在
Nullable类型的LowCardinality上使用has函数的问题。 #14591 (Mike). - 在为 StorageReplicatedMergeTree 引擎执行 CreateQuery 时,如果发生 Zookeeper 异常,则清理数据目录。#14563(Bharat Nallan)。
- 修复带有组合器
-Resample的函数中的罕见段错误,该问题可能在使用非常大的参数导致溢出时被触发。#14562 (Anton Popov). - 修复了在将
Nullable(String)转换为 Enum 时出现的一个 bug。该问题由 #12745 引入,本次修复解决了 #14435。#14530(Amos Bird)。 - 修正了
Nullable列的错误排序顺序,解决了 #14344。#14495(Nikita Mikhaylov)。 - 修复
currentDatabase()函数无法在ON CLUSTERDDL 查询中使用的问题。#14211 (Winter Zhang)。 MaterializeMySQL(实验性功能):修复了MaterializeMySQL数据库引擎中的Packet payload is not fully read错误。#14696(BohuTANG)。
改进
- 为新建数据库默认启用
Atomic数据库引擎。#15003(tavplubix)。 - 添加对为具有子类型的列指定专用编码(如
Delta、T64等)的支持。实现了 #12551,修复了 #11397 和 #4609。#15089(alesapin)。 - ZooKeeper 配置的动态重新加载。 #14678 (sundyli).
- 现在,无论集群配置中的
<internal_replication>如何设置,都允许执行ALTER ... ON CLUSTER查询。#16075 (alesapin)。 - 现在
joinGet支持多键查找。延续自 #12418。#13015(Amos Bird)。 - 在
Atomic数据库中,如果为DROP/DETACH TABLE指定了NO DELAY或SYNC,则会等待该操作真正完成。#15448 (tavplubix)。 - 现在可以通过
ALTER查询更改VersionedCollapsingMergeTree的版本列类型。#15442(alesapin)。 - 在创建副本表时,在
zookeeper_path中展开{database}、{table}和{uuid}宏。如果在服务器重启后可能导致zookeeper_path出错,则不允许执行RENAME TABLE。修复 #6917。#15348(tavplubix)。 - 函数
now现在允许带有时区的参数。这解决了 15264 问题。#15285(flynn)。 - 在执行完
/docker-entrypoint-initdb.d/中的所有脚本之前,不允许与 ClickHouse 服务器建立连接。#15244 (Aleksei Kozharin)。 - 在
EXPLAIN PLAN查询中新增了optimize设置。若启用,将在查询计划层面应用优化。默认开启。#15201 (Nikolai Kochetov)。 - 为 CAST 参数个数不正确的情况提供了合适的异常消息。此更改关闭了 #13992。#15029(alexey-milovidov)。
- 新增选项,可在插入数据部分时禁用 TTL 移动。#15000(Pavel Kovalenko)。
- 在执行 mutation 时忽略键约束。没有这个 PR,当
force_index_by_date = 1或force_primary_key = 1时将无法执行 mutation。#14973 (Amos Bird)。 - 允许在前一次删除尝试因 ZooKeeper 会话过期而失败后删除 Replicated 表。此更改修复了 #11891。#14926(alexey-milovidov)。
- 修复了在分布式表上运行带 SETTINGS 子句的 SELECT 时错误触发设置约束违规的问题。 #14876 (Amos Bird).
- 提供
load_balancing_first_offset查询设置项,以明确指定第一个副本是哪一个。它与FIRST_OR_RANDOM负载均衡策略配合使用,从而控制各副本的工作负载。#14867(Amos Bird)。 - 在
EXPLAIN结果中显示SET和JOIN的子查询。#14856 (Nikolai Kochetov). - 允许在
Distributed存储中使用多卷存储配置。#14839(Pavel Kovalenko)。 - 基于同一个 timespec 构造
query_start_time和query_start_time_microseconds。#14831 (Bharat Nallan)。 - 支持禁用
StorageJoin和StorageSet的持久化,该功能通过设置disable_set_and_join_persistency来控制。此 PR 解决了问题 #6318。#14776(vxider)。 - 现在可以使用
COLUMNS包裹一组列,并在其后对这些列应用列转换器。 #14775 (Amos Bird). - 在
system.merges表中添加merge_algorithm,以改进对合并操作的检查。#14705 (Amos Bird)。 - 修复由 ZooKeeper exists 监听导致的潜在内存泄漏。#14693 (hustnn).
- 允许并行执行分布式 DDL。 #14684 (Azat Khuzhin).
- 添加
QueryMemoryLimitExceeded事件计数器。解决了 #14589。#14647(fastio)。 - 修复查询格式中的一些尾随空白字符。#14595(Azat Khuzhin)。
- ClickHouse 对 partition expr 和 key expr 的处理方式不同。Partition expr 用于构造包含相关列的 minmax 索引,而 primary key expr 则作为表达式存储。有时用户会在较粗粒度上对表进行分区,比如使用
partition by i / 1000。然而,二元运算符并不是单调的,而这个 PR 试图修复这一问题,也可能对其他使用场景有所帮助。#14513(Amos Bird)。 - 为
DiskS3添加跳过访问检查的选项。s3磁盘是一个实验性功能。#14497(Pavel Kovalenko)。 - 在存在正在进行的 S3 请求时,加快服务器关闭速度。#14496 (Pavel Kovalenko).
SYSTEM RELOAD CONFIG现在如果重新加载失败会抛出异常,并继续使用原先的 users.xml。后台的周期性重新加载如果失败也会继续使用原先的 users.xml。#14492(Vitaly Baranov)。- 在
clickhouse-client的脚本模式中,对于使用 VALUES 格式内联数据的 INSERT 语句,除换行符外,现在还支持使用分号作为数据结束符。关闭 #12288。#13192(Alexander Kuzmenkov)。 - 在 compact parts 中支持自定义编解码器。#12183 (Anton Popov)。
性能改进
- 默认为小数据部分启用 compact parts。这将使频繁插入的处理效率提升(约 4 到 100 倍)。#11913(alexey-milovidov)。
- 提升
quantileTDigest的性能。这修复了 #2668。#15542(Kruglov Pavel)。 - 大幅降低 AggregatingInOrderTransform/optimize_aggregation_in_order 的内存使用。#15543(Azat Khuzhin)。
- 提升 256 位乘法的速度。#15418(Artem Zuikov)。
- 通过使用 (u)int64_t 作为宽整数的基础类型提升 256 位类型的性能。原先的宽整数使用 8 位类型作为基础。#14859(Artem Zuikov)。
- 显式使用临时磁盘存储纵向合并的临时数据。#15639(Grigory Pervakov)。
- 使用单个 S3 DeleteObjects 请求替代循环中多个 DeleteObject 请求。没有任何功能性变更,因此可由现有测试(如 integration/test_log_family_s3)覆盖。#15238(ianton-ru)。
- 修复
DateTime <op> DateTime错误选择较慢通用实现的问题。这修复了 #15153。#15178(Amos Bird)。 - 提升
FixedString类型作为 GROUP BY 键时的性能。#15034(Amos Bird)。 - 在启动 clickhouse-server 时只对代码段执行
mlock。在之前的版本中,所有映射区域都会锁定在内存中,包括调试信息。调试信息通常被拆分到单独文件中,但如果没有拆分,会额外导致 2–3 GiB 的内存占用。#14929(alexey-milovidov)。 - 由于启用了链接时优化(link time optimization),ClickHouse 二进制文件体积进一步减小。
构建/测试/打包改进
- 现在我们使用 clang-11 来构建生产环境中的 ClickHouse。#15239 (alesapin)。
- 现在我们在 CI 中使用 clang-11 构建 ClickHouse。#14846(alesapin)。
- 将二进制构建(Linux、Darwin、AArch64、FreeDSD)改为使用 clang-11 进行编译。 #15622 (Ilya Yatsishin).
- 现在所有测试镜像都使用
llvm-symbolizer-11。#15069 (alesapin)。 - 支持使用 llvm-11 进行构建。 #15366 (alexey-milovidov).
- 将
clang-tidy-10改为使用clang-tidy-11。#14922(alexey-milovidov)。 - 默认使用 LLVM 的实验性 Pass 管理器。#15608 (Danila Kutenin)。
- 不允许任何 C++ 翻译单元的构建耗时超过 10 分钟或占用内存超过 10 GB。此更改修复了 #14925。 #15060(alexey-milovidov)。
- 通过将测试运行与性能分析运行拆分,使性能测试更加稳定且更具代表性。 #15027 (alexey-milovidov).
- 尝试让性能测试更加可靠。通过在进程运行时动态使用
madvise将可执行内存重新映射为透明大页来实现 —— 这可以减少 iTLB 未命中次数,而这正是性能测试不稳定性的主要原因。#14685 (alexey-milovidov)。 - 转换为 Python 3,关闭 #14886。#15007(Azat Khuzhin)。
- 在功能测试中,如果服务器未能响应,则尽早使测试失败。此更改关闭了 #15262。#15267(alexey-milovidov)。
- 支持在没有配置文件的情况下运行 AArch64 版本的 clickhouse-server。这方便了对 #15174 的处理。#15266(alexey-milovidov)。
- 改进 CI Docker 镜像:移除 ZooKeeper,使用单一脚本安装测试配置。 #15215 (alesapin).
- 修复快速测试脚本中 CMake 选项传递的问题。修复了 #14711 中的错误。#15155(alesapin)。
- 添加了一个脚本,通过单个命令即可进行硬件基准测试。 #15115 (alexey-milovidov).
- 将大型测试
test_dictionaries_all_layouts_and_sources拆分为多个较小的测试。#15110 (Nikita Mikhaylov)。 - 可能修复了在带有 AVX-512 的服务器上 base64 中的 MSan 报告问题。修复了 #14006。#15030(alexey-milovidov)。
- 在所有集成测试 *.py 文件中对代码进行重新格式化和清理。 #14864 (Bharat Nallan).
- 修复在 CI 中发现的 MaterializeMySQL 空事务不稳定的测试用例。#14854(Winter Zhang)。
- 尝试稍微加快构建速度。#14808 (alexey-milovidov)。
- 通过移除未使用的头文件,略微提升构建速度。 #14714 (alexey-milovidov).
- 修复 OSX 上的构建失败问题。#14761(Winter Zhang)。
- 如果在操作系统中找到 ccache,则在 CMake 中默认启用它。 #14575 (alesapin).
- 在 ClickHouse 仓库中管理 CI 构建配置。#14547 (alesapin)。
- 在 CMake 文件中: - 将部分选项描述移到了上方的注释中。 - 在
option的默认值中,将 0 替换为OFF,1 替换为ON。 - 为这些选项补充了一些描述和指向文档的链接。 - 替换了FUZZER选项(已有另一个选项ENABLE_FUZZING,它也启用相同的功能)。 - 移除了ENABLE_GTEST_LIBRARY选项,因为已经有ENABLE_TESTS。 完整说明详见 PR: #14711(Mike)。 - 将二进制体积再缩小一些(调试版本约 50 MB)。#14555 (Artem Zuikov)。
- 在 ConfigProcessor 中使用 std::filesystem::path 连接文件路径。#14558 (Bharat Nallan).
- 修复在使用负大整数调用
bitShiftLeft()时触发的调试断言问题。 #14697 (Artem Zuikov).
ClickHouse 发布 20.9
ClickHouse v20.9.7.11-stable 发布,2020-12-07
性能改进
- 修复了在大量
MergeTree表之上构建的Merge表的读取性能问题。修复 #7748。#16988(Anton Popov)。
Bug 修复
- 在禁用
in_memory_parts_enable_wal时,不再从 WAL 中恢复数据分片。#17802 (detailyang)。 - 修复了在向
Distributed表插入数据时因空间不足而导致的段错误问题。#17737 (tavplubix). - 修复了 ClickHouse 无法重新建立与 MySQL 服务器连接的问题。 #17681 (Alexander Kazakov).
- 修复了在 Windows Subsystem for Linux 上运行 ClickHouse 时,在
Atomic数据库中执行RENAME查询出现的Function not implemented错误。修复 #17661。#17664(tavplubix)。 - 在交互模式下使用 clickhouse-client 执行多行查询时,单行注释会被错误地扩展到整个查询的末尾。该修复解决了 #13654。#17565(alexey-milovidov)。
- 修复在极少数情况下服务器可能会停止接受连接请求的问题。 #17542 (alexey-milovidov).
- 修复当对应的 mutation 在其他副本上被终止时导致
ALTER查询挂起的问题。修复了 #16953。#17499(alesapin)。 - 修复 ClickHouse 低估 mark 缓存大小的问题。当存在大量带有 mark 的小文件时,可能会出现该问题。#17496 (alesapin)。
- 修复在启用设置
optimize_redundant_functions_in_order_by时的ORDER BY行为。 #17471 (Anton Popov)。 - 修复由于错误优化导致在
DISTINCT之后可能出现的重复数据。修复了 #17294。#17296(li chengxiang)。#17439(Nikolai Kochetov)。 - 修复从带有
LowCardinality类型的JOIN表读取数据时发生的崩溃,对应修复了 #17228。 #17397(Nikolai Kochetov)。 - 修复当子查询中存在常量列时
set索引失效的问题。此修复对应 #17246。#17249(Amos Bird)。 - 修复 ColumnConst 比较导致的崩溃问题。该修复解决了 #17088。#17135(Amos Bird)。
- 修复了在执行
CREATE TABLE ... AS some_table查询且some_table是通过AS table_function()创建时发生的崩溃问题,解决了 #16944。#17072(tavplubix)。 - 修复
fuzzBits函数中的缺陷,相关 issue:#16980。#17051(hexiaoting)。 - 避免在执行过程中可能被取消的远程查询(例如带有
LIMIT子句的查询)中出现不必要的网络错误。 #17006 (Azat Khuzhin). - TODO。 #16866 (tavplubix).
- 通过 MySQL 协议对 INSERT 查询返回受影响的行数。此前 ClickHouse 一直返回 0,现已修复。修复 #16605。#16715(Winter Zhang)。
构建/测试/打包改进
ClickHouse 发布 v20.9.6.14-stable,2020-11-20
改进
- 支持连接到需要 SNI 的
clickhouse-server安全端点。当clickhouse-server部署在 TLS 代理之后时可以使用该功能。#16938(filimonov)。 - 条件聚合函数(例如:
avgIf、sumIf、maxIf)在没有匹配行且参数为可空类型时应返回NULL。#13964(Winter Zhang)。
错误修复
- 修复在非 leader 副本上的 ReplicatedMergeTree 表执行
ON CLUSTER查询可能永远挂起的错误。#17089(alesapin)。 - 在发生错误时重新解析
format_avro_schema_registry_url的 IP。#16985(filimonov)。 - 修复在执行
ALTER TABLE ... MODIFY COLUMN ... NewType之后,当SELECT对正在修改的列包含WHERE表达式且表结构变更尚未完成时可能导致服务器崩溃的问题。#16968(Amos Bird)。 - 安装脚本应始终在配置文件夹中创建子目录。这仅与使用自定义配置的 Docker 构建相关。#16936(filimonov)。
- 修复在包含
ORDER BY的查询中可能出现的Illegal type of argument错误。修复 #16580。#16928(Nikolai Kochetov)。 - 如果没有数据写入 WriteBufferFromS3,则中止分段上传(multipart upload)。#16840(Pavel Kovalenko)。
- 修复在不带任何参数使用
any时发生的崩溃。这针对 #16803,cc @azat。#16826(Amos Bird)。 - 修复在启用
transform_null_in设置时,多列和元组上的IN运算符的行为。修复 #15310。#16722(Anton Popov)。 - 修复在
max_threads>0且ORDER BY中存在表达式时,optimize_read_in_order/optimize_aggregation_in_order的问题。#16637(Azat Khuzhin)。 - 修复 #16574 和 #16231,解决在使用带
if后缀的聚合函数时远程查询失败的问题。#16610(Winter Zhang)。 - 在出现异常时更快结束查询。如果发生异常,则取消在远程副本上的执行。#15578(Azat Khuzhin)。
ClickHouse 发布 v20.9.5.5-stable,2020-11-13
Bug Fix
- 修复在开启查询分析器且 ClickHouse 安装在使用 glibc 某个版本的操作系统上时出现的罕见静默崩溃问题,该版本的 glibc(据推测)在某些函数的异步展开表上存在损坏。修复了 #15301。修复了 #13098。#16846(alexey-milovidov)。
- 现在在从输入解析 AVRO 数据时,会从类型中移除 LowCardinality。修复了 #16188。#16521(Mike)。
- 修复在使用 MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL 引擎,并在 MySQL Slave 上启用
slave_parallel_worker时元数据快速增长的问题,通过正确收缩 GTID 集来解决。修复了 #15951。#16504(TCeason)。 - 修复 Distributed 表的 DROP TABLE 与 INSERT 存在竞争条件的问题。#16409(Azat Khuzhin)。
- 修复在复制队列中处理非常大的记录时的问题。如果表结构极其庞大(接近 1 MB),则在 ALTER 查询中可能会出现非常大的记录。修复了 #16307。#16332(alexey-milovidov)。
- 修复一处不一致行为:当用于过滤的集合未被创建时,返回数据的部分结果可能会被丢弃。#16308(Nikita Mikhaylov)。
- 修复与 MySQL 数据库相关的 bug。当作为数据库引擎的 MySQL 服务器宕机时,一些查询会抛出异常,因为它们尝试从已停用的服务器获取表,而这并非必要。例如,查询
SELECT ... FROM system.parts只应处理 MergeTree 表,完全不应访问 MySQL 数据库。#16032(Kruglov Pavel)。
ClickHouse 发布 v20.9.4.76-stable(2020-10-29)
Bug Fix
- 修复在函数
dictGet中发生异常时出现的 double free 问题。如果字典在加载时发生错误,就有可能触发该问题。#16429 (Nikolai Kochetov)。 - 修复在使用 totals/rollup/cube 修饰符并对 GROUP BY 键应用 min/max 函数时的 GROUP BY 行为。修复了 #16393。#16397(Anton Popov)。
- 修复在
prefer_localhost_replica=0且启用internal_replication时异步 DistributedINSERT的问题。#16358 (Azat Khuzhin). - 修复了 TwoLevelStringHashTable 实现中一段严重错误的代码,可能会导致内存泄漏。我很惊讶这个 bug 居然一直没被发现…… #16264 (Amos Bird).
- 修复了在不受限制约束的情况下可能发生内存过量分配的问题。关联问题:#14560。关联拉取请求:#16206(alexey-milovidov)。
- 修复在
ReplicatedVersionedCollapsingMergeTree中执行ALTER MODIFY ... ORDER BY查询时出现的挂起问题。对应修复:#15980。#16011(alesapin)。 - 修复 COLLATE 名称和字符集名称的解析,并为字符串类型支持
length = 0。#16008 (Winter Zhang). - 允许在具有复杂键的字典中使用 direct 布局。 #16007 (Anton Popov).
- 在空闲一段时间后发生复制错误时,防止副本挂起 5–10 分钟。 #15987 (filimonov).
- 修复在向 MaterializedView 插入数据或从中查询数据的同时并发删除其目标表时出现的罕见段错误(适用于 Atomic 数据库引擎)。#15984 (tavplubix).
- 修复设置配置文件解析中的歧义:
CREATE USER ... SETTINGS profile readonly现在被解释为使用名为readonly的配置文件,而不是名为profile且带有 readonly 约束的设置。此更改修复了 #15628。#15982(Vitaly Baranov)。 - 修复在创建数据库失败时发生的崩溃。#15954 (Winter Zhang)。
- 修复了在并发重命名表时(针对 Atomic 数据库引擎),
DROP TABLE IF EXISTS失败并报错Table ... does not exist的问题。修复了在对多个表并发执行某些 DDL 查询(如DROP DATABASE和RENAME TABLE)时出现的罕见死锁问题。修复了在并发执行DROP/DETACH TABLE时,DROP/DETACH DATABASE失败并报错Table ... does not exist的问题。#15934 (tavplubix)。 - 修复了从
Distributed表执行包含WHERE、PREWHERE和GLOBAL IN的查询时错误返回空结果的问题。修复了 #15792。#15933(Nikolai Kochetov)。 - 修复 RBAC 中潜在的死锁问题。#15875 (Vitaly Baranov).
- 修复在执行
ALTER MODIFY COLUMN查询之后再执行SELECT ... ORDER BY DESC查询时会出现的异常Block structure mismatch。此更改修复了 #15800。#15852(alesapin)。 - 修复 MaterializeMySQL 中
select count()结果不准确的问题。 #15767 (tavplubix)。 - 修复了某些仅选择虚拟列的查询。此前可能会抛出
Not found column _nothing in block异常。修复了 #12298。#15756(Anton Popov)。 - 修正了
max_replicated_logs_to_keep设置的默认值过低的问题,这可能会导致副本过于频繁丢失。通过选择最新的副本作为克隆源,改进了丢失副本的恢复过程。同时,对于丢失副本中的旧 part,不再删除,而是将其分离(detach)。#15701 (tavplubix). - 修复在从与目标表结构不同的
Buffer表读取数据时发生的错误Cannot add simple transform to empty Pipe。当目标表对查询返回空结果时,可能会出现此问题。修复了 #15529。#15662(Nikolai Kochetov)。 - 修复了 S3 表函数中使用通配符的错误:从 URL 解析出的区域未应用到 S3 客户端配置中。#15646(Vladimir Chebotarev)。
- 在分离只读表时将
ReadonlyReplica指标减一。修复了 #15598。#15592(sundyli)。 - 当仅向 ReplicatedMergeTree 传递单个参数时抛出错误,而不是忽略该参数。#15516 (nvartolomei).
改进
- 现在允许执行
ALTER ... ON CLUSTER查询,而不受集群配置中<internal_replication>设置的影响。#16075 (alesapin)。 - 在创建表时,会在
ReplicatedMergeTree参数中展开{database}、{table}和{uuid}宏。#16160 (tavplubix)。
ClickHouse 发布 v20.9.3.45-stable (2020-10-09)
Bug 修复
- 修复在向
MATERIALIZED VIEW插入数据且MV的查询中包含ARRAY JOIN时可能出现的Cannot find column错误。 #15717 (Nikolai Kochetov). - 修复 AMQP-CPP 中的竞态条件。#15667 (alesapin)。
- 修复查询计划中
ReadFromStorage步骤的资源析构顺序。在极少数情况下,这可能会导致崩溃。可能与 #15610 相关。#15645(Nikolai Kochetov)。 - 修复了在
VALUES、LIMIT或IN运算符右侧使用JSON*函数的结果时出现的Element ... is not a constant expression错误。#15589 (tavplubix). - 避免出现错误消息
Could not calculate available disk space (statvfs), errno: 4, strerror: Interrupted system call。此更改修复了 #15541。#15557 (alexey-milovidov)。 - 大幅减少 AggregatingInOrderTransform/optimize_aggregation_in_order 的内存占用。#15543 (Azat Khuzhin).
- 在执行
MOVE或REPLACE PARTITION后,变更可能会在等待某个不存在的数据分片时挂起;在极少数情况下,此问题也可能在执行DETACH或DROP PARTITION后出现。该问题已修复。#15537 (tavplubix). - 修复一个 bug:在执行了使用相同模式的
LIKE之后,ILIKE运算符不再大小写不敏感(变为区分大小写)的问题。 #15536 (alesapin). - 修复在选择数据中不存在的列且其依赖的其他列也同样不存在时出现的
Missing columns错误。修复了 #15530。#15532(alesapin)。 - 修复
DDLWorker中的事件订阅问题,该问题在极少数情况下可能导致ON CLUSTER查询挂起。问题引入于 #13450。#15477(alesapin)。 - 当
boundingRatio聚合函数的第二个参数类型不正确时,能够正确报告错误。 #15407 (detailyang). - 修复在执行
SELECT toStartOfDay(today())等查询时,由于 time_zone 参数为空而报错导致查询失败的问题。#15319(Bharat Nallan)。 - 修复在重命名 MergeTree 表和后台清理期间出现的竞态条件。#15304 (alesapin)。
- 修复在启用 system.logs 时,服务器启动过程中可能出现的罕见竞争条件。#15300 (alesapin)。
- 修复 QueryLog 中的 MSan 报告。字段
memory_usage可能会读取未初始化的内存。#15258 (alexey-milovidov). - 修复在使用 joinGet 配合 LowCardinality 类型时导致实例崩溃的问题。修复了 #15214。#15220(Amos Bird)。
- 修复表引擎
Buffer中的一个 Bug,该 Bug 会导致在执行ALTER查询后,无法向Buffer插入具有新结构的数据。修复了 #15117。#15192(alesapin)。 - 调整 MySQL 列定义报文中的 decimals 字段长度。 #15152 (maqroll).
- 修复了在 macOS 上通过 Docker 运行 clickhouse-server 时,在 Atomic 数据库中执行 DDL 查询会出现
Cannot rename ... errno: 22, strerror: Invalid argument错误的问题。#15024(tavplubix)。 - 修复了当子查询包含 finalizeAggregation 函数时谓词下推不起作用的问题。修复 #14847。#14937(filimonov)。
- 修复了一个问题:当配置文件需要通过
from_zkinclude 选项从 ZooKeeper 获取时,服务器在启动时与 ZooKeeper 通信可能会卡住。此修复对应 #14814。#14843(Alexander Kuzmenkov)。
改进
ClickHouse 发布版本 v20.9.2.20,2020-09-22
向后不兼容变更
- 从早于 20.5 的版本升级时,如果执行滚动更新,并且集群同时包含 20.5 或更高版本以及低于 20.5 的版本,那么在重启旧版本的 ClickHouse 节点、并且在存在较新版本节点的情况下启动旧版本时,可能会导致
Part ... intersects previous part错误。为防止出现此错误,应先在集群的所有节点上安装较新的 clickhouse-server 软件包,然后再执行重启(即当 clickhouse-server 被重启时,它将以新版本启动)。
新功能
- 新增列转换器
EXCEPT、REPLACE、APPLY,可应用于所选列列表(在*或COLUMNS(...)之后)。例如,可以编写SELECT * EXCEPT(URL) REPLACE(number + 1 AS number)。另一个示例:select * apply(length) apply(max) from wide_string_table,用于找出所有字符串列的最大长度。 #14233 (Amos Bird). - 新增聚合函数
rankCorr,用于计算秩相关系数。 #11769 (antikvist) #14411 (Nikita Mikhaylov). - 新增表函数
view,可将子查询转换为一个表对象。这有助于在不同位置传递查询。例如,它可以用于 remote/cluster 表函数中。 #12567 (Amos Bird).
Bug 修复
- 修复在
ALTER UPDATE变更中,当赋值表达式中包含 Nullable 列且使用常量值(例如UPDATE x = 42)时,可能导致列中写入错误值或触发段错误的问题。修复了 #13634、#14045。#14646(alesapin)。 - 修复由于结果列的小数位数错误而导致的 Decimal 乘法结果错误。#14603(Artem Zuikov)。
- 修复了
Nullable列排序顺序错误的问题。此更改修复了 #14344。#14495(Nikita Mikhaylov)。 - 修复了在索引分析时,当主键类型为
FixedString且与更短的字符串进行比较时出现的不一致比较行为。修复了问题 #14908。#15033(Amos Bird)。 - 修复当表包含仅有单个 part 的分区时会导致合并任务分配错误的 bug。 #14444 (alesapin).
- 如果使用精心构造的参数调用函数
bar,可能会发生缓冲区溢出。此更改修复了 #13926。#15028(alexey-milovidov)。 - 在
system.asynchronous_metrics中发布每个逻辑核心的 CPU 频率。修复了 #14923。#14924(Alexander Kuzmenkov)。 - 修复在使用
MaterializeMySQL数据库引擎时出现的.metadata.tmp File exists错误。#14898(Winter Zhang)。 - 修复在某些情况下调用
extractAllGroups函数可能触发 “Memory limit exceeded” 错误的问题。此修复解决了问题 #13383。#14889(alexey-milovidov)。 - 修复在尝试对 StorageFile(fd) 执行 INSERT 时发生的 SIGSEGV。 #14887 (Azat Khuzhin).
- 修复在执行
SELECT查询时出现的一种罕见错误:当被查询的列带有依赖于另一列的DEFAULT表达式,而该另一列同样带有DEFAULT,且既未出现在SELECT查询中,也不存在于磁盘上时,会触发该错误。部分修复 #14531。#14845(alesapin)。 - 修复了对缩窄的有符号类型
Int -> Int转换的单调性检测错误,这可能导致查询结果错误。该缺陷在 #14513 中被揭示。#14783(Amos Bird)。 - 修复在执行
ALTER ... MODIFY QUERY时,物化视图元数据中缺失默认数据库名称的问题。#14664 (tavplubix). - 修复在涉及 LowCardinality 和 Nullable 类型时,函数
has可能产生不正确结果的问题。 #14591 (Mike). - 在对使用 ReplicatedMergeTree 引擎的表执行 CREATE 查询期间,如遇 ZooKeeper 异常,将清理数据目录。#14563 (Bharat Nallan)。
- 修复在带有组合器
-Resample的函数中出现的罕见段错误问题,该问题可能在参数非常大导致溢出时被触发。#14562(Anton Popov)。 - 在
topK聚合函数中检查数组大小是否溢出。如果没有这个检查,用户可能会发送带有精心构造参数的查询,从而导致服务器崩溃。这解决了 #14452。#14467(alexey-milovidov)。 - 将 SysVinit 的 restart/start/stop/reload 操作代理到 systemd(如果使用 systemd)。 #14460 (Azat Khuzhin).
- 在
PipelineExecutor内部发生异常时,停止查询执行。这可以防止在极少数情况下出现查询挂起。#14334 #14402 (Nikolai Kochetov). - 修复了对使用
AS table_function创建的表执行ALTER查询时发生的崩溃。对应问题 #14212 的修复: #14326(alesapin)。 - 修复在使用 REFRESH 命令的 ALTER LIVE VIEW 查询中出现的异常。LIVE VIEW 仍为实验性特性。#14320 (Bharat Nallan)。
- 修复在对具有嵌套解释器的查询执行 EXPLAIN PIPELINE graph=1 时的 QueryPlan 生命周期。 #14315 (Azat Khuzhin).
- 为 SSD 缓存复杂键外部字典增加元组大小检查。修复了 #13981。#14313(alexey-milovidov)。
- 不允许在
ALIAS列类型上使用CODEC。修复了 #13911。#14263(Bharat Nallan)。 - 修复在非全局级别执行
GRANT ALL语句时的问题。#13987 (Vitaly Baranov)。 - 修复在 lambda 中捕获 arrayJoin() 时的问题(此前会抛出带有逻辑错误信息的异常)。 #13792 (Azat Khuzhin).
实验性功能
- 添加了
db-generator工具,用于根据给定的 SELECT 查询随机生成数据库。当用户只提供了不完整的缺陷报告时,它可以帮助复现问题。#14442 (Nikita Mikhaylov) #10973 (ZeDRoman)。
改进
- 允许在 Distributed 存储引擎中使用多卷存储配置。#14839 (Pavel Kovalenko)。
- 禁止在
toStartOf*类型的函数中使用空的time_zone参数。#14509 (Bharat Nallan)。 - MySQL 处理器对于
SET @@var = value这类查询返回OK,但会忽略该语句。之所以需要这样做,是因为某些 MySQL 驱动在握手之后会发送SET @@查询用于初始化设置:https://github.com/ClickHouse/ClickHouse/issues/9336#issuecomment-686222422 。#14469 (BohuTANG)。 - 现在如果 TTL 之前尚未物化,在合并期间会应用 TTL。#14438 (alesapin)。
- 现在
clickhouse-obfuscator按照 #13163 的提议支持 UUID 类型。#14409 (dimarub2000)。 - 按照 #11384 的提议,新增设置
system_events_show_zero_values。#14404 (dimarub2000)。 - 在
MaterializeMySQL中将主键隐式转换为NOT NULL(与MySQL相同)。修复 #14114。#14397 (Winter Zhang)。 - 将 boost multiprecision 中的宽整数(256 位)替换为来自 https://github.com/cerevra/int 的实现。256 位整数仍为实验特性。#14229 (Artem Zuikov)。
- 为
system.part_log中的 part 添加名为default_compression_codec的默认压缩编解码器。#14116 (alesapin)。 - 为
DateTime类型添加精度参数。这样就可以使用DateTime名称来替代DateTime64。#13761 (Winter Zhang)。 - 为
Redis外部字典添加 requirepass 授权。#13688 (Ivan Torgashov)。 - 改进
RabbitMQ引擎:增加了连接与通道故障处理、正确的提交、插入失败处理、改进的交换器、更好的队列持久化和队列恢复能力,以及新的队列设置。修复了相关测试。#12761 (Kseniia Sumarokova)。 - 在紧凑 part 中支持自定义编解码器。#12183 (Anton Popov)。
性能改进
- 使用 LIMIT/LIMIT BY/ORDER BY 优化带有 GROUP BY sharding_key 的分布式查询(在
optimize_skip_unused_shards和optimize_distributed_group_by_sharding_key下)。#10373 (Azat Khuzhin). - 并行为多个
JOIN和IN创建集合。这可以对包含多个不同IN subquery表达式的查询带来轻微的性能提升。#14412 (Nikolai Kochetov). - 通过为每个消费者提供独立线程来提升 Kafka 引擎性能。为流式引擎(如 Kafka)提供单独的线程池。#13939 (fastio).
构建/测试/打包改进
- 通过从
Functions中移除调试信息,减小调试构建的二进制文件大小。这仅对 Yandex 中使用非常老旧链接器的一个内部项目是必需的。#14549 (alexey-milovidov). - 为使用 clang 11 进行构建做准备。#14455 (alexey-milovidov).
- 修复 backport 脚本中的逻辑。在先前版本中,它会对任何 100% 红色的 label 触发,这很奇怪。#14433 (alexey-milovidov).
- 集成测试使用默认基础配置。所有配置更改都通过 main_configs、user_configs 和 dictionaries 参数等显式指定。#13647 (Ilya Yatsishin).
ClickHouse 发行版 20.8
ClickHouse 发行版 v20.8.12.2-lts,2021-01-16
Bug 修复
- 修复带一元函数和 Nullable 类型的 *If 组合器。 #18806 (Azat Khuzhin).
- 限制从宽格式分片合并到紧凑格式分片。在垂直合并时会导致结果分片损坏。 #18381 (Anton Popov).
ClickHouse 发行版 v20.8.11.17-lts,2020-12-25
Bug 修复
- 在合并期间禁用使用 AIO 的写入,因为这在极少数情况下可能会在合并时导致主键列数据损坏。 #18481 (alesapin).
- 修复在对类型为
Nullable(String)的参数执行toType(...)函数(toDate、toUInt32等)时出现的value is too short错误。现在此类函数在解析错误时会返回NULL,而不是抛出异常。修复了 #7673。 #18445 (tavplubix). - 修复在使用两级聚合时,带有
Distinct组合器的聚合函数中可能发生的崩溃。修复了 #17682。 #18365 (Anton Popov).
ClickHouse 发行版 v20.8.10.13-lts,2020-12-24
Bug 修复
- 当使用
logger.size参数并将其设置为大于 2^32 的数值来配置服务器日志轮转时,日志不会被正确轮转。#17905(Alexander Kuzmenkov)。 - 修复了在 MergeTreeWriterSettings 中使用
min_compress_block_size对max_compress_block_size进行不正确初始化的问题。#17833 (flynn)。 - 修复了 ClickHouse 在无法重新连接 MySQL 服务器时的问题。#17681 (Alexander Kazakov).
- 修复了在其他副本上对应的 mutation 被 kill 时导致
ALTER查询挂起的问题。此修复关闭了 #16953。#17499(alesapin)。 - 修复了一个 ClickHouse 低估标记缓存大小的问题。当存在大量带有标记的小文件时,可能会触发该问题。 #17496 (alesapin).
- 修复了在启用设置
optimize_redundant_functions_in_order_by时ORDER BY的问题。 #17471 (Anton Popov)。 - 修复了会导致崩溃的
ColumnConst比较问题,解决了 #17088。#17135(Amos Bird)。 - 修复了一个问题:在非主节点上的 ReplicatedMergeTree 表执行
ON CLUSTER查询时,查询可能会一直挂起。 #17089 (alesapin). - 避免在执行过程中可能被取消的远程查询(例如包含
LIMIT的查询)产生不必要的网络错误。#17006 (Azat Khuzhin)。 - 若发生错误,则重新解析
format_avro_schema_registry_url的 IP 地址。#16985 (filimonov)。 - 修复了在执行
ALTER TABLE ... MODIFY COLUMN ... NewType期间,如果有针对正在修改列且带有WHERE条件的SELECT查询,并且该ALTER尚未完成时可能导致服务器崩溃的问题。#16968 (Amos Bird)。 - 安装脚本应始终在配置目录中创建子目录。此更改仅与使用自定义配置的 Docker 构建相关。#16936 (filimonov)。
- 修复了在包含
ORDER BY的查询中可能出现的Illegal type of argument错误。修复了 #16580。#16928(Nikolai Kochetov)。 - 如果未向 WriteBufferFromS3 写入任何数据,则中止多部分(multipart)上传。 #16840 (Pavel Kovalenko).
- 修复了在不带任何参数的情况下使用
any时发生的崩溃。已修复 #16803。#16826(Amos Bird)。 - 修复在启用
transform_null_in设置时,多列和元组上使用IN运算符的问题。修复了 #15310。#16722(Anton Popov)。 - 修复了在
max_threads > 0且 ORDER BY 中包含表达式时,optimize_read_in_order/optimize_aggregation_in_order的行为不一致的问题。#16637 (Azat Khuzhin). - 修复了当查询包含
ARRAY JOIN时,查询优化会产生错误的结果的问题。#17887 (sundyli). - 在发生异常时更快结束查询;同时在出现异常时取消在远程副本上的执行。 #15578 (Azat Khuzhin).
ClickHouse 发布 v20.8.6.6-lts,2020-11-13
Bug 修复
- 修复在启用 query profiler 且 ClickHouse 安装在某些 glibc 版本(被认为在某些函数的异步展开表上存在缺陷)的操作系统上时出现的罕见静默崩溃问题。修复了 #15301。修复了 #13098。#16846(alexey-milovidov)。
- 现在在从输入解析 AVRO 时,会从类型中移除 LowCardinality。修复了 #16188。#16521(Mike)。
- 修复在使用 MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL 引擎并在 MySQL Slave 上启用
slave_parallel_worker时元数据快速膨胀的问题,通过正确收缩 GTID 集合予以解决。修复了 #15951。#16504(TCeason)。 - 修复 Distributed 表执行 DROP TABLE 时的问题(与 INSERT 存在竞争条件)。#16409(Azat Khuzhin)。
- 修复在复制队列中处理超大记录时的问题。如果表结构极其庞大(接近 1 MB),这些超大记录可能会出现在 ALTER 查询中。修复了 #16307。#16332(alexey-milovidov)。
- 修复一种不一致的行为:由于用于过滤的集合未被创建,导致返回数据的一部分可能被丢弃。#16308(Nikita Mikhaylov)。
- 修复 MySQL 数据库相关的 bug。当作为数据库引擎使用的 MySQL 服务器宕机时,一些查询会抛出 Exception,因为它们尝试从已禁用的服务器获取表,而这是不必要的。比如,查询
SELECT ... FROM system.parts只应处理 MergeTree 表,完全不应访问 MySQL 数据库。#16032(Kruglov Pavel)。
ClickHouse 发布 v20.8.5.45-lts,2020-10-29
Bug 修复
- 修复在函数
dictGet出现异常时可能发生的 double free 问题。如果在加载字典时发生错误,就可能触发该问题。#16429 (Nikolai Kochetov). - 修复了在带有 totals/rollup/cube 修饰符的 GROUP BY 中,对分组键使用 min/max 函数时的行为。修复了 #16393。#16397(Anton Popov)。
- 修复在
prefer_localhost_replica=0且internal_replication条件下的异步 Distributed 表INSERT。 #16358 (Azat Khuzhin). - 修复在使用字符串键进行
GROUP BY时可能出现的内存泄漏问题,该问题是由TwoLevelStringHashTable实现中的错误引起的。#16264 (Amos Bird). - 修复了在忽略限制的情况下可能导致内存被过度分配的问题。此更改关闭了 #14560。#16206 (alexey-milovidov)。
- 修复了在
ReplicatedVersionedCollapsingMergeTree中执行ALTER MODIFY ... ORDER BY查询时出现的挂起问题。修复了 #15980。#16011(alesapin)。 - 修复排序规则名和字符集名解析器,并支持字符串类型的
length = 0。#16008 (Winter Zhang). - 支持在包含复杂键的字典中使用直接布局。 #16007 (Anton Popov).
- 在经过一段时间无活动后发生复制错误时,避免副本挂起长达 5–10 分钟。 #15987 (filimonov).
- 修复在对 MaterializedView 执行插入或查询操作的同时并发删除其目标表时偶发出现的段错误(适用于 Atomic 数据库引擎)。 #15984 (tavplubix).
- 修复了设置配置文件解析中的歧义:
CREATE USER ... SETTINGS profile readonly现在被理解为使用名为readonly的配置文件,而不是一个名为profile且带有readonly约束的设置。此更改修复了 #15628。#15982(Vitaly Baranov)。 - 修复在创建数据库失败时出现的崩溃。#15954 (Winter Zhang)。
- 修复了在并发重命名表时(针对 Atomic 数据库引擎),
DROP TABLE IF EXISTS因Table ... does not exist错误而失败的问题。修复了在并发对多个表执行某些 DDL 查询(例如DROP DATABASE和RENAME TABLE)时出现的罕见死锁问题。修复了在并发执行DROP/DETACH TABLE时,DROP/DETACH DATABASE因Table ... does not exist而失败的问题。 #15934 (tavplubix). - 修复了针对
Distributed表的查询在包含WHERE、PREWHERE和GLOBAL IN时返回不正确空结果的问题。修复 #15792。#15933(Nikolai Kochetov)。 - 修复 RBAC 中潜在的死锁问题。 #15875 (Vitaly Baranov).
- 修复在执行
ALTER MODIFY COLUMN查询之后再执行SELECT ... ORDER BY DESC查询时可能出现的异常Block structure mismatch。修复了 #15800。#15852(alesapin)。 - 修复了部分仅选择虚拟列的查询。在此前的版本中,这类查询可能会抛出
Not found column _nothing in block异常。修复了 #12298。#15756(Anton Popov)。 - 修复在向
MATERIALIZED VIEW插入数据时可能出现的Cannot find column错误,该错误可能在用于MV的查询包含ARRAY JOIN时发生。 #15717 (Nikolai Kochetov). - 修复了
max_replicated_logs_to_keep设置默认值过低的问题,该问题可能导致副本过于频繁地丢失。通过选择最新的副本进行克隆,改进丢失副本的恢复流程。此外,不再从丢失副本中移除旧的 part,而是将其分离(detach)。#15701 (tavplubix)。 - 修复在从与目标表结构不同的
Buffer表读取时可能出现的错误Cannot add simple transform to empty Pipe。当目标表对查询返回空结果时会触发该问题。修复了 #15529。#15662(Nikolai Kochetov)。 - 修复了
S3表函数中使用通配符(glob)时的错误:从URL中解析的区域未应用到S3客户端配置中。#15646 (Vladimir Chebotarev)。 - 在分离只读表时将
ReadonlyReplica指标减一。此更改修复了 #15598。#15592(sundyli)。 - 当仅向 ReplicatedMergeTree 传递单个参数时,不再忽略该参数,而是抛出错误。#15516 (nvartolomei)。
改进
- 现在无论集群配置中的
<internal_replication>设置为何,都允许执行ALTER ... ON CLUSTER查询。 #16075 (alesapin). - 在创建表时,会在
ReplicatedMergeTree参数中展开{database}、{table}和{uuid}宏。 #16159 (tavplubix).
ClickHouse 版本 v20.8.4.11-lts,2020-10-09
Bug 修复
- 修复查询计划中
ReadFromStorage步骤的资源销毁顺序。这在极少数情况下可能会导致崩溃。可能与 #15610 相关。#15645(Nikolai Kochetov)。 - 修复了在
VALUES、LIMIT或IN运算符右侧使用JSON*函数的结果时出现的Element ... is not a constant expression错误。#15589(tavplubix)。 - 防止出现错误消息
Could not calculate available disk space (statvfs), errno: 4, strerror: Interrupted system call。此更改修复了 #15541。#15557(alexey-milovidov)。 - 显著降低 AggregatingInOrderTransform/optimize_aggregation_in_order 时的内存使用。#15543 (Azat Khuzhin).
- 在执行
MOVE或REPLACE PARTITION之后,以及在少数情况下执行DETACH或DROP PARTITION之后,变更(mutation)可能会因为等待某个不存在的数据分片而一直挂起。该问题已修复。 #15537 (tavplubix). - 修复一个错误:当执行了具有相同模式的
LIKE之后,ILIKE运算符不再保持大小写不敏感。 #15536 (alesapin). - 修复在选择数据中不存在的列,但这些列依赖的其他列也不存在于数据中时出现的
Missing columns错误。修复了 #15530。#15532(alesapin)。 - 修复
DDLWorker中事件订阅的缺陷,该缺陷在极少数情况下可能导致ON CLUSTER查询挂起。此问题引入于 #13450。#15477(alesapin)。 - 当
boundingRatio聚合函数的第二个参数类型错误时,正确报错。 #15407 (detailyang). - 修复在重命名 MergeTree 表和执行后台清理时的竞态条件。 #15304 (alesapin).
- 修复在启用 system.logs 时服务器启动过程中的罕见竞态条件。#15300 (alesapin).
- 修复 QueryLog 中的 MSan 报告。
memory_usage字段可能会使用未初始化的内存。#15258 (alexey-milovidov)。 - 修复在使用 joinGet 结合 LowCardinality 类型时实例崩溃的问题。该问题对应的修复为 #15214。#15220(Amos Bird)。
- 修复了表引擎
Buffer中的一个错误,该错误会在执行ALTER查询后阻止向Buffer中插入具有新结构的数据。问题 #15117 已修复。#15192(alesapin)。 - 在 MySQL 列定义报文中调整小数位数字段大小。 #15152 (maqroll).
- 我们已经在
String和FixedString之间使用了补齐比较(https://github.com/ClickHouse/ClickHouse/blob/master/src/Functions/FunctionsComparison.h#L333)。此 PR 将相同的逻辑应用到字段比较中,从而修正了将FixedString作为主键时的行为。该修改修复了 #14908。#15033(Amos Bird)。 - 如果使用特定构造的参数调用函数
bar,可能会发生缓冲区溢出。本次修复关闭了 #13926。#15028(alexey-milovidov)。 - 修复了在 macOS 上通过 Docker 运行 clickhouse-server 时,在 Atomic 数据库中执行 DDL 查询会出现的
Cannot rename ... errno: 22, strerror: Invalid argument错误。#15024(tavplubix)。 - 现在,
number_of_free_entries_in_pool_to_execute_mutation和number_of_free_entries_in_pool_to_lower_max_size_of_merge可以设置为与background_pool_size相同的值。#14975(alesapin)。 - 修复了当子查询包含
finalizeAggregation函数时谓词下推无法生效的问题。修复了 #14847。#14937(filimonov)。 - 在
system.asynchronous_metrics中按逻辑 CPU 核心发布 CPU 频率。修复了 #14923。#14924(Alexander Kuzmenkov)。 - 修复在使用
MaterializeMySQL数据库引擎时出现的.metadata.tmp File exists错误。#14898(Winter Zhang)。 - 修复了一个问题:当需要从 ZooKeeper 获取配置文件(使用
from_zkinclude 选项)时,服务器在启动过程中与 ZooKeeper 通信可能会卡死。本次修复解决了 #14814。#14843(Alexander Kuzmenkov)。 - 修复对缩窄的有符号类型
Int -> Int转换的单调性检测错误。该问题可能导致查询结果不正确。该 bug 在 #14513 中被揭示。#14783(Amos Bird)。 - 修正了
Nullable列的错误排序顺序,从而解决了 #14344。#14495(Nikita Mikhaylov)。
改进
ClickHouse 版本 v20.8.3.18-stable,2020-09-18
Bug 修复
- 修复了在某些调用
extractAllGroups函数时可能触发“Memory limit exceeded”错误的问题。修复了 #13383。#14889(alexey-milovidov)。 - 修复尝试向 StorageFile(fd) 执行 INSERT 时出现的 SIGSEGV(段错误)。#14887(Azat Khuzhin)。
- 修复了
SELECT查询中的一个罕见错误:当被查询的列具有DEFAULT表达式,且该表达式依赖于另一列,而该依赖列同样具有DEFAULT、未出现在 select 查询中且磁盘上不存在时,会触发该错误。部分修复 #14531。#14845(alesapin)。 - 修复在执行
ALTER ... MODIFY QUERY时,物化视图元数据中缺失默认数据库名的问题。#14664(tavplubix)。 - 修复
ALTER UPDATE变更在赋值表达式中使用 Nullable 列并赋常量值(如UPDATE x = 42)时,会导致列中值不正确或发生段错误的问题。修复了 #13634、#14045。#14646(alesapin)。 - 修复了由于结果列的小数位数(scale)错误而导致 Decimal 乘法结果错误的问题。#14603(Artem Zuikov)。
- 添加了检查逻辑,因为调用
lc->isNullable()或ls->getDictionaryPtr()->isNullable()都不会返回正确的结果。#14591(myrrc)。 - 在 StorageReplicatedMergeTree 引擎的 CreateQuery 过程中发生 Zookeeper 异常时,清理数据目录。#14563(Bharat Nallan)。
- 修复带有组合器 -Resample 的函数中的罕见段错误,该问题可能在使用非常大的参数导致溢出的情况下出现。#14562(Anton Popov)。
改进
- 在存在正在进行的 S3 请求时,加速服务器关闭过程。#14858(Pavel Kovalenko)。
- 允许在 Distributed 存储中使用多卷存储配置。#14839(Pavel Kovalenko)。
- 在存在正在进行的 S3 请求时,加速服务器关闭过程。#14496(Pavel Kovalenko)。
- 在 compact parts 中支持自定义编解码器。#12183(Anton Popov)。
ClickHouse 版本 v20.8.2.3-stable,2020-09-08
向后不兼容的变更
- 现在,
OPTIMIZE FINAL查询不会为在创建 TTL 之前添加的 part 重新计算 TTL。请先使用一次ALTER TABLE ... MATERIALIZE TTL来为这些 part 计算 TTL,之后OPTIMIZE FINAL将会正确评估 TTL。对于 replicated 表,这种行为从未生效过。#14220 (alesapin)。 - 扩展
parallel_distributed_insert_select设置,增加一个向本地表执行INSERT的选项。该设置的类型从Bool改为UInt64,因此不再支持false和true值。如果在服务器配置中使用了这些值,服务器将无法启动。请分别将它们替换为0和1。#14060 (Azat Khuzhin)。 - 移除对
ODBCDriver输入/输出格式的支持。该格式已被标记为弃用,曾用于与 ClickHouse ODBC 驱动进行通信,现在早已被ODBCDriver2格式取代。修复了 #13629。#13847 (hexiaoting)。 - 当从早于 20.5 的版本升级时,如果执行滚动更新,且集群中同时包含大于等于 20.5 和小于 20.5 的版本,那么如果带有旧版本的 ClickHouse 节点被重启,并且在存在新版本节点的情况下启动了旧版本,可能会导致
Part ... intersects previous part错误。为防止此错误,请先在集群的所有节点上安装较新的 clickhouse-server 软件包,然后再进行重启(这样,当 clickhouse-server 被重启时,将会以新版本启动)。
新特性
- 为与
config.xml中指定设置相对应的列,新增将压缩编解码器指定为Default的功能。实现:#9074。#14049(alesapin)。 - 在 Kafka 中支持使用
krb5和cyrus-sasl库进行 Kerberos 认证。#12771(Ilya Golshtein)。 - 新增函数
normalizeQuery,用于将字面量、字面量序列以及复杂别名替换为占位符。新增函数normalizedQueryHash,为相似查询返回相同的 64 位哈希值。这有助于分析查询日志。修复了 #11271。#13816(alexey-milovidov)。 - 新增
time_zones表。#13880(Bharat Nallan)。 - 新增函数
defaultValueOfTypeName,返回给定类型的默认值。#13877(hcz)。 - 新增
countDigits(x)函数,用于统计整数或 Decimal 列中的十进制数字个数。新增isDecimalOverflow(d, [p])函数,用于检查 Decimal 列中的值是否超出其(或指定的)精度。#14151(Artem Zuikov)。 - 新增
quantileExactLow和quantileExactHigh的实现,并新增相应的别名medianExactLow和medianExactHigh。#13818(Bharat Nallan)。 - 新增
date_trunc函数,用于将日期/时间值截断到指定的日期/时间部分。#13888(Vladimir Golovchenko)。 - 在主配置中新增可选的
<user_directories>部分。#13425(Vitaly Baranov)。 - 新增
ALTER SAMPLE BY语句,允许修改表的 sample 子句。#13280(Amos Bird)。 - 函数
position现在支持可选参数start_pos。#13237(vdimir)。
Bug 修复
- 修复在交互模式下客户端中进度条覆盖可见数据的问题。此修复解决了 #12562、#13369、#13584 以及 #12964 的问题。#13691(alexey-milovidov)。
- 修复了在按多列排序时
LowCardinality列排序顺序不正确的问题。此修复对应 #13958。#14223(Nikita Mikhaylov)。 - 在
topK聚合函数中检查数组大小是否溢出。缺少此检查时,用户可以发送带有精心构造参数的查询,从而导致服务器崩溃。此更改解决了 #14452。#14467(alexey-milovidov)。 - 修复了一个 bug:当表中存在仅包含单个 part 的分区时,可能会导致合并任务被错误分配。#14444 (alesapin)。
- 如果在
PipelineExecutor本身发生异常,则停止查询执行。这可以防止在极少数情况下出现查询挂起问题。是对 #14334 的延续。#14402 #14334 (Nikolai Kochetov)。 - 修复了对使用
AS table_function创建的表执行ALTER查询时发生的崩溃问题。修复了 #14212。#14326(alesapin)。 - 修复在执行包含 REFRESH 命令的 ALTER LIVE VIEW 查询时发生的异常。Live View 是一项实验性功能。#14320(Bharat Nallan)。
- 修复在
EXPLAIN PIPELINE graph=1中,带有嵌套 interpreter 的查询的QueryPlan生命周期管理问题。 #14315 (Azat Khuzhin). - 修复
clickhouse-odbc-bridge在从某些外部数据源获取 schema 的过程中发生的段错误。此 PR 修复了 #13861。#14267(Vitaly Baranov)。 - 修复了在标记包含搜索中由 #12277 引入的崩溃。 #14225(Amos Bird)。
- 修复带命名元组的表的创建。修复了 #13027。#14143(alexey-milovidov)。
- 修复幅度最小的负十进制数的格式化问题。此更改修复了 #14111。#14119(Alexander Kuzmenkov)。
- 修复
DistributedFilesToInsert指标(在本不应被清零时却被清零)。 #14095 (Azat Khuzhin). - 修复在使用 const 二维数组作为多边形时的
pointInPolygon。#14079 (Alexey Ilyukhov)。 - 修复了
Poco::Exception: no space left on device额外信息中挂载点错误的问题。 #14050 (tavplubix). - 修复在非全局级别执行 GRANT ALL 语句时的问题。#13987 (Vitaly Baranov)。
- 修复解析器,使其在遇到带有
ENGINE的CREATE TABLE AS TABLE FUNCTION语句时予以拒绝。#13940 (hcz)。 - 在启用
optimize_duplicate_order_by_and_distinct设置的情况下,修复了在包含DISTINCT关键字的SELECT查询以及带有UNION ALL的子查询中产生错误结果的问题。#13925 (Artem Zuikov). - 修复了重命名
Distributed表时的潜在死锁。 #13922 (tavplubix). - 修复在按多列排序时
FixedString列排序不正确的问题。修复了 #13182。#13887(Nikolai Kochetov)。 - 修复在合并使用非默认参数的
topK/topKWeighted时结果可能不精确的问题。#13817 (Azat Khuzhin). - 修复从具有 SET 类型索引的 MergeTree 表读取数据时,与 NULL 比较会失败的问题。此修复解决了 #13686。#13793(Amos Bird)。
- 修复在 lambda 中捕获
arrayJoin导致的 LOGICAL_ERROR。 #13792 (Azat Khuzhin). - 在函数
range中添加步长溢出检查。#13790(Azat Khuzhin)。 - 修复了并发执行
DROP DATABASE和CREATE TABLE时出现的Directory not empty错误。#13756 (alexey-milovidov). - 为
h3KRing函数添加了范围检查。修复了 #13633。#13752(alexey-milovidov)。 - 修复了
DETACH与后台合并之间的竞态条件,避免数据分片在分离后被“复活”。这是对 #8602 的延续,该改动当时并未真正修复问题,而是引入了一个测试,该测试在极少数情况下会开始失败,从而暴露出这一问题。#13746(alexey-milovidov)。 - 修复在
log_queries_min_type>QUERY_START时日志中Settings.Names/Values的记录。 #13737 (Azat Khuzhin). - 修复在 verbose=1 时
/replicas_status端点返回的状态码。#13722 (javi santana). - 修复
clickhouse-server.init在检查用户和用户组时输出的错误提示信息。#13711 (ylchou). - 在启用
optimize_move_functions_out_of_any设置时,不要将 any(arrayJoin()) 优化为 arrayJoin()。 #13681 (Azat Khuzhin)。 - 修复在使用 StorageMerge 的 JOIN 且将
enable_optimize_predicate_expression设置为 1 时发生的崩溃。#13679(Artem Zuikov)。 - 修复错误消息中关于
The value of 'number_of_free_entries_in_pool_to_lower_max_size_of_merge' setting的拼写错误。 #13678 (alexey-milovidov). - 并发执行
ALTER ... REPLACE/MOVE PARTITION ...查询可能会导致死锁。该问题已修复。 #13626 (tavplubix). - 修复了缓存字典在应从源返回已存在的值时,有时却返回默认值的问题。#13624(Nikita Mikhaylov)。
- 修复紧凑部件中二级索引损坏的问题。紧凑部件是实验性功能。#13538 (Anton Popov).
- 修复了在必须在单个副本上执行的查询中出现的
ON CLUSTER过早超时问题。修复了 #6704、#7228、#13361、#11884。#13450(alesapin)。 - 修复函数
netloc中的错误代码,从而解决了 #13335。#13446(alexey-milovidov)。 - 修复
StorageMemory中可能存在的竞态条件。 #13416 (Nikolai Kochetov). - 修复 HTTP 协议中
TSV/CSVWithNames格式缺失或多余标题行的问题。此更改修复了 #12504。#13343(Azat Khuzhin)。 - 修复从 users.xml 解析行级策略时,在数据库或表名包含点号时的解析问题。解决了 #5779、#12527。#13199(Vitaly Baranov)。
- 修复在连接曾经中断后对
redis字典的访问问题。此问题可能发生在使用cache和direct字典布局时。#13082 (Anton Popov). - 在使用 ClickHouseDictionarySource 查询远程表时,删除了错误的鉴权访问检查。#12756 (sundyli).
- 在某些情况下正确区分子查询,以支持公共子表达式消除。 #8333。 #8367 (Amos Bird)。
改进
- 不允许在
ALIAS类型的列上使用CODEC。修复了 #13911。#14263(Bharat Nallan)。 - 在等待字典更新完成时,使用
query_wait_timeout_milliseconds设置中指定的超时时间,而不是使用硬编码值。#14105 (Nikita Mikhaylov). - 添加设置
min_index_granularity_bytes,用于防止在无意间创建index_granularity_bytes设置值过低的表。#14139 (Bharat Nallan)。 - 现在可以从使用不同 ZooKeeper 实例的集群中获取分区:
ALTER TABLE table_name FETCH PARTITION partition_expr FROM 'zk-name:/path-in-zookeeper'。这对于将数据迁移到新集群非常有用。#14155(Amos Bird)。 - 如果 Memory 表是由大量非常小的块组成(这种情况不太可能),其性能会略有提升。构思者:Mark Papadakis。关闭了 #14043。#14056(alexey-milovidov)。
- 条件聚合函数(例如:
avgIf、sumIf、maxIf)在没有匹配行且使用可为空参数时应返回NULL。#13964 (Winter Zhang). - 将 -Resample 组合器中的 limit 提高到 1M。 #13947 (Mikhail f. Shiryaev).
- 修复了 AvroConfluent 格式中的一个错误,该错误在接收到异常小且格式损坏的消息时会导致 Kafka 表引擎停止处理消息。#13941 (Gervasio Varela)。
- 修复长查询返回的错误类型不正确的问题。此前对于语法正确的长查询,有可能得到除
Max query size exceeded之外的语法错误。#13928 (Nikolai Kochetov). - 改进了
TabSeparated格式中空值的错误消息。#13906 (jiang tao). - 当数组元素类型为 Float32/Float64 时,函数
arrayCompact将对 NaN 进行按位比较。在之前的版本中,当数组元素类型为 Float32/Float64 时,NaN 总是不相等,而在类型更复杂(例如 Nullable(Float64))时,NaN 又总是相等。此更改解决了 #13857。#13868(alexey-milovidov)。 - 修复
lgamma函数中的数据竞争。该数据竞争仅在tsan中被检测到,实际运行中未产生任何副作用。#13842 (Nikolai Kochetov)。 - 在将数组作为字段进行操作时,为避免出现过慢查询,改为抛出异常。 #13753 (alexey-milovidov).
- 为 Redis 字典源添加了 requirepass 身份验证支持。#13688 (Ivan Torgashov)。
- 添加 MergeTree 预写日志(Write-Ahead-Log,WAL)转储工具。WAL 是实验性功能。#13640 (BohuTANG)。
- 在早期版本中,
lcm函数在使用特别构造的参数调用时,可能会在调试构建中触发断言失败。此更改修复了 #13368。#13510(alexey-milovidov)。 - 在更多情况下为
toDate/toDateTime函数提供单调性信息。单调性信息用于索引分析(更复杂的查询也将能够使用索引)。现在对输入参数的“饱和”处理更加自然,从而带来更好的单调性。#13497(Amos Bird)。 - 为自定义设置支持复合标识符。自定义设置是 ClickHouse 代码库与其他代码库的集成接口(对 ClickHouse 本身没有益处)#13496(Vitaly Baranov)。
- 并行地将数据分片从 DiskLocal 移动到 DiskS3。
DiskS3是一项实验性功能。#13459(Pavel Kovalenko)。 - 默认开启混合粒度 part。 #13449 (alesapin).
- 在 S3 重定向中正确校验远程主机(与安全相关)。#13404 (Vladimir Chebotarev).
- 将
QueryTimeMicroseconds、SelectQueryTimeMicroseconds和InsertQueryTimeMicroseconds添加到 system.events。#13336(ianton-ru)。 - 修复 Decimal 的负指数过大时触发的调试断言问题。修复了 #13188。#13228(alexey-milovidov)。
- 为 DiskS3 增加了缓存层(将标记和索引文件缓存到本地磁盘)。
DiskS3是一个实验性功能。 #13076 (Pavel Kovalenko). - 修复 readline,使其现在会将历史记录写入文件。#13600 (Amos Bird)。
- 默认使用
Atomic引擎创建system数据库(为在全局默认启用Atomic数据库引擎做准备)。 #13680 (tavplubix).
性能改进
- 对使用
LowCardinality的极短查询进行了轻微优化。#14129 (Anton Popov)。 - 当设置了
max_insert_threads时,为表引擎Null、Memory、Distributed和Buffer启用并行 INSERT。#14120 (alexey-milovidov)。 - 在扫描数据片段时,一旦超过
max_rows_to_read限制就立即失败。此更改的动机是:如果可以明确max_rows_to_read已经被超出,则跳过对所有已选数据片段的范围扫描。对于包含大量数据片段的查询,此改动的效果相当明显。#13677 (Roman Khavronenko)。 - 略微提升按 UInt8/UInt16 键进行聚合时的性能。#13099 (alexey-milovidov)。
- 针对
Array(LowCardinality(T))及右侧为常量参数的场景优化has()、indexOf()和countEqual()函数。#12550 (myrrc)。 - 对于简单的
INSERT SELECT查询,自动将max_threads设置为 1 或max_insert_threads,并将max_block_size设置为min_insert_block_size_rows。与 #5907 相关。#12195 (flynn)。
实验特性
- ClickHouse 可以作为 MySQL 副本工作,由
MaterializeMySQL数据库引擎实现。实现了 #4006。#10851 (Winter Zhang)。 - 新增
Int128、Int256、UInt256类型及其相关函数。使用 Decimal256(精度可达 76 位数字)扩展 Decimal 类型。新类型受设置allow_experimental_bigint_types控制。目前性能极其缓慢且表现很差,实现也不完整。请不要使用该特性。#13097 (Artem Zuikov)。
构建/测试/打包改进
- 添加了
clickhouse install脚本,当你只有单个二进制文件时非常有用。 #13528 (alexey-milovidov). - 允许在无配置的情况下运行
clickhouse可执行文件。 #13515 (alexey-milovidov). - 启用使用
codespell对代码中的拼写错误进行检查。#13513 #13511 (alexey-milovidov). - 在 CI 中启用 ShellCheck 作为 .sh 测试的静态检查工具。此更改关闭了 #13168。#13530 #13529(alexey-milovidov)。
- 添加一个 CMake 选项,使在配置失败时终止配置而不是自动重新配置,并默认启用该选项。#13687 (Konstantin)。
- 通过
system.build_options中的TZDATA_VERSION暴露嵌入式 tzdata 的版本。#13648 (filimonov). - 在构建过程中改进
system.time_zones表的生成方式。修复 #14209。#14215(filimonov)。 - 使用软件包仓库中最新的 tzdata 来构建 ClickHouse。 #13623 (alexey-milovidov).
- 在 skip_list.json 中添加对 JS 风格注释的支持。#14159 (alesapin).
- 确保没有拷贝粘贴而来的 GPL 代码。#13514(alexey-milovidov)。
- 将测试 Docker 镜像切换为以 test-base 为父镜像。 #14167 (Ilya Yatsishin).
- 在使用 docker-compose 启动集群时添加重试逻辑,并增加 COMPOSE_HTTP_TIMEOUT。#14112 (vzakaznikov)。
- 在压力测试中启用了
system.text_log,以发现更多 Bug。#13855 (Nikita Mikhaylov). - Testflows LDAP 模块:为 openldap4 补全缺失的证书和 dhparam.pem 文件。#13780 (vzakaznikov).
- ZooKeeper 无法在 CI 环境中的单元测试里可靠工作。从一开始就使用真实的 ZooKeeper 做单元测试来验证与 ZooKeeper 的交互就是一个糟糕的主意(单元测试本就不应该用来验证复杂的分布式系统)。我们已经在为此使用集成测试,而且它们更适合这个目的。#13745 (alexey-milovidov)。
- 添加了用于风格检查的 Docker 镜像。新增了风格检查,以确保所有 Docker 和 Docker Compose 文件都位于 docker 目录中。#13724 (Ilya Yatsishin).
- 修复在 macOS 上构建 Cassandra 的问题。#13708(Ilya Yatsishin)。
- 修复共享构建中的链接错误。#13700 (Amos Bird)。
- 更新 LDAP 用户身份验证套件,以验证其能否与 RBAC 正常配合工作。#13656 (vzakaznikov).
- 为
contrib/aws移除了-DENABLE_CURL_CLIENT。 #13628 (Vladimir Chebotarev). - 增加 ClickHouse 节点的健康检查超时时间,并在发现不健康容器时增加导出 docker-compose 日志的功能。 #13612 (vzakaznikov).
- 确保 #10977 被标记为无效。#13539(Amos Bird)。
- 跳过来自 robot-clickhouse 的 PR。 #13489 (Nikita Mikhaylov).
- 将 Dockerfile 从集成测试中移动到
docker/test目录。docker-compose文件位于runnerDocker 容器中。Docker 镜像在 CI 中构建,而不是在集成测试中构建。#13448 (Ilya Yatsishin)。
ClickHouse 发行版 20.7
ClickHouse 发行版 v20.7.2.30-stable,2020-08-31
向后不兼容的变更
- 当函数
modulo(运算符%)的参数中至少有一个为浮点数时,现在会直接在浮点数上计算除法的余数,而不是将两个参数都转换为整数。这使其行为与大多数 DBMS 保持一致。该行为同样适用于 Date 和 DateTime 数据类型。新增别名mod。修复了 #7323。#12585(alexey-milovidov)。 - 弃用将零值 Date/DateTime 特殊打印为
0000-00-00和0000-00-00 00:00:00的行为。#12442(alexey-milovidov)。 - 函数
groupArrayMoving*之前在分布式查询中无法工作,其结果是在不正确的数据类型下计算的(未提升到最大类型)。函数groupArrayMovingAvg返回的是整数,与avg函数不一致。此变更修复了 #12568。#12622(alexey-milovidov)。 - 为 MergeTree 设置添加合理性检查。如果设置不正确,服务器将拒绝启动或创建表,并向用户输出详细说明。#13153(alexey-milovidov)。
- 防止用户将
background_pool_size设置为小于number_of_free_entries_in_pool_to_execute_mutation或number_of_free_entries_in_pool_to_lower_max_size_of_merge的值。在这些情况下,ALTER 操作将无法工作,或者合并的最大大小会受到严重限制。现在会抛出异常并解释应如何处理。修复了 #10897。#12728(alexey-milovidov)。 - 从早于 20.5 的版本升级时,如果执行滚动更新,并且集群中同时存在大于等于 20.5 和小于 20.5 的版本,当旧版本的 ClickHouse 节点在存在新版本节点的情况下被重启并启动时,可能会导致
Part ... intersects previous part错误。为避免该错误,应先在所有集群节点上安装新版 clickhouse-server 包,然后再执行重启(即在重启 clickhouse-server 时,应已使用新版本启动)。
新功能
- 多边形字典类型,为在包含大量多边形(世界地图)的字典中按照坐标查找区域提供高效的“反向地理编码”查询。它使用经过精心优化的递归网格算法,以保持较低的 CPU 与内存占用。#9278 (achulkov2).
- 为预配置用户添加了 LDAP 认证支持(“Simple Bind” 方法)。#11234 (Denis Glazachev).
- 引入设置
alter_partition_verbose_result,用于在某些ALTER TABLE ... PARTITION ...查询(当前为ATTACH和FREEZE)中输出受影响数据分片的相关信息。修复 #8076。#13017 (alesapin). - 添加了用于贝叶斯 A/B 测试的
bayesAB函数。#12327 (achimbab). - 添加了
system.crash_log表,用于收集致命错误的堆栈跟踪。此表在正常情况下应为空。#12316 (alexey-milovidov). - 添加了 HTTP 头
X-ClickHouse-Database和X-ClickHouse-Format,可用于设置默认数据库与输出格式。#12981 (hcz). - 为
SimpleAggregateFunction添加了对minMap和maxMap函数的支持。#12662 (Ildus Kurbangaliev). - 添加设置
allow_non_metadata_alters,用于限制执行会修改磁盘上数据的ALTER查询。该设置默认禁用。修复 #11547。#12635 (alesapin). - 添加函数
formatRow,用于通过给定格式将任意表达式转换为字符串。在处理 SQL 输出时非常有用,并且与columns函数配合使用时非常灵活。#12574 (Amos Bird). - 添加
FROM_UNIXTIME函数以兼容 MySQL,与 12149 相关。#12484 (flynn). - 当启用
allow_nullable_key表设置时,允许在 MergeTree 表中使用 Nullable 类型作为键。修复 #5319。#12433 (Amos Bird). - 与 COS 集成。#12386 (fastio).
- 添加
mapAdd和mapSubtract函数,用于对按键映射的数值执行加/减运算。#11735 (Ildus Kurbangaliev).
Bug 修复
- 修复对必须在单个副本上执行的查询使用
ON CLUSTER时发生的过早超时问题。修复了 #6704、#7228、#13361、#11884。#13450(alesapin)。 - 修复了在标记包含搜索中由 #12277 引入的崩溃。#14225(Amos Bird)。
- 修复外部字典在使用缓存布局时的竞态条件,该问题可能导致服务器崩溃。 #12566 (alesapin).
- 修复在交互模式下客户端进度条覆盖可见数据的问题。此更改修复了 #12562、#13369、#13584 和 #12964。#13691(alexey-milovidov)。
- 修复了在使用多列 ORDER BY 时,
LowCardinality列排序顺序不正确的问题。此更正修复了 #13958。#14223(Nikita Mikhaylov)。 - 移除了硬编码的超时设置,该设置会错误地覆盖 cache-dictionary 的
query_wait_timeout_milliseconds配置。#14105(Nikita Mikhaylov)。 - 修正了
Poco::Exception: no space left on device的额外信息中错误的挂载点。#14050 (tavplubix). - 修复在启用
optimize_duplicate_order_by_and_distinct设置时,当子查询也包含DISTINCT时,对带有DISTINCT关键字的SELECT查询进行错误优化的问题。 #13925 (Artem Zuikov). - 修复了在重命名
Distributed表时可能发生的死锁问题。#13922(tavplubix)。 - 修复在使用多个列进行 ORDER BY 时
FixedString列排序结果不正确的问题。解决了 #13182。#13887(Nikolai Kochetov)。 - 修复在使用非默认参数时,
topK/topKWeighted聚合可能导致精度降低的问题。 #13817 (Azat Khuzhin). - 修复了从带有 SET 类型索引的 MergeTree 表中读取数据时,与 NULL 比较会失败的问题。此修复解决了 #13686。#13793(Amos Bird)。
- 修复函数
range()中的步长溢出问题。 #13790 (Azat Khuzhin). - 修复了在并发执行
DROP DATABASE和CREATE TABLE时出现的Directory not empty错误。#13756 (alexey-milovidov). - 为
h3KRing函数添加范围检查。这修复了 #13633。#13752(alexey-milovidov)。 - 修复
DETACH与后台合并之间的竞争条件。数据块在分离之后可能会“复活”。这是对 #8602 的后续工作;#8602 并未修复该问题,而是引入了一个测试,该测试在极少数情况下会开始失败,从而暴露出该问题。#13746(alexey-milovidov)。 - 修复在
log_queries_min_type大于QUERY_START时 Settings.Names/Values 日志记录的问题。 #13737 (Azat Khuzhin). - 修复
clickhouse-server.init在检查用户和用户组时输出的不正确消息。#13711 (ylchou). - 在启用
optimize_move_functions_out_of_any时,不要将any(arrayJoin())优化为arrayJoin()。#13681 (Azat Khuzhin)。 - 修复了并发执行
ALTER ... REPLACE/MOVE PARTITION ...查询时可能发生的死锁问题。#13626 (tavplubix). - 修复了
cache-dictionary在某些情况下返回默认值而不是从源返回的实际值的问题。#13624 (Nikita Mikhaylov)。 - 修复紧凑部件中二级索引损坏的问题(紧凑部件是一个实验性特性)。 #13538 (Anton Popov).
- 修复函数
netloc中不正确的代码,从而解决了 #13335。#13446(alexey-milovidov)。 - 修复
parseDateTimeBestEffort函数在传入 Unix 时间戳参数时出现的错误。此修复解决了 #13362。#13441(alexey-milovidov)。 - 修复比较包含
NULL元素的元组时使用的无效返回类型。已修复 #12461。#13420(Nikolai Kochetov)。 - 修复了在使用
SET optimize_move_functions_out_of_any = 1且在any()内部使用别名时,由错误优化导致查询中出现aggregate function any(x) is found inside another aggregate function in query错误的问题。#13419 (Artem Zuikov). - 修复
StorageMemory中可能存在的竞争条件。 #13416 (Nikolai Kochetov). - 修复在查询结果为零行时
Arrow和Parquet格式出现空输出的问题。进行此更改是因为对于这些格式而言,空输出是无效的。#13399 (hcz)。 - 修复在
ORDER BY子句中带有常量列和主键前缀的 SELECT 查询。#13396 (Anton Popov). - 修复了 clickhouse-local 中的
PrettyCompactMonoBlock,以及使用PrettyCompactMonoBlock时的 extremes/totals 处理。修复了 #7746。#13394(Azat Khuzhin)。 - 修复了
system.text_log中的死锁。#12452 (alexey-milovidov)。这是 #12339 的一部分,并修复了 #12325 问题。#13386 (Nikita Mikhaylov)。 - 修复了
File(TSVWithNames*)(表头被多次写入),修复了clickhouse-local --format CSVWithNames*(缺少表头,在 #12197 之后行为异常),修复了零行情况下的clickhouse-local --format CSVWithNames*(缺少表头)。#13343 (Azat Khuzhin)。 - 修复函数
groupArrayMovingSum在反序列化空状态时导致的段错误。修复了 #13339。#13341(alesapin)。 - 在
JOIN ON子句中使用arrayJoin()函数时抛出错误。#13330(Artem Zuikov)。 - 修复在
join_use_nulls=1时发生的LEFT ASOF JOIN崩溃问题。#13291 (Artem Zuikov)。 - 修复在来自延迟副本的查询中可能出现的错误
Totals having transform was already added to pipeline。 #13290 (Nikolai Kochetov). - 如果用户向函数
h3ToChildren传递了特定构造的参数,服务器可能会崩溃。此更改修复了 #13275。#13277(alexey-milovidov)。 - 修复在包含
NaN值的 Float 类型上调用uniqExact、topK、sumDistinct等聚合函数时,可能导致性能较低以及结果略有偏差的问题。该问题还会在调试构建中触发断言。此更改修复了 #12491。#13254(alexey-milovidov)。 - 修复当主键包含带有单调函数的表达式且查询中包含与类型不同的常量进行比较时,
KeyCondition中的断言错误。此修复解决了 #12465。#13251(alexey-milovidov)。 - 对于在函数 roundUpToPowerOfTwoOrZero() 中最高有效位(MSB)已置位的数字,返回传入的数字本身。这样可以防止在数组大小溢出时出现潜在错误。#13234 (Azat Khuzhin)。
- 修复当
if函数的条件为可为空的constexpr且其值不是字面量NULL时的问题。修复了 #12463。#13226(alexey-milovidov)。 - 在数组元素为 Nullable 类型且数组下标也为 Nullable 类型的情况下,修复
arrayElement函数中的断言。此修复对应 #12172。#13224(alexey-milovidov)。 - 修复带常量参数的 DateTime64 转换函数。 #13205 (Azat Khuzhin).
- 修复从 users.xml 解析行策略时在数据库或表名包含点号时的解析问题。修复了 #5779、#12527。#13199(Vitaly Baranov)。
- 修复在连接被中断后对
redis字典的访问问题。该问题可能发生在cache和direct字典布局中。#13082 (Anton Popov)。 - 修复在使用函数时的错误索引分析。这可能导致在从
MergeTree表读取时跳过某些数据分片。修复了 #13060。修复了 #12406。#13081(Anton Popov)。 - 修复远程查询中的错误
Cannot convert column because it is constant but values of constants are different in source and result,该错误会在查询范围内是确定性的、但在不同查询之间并不确定的函数(例如now(),now64(),randConstant())被使用时出现。修复了 #11327。#13075(Nikolai Kochetov)。 - 修复了在使用
ORDER BY元组且LIMIT值较小时可能发生的查询崩溃问题。修复了 #12623。#13009(Nikolai Kochetov)。 - 修复包含
UNION和JOIN的查询中出现Block structure mismatch错误的问题。修复 #12602。#12989(Nikolai Kochetov)。 - 修正了
merge_with_ttl_timeout逻辑,该逻辑在单个时间区间内有多个分区过期时表现不佳。(由 @excitoon 编写)#12982(Alexander Kazakov)。 - 修复通过 DDL 查询创建的范围哈希字典中列重复的问题。该修复解决了 #10605。#12857(alesapin)。
- 修复在本地副本上执行 SELECT 查询时对线程数量的不必要限制。 #12840 (Nikolai Kochetov).
- 修复一个罕见的错误:当在单个 mutation 中同时执行
ALTER DELETE和ALTER MODIFY COLUMN查询时,会导致count.txt中记录的行数不正确,进而导致数据 part 中的数据错误。同时修复一个在同时执行ALTER RENAME COLUMN和ALTER ADD COLUMN时出现的小错误。#12760 (alesapin). - 使用
clickhouse作为字典源查询远程表时会使用错误的凭据。#12756 (sundyli)。 - 修复
CAST(Nullable(String), Enum())。 #12745 (Azat Khuzhin). - 修复在
IN子句中将大型 tuple 解释为函数时的性能问题。指的是在某些情况下,用户出于某种莫名其妙的原因写成WHERE x IN tuple(1, 2, ...),而不是WHERE x IN (1, 2, ...)。#12700 (Anton Popov). - 修复 input_format_parallel_parsing 的内存跟踪(通过将线程绑定到组)。 #12672 (Azat Khuzhin)。
- 修复在存在
any(func(<lambda>))时错误的优化optimize_move_functions_out_of_any=1。 #12664 (Artem Zuikov). - 修复了 #10572 中 Bloom 过滤器索引在使用常量表达式时的问题。#12659(Winter Zhang)。
- 修复当 broker 不可用(以及其他情况)时 StorageKafka 中的 SIGSEGV。 #12658 (Azat Khuzhin).
- 为函数
if添加对Array(UUID)参数的支持,从而修复 #11066。#12648(alexey-milovidov)。 CREATE USER IF NOT EXISTS在用户已存在时不再抛出异常。修复了 #12507。#12646(Vitaly Baranov)。- 在某些意外情况下(例如对 UInt64 列执行减法操作时),
ALTER ... UPDATE可能会抛出异常There is no supertype...。此更改修复了 #7306。此更改修复了 #4165。#12633(alexey-milovidov)。 - 修复在使用外部排序的查询中可能出现的
Pipeline stuck错误,对应问题 #12617、PR #12618(Nikolai Kochetov)。 - 修复
OPTIMIZE DEDUPLICATE中的错误Output of TreeExecutor is not sorted。修复 #11572。#12613(Nikolai Kochetov)。 - 修复在查询优化期间可能导致函数
any结果的别名丢失的问题。#12593 (Anton Popov). - 在执行 DROP TABLE 时删除 Distributed 表中的数据(来自异步 INSERT 的数据块)。 #12556 (Azat Khuzhin).
- 现在,当文件
checksums.txt缺失时,ClickHouse 将为数据片段重新计算校验和。该问题自 #9827 起出现。#12545(alesapin)。 - 修复在
enable_mixed_granularity_parts=1时执行ALTER DELETE查询会导致旧分片损坏的问题。修复 #12536。#12543(alesapin)。 - 修复了 LIVE VIEW 表中的竞态条件,该问题可能导致数据重复。LIVE VIEW 是一个实验性功能。#12519 (vzakaznikov)。
- 修复
AggregateFunction(avg, …)值的二进制格式的向后兼容问题。此修复对应 #12342。#12486(alexey-milovidov)。 - 修复在使用字典进行 JOIN 时,当通过字典键的表达式进行连接时发生的崩溃:
t JOIN dict ON expr(dict.id) = t.id。在这种情况下禁用字典 JOIN 优化。#12458(Artem Zuikov)。 - 修复在指定非常大的 LIMIT 或 OFFSET 时发生的溢出问题。本次更新修复了 #10470 和 #11372。#12427(alexey-milovidov)。
- kafka:修复在批处理中间出现错误消息时发生 SIGSEGV 的问题。 #12302 (Azat Khuzhin).
改进
- 尽量减少在 ZooKeeper 中保存的日志数量。在存在离线副本且服务器 / 表 / 写入操作较多的情况下,避免 ZooKeeper 节点过度增长。#13100 (alexey-milovidov)。
- 现在,如果在执行 ALTER 或 mutation 期间发生错误,将把异常转发给客户端。修复了 #11329。#12666 (alesapin)。
- 将
QueryTimeMicroseconds、SelectQueryTimeMicroseconds和InsertQueryTimeMicroseconds添加到system.events,并在 system.metrics、processes、query_log 等中提供。#13028(ianton-ru)。 - 已在
system.events中新增SelectedRows和SelectedBytes,同时也将它们添加到了system.metrics、processes、query_log等中。#12638 (ianton-ru)。 - 在
system.query_log中添加了current_database信息。#12652(Amos Bird)。 - 允许使用
TabSeparatedRaw作为输入格式。#12009 (hcz)。 - 现在
joinGet支持多键查询。#12418(Amos Bird)。 - 允许
*Map聚合函数处理包含 NULL 的 Array。修复了 #13157。#13225(alexey-milovidov)。 - 避免在解析 DateTime 值时发生溢出,以免在其时区中得到负的 Unix 时间戳(例如莫斯科时区的
1970-01-01 00:00:00)。改为将其饱和为 0。这修复了 #3470。这修复了 #4172。#12443(alexey-milovidov)。 - AvroConfluent:跳过 Kafka 墓碑消息 - 支持跳过损坏的记录 #13203 (Andrew Onyshchuk)。
- 修复长查询返回错误错误类型的问题。对于正确的查询,有可能得到非
Max query size exceeded的语法错误。#13928 (Nikolai Kochetov)。 - 修复
lgamma函数中的数据竞争问题。该竞争仅在tsan中被检测到,实际上没有产生任何副作用。#13842 (Nikolai Kochetov)。 - 修复 ATTACH/ALTER/CREATE QUOTA 语句中 “Week” 时间间隔的格式化问题。 #13417 (vladimir-golovchenko)。
- 现在在处理紧凑分片时,遇到损坏分片也会进行报告。紧凑分片是一个实验性功能。#13282 (Amos Bird)。
- 修复
geohashesInBox中的断言。此更改修复了 #12554。#13229(alexey-milovidov)。 - 修复
parseDateTimeBestEffort中的断言问题。这修复了 #12649。#13227(alexey-milovidov)。 - 在 Processors/PipelineExecutor 中做了一个小优化:在合适的时机跳出循环,因为这样更合理。 #13058 (Mark Papadakis)。
- 支持在
TRUNCATE语句中省略TABLE关键字。#12653 (Winter Zhang). - 修复 explain 查询格式在默认情况下被覆盖的问题。此修复解决了 #12541。#12541(BohuTANG)。
- 允许以更标准的方式指定 JOIN 的种类和类型:可以使用
LEFT SEMI JOIN而不是SEMI LEFT JOIN。目前两种写法均有效。 #12520 (Artem Zuikov). - 将
multiple_joins_rewriter_version的默认值更改为 2。它启用了新的多表连接重写器,该重写器能够识别列名。#12469 (Artem Zuikov)。 - 为针对 S3 存储的请求添加多项指标。 #12464 (ianton-ru).
- 在使用
--secure参数运行 clickhouse-benchmark 时,改为使用正确的默认安全端口,从而修复了 #11044。#12440(alexey-milovidov)。 - 在
Log、TinyLog、StripeLog引擎中对插入错误执行回滚。在之前的版本中,插入错误会导致表状态不一致(这是文档中描述的行为,对这些表引擎来说是正常的)。此变更修复了 #12402。#12426(alexey-milovidov)。 - 为
Atomic数据库引擎实现RENAME DATABASE和RENAME DICTIONARY—— 添加隐式{uuid}宏,可在ReplicatedMergeTree的 ZooKeeper 路径中使用。该宏可与CREATE ... ON CLUSTER ...查询配合工作。将show_table_uuid_in_table_create_query_if_not_nil设置为true即可启用。—— 将ReplicatedMergeTree引擎参数改为可选,默认使用/clickhouse/tables/{uuid}/{shard}/和{replica}。修复并关闭 #12135。—— 若干小修复。—— 这些更改与先前版本的Atomic数据库引擎不向后兼容。之前创建的Atomic数据库必须手动转换为新格式。Atomic 数据库是一个实验性特性。#12343 (tavplubix)。 - 将
AWSAuthV4Signer拆分为独立的 logger,并从日志消息中移除了多余的AWSClient: AWSClient。 #12320 (Vladimir Chebotarev). - 改进磁盘访问存储时的异常信息。 #12625 (alesapin).
- 针对函数
in在参数个数不合法时提供了更好的异常信息。#12529 (Anton Popov)。 - 修复与自适应粒度相关的错误消息。 #12624 (alesapin).
- 修复在 FORMAT 之后解析 SETTINGS 的问题。 #12480 (Azat Khuzhin).
- 如果 MergeTree 表未包含 ORDER BY 或 PARTITION BY,则可以请求执行 ALTER 以 CLEAR 所有列,但 ALTER 会挂起。已修复 #7941。#12382(alexey-milovidov)。
- 避免在每次查询后从历史文件重新加载补全历史(以避免历史记录与其他客户端会话发生重叠)。 #13086 (Azat Khuzhin).
性能改进
- 某些操作的内存使用量最多可降低一半。#12424 (alexey-milovidov)。
- 为匹配精确主键范围的查询优化主键查找。#12277 (Ivan Babrou)。
- 对使用
LowCardinality的非常短查询做了轻微优化。#14129 (Anton Popov)。 - 略微提升按 UInt8/UInt16 键聚合时的性能。#13091 和 #13055 (alexey-milovidov)。
- 在查询计划中(包括子查询内部)下推
LIMIT步骤。#13016 (Nikolai Kochetov)。 - 将各个 part 上的主键查找和跳过索引阶段并行化,如 #11564 中所述。#12589 (Ivan Babrou)。
- 当
set optimize_if_transform_strings_to_enum = 1时,将函数 "if" 和 "transform" 的 String 类型参数转换为枚举类型。#12515 (Artem Zuikov)。 - 当
set optimize_monotonous_functions_in_order_by=1时,在ORDER BY中将单调函数替换为其参数。#12467 (Artem Zuikov)。 - 新增一种 ORDER BY 优化:当
set optimize_redundant_functions_in_order_by = 1时,将ORDER BY x, f(x)重写为ORDER BY x。#12404 (Artem Zuikov)。 - 当子查询包含
WITH子句时,允许谓词下推。这修复了 #12293。#12663 (Winter Zhang)。 - 提升从 compact part 读取时的性能。compact part 是一个实验性特性。#12492 (Anton Popov)。
- 尝试在
DiskS3中实现流式优化。DiskS3 是一个实验性特性。#12434 (Vladimir Chebotarev)。
构建/测试/打包改进
- 使用
shellcheck对 sh 测试脚本进行静态检查(lint)。 #13200 #13207 (alexey-milovidov). - 在 GitHub 钩子中添加一个用于为 pull request 设置标签的脚本。#13183(alesapin)。
- 移除部分递归子模块。参见 #13378。#13379(alexey-milovidov)。
- 确保所有子模块都指向正确的 URL。是对 #13379 的延续。解决了 #13378。#13397(alexey-milovidov)。
- 添加了对用户自定义设置的支持,这些设置可以在查询中访问。当 ClickHouse 引擎被用作其他系统的组件时,需要这一功能。#13013 (Vitaly Baranov).
- 在 TestFlows 中增加了对 INSERT 权限 RBAC 功能的测试。扩展了参与 SELECT 测试的表范围。新增了与新的表引擎测试相匹配的 Requirements。#13340 (MyroTk)。
- 修复在压力测试中服务器重启时出现的超时错误。 #13321 (alesapin).
- 现在 fast test 在等待服务器时会进行重试。#13284 (alesapin)。
- 函数
materialize()(用于 ClickHouse 测试的函数)在处理 NULL 时将按预期工作——会将其转换为非常量列。#13212 (alexey-milovidov)。 - 修复在 AArch64 平台上构建 libunwind 时出现的问题。该修复解决了 #13204。#13208(alexey-milovidov)。
- 在 zkutil gtest 中增加更多重试以减少测试不稳定性。#13165 (alexey-milovidov).
- 对 RBAC TestFlows 进行了些小的修复。#13152 (vzakaznikov)。
- 修复
00960_live_view_watch_events_live.py测试。#13108(vzakaznikov)。 - 改进文档部署脚本中的缓存清理。#13107 (alesapin)。
- 将一些孤立的测试重写为 gtest 测试。从测试中移除了无用的头文件。#13073 (Nikita Mikhaylov).
- 在 TestFlows 中,针对
SELECT权限的 RBAC 功能添加了测试。#13061(Ritaank Tiwari)。 - 在 fast test 检查阶段重新运行了一些测试。 #12992 (alesapin).
- 修复 “rdkafka” 库中的 MSan 错误。此更改关闭了 #12990。将
rdkafka更新到 1.5 版(master 分支)。#12991(alexey-milovidov)。 - 修复在启用 AVX-512 的服务器上运行测试时 base64 中出现的 UBSan 报告。此更改修复了 #12318。作者:@qoega。 #12441(alexey-milovidov)。
- 修复 HDFS 库中的 UBSan 报告问题。此更改关闭了 #12330。#12453(alexey-milovidov)。
- 检查是否可以将旧版本的备份恢复到新版本。此更改关闭了 #8979。 #12959 (alesapin)。
- 不要在集成测试中构建 helper_container 镜像。应在 CI 中构建 Docker 容器,并在集成测试中使用预先构建好的 helper_container。#12953 (Ilya Yatsishin).
- 为涉及主键列的
ALTER TABLE CLEAR COLUMN查询添加测试。#12951(alesapin)。 - 提高了 testflows 测试的超时时间。 #12949 (vzakaznikov).
- 修复在 Mac OS X 下的测试构建。此更改关闭了 #12767。#12772(alexey-milovidov)。
- Connector-ODBC 已更新为 mysql-connector-odbc-8.0.21。#12739 (Ilya Yatsishin)
- 在 TestFlows 中添加 RBAC 语法测试。#12642 (vzakaznikov)。
- 改进 TestKeeper 的性能,从而加快大量使用 Replicated 表的测试。#12505 (alexey-milovidov)。
- 现在我们会检查在运行压力测试之后,服务器是否仍然能够启动。此更改修复了 #12473。#12496(alesapin)。
- 将 fmtlib 更新到 master(7.0.1)。#12446(alexey-milovidov)。
- 添加用于快速测试的 Docker 镜像。#12294 (alesapin).
- 重新设计集成测试的配置路径。#12285 (Ilya Yatsishin)。
- 添加编译器选项,用于限制栈帧大小,避免过大。这将有助于在栈空间较小的 fiber 中运行代码。#11524 (alexey-milovidov)。
- 更新 .gitignore 文件。 #13447 (vladimir-golovchenko).
ClickHouse 20.6 版本
ClickHouse v20.6.3.28-stable 版本
向后不兼容变更
- 从早于 20.5 的版本升级时,如果执行滚动更新,并且集群中同时存在 20.5 及以上版本和 20.5 以下版本的节点,在这种情况下如果重启旧版本的 ClickHouse 节点,并且旧版本在存在新版本的情况下被启动,可能会导致
Part ... intersects previous part错误。为避免该错误,先在所有集群节点上安装新版的 clickhouse-server 软件包,然后再进行重启(也就是说,当 clickhouse-server 被重启时,它将以新版本启动)。
新功能
- 增加了
EXPLAIN查询的初始实现。语法:EXPLAIN SELECT ...。修复了 #1118。#11873(Nikolai Kochetov)。 - 新增
RabbitMQ存储。#11069(Kseniia Sumarokova)。 - 为 #11710 实现了类似 PostgreSQL 的
ILIKE运算符。#12125(Mike)。 - 在
SET join_algorithm = 'partial_merge'下支持 RIGHT 和 FULL JOIN。仅允许 ALL 严格模式(不支持 ANY、SEMI、ANTI、ASOF)。#12118(Artem Zuikov)。 - 新增函数
initializeAggregation,用于基于单个值初始化聚合。#12109(Guillaume Tassery)。 - 支持
ALTER TABLE ... [ADD|MODIFY] COLUMN ... FIRST。#4006。#12073(Winter Zhang)。 - 新增函数
parseDateTimeBestEffortUS。#12028(flynn)。 - 支持输出
ORC格式(之前只支持作为输入格式)。#11662(Kruglov Pavel)。
Bug 修复
- 通过使用
SET optimize_move_functions_out_of_any = 1并在any()中使用别名,修复了查询中出现的aggregate function any(x) is found inside another aggregate function in query错误。#13419(Artem Zuikov)。 - 修复了 clickhouse-local 中的
PrettyCompactMonoBlock,以及其在 extremes/totals 上的问题。此更改修复了 #7746。#13394(Azat Khuzhin)。 - 修复了在从延迟副本执行查询时可能出现的错误
Totals having transform was already added to pipeline。 #13290 (Nikolai Kochetov). - 如果用户向函数
h3ToChildren传递精心构造的参数,服务器可能会崩溃。该修复解决了问题 #13275。#13277(alexey-milovidov)。 - 修复了在包含 NaN 值的 Float 类型上调用
uniqExact、topK、sumDistinct等聚合函数时可能出现的性能较低和结果略有不准确的问题。在调试构建中,这还会触发断言。本次修复解决了 #12491。#13254(alexey-milovidov)。 - 修复了当
if函数的条件是可空的constexpr且该条件不是字面量NULL时的问题。修复了 #12463。#13226(alexey-milovidov)。 - 修复了当数组元素为 Nullable 且数组下标也为 Nullable 时,
arrayElement函数中的断言。此更改修复了 #12172。#13224(alexey-milovidov)。 - 修复了带常量参数的
DateTime64转换函数。 #13205 (Azat Khuzhin). - 修复了涉及函数的索引分析错误。在从
MergeTree表中读取数据时,这可能会导致错误地裁剪数据分片。修复了 #13060。修复了 #12406。#13081(Anton Popov)。 - 修复了在远程查询中使用在单次查询范围内是确定性的、但在不同查询之间并非确定性的函数(例如
now(),now64(),randConstant())时出现的错误:Cannot convert column because it is constant but values of constants are different in source and result。修复了 #11327。#13075 (Nikolai Kochetov)。 - 修复了在从本地副本执行 SELECT 查询时对线程数量施加的不必要限制。#12840 (Nikolai Kochetov)。
- 修复了一个罕见 bug:当将
ALTER DELETE和ALTER MODIFY COLUMN查询作为单个 mutation 同时执行时,会导致count.txt中的行数不正确,从而导致数据片段(part)中的数据错误。同时还修复了在同时执行ALTER RENAME COLUMN和ALTER ADD COLUMN时出现的一个小 bug。#12760 (alesapin)。 - 修复
CAST(Nullable(String), Enum())。 #12745 (Azat Khuzhin). - 修复了在处理大型 tuple 时的性能问题,这些 tuple 在
IN子句中会被解释为函数。也即用户出于某些晦涩原因,将WHERE x IN (1, 2, ...)写成WHERE x IN tuple(1, 2, ...)的情况。#12700(Anton Popov)。 - 通过将线程附加到线程组,修正了
input_format_parallel_parsing的内存跟踪。#12672 (Azat Khuzhin). - 修复了在 const 表达式下的 Bloom 过滤器索引问题。修复了 #10572。#12659(Winter Zhang)。
- 修复了当 broker 不可用(及其他情况)时
StorageKafka中发生的SIGSEGV错误。#12658 (Azat Khuzhin). - 为
if函数增加了对Array(UUID)参数的支持。此更改修复了 #11066。#12648(alexey-milovidov)。 CREATE USER IF NOT EXISTS现在在用户已存在时不会抛出异常。此更改修复了 #12507。#12646(Vitaly Baranov)。- 改进磁盘访问存储中的异常信息。#12625 (alesapin)。
- 函数
groupArrayMoving*在分布式查询中无法正常工作。其结果是使用了错误的数据类型计算的(没有提升到最大的类型)。函数groupArrayMovingAvg返回的是整数,与avg函数的结果不一致。本次修改修复了 #12568。#12622 (alexey-milovidov)。 - 修复了函数
any缺少别名的问题。 #12593 (Anton Popov). - 修复了采用缓存布局的 external dictionaries 中的竞态条件,该问题可能导致服务器崩溃。#12566 (alesapin)。
- 在执行 DROP TABLE 时删除 Distributed 表的数据(来自异步 INSERT 的数据块)。 #12556 (Azat Khuzhin).
- 修复了在
enable_mixed_granularity_parts=1时执行ALTER DELETE查询会导致旧 part 损坏的 bug。修复了 #12536。#12543(alesapin)。 - 改进了函数
in在参数个数不合法时抛出的异常信息。#12529 (Anton Popov). - 修复实时视图表中的竞争条件,该问题可能导致数据重复。#12519(vzakaznikov)。
- 修复了从 compact parts 读取时的性能问题。 #12492 (Anton Popov).
- 修复了
AggregateFunction(avg, ...)值的二进制格式的向后兼容问题。此更改修复了 #12342。#12486(alexey-milovidov)。 - 修复
FORMAT之后解析SETTINGS的问题。 #12480 (Azat Khuzhin). - 修复了在启用
text_log时可能出现的死锁。 #12452 (alexey-milovidov)。 - 修复了在指定非常大的
LIMIT或OFFSET时可能发生的溢出问题。此更改修复了 #10470。此更改修复了 #11372。#12427(alexey-milovidov)。 - 修复了在使用
StorageMerge时可能出现的段错误。此更改修复了 #12054。#12401(tavplubix)。 - 回退了在 #11079 中引入的变更,以解决 #12098 问题。#12397(Mike)。
- 对 Bloom filter 索引参数增加了额外检查。修复了 #11408。#12388(alexey-milovidov)。
- 在对已建立索引的表的 WHERE 条件中使用负数或浮点常量时,避免抛出异常。修复了 #11905。#12384(alexey-milovidov)。
- 即使存在依赖的
DEFAULT表达式,现在也允许对列执行CLEAR操作。修复了 #12333。#12378(alexey-milovidov)。 - 修复在使用
TOTALS/ROLLUP/CUBE时,带有-State和Nullable参数的聚合函数的问题。修复了 #12163 中的问题。#12376(alexey-milovidov)。 - 修正了在不允许使用
RENAME时,ALTER RENAME COLUMN查询的错误信息和退出码。修复了 #12301 和 #12303。#12335(alesapin)。 - 修复
ReplicatedMergeTreeQueue中一个极其罕见的竞态条件。#12315 (alexey-milovidov)。 - 在对非定长类型使用编解码器
Delta或DoubleDelta时,本应返回错误码为BAD_ARGUMENTS的异常,却返回了错误码为LOGICAL_ERROR的异常(我们保证不会发生错误码为LOGICAL_ERROR的异常)。此更改修复了 #12110。#12308(alexey-milovidov)。 - 修复了
WITH FILL修饰符中列顺序处理不正确的问题。此前未能遵循ORDER BY子句中列的顺序。#12306 (Anton Popov). - 当存在按虚拟列(例如
Merge表中的_table)或按系统表中的索引列(例如在查询system.tables时按数据库名过滤)来过滤数据的表达式,并且该表达式返回Nullable类型时,避免抛出 “bad cast” 异常。修复了 #12166。#12305(alexey-milovidov)。 - 修复了在重命名
TTL表达式所依赖的列后,TTL行为异常的问题。 #12304 (Anton Popov). - 修复了在
Kafka引擎中,当批次中部出现错误消息时可能触发的 SIGSEGV 问题。#12302 (Azat Khuzhin). - 修复了在更新
DNS缓存时某些线程可能随机短暂挂起数秒的问题。#12296 (tavplubix)。 - 修正了设置名称中的拼写错误。 #12292 (alexey-milovidov).
- 当
TrieDictionary加载失败时显示错误。#12290 (Vitaly Baranov)。 - 函数
arrayFill在处理空数组时行为不正确,可能导致崩溃。此更改修复了 #12263。#12279(alexey-milovidov)。 - 为
LowCardinality类型实现到公共类型的转换。从而可以对包含 LowCardinality 列与其他列的表执行 UNION ALL 操作。修复了 #8212。修复了 #4342。#12275(alexey-milovidov)。 - 修复了在请求
S3存储时达到重定向上限时的处理逻辑。#12256 (ianton-ru)。 - 修复了在多次连续插入时,
StorageFile中某些特殊类型的头部会被重复写入的行为。该修复解决了 #6155。#12197(Nikita Mikhaylov)。 - 修复了在 UInt8 值不为 0 或 1 时的逻辑函数行为。#12196 (Alexander Kazakov).
- 将 max_memory_usage* 的限制上限定为不超过进程的常驻内存。 #12182 (Azat Khuzhin).
- 修复在消除
GROUP BY中的单射函数时对dictGet参数的检查。#12179 (Azat Khuzhin). - 修复了
SummingMergeTree引擎在对分区键列求和时的行为。现在如果显式指定的求和列与分区键列有交集,则会抛出异常。此更改修复了 #7867。#12173(Nikita Mikhaylov)。 - 如果 ODBC 连接不支持 schema,则不要将字典源的表名拆分成 schema 和表名两个部分。 #12165 (Vitaly Baranov)。
- 修复了
ALTER DELETE中的逻辑错误,该错误会在条件求值为 NULL 时误删记录。修复了 #9088。关闭了 #12106。#12153(alexey-milovidov)。 - 修复了在存在别名时将查询转换后发送到外部 DBMS(如 MySQL、ODBC)的问题。此更改修复了 #12032。#12151(alexey-milovidov)。
- 修复了冗余 ORDER BY 优化中的有问题代码。该缺陷最初在 #10067 中被引入。#12148(alexey-milovidov)。
- 修复了整数除法中的潜在溢出问题,解决了 #12119。#12140(alexey-milovidov)。
- 修复了
greatCircleDistance和geoDistance中可能出现的无限循环问题。此更改解决了 #12117。#12137(alexey-milovidov)。 - 规范化对 “pid” 文件的处理。在之前的版本中,如果服务器在未正常关闭的情况下被强制终止,并且存在另一个进程的 pid 与之前运行的服务器相同,则服务器可能会拒绝再次启动。此外,在服务器启动失败时,即使此时还有另一个服务器正在运行,pid 文件也可能被删除。此更改修复了 #3501。#12133(alexey-milovidov)。
- 修复了一个导致 ZooKeepeer 中 ReplicatedVersionedCollapsingMergeTree 表元数据不正确的 bug。修复了 #12093。#12121(alesapin)。
- 避免在带有 JOIN 或子查询且附加到系统日志(system.query_log、metric_log 等)或附加到底层 engine=Buffer 表的物化视图中出现 “There is no query” 异常。#12120 (filimonov).
- 修复了使用
ENGINE=Dictionary且依赖字典的表的依赖处理逻辑。此修复解决了 #10994 和 #10397。#12116(Vitaly Baranov)。 Parquet格式现已能够正确处理LowCardinality和LowCardinality(Nullable)类型。修复了 #12086、#8406。#12108(Nikolai Kochetov)。- 修复了由于总线程数限制设置错误而导致带有
UNION的 SELECT 查询性能问题。修复了 #12030。#12103(Nikolai Kochetov)。 - 修复了在使用
-StateResample组合器时出现的段错误。 #12092 (Anton Popov). - 修复了在
system.quey_log中针对 SELECT 查询时result_rows和result_bytes指标为空的问题,解决了 #11595。#12089(Nikolai Kochetov)。 - 修复了在从
VIEW执行 SELECT 查询时对线程数量的多余限制。修复了 #11937。#12085(Nikolai Kochetov)。 - 修复了在执行 DROP TABLE 时 StorageKafka 发生的 SIGSEGV。 #12075 (Azat Khuzhin).
- 修复了在为
PREWHERE使用错误类型时可能发生的崩溃,并修复了 #12053、#12060。#12060(Nikolai Kochetov)。 - 修复了在高阶函数中使用
Tuple(LowCardinality)参数时出现的Cannot capture column错误。对应修复见 #9766、#12055(Nikolai Kochetov)。 - 修复了在检查约束时未判断其是否为常量表达式的问题。该修复解决了 #11360。#12042(alexey-milovidov)。
- 修复了在调用函数
if且其参数为不同长度的FixedString类型时可能产生错误结果或崩溃的问题。此更改修复了 #11362。#12021(alexey-milovidov)。
改进
- 允许以更加标准的方式设置
JOIN的种类和类型:使用LEFT SEMI JOIN而不是SEMI LEFT JOIN。目前两种写法都正确。#12520(Artem Zuikov)。 - 为 Buffer 引擎添加了
lifetime_rows/lifetime_bytes。#12421(Azat Khuzhin)。 - 将详细的异常信息写回客户端,而不是始终返回
MySQL server has gone away。#12383(BohuTANG)。 - 允许更改用于打印表格边框的字符集。当前可用的字符集包括:UTF-8、ASCII。通过设置
output_format_pretty_grid_charset可启用该功能。#12372(Sabyanin Maxim)。 - 支持 MySQL 的
SELECT DATABASE(),并添加了 MySQL 替换查询的集成测试。#9336 #12314(BohuTANG)。 - 为 MySQL 客户端/驱动添加了
KILL QUERY [connection_id],用于取消长时间运行的查询,相关 issue 为 #12038。#12152(BohuTANG)。 - 在
formatDateTime函数中添加了%g(两位 ISO 年份)和%G(四位 ISO 年份)占位符替换支持。#12136(vivarum)。 - 在
system.disks中添加了type列。#12115(ianton-ru)。 - 改进了
REVOKE命令:现在只要求对将被撤销的权限具有 grant/admin 选项。例如,执行REVOKE ALL ON *.* FROM user1时,现在不再需要具备带有 grant 选项的完整访问权限。新增命令REVOKE ALL FROM user1—— 它会撤销授予user1的所有角色。#12083(Vitaly Baranov)。 - 为
load_balancing添加了副本优先级(用于手动控制负载均衡的优先级)。#11995(Azat Khuzhin)。 - 将 S3 元数据中的路径改为相对路径,从而可以更容易地处理 S3 对象。#11892(Vladimir Chebotarev)。
性能改进
- 通过排序键前缀提升了
ORDER BY和GROUP BY的性能(通过optimize_aggregation_in_order设置启用,默认禁用)。#11696(Anton Popov)。 - 当设置
optimize_injective_functions_inside_uniq=1时,会移除uniq*()内部的单射函数。#12337(Ruslan Kamalov)。 - 修复了使用字面量的 IN 运算符不使用索引的问题,该性能退化是在 v19.3 附近引入的。本修复关闭了 #10574。#12062(nvartolomei)。
- 为 DiskS3 实现了单 part 上传(实验特性)。#12026(Vladimir Chebotarev)。
实验特性
- 在
MergeTree系列表中增加了新的内存中 part 格式,用于将数据存储在内存中。part 会在第一次合并时写入磁盘。如果其行数或字节大小低于阈值min_rows_for_compact_part和min_bytes_for_compact_part,则会以内存格式创建 part。同时提供可选的预写日志(Write-Ahead Log)支持,默认启用,由设置in_memory_parts_enable_wal控制。#10697(Anton Popov)。
构建/测试/打包改进
- 为
clickhouse-client实现基于 AST 的查询模糊测试(fuzzing)模式。最近通过模糊测试发现的问题列表见此标签。其中大部分是通过此工具发现的,另外有少量由 SQLancer 和00746_sql_fuzzy.pl发现。#12111 (Alexander Kuzmenkov). - 基于 Testflows 框架新增一类测试。#12090 (vzakaznikov).
- 新增 S3 HTTPS 集成测试。#12412 (Pavel Kovalenko).
- 在单独的线程中记录 sanitizer trap 消息。这将防止在 thread sanitizer 下出现潜在的死锁。#12313 (alexey-milovidov).
- 现在功能测试和压力测试可以使用旧版本的
clickhouse-test脚本运行。#12287 (alesapin). - 删除在
orc构建过程中产生的异常文件创建行为。#12258 (Nikita Mikhaylov). - 将通用的 Docker Compose 文件放入集成测试用的 Docker 容器中。#12168 (Ilya Yatsishin).
- 修复来自 CodeQL 的告警。
CodeQL是我们将与现有的clang-tidy和PVS-Studio一起使用的另一款静态代码分析器。#12138 (alexey-milovidov). - 对 UNBUNDLED 构建进行一些小的 CMake 修复。#12131 (Matwey V. Kornilov).
- 新增一个不使用任何 Linux 发行版的最小化 Docker 镜像示例。#12126 (alexey-milovidov).
- 在
clickhouse-serverDocker 镜像中升级系统软件包。#12124 (Ivan Blinkov). - 在
system.build_options表中新增UNBUNDLED标志。将clickhouse-test的跳过列表移至 ClickHouse 仓库中。#12107 (alesapin). - 使用 Anchore Container Analysis 安全分析工具对
clickhouse-serverDocker 镜像进行定期检查,以发现其中的 CVE,同时确认Dockerfile可以成功构建。在master分支和针对Dockerfile的 pull request 上每天运行。#12102 (Ivan Blinkov). - 使用 GitHub CodeQL 安全分析工具进行每日检查,以发现 CWE。#12101 (Ivan Blinkov).
- 在 Dockerfile 中首次执行
apt-get update之前安装ca-certificates。#12095 (Ivan Blinkov).
ClickHouse 20.5 版发布
ClickHouse v20.5.4.40-stable 版本发布 2020-08-10
缺陷修复
- 修复了在使用函数时的错误索引分析问题。该问题在从
MergeTree表读取时可能会导致错误地裁剪数据分片。修复了 #13060。修复了 #12406。#13081(Anton Popov)。 - 修复了在从本地副本执行 SELECT 查询时对线程数量的不必要限制。#12840 (Nikolai Kochetov).
- 修复了在
IN子句中被解释为函数的大型 tuple 所导致的性能问题。指的是在某些情况下,用户出于某些不明原因将条件写成WHERE x IN tuple(1, 2, ...),而不是WHERE x IN (1, 2, ...)。#12700 (Anton Popov). - 修复了
input_format_parallel_parsing的内存跟踪问题(通过将线程附加到组中实现)。 #12672 (Azat Khuzhin). - 通过 const 表达式修复了布隆过滤器索引,从而修复了 #10572。#12659(Winter Zhang)。
- 修复了在 broker 不可用等情况下
StorageKafka中出现的SIGSEGV。#12658 (Azat Khuzhin). - 为
if函数新增对Array(UUID)参数的支持。修复了 #11066。#12648(alexey-milovidov)。 - 修复了函数
any缺少别名的问题。#12593(Anton Popov)。 - 修复了使用缓存布局的外部字典中的竞争条件,该问题可能导致服务器崩溃。 #12566 (alesapin).
- 在执行 DROP TABLE 时,删除 Distributed 表的数据(来自异步 INSERT 的分块数据)。 #12556 (Azat Khuzhin).
- 修复了在
enable_mixed_granularity_parts=1时执行ALTER DELETE查询会导致旧的 part 损坏的 bug。修复 #12536。#12543(alesapin)。 - 在函数
in的参数数量不合法时提供更清晰的异常信息。#12529(Anton Popov)。 - 修复了实时视图表中的竞态条件问题,该问题可能导致数据重复。#12519 (vzakaznikov)。
- 修复从 compact parts 读取时的性能问题。 #12492 (Anton Popov).
- 修复了
AggregateFunction(avg, ...)值的二进制格式向后兼容性问题。此修复对应 #12342。#12486(alexey-milovidov)。 - 修复了在启用
text_log时发生的死锁问题。#12452 (alexey-milovidov). - 修复了在指定非常大的 LIMIT 或 OFFSET 时出现的溢出问题。解决了 #10470。解决了 #11372。#12427(alexey-milovidov)。
- 修复了在使用 StorageMerge 时可能发生的段错误。已关闭 #12054。#12401 (tavplubix)。
- 回滚在 #11079 中引入的更改,以解决 #12098。#12397(Mike)。
- 在带索引的表的
WHERE条件中使用负数或浮点常量时避免抛出异常。修复了 #11905。#12384(alexey-milovidov)。 - 允许即使存在依赖该列的
DEFAULT表达式时也对列执行CLEAR操作。修复了 #12333。#12378(alexey-milovidov)。 - 修复了在对带有
-State和Nullable参数的聚合函数使用TOTALS/ROLLUP/CUBE时的处理问题。此修复对应 #12163。#12376(alexey-milovidov)。 - 修复了在
Kafka引擎中,当一个批次的中间出现错误消息时触发的 SIGSEGV。#12302 (Azat Khuzhin). - 修复了在使用
SummingMergeTree引擎时,从分区键中的列进行求和时的行为。现在如果显式指定的求和列与分区键列有交集,将抛出异常。修复了 #7867。#12173(Nikita Mikhaylov)。 - 修复了在存在别名时,将查询转换后发送到外部 DBMS(例如 MySQL、ODBC)的转换逻辑。此修复解决了 #12032。#12151(alexey-milovidov)。
- 修复了一个导致 ZooKeepeer 中的 ReplicatedVersionedCollapsingMergeTree 表元数据不正确的 bug。此修复解决了 #12093。#12121(alesapin)。
- 修复了在从
VIEW进行 SELECT 查询时对线程数施加的不必要限制。修复了 #11937。#12085(Nikolai Kochetov)。 - 修复了在
join_algorithm=partial_merge模式下使用 LowCardinality 类型时出现的 JOIN 崩溃问题。#12035 (Artem Zuikov). - 修复了在条件中包含 NULL 时
if()返回错误结果的问题。#11807 (Artem Zuikov).
性能改进
- 针对带字面量的 IN 运算符未使用索引的问题,修复了在 v19.3 前后引入的性能回归。修复了 #10574。#12062(nvartolomei)。
构建/测试/打包改进
- 在 Dockerfile 中首次执行
apt-get update之前安装ca-certificates。#12095(Ivan Blinkov)。
ClickHouse 发布 v20.5.2.7-stable 2020-07-02
向后不兼容更改
COUNT(DISTINCT)和uniq聚合函数家族不再返回 Nullable 结果。如果所有传入值都是 NULL,则返回 0。此更改提升了 SQL 兼容性。#11661(alexey-milovidov)。- 增加了一个检查,用于发现用户级设置被配置在错误位置的情况。用户级设置应在
users.xml中对应用户配置文件的<profile>部分(或默认设置的<default>部分)中指定。如果设置错误,服务端会在日志中打印异常消息并拒绝启动。修复了 #9051。如果你想跳过此检查,可以将设置移动到正确位置,或者在 config.xml 中添加<skip_check_for_incorrect_settings>1</skip_check_for_incorrect_settings>。#11449(alexey-milovidov)。 - 默认启用
input_format_with_names_use_header设置。这会影响-WithNames和-WithNamesAndTypes输入格式的解析。#10937(alexey-milovidov)。 - 移除
experimental_use_processors设置。该设置现为默认启用。#10924(Nikolai Kochetov)。 - 将
zstd更新到 1.4.4。该版本在性能和压缩比方面有一些小幅改进。如果你在同一集群中运行不同 ClickHouse 版本的副本,可能会看到类似Data after merge is not byte-identical to data on another replicas.且带有说明的合理错误信息。这些信息是正常的,无需担心。此更改是向后兼容的,但我们仍在变更日志中列出,以便你在看到这些消息时有所参考。#10663(alexey-milovidov)。 - 增加了对无意义编解码器的检查,以及用于控制此检查的
allow_suspicious_codecs设置。修复了 #4966。#10645(alexey-milovidov)。 - 若干 Kafka 设置的默认值发生了变化。参见 #11388。
- 从 20.5 之前的版本升级时,如果执行滚动更新,且集群同时包含大于等于 20.5 和低于 20.5 的版本,当旧版本的 ClickHouse 节点在存在新版本节点的情况下被重启并启动旧版本时,可能会导致
Part ... intersects previous part错误。为避免该错误,应先在所有集群节点上安装新的 clickhouse-server 软件包,然后再执行重启(也就是说,当 clickhouse-server 重启时,它应当以新版本启动)。
新功能
TTL DELETE WHERE和TTL GROUP BY,用于在表中自动执行数据降采样和汇总。#10537 (expl0si0nn)。- 实现 PostgreSQL 传输协议。 #10242 (Movses).
- 添加了用于 users、roles、grants、settings profiles、quotas、row policies 的系统表;添加了 SHOW USER、SHOW [CURRENT|ENABLED] ROLES、SHOW SETTINGS PROFILES 命令。 #10387 (Vitaly Baranov)。
- 为 ODBC Table 函数添加写入支持 #10554 (ageraab)。#10901 (tavplubix)。
- 基于 Linux
perf_events添加查询性能指标(这些指标通过硬件 CPU 计数器和操作系统计数器计算)。此功能是可选的,并且需要为 ClickHouse 可执行文件设置CAP_SYS_ADMIN。#9545 Andrey Skobtsov。#11226 (Alexander Kuzmenkov)。 - 现在
CREATE查询中的数据类型支持使用NULL和NOT NULL修饰符。#11057 (Павел Потемкин). - 新增
ArrowStream输入和输出格式。 #11088 (hcz). - 支持将 Cassandra 作为外部字典源。#4978(favstovol)。
- 新增了布局
direct,在每次查询时直接从数据源加载所有数据,而不进行存储或缓存。#10622 (Artem Streltsov)。 - 为字典新增了新的
complex_key_direct布局,该布局在查询执行期间不会在本地存储任何数据。#10850 (Artem Streltsov)。 - 添加了对 MySQL 风格全局变量语法的支持(桩实现,stub)。此功能用于实现对 MySQL 协议的兼容性。#11832 (alexey-milovidov)。
- 使用
replxx为clickhouse-client添加了语法高亮。#11422(Tagir Kuskarov)。 - 已添加
minMap和maxMap函数。#11603(Ildus Kurbangaliev)。 - 添加
system.asynchronous_metric_log表,用于记录来自system.asynchronous_metrics的历史指标。 #11588 (Alexander Kuzmenkov)。 - 添加函数
extractAllGroupsHorizontal(haystack, re)和extractAllGroupsVertical(haystack, re)。#11554(Vasily Nemkov)。 - 添加 SHOW CLUSTER(S) 查询语句。 #11467 (hexiaoting).
- 添加用于提取网络位置的
netloc函数,类似于 Python 中urlparse(url)结果里的netloc字段。 #11356 (Guillaume Tassery)。 - 为
engine=Kafka引擎新增 2 个用于访问消息头的虚拟列。 #11283 (filimonov). - 为 Kafka 引擎添加
_timestamp_ms虚拟列(类型为Nullable(DateTime64(3)))。 #11260 (filimonov). - 新增函数
randomFixedString。#10866(Andrei Nekrashevich)。 - 添加函数
fuzzBits,用于以给定概率随机翻转字符串中的位。 #11237 (Andrei Nekrashevich)。 - 允许在比较运算符、IN 和 VALUES 子句中,将数字与常量字符串进行比较。#11647 (alexey-milovidov).
- 添加
round_robin负载均衡模式。#11645 (Azat Khuzhin). - 新增
cast_keep_nullable设置。启用后,CAST(something_nullable AS Type)将返回Nullable(Type)。 #11733 (Artem Zuikov). - 向
system.columns表添加了position列,并向system.parts_columns表添加了column_position列。其值为列在表中的序号,从 1 开始计数。修复了 #7744。#11655(alexey-milovidov)。 - 为 SYSTEM
{FLUSH DISTRIBUTED,STOP/START DISTRIBUTED SEND}命令添加 ON CLUSTER 支持。#11415 (Azat Khuzhin)。 - 新增 system.distribution_queue 表。#11394(Azat Khuzhin)。
- 在 Kafka 中支持全部格式设置,在表级别暴露部分设置,并调整默认值以提高性能。 #11388 (filimonov).
- 新增
port函数(用于从 URL 中提取端口)。 #11120 (Azat Khuzhin)。 - 现在
dictGet*函数可以接受表名。#11050(Vitaly Baranov)。 - 当使用
-n参数时,clickhouse-format工具现在能够格式化多条查询语句。#10852(Darío)。 - 现在支持为 DiskS3 配置 proxy-resolver。 #10744 (Pavel Kovalenko).
- 使
pointInPolygon能够与非常量多边形一起使用。现在 PointInPolygon 可以将 Array(Array(Tuple(..., ...))) 作为第二个参数,即表示多边形及其孔洞的数组。#10623 (Alexey Ilyukhov) #11421 (Alexey Ilyukhov)。 - 在
system.parts中添加了move_ttl_info,以便查看 move TTL 功能相关信息。 #10591 (Vladimir Chebotarev). - 支持通过代理访问 S3。#10576(Pavel Kovalenko)。
- 为数据类型添加
NCHAR和NVARCHAR别名。 #11025 (alexey-milovidov). - 已解决 #7224:在
system.events表中新增了FailedQuery、FailedSelectQuery和FailedInsertQuery指标。#11151(Nikita Orlov)。 - 在
system.asynchronous_metrics中添加更多jemalloc统计信息,并确保可以看到这些统计的最新数值。 #11748 (Alexander Kuzmenkov). - 支持指定默认的 S3 凭证和自定义认证请求头。 #11134 (Grigory Pervakov).
- 新增了用于在多种精度下以 Int64 格式导入/导出 DateTime64 的函数:
to-/fromUnixTimestamp64Milli/-Micro/-Nano。 #10923 (Vasily Nemkov). - 允许为 MongoDB 字典指定
mongodb://URI。 #10915 (Alexander Kuzmenkov). - OFFSET 关键字现在可以在不带 LIMIT 子句的情况下使用。 #10802 (Guillaume Tassery).
- 新增了
system.licenses表。该表包含位于contrib目录中的第三方库的许可证信息。此更改解决了 #2890。#10795(alexey-milovidov)。 - 新增函数 toStartOfSecond(DateTime64) -> DateTime64,用于将 DateTime64 值的秒以下小数部分清零。 #10722 (Vasily Nemkov).
- 新增了一种输入格式
JSONAsString,可接受由换行符、空格和/或逗号分隔的一系列 JSON 对象。 #10607 (Kruglov Pavel)。 - 支持将内存剖析的步长粒度缩小到小于 4 MiB。新增采样内存剖析器,用于捕获随机的内存分配/释放操作。#10598 (alexey-milovidov).
SimpleAggregateFunction现在也支持sumMap。 #10000 (Ildus Kurbangaliev)- 为分布式表引擎添加对
ALTER RENAME COLUMN的支持。是对 #10727 的延续。修复 #10747。#10887(alesapin)。
缺陷修复
- 修复 Decimal 解析中的 UBSan 报告问题。此更改修复了 #7540。#10512(alexey-milovidov)。
- 修复了解析 DateTime64 时可能出现的浮点运算异常问题。从而修复了 #11374。#11875(alexey-milovidov)。
- 修复在
PREWHERE子句中使用Nullable列导致的罕见崩溃问题。 #11895 #11608 #11869 (Nikolai Kochetov). - 不允许在高阶函数内部使用 arrayJoin。此前这样做会导致协议同步异常。此更改关闭了 #3933。#11846(alexey-milovidov)。
- 修复了
FixedString与常量String比较时产生错误结果的问题。此修复对应 #11393。该缺陷首次出现在 20.4 版本中。#11828(alexey-milovidov)。 - 修复在条件包含 NULL 时
if函数返回错误结果的问题。 #11807 (Artem Zuikov). - 修复查询线程数过多的问题。 #11788 (Nikolai Kochetov)。
- 修复了在
SELECT ... FROM merge_tree_table ...中使用WITH <scalar subquery> ...时出现的Scalar does not exist异常 #11621。#11767(Amos Bird)。 - 修复类似
SELECT *, xyz.*这样的查询出现的非预期行为:原本应报错却被执行成功。 #11753 (hexiaoting). - 现在在更改元数据期间,将会取消复制数据的拉取操作。#11744 (alesapin)。
- 在检查是否相等之前先解析存储在 ZooKeeper 中的元数据。#11739 (Azat Khuzhin)。
- 修复了由于在 Values 输入格式中对复杂字面量进行错误的类型推导而导致的 LOGICAL_ERROR。 #11732 (tavplubix).
- 修复在常量列上使用
ORDER BY ... WITH FILL的问题。 #11697 (Anton Popov). - 修复
SYSTEM SYNC REPLICA中极端罕见的竞争条件。如果在创建复制表的同时,来自另一个独立连接的客户端在该表上执行SYSTEM SYNC REPLICA命令(这种情况不太可能,因为一般来说另一个客户端应当知道该表正在创建中),则有可能导致空指针解引用。 #11691 (alexey-milovidov). - 在与 XDBC bridge 通信时传递合适的超时时间。此前在检查 bridge 存活状态和接收元信息时,超时设置未被正确生效。#11690 (alexey-milovidov).
- 修复在包含别名的
ORDER BY子句中使用LIMIT n WITH TIES时出现的问题。#11689 (Anton Popov)。 - 修复在使用并行
FINAL的 SELECT 查询中可能出现的Pipeline stuck问题。修复 #11636。#11682(Nikolai Kochetov)。 - 修复了一个会导致
system.mutations处于错误状态的缺陷。它可能会显示整个 mutation 已经完成,但服务器的复制队列中仍然存在MUTATE_PART任务并继续尝试执行它们。此修复对应 #11611。#11681(alesapin)。 - 修复
CREATE USER查询中的语法高亮显示问题。 #11664 (alexey-milovidov). - 添加对带有不区分大小写标志的正则表达式的支持。修复了 #11101 和 #11506。#11649(alexey-milovidov)。
- 如果启用了行级安全,则移除对 COUNT 查询的简单优化。在之前的版本中,用户得到的是表中记录的总数,而不是过滤后的记录数。此更改修复了 #11352。#11644(alexey-milovidov)。
- 修复用于 String 类型的布隆过滤器(数据跳过索引)。 #11638 (Azat Khuzhin).
- 如果不使用
-q选项,则不会在启动时创建数据库。#11604 (giordyb)。 - 修复在从
Buffer表进行采样读取时出现的Block structure mismatch错误。#11602 (Nikolai Kochetov)。 - 修复在
exception.code() % 256 == 0时 clickhouse-client 返回的错误退出码。#11601 (filimonov)。 - 修复在不同副本的 ReplicatedMergeTree 表执行 CREATE/DROP 时出现的竞争条件。如果表未从 ZooKeeper 中完全删除或未成功创建,系统仍然可以继续工作。修复了 #11432。#11592(alexey-milovidov)。
- 修复服务器启动时关于“Mark cache size was lowered”的日志消息中的一个小错误。该更改关闭了 #11399。#11589(alexey-milovidov)。
- 修复在包含
PREWHERE column in (subquery)和ARRAY JOIN的查询中出现的错误Size of offsets does not match size of column。#11580(Nikolai Kochetov)。 - 修复了
SHOW CREATE TABLE中罕见的段错误,对应修复 #11490。#11579(tavplubix)。 - 已修复:HTTP 会话中的所有查询使用相同的 query_id 的问题。#11578 (tavplubix)。
- 现在,在检查服务器存活状态时,clickhouse-server 的 Docker 容器将优先使用 IPv6。 #11550 (Ivan Starkov).
- 修复在启用
min_bytes_to_use_direct_io,并且启用了 PREWHERE 且使用 SAMPLE 或大量线程时,可能出现的Data compressed with different methods错误。此修复解决了 #11539。#11540(alexey-milovidov)。 - 修复
<node>的 shard_num/replica_num 设置(此前会导致 use_compact_format_in_distributed_parts_names 失效)。 #11528 (Azat Khuzhin). - 修复在
prefer_localhost_replica=0且未启用internal_replication时对 Distributed 表执行异步 INSERT 的问题。 #11527 (Azat Khuzhin)。 - 修复在使用
-State函数进行聚合的过程中抛出异常时出现的内存泄漏问题。修复了 #8995。#11496(alexey-milovidov)。 - 修复执行
INSERT SELECT FINAL时出现的Pipeline stuck异常:当SELECT部分(max_threads>1)有多个数据流,而INSERT部分只有一个数据流(max_insert_threads==0)时会触发该问题。#11455 (Azat Khuzhin)。 - 修复在执行类似
select count() from t, u查询时返回错误结果的问题。 #11454 (Artem Zuikov). - 修正编解码器返回的压缩大小。#11448 (Nikolai Kochetov).
- 修复当某列使用带有非字面量参数的压缩编解码器时出现的服务器崩溃。修复了 #11365。#11431(alesapin)。
- 修复在 MergeTree 关闭时,如果表未成功创建,可能出现的未初始化内存读取问题。#11420 (alexey-milovidov)。
- 修复对
LowCarinality(T)和Nullable(T)执行 JOIN 时出现的崩溃问题。#11380。#11414 (Artem Zuikov)。 - 修复因错误的
USING关键字导致的错误码。#11373。#11404(Artem Zuikov)。 - 修复了在参数超出纬度/经度范围时的
geohashesInBox。#11403(Vasily Nemkov)。 - 为
joinGet()函数提供更详细的错误信息。#11389 (Artem Zuikov). - 修复在使用外部排序和 LIMIT 的查询中可能出现的
Pipeline stuck错误。修复了 #11359。#11366(Nikolai Kochetov)。 - 在 ReplicatedMergeTree 中发送数据部件时移除冗余锁。 #11354 (alesapin).
- 修复了在多行模式下 clickhouse-client 对
\G(纵向输出)的支持。此更改解决了 #9933。#11350(alexey-milovidov)。 - 修复在使用
Lazy数据库时可能发生的段错误(segfault)。#11348 (alexey-milovidov)。 - 修复在直接对
Join表引擎(未使用 JOIN)进行 SELECT 时的崩溃问题以及错误的可空性。#11340 (Artem Zuikov)。 - 修复
quantilesExactWeightedArray中的崩溃问题。#11337(Nikolai Kochetov)。 - 现在在执行
ALTER查询时,会在更改元数据之前先停止合并操作。 #11335 (alesapin). - 在设置
parallel_view_processing = 1时,使对MATERIALIZED VIEW的写入重新并行执行。修复了 #10241。#11330(Nikolai Kochetov)。 - 修复在提取的 JSON 中的字符串包含不成对的 { 或 [ 时的
visitParamExtractRaw。 #11318 (Ewout)。 - 修复 ThreadPool 中极少出现的竞态条件。 #11314 (alexey-milovidov).
- 修复
clickhouse-copier中一个无关紧要的数据竞争问题。由集成测试发现。#11313 (alexey-milovidov)。 - 修复转换过程中可能出现的未初始化内存使用问题。例如:
SELECT toIntervalSecond(now64())。 #11311 (alexey-milovidov)。 - 修复当表的主键中包含
Array列,且查询对该列使用empty或notEmpty函数进行过滤时,索引分析无法生效的问题。此修复解决了 #11286。#11303(alexey-milovidov)。 - 修复一个错误:当查询速度估算不正确时,如果查询被
max_network_bandwidth、max_execution_speed或priority设置限流,min_execution_speed的限制可能不起作用或行为不正确。将timeout_before_checking_execution_speed的默认值修改为非零值,因为否则min_execution_speed和max_execution_speed这两个设置将不会生效。此更改修复了 #11297。此更改修复了 #5732。此更改修复了 #6228。易用性改进:在clickhouse-client中避免将异常消息与进度条拼接在一起。#11296(alexey-milovidov)。 - 修复了在使用错误参数调用
SET DEFAULT ROLE时会发生的崩溃问题。此更改修复了 #10586。#11278(Vitaly Baranov)。 - 修复在读取格式不正确的
Protobuf数据时发生的崩溃问题。修复了 #5957 和 #11203。#11258(Vitaly Baranov)。 - 修复了一个问题:当仅存在已过期键时,
cache字典可能返回默认值而不是实际值。此问题仅影响字符串字段。#11233(Nikita Mikhaylov)。 - 修复从内部查询包含常量的
VIEW读取时出现的错误Block structure mismatch in QueryPipeline。修复了 #11181。#11205(Nikolai Kochetov)。 - 修复可能出现的异常
Invalid status for associated output。#11200(Nikolai Kochetov)。 - 现在,如果在
CREATE语句中定义了primary.idx,将会对其进行检查。 #11199 (alesapin)。 - 修复在高阶函数中捕获
Array(Array(LowCardinality))类型参数时可能出现的Cannot capture column错误。#11185(Nikolai Kochetov)。 - 修复了在键数量超过 1000 时以及在某些后端上可能失败的
S3通配(globbing)问题。 #11179 (Vladimir Chebotarev)。 - 如果数据跳过索引依赖于那些会在后台合并过程中被修改的列(对于 SummingMergeTree、AggregatingMergeTree 以及 TTL GROUP BY),则其先前的计算是错误的。此问题已通过将索引计算移动到合并之后来修复,因此索引会基于合并后的数据进行计算。 #11162 (Azat Khuzhin).
- 修复了在 DROP 使用 Kafka 引擎的表(或在服务器重启期间)时偶尔出现的卡死问题。#11145 (filimonov)。
- 修复针对简单查询过度预留线程的问题(用于减少线程数量的优化在执行管线(pipeline)更改后部分失效)。#11114 (Azat Khuzhin).
- 如果最终没有任何内容被提交,则移除 mutation 完成任务中的日志记录。 #11109 (alesapin)。
- 修复了在更新后且系统日志表结构发生变化时,服务器启动过程中出现的死锁问题。#11106 (alesapin)。
- 修复了 registerDiskS3 中的内存泄漏。#11074 (Pavel Kovalenko).
- 修复在 JOIN 与 PREWHERE 一同使用时,或
optimize_move_to_prewhere将 WHERE 下推为 PREWHERE 时触发的错误No such name in Block::erase()。#11051(Artem Zuikov)。 - 修复了在终止 Kafka 引擎表时可能导致数据丢失的问题。#11048 (filimonov)。
- 修复了
parseDateTime64BestEffort参数解析错误。#10925。#11038(Vasily Nemkov)。 - 现在可以在单条
ALTER查询中对同一列同时执行ADD/DROP和RENAME操作。针对同时使用MODIFY和RENAME的情况,其异常信息变得更加清晰。部分修复了 #10669。 #11037 (alesapin)。 - 修复了 S3 URL 的解析。 #11036 (Vladimir Chebotarev).
- 在使用
LIMIT时,修复两级GROUP BY的内存跟踪问题。#11022 (Azat Khuzhin). - 修复在表未成功创建时,MergeTree 中极少见的潜在 use-after-free 错误。 #10986 (alexey-milovidov).
- 修复 Atomic 数据库在处理元数据(重命名时使用的相对路径)和数据(符号链接时使用的相对路径)时的问题。 #10980 (Azat Khuzhin).
- 修复在使用
Atomic数据库引擎时并发执行ALTER和DROP DATABASE查询导致服务器崩溃的问题。 #10968 (tavplubix)。 - 修复
getRawData()方法中原始数据大小计算错误。 #10964 (Igr). - 修复 20.1 及更早版本之间两级聚合的不兼容问题。当发起节点和远程节点上运行的 ClickHouse 版本不同时,且 GROUP BY 结果较大并且聚合按单个 String 字段进行时,会出现该不兼容性。这会导致在结果中针对同一个键出现多行未合并的数据。#10952(alexey-milovidov)。
- 避免通过 DistributedBlockOutputStream 发送未完全写入的文件。 #10940 (Azat Khuzhin).
- 修复执行
SELECT count(notNullIn(NULL, []))时导致的崩溃问题。#10920(Nikolai Kochetov)。 - 修复了在 DROP 使用 Kafka 引擎的表时(或在服务器重启期间)偶发的卡死问题。#10910 (filimonov)。
- 现在可以在单条语句中执行多个
ALTER RENAME操作,例如a TO b, c TO a。#10895 (alesapin). - 修复了一个可能出现的竞争条件:当多个线程针对同一列从聚合函数状态中获取结果时,可能会触发该问题。我发现它唯一可能发生的情况是:在读取使用
Memory引擎的表时使用finalizeAggregation函数,而该表为quanite*函数存储了AggregateFunction状态。#10890(Nikolai Kochetov)。 - 修复 Distributed 表中元组的向后兼容性问题。#10889 (Anton Popov)。
- 修复 StringHashTable 在键不存在时出现的 SIGSEGV。 #10870 (Azat Khuzhin).
- 修复了在使用
Atomic引擎的数据库中删除LiveView表后,WATCH出现挂起的问题。 #10859 (tavplubix). - 修复了
ReplicatedMergeTree中的一个问题,该问题可能导致在某个副本变为不活动后,某些带有OPTIMIZE的ALTER查询一直挂起等待该副本。 #10849 (tavplubix). - 现在,当参与
CONSTRAINT表达式的列被重命名时,相应的约束会被更新。修复了 #10844。#10847(alesapin)。 - 修复在缓存字典中可能读取未初始化内存的问题。 #10834 (alexey-milovidov).
- 在 Block::sortColumns() 之后修复列顺序(并添加一个测试,以表明它会影响某些实际用例——Buffer 引擎)。 #10826 (Azat Khuzhin).
- 修复在未请求为标识符加引号时 ODBC bridge 出现的问题。此更改修复了 #7984。#10821(alexey-milovidov)。
- 修复 DateLUT 中 UBSan 和 MSan 报告的问题。 #10798 (alexey-milovidov).
- 在键条件中使用
src_type,以确保正确的类型转换。修复了 #6287。#10791(Andrew Onyshchuk)。 - 移除旧的 libunwind 补丁。https://github.com/ClickHouse-Extras/libunwind/commit/500aa227911bd185a94bfc071d68f4d3b03cb3b1#r39048012 这使我们能够在使用
clang的构建中禁用-fno-omit-frame-pointer,平均至少可提升 1% 的性能。#10761(Amos Bird)。 - 修复在跨多个分片时使用浮点权重的
avgWeighted。 #10758 (Baudouin Giard)。 - 修复
parallel_view_processing的行为。现在即使发生异常,针对MATERIALIZED VIEW(物化视图)的所有插入操作也都应无一例外地完成。修复了 #10241。#10757(Nikolai Kochetov)。 - 修复组合器 -OrNull 和 -OrDefault 在与 -State 组合使用时的问题。#10741 (hcz).
- 修复
generateRandom在处理嵌套类型时的崩溃问题。已修复 #10583。#10734(Nikolai Kochetov)。 - 修复在合并后可能发生的
SummingMergeTree中LowCardinality(FixedString)键列数据损坏问题。修复了 #10489。#10721(Nikolai Kochetov)。 - 修复在同时使用 'FINAL' 修饰符和 'ORDER BY' 优化时,将主键包裹在函数中的用法问题。#10715 (Anton Popov)。
- 修复函数
h3EdgeAngle中可能存在的缓冲区溢出问题。#10711 (alexey-milovidov)。 - 修复总计消失的问题。当查询包含
JOIN或带有外部WHERE条件的子查询时,总计可能会被过滤掉。修复 #10674。#10698(Nikolai Kochetov)。 - 修复 HTTP 插入操作的原子性问题。此更改修复了 #9666。#10687(Andrew Onyshchuk)。
- 修复在同一查询中多次使用
IN运算符并传入同一集合的问题。#10686 (Anton Popov). - 修复了一个 bug:当
readonly=2且cancel_http_readonly_queries_on_client_close=1时,会导致在客户端关闭时 HTTP 请求被卡住。修复了 #7939、#7019、#7736、#7091。#10684(tavplubix)。 - 修正 AggregateTransform 构造函数中的参数顺序。 #10667 (palasonic1).
- 修正了在启用
distributed_aggregation_memory_efficient时远程查询无法并行执行的问题。修复 #10655。#10664(Nikolai Kochetov)。 - 修复使用
LIMIT的查询可能返回的行数不正确的问题。修复了 #10566、#10709。#10660(Nikolai Kochetov)。 - 修复在表包含大量分片时会导致并发
ALTER操作被锁住的问题。 #10659 (alesapin). - 修复当服务器在表启动前就已关闭时,
StorageBuffer中出现的nullptr解引用问题。#10641 (alexey-milovidov)。 - 修复分布式查询中谓词优化(
enable_optimize_predicate_expression=1)在带有HAVING子句的查询中的行为(即需要在发起查询的服务器上进行过滤的场景),通过保留表达式的顺序(这本身就足以修复问题),并强制聚合器优先使用列名而非索引。修复问题:#10613、#11413。#10621(Azat Khuzhin)。 - 修复在与 LowCardinality 配合使用时的
optimize_skip_unused_shards问题。 #10611 (Azat Khuzhin). - 修复因服务器启动时发生异常而导致的
StorageBuffer段错误问题。修复了 #10550。#10609(tavplubix)。 - 在执行
SYSTEM DROP DNS CACHE查询时,同时删除用于检查是否允许用户从某些 IP 地址连接的缓存。#10608 (tavplubix)。 - 修复了在
MATERIALIZED VIEW的子查询中,当该查询包含依赖的表时出现的标量结果计算错误的问题。 #10603 (Nikolai Kochetov). - 修复了同步变更中条件变量的处理逻辑。在某些情况下,发往该条件变量的信号可能会丢失。 #10588 (Vladimir Chebotarev).
- 修复在
loadStoredObject()尚未完成时调用createDictionary()可能引发的崩溃问题。 #10587 (Vitaly Baranov)。 - 修复错误:
BloomFilter false positive 必须是 0 到 1 之间的 double 数值#10551。#10569(Winter Zhang)。 - 修复在列 ALIAS 的默认表达式类型与列类型不同时的 SELECT 行为。 #10563 (Azat Khuzhin).
- 实现了
DateTime64与String值之间的比较(比较方式与DateTime相同)。 #10560 (Vasily Nemkov). - 修复在将紧凑分片合并到另一个紧凑分片后,在某些情况下可能出现的索引损坏问题。 #10531 (Anton Popov).
- 默认禁用 GROUP BY sharding_key 优化(
optimize_distributed_group_by_sharding_key已引入且默认关闭,这是由于对分片键(sharding_key)的分析存在一些复杂技巧,例如在分片键中使用if),并修复其在 WITH ROLLUP/CUBE/TOTALS 中的行为。#10516(Azat Khuzhin)。 - 修复:#10263(在该 PR 之后,通过 INSERT 进行的分布式发送在每次 INSERT 时都会被再次延后)。修复:#8756(该 PR 在满足以下所有条件时会破坏分布式发送(目前来看是不太可能的配置):
internal_replication == false、存在多个本地分片(会激活硬链接代码)以及使用distributed_storage_policy(由于EXDEV错误导致link(2)调用失败))。#10486(Azat Khuzhin)。 - 修复了与
max_rows_to_sort限制相关的错误。#10268 (alexey-milovidov)。 - 对于每次调用任一读取外部字典的函数,仅执行一次字典获取和访问权限检查。#10928 (Vitaly Baranov).
改进
- 在执行
ALTER MODIFY TTL查询后,对旧数据应用TTL。此行为由materialize_ttl_after_modify设置控制,且默认启用。#11042 (Anton Popov)。 - 在解析字符串字面量、
VALUES和各种文本格式中的 C 风格反斜杠转义时(这是对 SQL 标准的扩展,在 ClickHouse 和 MySQL 中被广泛采用),如果遇到未知的转义序列(例如\%或\w),则保留反斜杠,从而使LIKE和match正则表达式的使用更加方便(只需写name LIKE 'used\_cars'而不是name LIKE 'used\\_cars'),同时也提高兼容性。此更改修复了 #10922。#11208(alexey-milovidov)。 - 读取 Decimal 值时,会在小数点后截断多余的位数。此行为与 MySQL 和 PostgreSQL 更加兼容。修复了 #10202。#11831 (alexey-milovidov)。
- 如果 ZooKeeper 中的元数据已被删除且已不存在(例如在使用 TestKeeper 进行测试并重启服务器时也会出现这种情况),允许对 replicated 表执行 DROP 操作。即使在与 ZooKeeper 通信时出现错误,也允许对 replicated 表执行 RENAME 操作。修复了 #10720。#11652(alexey-milovidov)。
- 略微改进了从字符串读取 Decimal 时的诊断信息。修复了 #10202。#11829(alexey-milovidov)。
- 修复信号处理程序中的 sleep 调用问题。此前实际休眠时间少于预期。#11825 (alexey-milovidov)。
- (仅限 Linux)与操作系统相关的性能指标(CPU 和 I/O)即使在没有
CAP_NET_ADMIN能力的情况下也可以正常工作。#10544(Alexander Kazakov)。 - 将
hostname添加为函数hostName的别名。该特性由 Yandex.Metrica 的 Victor Tarnavskiy 建议。#11821 (alexey-milovidov). - 在跨复制集群中新增了对分布式
DDL(UPDATE/DELETE/DROP PARTITION)的支持。 #11703 (Nikita Mikhaylov). - 如果在启动时无法监听某个监听地址(例如在 Docker 环境中不支持 IPv6),则在服务器日志中记录为警告而不是错误。注意,如果服务器无法监听所有列出的地址,它仍会像之前那样拒绝启动。此更改修复了 #4406。 #11687(alexey-milovidov)。
- Docker 镜像启动时默认创建用户和数据库。 #10637 (Paramtamtam)。
- 当多行查询被打印到服务器日志时,各行会被拼接在一起。针对多行字符串字面量、标识符和单行注释的情况进行了修正,使其也能正确处理。此更改修复了 #3853。#11686(alexey-milovidov)。
- 现在在以下命令中已允许同时指定多个名称:CREATE USER、CREATE ROLE、ALTER USER、SHOW CREATE USER、SHOW GRANTS 等。#11670(Vitaly Baranov)。
- 在跨复制集群中添加对分布式 DDL(
UPDATE/DELETE/DROP PARTITION)的支持。 #11508 (frank lee). - 如果用户在命令行中为
clickhouse-client和clickhouse-benchmark显式指定了密码,则会从命令行参数中清除该密码,从而防止通过ps等工具泄露密码。#11665 (alexey-milovidov)。 - 如果 ELF 文件中的调试信息与正在运行的二进制文件不匹配,则不要使用这些调试信息。这样可以避免在堆栈跟踪中打印错误的函数名和源代码位置。此更改修复了 #7514。#11657(alexey-milovidov)。
- 在
parseDateTimeBestEffortOrNull/parseDateTimeBestEffortOrZero函数中,当值未被完全解析时返回 NULL/零。修复了 #7876。#11653(alexey-milovidov)。 - 在请求的 URL 中忽略空参数。它们可能在你写
http://localhost:8123/?&a=b或http://localhost:8123/?a=b&&c=d时出现。此更改修复了 #10749。#11651(alexey-milovidov)。 - 允许将
groupArrayArray和groupUniqArrayArray作为SimpleAggregateFunction使用。 #11650 (Volodymyr Kuznetsov). - 在分析其他类型的索引条件时,允许通过隐式转换与常量字符串进行比较。这可能会解决 #11630。#11648(alexey-milovidov)。
- https://github.com/ClickHouse/ClickHouse/pull/7572#issuecomment-642815377 支持配置默认的 HTTPHandlers。 #11628 (Winter Zhang).
- 为 Kafka 引擎增加对更多输入格式的支持。修复过早刷新(flush)的问题。修复当
kafka_num_consumers大于 topic 中分区数量时的性能问题。#11599 (filimonov). - 改进
multiple_joins_rewriter_version=2逻辑。修复由 lambda 别名引起的未知列错误。#11587 (Artem Zuikov). - 在无法解析列定义列表时提供更清晰的异常信息。修复了 #10403。#11537(alexey-milovidov)。
- 改进在视图中使用
enable_optimize_predicate_expression=1时的逻辑。#11513 (Artem Zuikov). - 为 Live View 表添加对 PREWHERE 的支持。#11495 (vzakaznikov).
- 自动更新 DNS 缓存,该缓存用于检查是否允许用户从某个地址进行连接。#11487 (tavplubix).
- OPTIMIZE FINAL 将会强制执行合并,即使正在进行并发合并操作也是如此。此更改关闭了 #11309 和 #11322。#11346(alexey-milovidov)。
- 在 clickhouse-client 中禁止输出已取消查询的结果。在之前的版本中,即使你按下 Ctrl+C 取消查询,结果仍可能继续在终端中打印。此更改修复了 #9473。#11342(alexey-milovidov)。
- 现在历史文件会在每次查询后更新,当多个客户端使用同一个历史文件时也不会出现竞争条件。修复了 #9897。#11453(Tagir Kuskarov)。
- 改进了在重新加载配置时的日志消息。#11341 (alexey-milovidov)。
- 在某些情况下,从
clickhouse-client或clickhouse-format输出的格式化查询中移除末尾的空白字符。#11325 (alexey-milovidov)。 - 添加设置 "output_format_pretty_max_value_width"。如果值更长,则会被截断,以避免在终端中输出过长的值。修复了 #11140。#11324(alexey-milovidov)。
- 在内存映射不足的情况下提供更清晰的异常信息。修复了 #11027。#11316(alexey-milovidov)。
- 在 ASOF JOIN 中增加对 (U)Int8、(U)Int16、Date 的支持。 #11301 (Artem Zuikov).
- 为 Kafka 表增加对 kafka_client_id 参数的支持。同时将 ClickHouse 在与 Kafka 通信时使用的默认
client.id修改为信息量更大且更易用的值。#11252 (filimonov)。 - 在发生异常时保留
DistributedFilesToInsert指标的数值。在之前的版本中,该数值会在我们准备发送某些文件时被设置,但如果发生异常并且仍有一些文件处于待发送状态,该数值为零。现在它与文件系统中处于待发送状态的文件数量相对应。#11220 (alexey-milovidov)。 - 为诸如
DOUBLE PRECISION和CHAR VARYING之类的多单词数据类型名称提供支持,以提高 SQL 兼容性。#11214 (Павел Потемкин)。 - 为部分数据类型提供别名。 #10856 (Павел Потемкин).
- 查询日志现已默认启用。#11184(Ivan Blinkov)。
- 在
system.users表以及执行SHOW CREATE USER查询时显示身份验证类型。 #11080 (Vitaly Baranov). - 在对
Memory数据库引擎显式执行DROP DATABASE时删除数据。修复 #10557。#11021(tavplubix)。 - 为 rdkafka 库的内部线程设置线程名称。使 rdkafka 的日志可以输出到服务器日志中。 #10983 (Azat Khuzhin).
- 支持查询中的 Unicode 空白字符。这在从 Word 或网页复制粘贴查询时很有用。此更改修复了 #10896。#10903 (alexey-milovidov)。
- 允许在函数
tupleElement中使用较大的 UInt 类型作为索引。#10874(hcz)。 - 在对 Distributed 表执行 INSERT 时遵从 prefer_localhost_replica/load_balancing 设置。 #10867 (Azat Khuzhin).
- 引入
min_insert_block_size_rows_for_materialized_views、min_insert_block_size_bytes_for_materialized_views设置项。这些设置项与min_insert_block_size_rows和min_insert_block_size_bytes类似,但只应用于插入到MATERIALIZED VIEW中的块。它们有助于在向 MV 推送数据时控制块的合并行为,并避免过度的内存占用。#10858 (Azat Khuzhin)。 - 消除服务器关闭时复制队列抛出的异常。修复了 #10819。#10841(alesapin)。
- 确保
varSamp、varPop不会因数值误差返回负值,并且无法从负方差计算stddevSamp、stddevPop。此更改修复了 #10532。#10829(alexey-milovidov)。 - 改进了 DNS 异常信息。这修复了 #10813。#10828(alexey-milovidov)。
- 在发生某些解析错误时,将 HTTP 响应码更改为 400 Bad Request。此修复解决了 #10636 中提出的问题。#10640(alexey-milovidov)。
- 如果 clickhouse-client 版本高于 clickhouse-server,则输出一条消息。 #10627 (alexey-milovidov).
- 为
INSERT INTO [db.]table WATCH查询添加了支持。#10498 (vzakaznikov). - 允许通过 clickhouse-client 传递 quota_key 参数。此更改关闭了 #10227。#10270(alexey-milovidov)。
性能优化
- 允许多个副本并发分配合并、变更、分区删除、移动和替换任务。此更改解决了 #10367。#11639 (alexey-milovidov) #11795 (alexey-milovidov)。
- 基于表排序键对
GROUP BY进行优化,可通过optimize_aggregation_in_order设置启用。#9113 (dimarub2000)。 - 带有
FINAL的SELECT查询会并行执行。新增设置项max_final_threads用于限制使用的线程数。#10463 (Nikolai Kochetov)。 - 在生成小数据块时(并行解析的典型场景),通过使用
INSERT SELECT或在 clickhouse-client 中执行 INSERT 来提升 INSERT 查询的性能。这修复了 #11275。修复了 CONSTRAINT 对 DEFAULT 字段不生效的问题。这修复了 #11273。修复了 CONSTRAINTS 在 TEMPORARY 表上被忽略的问题。这修复了 #11274。#11276(alexey-milovidov)。 - 新增一种优化,可在
SELECT子句中消除对GROUP BY键的 min/max/any 聚合函数,该功能可通过optimize_aggregators_of_group_by_keys设置启用。#11667 (xPoSx). #11806 (Azat Khuzhin). - 新增了一项优化,会将所有操作从
any函数中移出,可通过optimize_move_functions_out_of_any启用 #11529(Ruslan)。 - 在交互模式下使用 Pretty 格式时,提升
clickhouse-client的性能。在先前版本中,大量时间可能花在计算 UTF-8 字符串的可见宽度上。此更改关闭了 #11323。#11323(alexey-milovidov)。 - 提升了对同时包含
ORDER BY且LIMIT较小(小于max_block_size)的查询的性能。 #11171 (Albert Kidrachev)。 - 在运行时检测 CPU,以选择并调度最佳的函数实现。添加对多目标代码生成的支持,从而关闭 #1017。 #10058(DimasKovas)。
- 默认启用 ClickHouse 二进制文件的
mlock。这将防止在高 IO 负载下 ClickHouse 可执行文件被换出到交换空间中。#11139 (alexey-milovidov). - 在不包含 GROUP BY 键的情况下使用
sum聚合函数进行查询,可使查询运行速度提升数倍。#10992 (alexey-milovidov)。 - 通过删除部分冗余的数据移动,改进基数排序(用于简单键的
ORDER BY)。#10981(Arslan Gumerov)。 - 在 MergeJoin 中对左表中较大的部分进行排序。将左表的数据块缓存在内存中。新增
partial_merge_join_left_table_buffer_bytes设置项,用于管理左表数据块缓冲区的大小。#10601 (Artem Zuikov)。 - 从子查询中移除重复的 ORDER BY 和 DISTINCT,可通过
optimize_duplicate_order_by_and_distinct启用此优化 #10067(Mikhail Malafeev)。 - 启用
optimize_group_by_function_keys后,该功能会消除 GROUP BY 子句中对其他键的函数调用 #10051(xPoSx)。 - 新增一种优化机制,将算术运算从聚合函数中提取出来,可通过
optimize_arithmetic_operations_in_aggregate_functions启用 #10047 (Ruslan)。 - 使用基于 Poco 的 S3 HTTP 客户端以取代 curl,从而提升 S3 存储和表函数的性能并降低内存占用。#11230 (Pavel Kovalenko)。
- 修复一个 Kafka 性能问题:与基于限制的重新调度有关,且这些重新调度此前总是会被应用。#11149 (filimonov).
- 为 jemalloc 启用 percpu_arena:percpu(这将减少由线程池引起的内存碎片)。 #11084 (Azat Khuzhin).
- 通过 S3 HTTP 客户端读取响应时优化内存使用。#11561(Pavel Kovalenko)。
- 调整默认的 Kafka 设置以提升性能。 #11388 (filimonov).
实验性特性
- 新增数据类型
Point(Tuple(Float64, Float64)) 和Polygon(Array(Array(Tuple(Float64, Float64))). #10678 (Alexey Ilyukhov). - 新增
hasSubstr函数,用于在数组中查找子序列。注意:此函数很可能会在不另行通知的情况下被重命名。#11071 (Ryad Zenine). - 新增 OpenCL 支持和 bitonic 排序算法,可用于对单列中的整数类型数据进行排序。需要使用编译标志
-DENABLE_OPENCL=1进行构建。要使用 bitonic 排序算法替代其他算法,需要将设置项special_sort设置为bitonic_sort,并确保 OpenCL 可用。此功能不会提升性能或带来其他改进,仅作为示例和演示用途提供。如果在这一方向上没有进一步开发,此功能很可能会在不久的将来被移除。#10232 (Ri).
构建/测试/打包改进
- 为程序和实用程序启用 clang-tidy。 #10991 (alexey-milovidov).
- 移除对
tzdata的依赖:如果/usr/share/zoneinfo目录不存在,不应报错。注意,即使系统中未安装 tzdata,所有时区在 ClickHouse 中仍可正常工作。 #11827 (alexey-milovidov). - 添加了基于 MSan 和 UBSan 的压力(“stress”)测试。注意,我们已经有使用 MSan 和 UBSan 的功能测试,而“stress” 测试是另一种类型的测试。#10871 (alexey-milovidov)。
- 在崩溃信息中打印编译器的构建 ID,这可以让我们更确定是哪一个二进制文件发生了崩溃。新增函数
buildId。#11824 (alexey-milovidov)。 - 添加了一个测试,用于确保在执行 FREEZE 查询后,mutation 仍然可以正常工作。#11820 (alexey-milovidov).
- 不要在测试名称中包含字符串 “fail”,因为当你在浏览器中按 Ctrl+F 搜索 “fail” 时,这会让查看测试结果变得不太方便。#11817 (alexey-milovidov).
- 从 HTTPHandlerFactory 中移除未使用的导入。#11660 (Bharat Nallan)。
- 对 copier 的执行增加了随机采样,以避免出现
Too many simultaneous queries错误。同时延长了超时时间并降低了出错概率。#11573 (Nikita Mikhaylov)。 - 修复遗漏的 include。 #11525 (Matwey V. Kornilov).
- 通过删除旧的示例程序来加快构建速度。同时还发现了一些孤立的功能测试用例。#11486 (alexey-milovidov).
- 增加 CI 构建使用的 ccache 缓存大小。 #11450 (alesapin).
- 在 deb 构建中只保留 unit_tests_dbms。 #11429 (Ilya Yatsishin).
- 将 librdkafka 升级到 1.4.2 版本。 #11256 (filimonov)。
- 重构 CMake 构建文件。#11390(Ivan)。
- 修复几个不稳定的集成测试。 #11355 (alesapin).
- 为使用 UBSan 运行的单元测试添加支持。#11345 (alexey-milovidov)。
- 从集成测试
test_insertion_sync_fails_with_timeout中移除冗余超时。 #11343 (alesapin)。 - 改进对 clickhouse-test 中挂起查询的检查。 #11321 (alexey-milovidov).
- 如果服务器是以调试模式构建或启用了 sanitizers,则发出警告。#11304 (alexey-milovidov).
- 现在,clickhouse-test 在运行测试之前会先检查服务器是否存活。 #11285 (alesapin)。
- 修复可能存在偶发性失败的测试
00731_long_merge_tree_select_opened_files.sh。该测试失败频率不高,但我们在使用 ThreadFuzzer 做实验时发现其中存在潜在的竞争条件:#9814 示例参见链接。#11270(alexey-milovidov)。 - 如果
curl调用超时,则在 CI 中重新运行测试。这可能是由于我们的 CI 基础设施中常见的系统挂起(持续 10 秒以上)导致的。此更改修复了 #11267。#11268(alexey-milovidov)。 - 由 @donmikel 添加 Join 表引擎的测试。该更改关闭了 #9158。#11265(alexey-milovidov)。
- 修复了单元测试中几处不重要的小错误。 #11262 (alesapin).
- 现在,
cctz库的链接器命令部分将不会再与其他库混在一起或被打乱顺序。#11213 (alesapin). - 将 /programs/server 拆分为可执行程序和库。#11186 (Ivan).
- 改进 protobuf 和 gRPC 的构建脚本。#11172 (Vitaly Baranov)。
- 启用此前无法运行的性能测试。#11158 (alexey-milovidov).
- 在启动任何 CH 实例之前,为测试创建 S3 根 bucket。 #11142 (Pavel Kovalenko).
- 为非常量多边形添加性能测试。 #11141 (alexey-milovidov).
- 修复
00979_live_view_watch_continuous_aggregates测试。#11024(vzakaznikov)。 - 新增在集成测试中在 tmpfs 上运行 ZooKeeper 的支持。 #11002 (alesapin).
- 对 odbc-bridge 的等待使用指数退避机制。之前在我们的 CI 环境中,200 ms 的等待时间不够。#10990 (alexey-milovidov).
- 修复非确定性测试。#10989(alexey-milovidov)。
- 为外部数据为空的情况添加了测试。#10926(alexey-milovidov)。
- 数据库会在每次测试中重新创建,这样可以更好地隔离各个测试。#10902 (alexey-milovidov).
- 在列相关代码中添加了更多断言。 #10833 (alexey-milovidov).
- 与 sanitizers 更好地配合使用。在 sanitizer 失败时的消息中打印 query_id 信息。#10832 (alexey-milovidov)。
- 修复“Split build smoke test”检查中的明显竞态条件。#10820 (alexey-milovidov).
- 修复 MergeTreeIndexFullText 中 MSan 的误报。该问题最初出现在 #9968。#10801(alexey-milovidov)。
- 为 MariaDB 客户端库添加 MSan 抑制规则。#10800 (alexey-milovidov).
- GRPC 的 make 无法找到 protobuf 文件,通过在 makefile 中添加正确的路径进行了修复。 #10794 (mnkonkova).
- 为 base、utils、programs 启用额外警告(
-Weverything)。注意,我们已在大部分代码中启用了该选项。#10779 (alexey-milovidov)。 - 在 #10396 中,对来自库的警告抑制被误设为 public。#10776(alexey-milovidov)。
- 恢复在 #10396 中被误删的补丁。#10774 (alexey-milovidov)。
- 修复性能测试中的错误,第二部分。 #10773 (alexey-milovidov).
- 修复性能测试中的错误。 #10766 (alexey-milovidov).
- 将交叉编译构建更新为使用 clang-10 编译器。#10724(Ivan)。
- 更新 RPM 软件包的安装说明。此修改由 Denis(TG 账号 @ldviolet)提出,并由 Arkady Shejn 实现。#10707(alexey-milovidov)。
- 尝试修复
tests/queries/0_stateless/01246_insert_into_watch_live_view.py测试。#10670(vzakaznikov)。 - 修复并重新启用 00979_live_view_watch_continuous_aggregates.py 测试用例。#10658 (vzakaznikov).
- 修复 ASan 压力测试中的 OOM。 #10646 (alexey-milovidov).
- 修复在迁移到 clang-10 后出现在 HashTable 中的 UBSan 报告(对 nullptr 执行加零操作)。 #10638 (alexey-milovidov)。
- 在编译时处理 tzdata 的过程中,移除对
ld(bfd)链接器的外部调用。#10634 (alesapin)。 - 允许使用
lld链接 blob(资源)。 #10632 (alexey-milovidov). - 修复
LZ4库中 UBSan 报告的问题。#10631(alexey-milovidov)。另见 https://github.com/lz4/lz4/issues/857 - 将 LZ4 更新到最新的开发分支。#10630 (alexey-milovidov)。
- 添加了自动生成的、包含稳定版本列表的机器可读文件。#10628 (alexey-milovidov)。
- 修正
capnp::UnalignedFlatArrayMessageReader的capnproto版本检查。#10618(Matwey V. Kornilov)。 - 在测试中降低内存占用。 #10617 (alexey-milovidov).
- 修复新 live view 测试中的硬编码超时时间。 #10604 (vzakaznikov).
- 将 tests/queries/0_stateless/helpers/client.py 中打开客户端的超时时间调大。#10599(vzakaznikov)。
- 为 clang 构建启用 ThinLTO,作为 #10435 的后续工作。#10585(Amos Bird)。
- 添加模糊测试工具并为 OSS-Fuzz 集成做准备。 #10546 (kyprizel).
- 修复 FreeBSD 下的构建。#10150(Ivan)。
- 为查询测试新增基于 pytest 框架的构建。#10039(Ivan)。
ClickHouse 版本 v20.4
ClickHouse 版本 v20.4.8.99-stable 2020-08-10
Bug 修复
- 修复了当将 Unix 时间戳作为参数传入时,
parseDateTimeBestEffort函数中的错误。该修复解决了 #13362。#13441(alexey-milovidov)。 - 修复了在包含 NaN 值的 Float 类型上调用
uniqExact、topK、sumDistinct等类似聚合函数时,可能出现的性能较低和结果略有偏差的问题。该问题还会在调试构建中触发 assert。本修复对应 #12491。#13254(alexey-milovidov)。 - 修复了在 if 函数中使用可为空的 constexpr 作为条件且该条件不是字面量 NULL 时的问题。修复了 #12463。#13226(alexey-milovidov)。
- 修复了在
arrayElement函数中,当数组元素为 Nullable 且数组下标也为 Nullable 时触发的断言失败问题。此修复解决了 #12172。#13224(alexey-milovidov)。 - 修复了包含函数的错误索引分析问题。该问题在读取
MergeTree表时可能导致错误地裁剪数据分片。修复了 #13060。修复了 #12406。#13081(Anton Popov)。 - 修复了在从本地副本执行 SELECT 查询时对线程数施加的不必要限制。#12840 (Nikolai Kochetov).
- 修复了在使用
WITH TOTALS的查询中,数据中可能出现的多余溢出行。#12747 (Nikolai Kochetov). - 修复了在
IN子句中将较大 tuple 解释为函数时的性能问题。出于某种难以理解的原因,用户可能会写成WHERE x IN tuple(1, 2, ...),而不是WHERE x IN (1, 2, ...)。#12700(Anton Popov)。 - 修复了
input_format_parallel_parsing的内存追踪问题(通过将线程附加到线程组来实现)。 #12672 (Azat Khuzhin). - 修复了 #12293,在子查询包含 WITH 子句时允许进行谓词下推。#12663 (Winter Zhang).
- 修复了 #10572 中与常量表达式相关的 Bloom Filter 索引问题。#12659(Winter Zhang)。
- 修复了在 broker 不可用等情况下
StorageKafka中出现的SIGSEGV问题。#12658 (Azat Khuzhin). - 增加了函数
if对Array(UUID)参数的支持。修复了 #11066。#12648(alexey-milovidov)。 - 修复了采用缓存布局的外部字典中的竞态条件,该问题可能导致服务器崩溃。#12566 (alesapin).
- 在执行 DROP TABLE 时,现在也会删除 Distributed 表的数据(来自异步 INSERT 的数据块)。 #12556 (Azat Khuzhin).
- 修复了在
enable_mixed_granularity_parts=1时执行ALTER DELETE查询会导致旧分片损坏的问题。修复了 #12536。#12543(alesapin)。 - 改进了函数
in在参数数量无效时的异常信息。 #12529 (Anton Popov). - 修复了从紧凑数据片段读取时的性能问题。#12492 (Anton Popov)。
- 修复了在使用字典进行 JOIN 时的崩溃问题,当通过字典键的表达式进行连接时会出现该问题:
t JOIN dict ON expr(dict.id) = t.id。在这种情况下禁用字典 JOIN 优化。#12458(Artem Zuikov)。 - 修复了使用 StorageMerge 时可能出现的段错误问题。关闭 #12054。#12401(tavplubix)。
- 修复了
WITH FILL修饰符中列顺序不固定的问题。此前不会遵循ORDER BY语句中的列顺序。#12306 (Anton Popov). - 当存在按虚拟列(例如
Merge表中的_table)或系统表中的“索引列”过滤数据的表达式(例如在查询system.tables时按数据库名过滤),且该表达式返回Nullable类型时,避免触发 “bad cast” 异常。修复了 #12166。#12305(alexey-milovidov)。 - 在 TrieDictionary 加载失败时显示错误。#12290 (Vitaly Baranov).
- 函数
arrayFill在处理空数组时行为不正确,可能导致崩溃。本次修复解决了 #12263。#12279(alexey-milovidov)。 - 为
LowCardinality类型实现了到共同类型的转换。从而可以对包含 LowCardinality 列以及其他列的表执行 UNION ALL 操作。修复了 #8212。修复了 #4342。#12275(alexey-milovidov)。 - 修复了在进行多次连续插入时,
StorageFile中某些特殊类型的 header 被重复写入的问题。此修复解决了 #6155。#12197(Nikita Mikhaylov)。 - 修复了
UInt8类型在取值不为 0 或 1 时的逻辑函数行为。#12196 (Alexander Kazakov)。 - 将 max_memory_usage* 的上限限定为进程的常驻内存大小。#12182 (Azat Khuzhin).
- 在 GROUP BY 单射函数消除过程中,修复了对
dictGet参数的检查。#12179 (Azat Khuzhin). - 如果 ODBC 连接不支持 schema,则不要将字典源的表名拆分为 schema 名和表名本身。 #12165 (Vitaly Baranov).
- 修复了
ALTER DELETE中的错误逻辑,该逻辑会在条件计算结果为 NULL 时导致记录被删除。此修复解决了 #9088。并关闭了 #12106。#12153(alexey-milovidov)。 - 修复了在存在别名时,将查询转换后发送到外部 DBMS(例如 MySQL、ODBC)的逻辑。这修复了 #12032。#12151(alexey-milovidov)。
- 修复了整数除法中可能出现的溢出问题。解决了 #12119。#12140(alexey-milovidov)。
- 修复了
greatCircleDistance、geoDistance中潜在的无限循环问题。这修复了 #12117。#12137 (alexey-milovidov)。 - 规范化对 "pid" 文件的处理逻辑。在之前的版本中,如果服务器在未正常关闭的情况下被强制终止,并且存在另一个进程,其 pid 与之前运行的服务器相同,则服务器可能会拒绝启动。此外,即使有另一个服务器正在运行,在服务器启动失败的情况下 pid 文件也可能被删除。此更改修复了 #3501。#12133(alexey-milovidov)。
- 修复了依赖字典的 ENGINE=Dictionary 表的处理逻辑。修复了 #10994。修复了 #10397。#12116(Vitaly Baranov)。
- 修复了由于设置的线程总数上限错误而导致带有
UNION的 SELECT 查询性能问题。修复了 #12030。#12103(Nikolai Kochetov)。 - 修复了由
-StateResample组合器导致的段错误。#12092(Anton Popov)。 - 修复了在
system.quey_log中针对 SELECT 查询时result_rows和result_bytes指标为空的问题。修复了 #11595。#12089(Nikolai Kochetov)。 - 修复了从
VIEW中执行 SELECT 时对线程数量的多余限制。解决了 #11937。#12085(Nikolai Kochetov)。 - 修复了在为
PREWHERE使用错误类型时可能出现的崩溃问题。修复了 #12053、#12060。#12060(Nikolai Kochetov)。 - 修复了在
LowCardinality类型下使用函数defaultValueOfArgumentType时出现的错误Expected single dictionary argument for function,对应问题 #11808。#12056(Nikolai Kochetov)。 - 修复了在高阶函数使用
Tuple(LowCardinality)参数时引发的Cannot capture column错误。修复了 #9766。 #12055(Nikolai Kochetov)。 - 在加载数据库时并行解析表的元数据,解决了在表数量较多时服务器启动缓慢的问题。 #12045 (tavplubix).
- 使
topK聚合函数在处理 Enum 类型时返回 Enum 类型。修复了 #3740。#12043(alexey-milovidov)。 - 修复了约束检查,现在会验证约束是否为常量表达式。这修复了 #11360。#12042(alexey-milovidov)。
- 修复了对包含
Nullable列的元组进行比较时的错误。已修复 #11985。#12039(Nikolai Kochetov)。 - 修复了在
allow_introspection_functions=0时访问权限计算错误的问题。 #12031 (Vitaly Baranov). - 修复了在调用函数
if时,当参数为大小不同的FixedString类型时会导致结果不正确和潜在崩溃的问题。此更改修复了 #11362。 #12021 (alexey-milovidov). - 如果查询只返回函数
neighbor的一个表达式,那么当该函数以偏移量-9223372036854775808调用时,可能会返回空结果。此更改修复了 #11367。#12019(alexey-milovidov)。 - 修复了在 allow_ddl=0 时访问权限计算的问题。#12015 (Vitaly Baranov).
- 修复了
generateRandom中可能导致崩溃的潜在数组大小溢出问题。这修复了 #11371。#12013(alexey-milovidov)。 - 修复了潜在的浮点运算异常。此更改关闭了 #11378。#12005(alexey-milovidov)。
- 修复了服务器启动时日志消息中错误的配置项名称。#11997(alexey-milovidov)。
- 已修复在
Values格式中出现的Query parameter was not set错误。修复了 #11918。#11936(tavplubix)。 - 在查询(参数化查询)中保留替换所使用的别名。修复了 #11914。#11916(alexey-milovidov)。
- 修复了从默认存储策略更改为其他策略时未发生数据移动的错误。#11893 (Vladimir Chebotarev).
- 修复了解析
DateTime64时可能出现的浮点运算异常。此修复解决了 #11374。#11875(alexey-milovidov)。 - 修复了通过 HTTP 接口的内存统计问题(在
wait_end_of_query=1时影响可能较大)。 #11840 (Azat Khuzhin). - 在进行相等性比较之前解析存储在 ZooKeeper 中的元数据。#11739 (Azat Khuzhin).
性能改进
- 在使用字面量的
IN运算符时未使用索引,导致在 v19.3 左右引入了性能回归问题。本修复解决了 #10574。#12062(nvartolomei)。
构建/测试/打包改进
- 在 Dockerfile 中首次执行
apt-get update之前安装ca-certificates。#12095(Ivan Blinkov)。
ClickHouse 发布 v20.4.6.53-stable 2020-06-25
Bug 修复
- 修复在
PREWHERE条件中使用Nullable列导致的罕见崩溃问题。作为对 #11608 的后续修复。#11869(Nikolai Kochetov)。 - 不再允许在高阶函数内部使用 arrayJoin。它会导致协议同步出错。此更改关闭了 #3933。#11846 (alexey-milovidov)。
- 修复
FixedString与常量String比较时产生错误结果的问题。此修复对应 #11393。该缺陷首次出现在 20.4 版本中。#11828(alexey-milovidov)。 - 修复
if()在条件中包含 NULL 时返回结果错误的问题。#11807 (Artem Zuikov). - 修复查询线程数过多的问题。#11788 (Nikolai Kochetov)。
- 修复了诸如
SELECT *, xyz.*这类查询的异常行为,此前在本应报错的情况下却成功执行。#11753 (hexiaoting)。 - 现在,在执行元数据 ALTER 操作期间将会取消复制拉取操作。 #11744 (alesapin).
- 修复了由于在 Values 输入格式中对复杂字面量类型推断错误而导致的 LOGICAL_ERROR。 #11732 (tavplubix).
- 修复在常量列上使用
ORDER BY ... WITH FILL的问题。#11697(Anton Popov)。 - 在与 XDBC bridge 通信时正确设置超时时间。此前在检查 bridge 存活状态和接收元信息时未正确应用超时时间。#11690(alexey-milovidov)。
- 修复在与包含别名的
ORDER BY子句一起使用LIMIT n WITH TIES时的问题。#11689 (Anton Popov). - 修复导致
system.mutations状态不正确的错误。该错误可能会导致其显示整个 mutation 已经完成,但服务器的复制队列中仍然存在MUTATE_PART任务并继续尝试执行它们。此修复对应 #11611。#11681(alesapin)。 - 添加对带有大小写不敏感标志的正则表达式的支持。修复了 #11101 和 #11506。 #11649 (alexey-milovidov)。
- 如果启用了行级安全性,则移除对简单计数查询的优化。在之前的版本中,用户获得的是表中记录的总数,而不是过滤后的记录总数。这修复了 #11352。#11644(alexey-milovidov)。
- 修复用于 String 类型的 Bloom 过滤器(数据跳过索引)。#11638 (Azat Khuzhin)。
- 修复在
prewhere条件中使用Nullable列时导致的罕见崩溃。(可能与 #11572 有关)。#11608(Nikolai Kochetov)。 - 修复在从
Buffer表进行采样读取的查询中出现的Block structure mismatch错误。 #11602 (Nikolai Kochetov). - 修复在 exception.code() % 256 = 0 时 clickhouse-client 返回的不正确退出码。 #11601 (filimonov).
- 修复了服务器启动时关于“Mark cache size was lowered”的日志消息中的一个轻微错误。此更改从而关闭了 #11399。#11589(alexey-milovidov)。
- 修复在包含
PREWHERE column in (subquery)和ARRAY JOIN的查询中出现的报错Size of offsets does not match size of column。 #11580 (Nikolai Kochetov)。 - 修复了
SHOW CREATE TABLE中的罕见段错误。修复了 #11490,对应的合并请求为 #11579(tavplubix)。 - HTTP 会话中的所有查询都使用相同的 query_id。已修复该问题。 #11578 (tavplubix).
- 现在,clickhouse-server Docker 容器在检查服务器是否存活时将优先使用 IPv6。#11550 (Ivan Starkov)。
- 修复
<node>的 shard_num/replica_num(此前会导致 use_compact_format_in_distributed_parts_names 失效)。#11528 (Azat Khuzhin)。 - 修复了可能在删除表时导致异常的竞态条件。这有点棘手,但完全无害。如果你想要详细解释,只需在 Telegram 上给我发个消息即可。 #11523 (alesapin).
- 修复在使用以 -State 结尾的聚合函数时,如果在聚合过程中抛出异常会导致的内存泄漏问题。此变更修复了 #8995。#11496(alexey-milovidov)。
- 如果数据跳过索引依赖的列会在后台合并过程中被修改(适用于 SummingMergeTree、AggregatingMergeTree 以及 TTL GROUP BY),则其计算会不正确。通过将索引计算移动到合并之后(即在合并后的数据上计算索引),已修复此问题。#11162(Azat Khuzhin)。
- 移除旧的 libunwind 补丁。https://github.com/ClickHouse-Extras/libunwind/commit/500aa227911bd185a94bfc071d68f4d3b03cb3b1#r39048012 这使我们能够在
clang构建中禁用-fno-omit-frame-pointer选项,从而平均至少提升 1% 的性能。#10761(Amos Bird)。 - 修复在同时使用 'FINAL' 修饰符和 'ORDER BY' 优化时,对被包装在函数中的主键的使用方式。#10715 (Anton Popov).
构建/测试/打包改进
- 修复了若干单元测试中的非关键错误。#11262 (alesapin).
- 修复 MergeTreeIndexFullText 中的(误报)MSan 报告。该问题最早出现在 #9968。#10801 (alexey-milovidov).
ClickHouse 版本 v20.4.5.36-stable 2020-06-10
错误修复
- 修复在启用
min_bytes_to_use_direct_io且 PREWHERE 处于激活状态,并使用 SAMPLE 或大量线程时可能出现的错误Data compressed with different methods。此更改修复了 #11539。#11540(alexey-milovidov)。 - 修复编解码器返回的压缩大小。 #11448 (Nikolai Kochetov)。
- 修复当某列使用带有非字面量参数的压缩编解码器时导致的服务器崩溃问题。修复 #11365。#11431(alesapin)。
- 修复点为 NaN 时的
pointInPolygon。修复了 #11375。#11421(Alexey Ilyukhov)。 - 修复在表未成功创建时,MergeTree 引擎关闭过程中可能出现的未初始化内存读取问题。#11420(alexey-milovidov)。
- 修复了当参数超出纬度/经度范围时的 geohashesInBox。 #11403 (Vasily Nemkov).
- 修复了可能导致在使用外部排序和
LIMIT的查询中出现Pipeline stuck错误的问题。修复了 #11359。#11366(Nikolai Kochetov)。 - 在 ReplicatedMergeTree 中发送数据分片时移除冗余锁。#11354 (alesapin).
- 修复 clickhouse-client 在多行模式下对
\G(纵向输出)的支持问题。此更改解决了 #9933。#11350(alexey-milovidov)。 - 修复在使用
Lazy数据库时可能出现的段错误。 #11348 (alexey-milovidov). - 修复
quantilesExactWeightedArray中的崩溃问题。#11337 (Nikolai Kochetov)。 - 现在在执行
ALTER查询修改元数据之前会先停止合并。#11335 (alesapin)。 - 在设置
parallel_view_processing = 1时重新启用对MATERIALIZED VIEW的并行写入。修复了 #10241。#11330(Nikolai Kochetov)。 - 修复
visitParamExtractRaw在提取的 JSON 中包含不成对的 { 或 [ 的字符串时出现的问题。 #11318 (Ewout)。 - 修复 ThreadPool 中极其罕见的竞态条件。 #11314 (alexey-milovidov)。
- 修复 clickhouse-copier 中一个轻微的数据竞争问题。由集成测试发现。#11313 (alexey-milovidov)。
- 修复转换中潜在的未初始化内存使用问题。例如:
SELECT toIntervalSecond(now64())。#11311(alexey-milovidov)。 - 修复了当表的主键中包含 Array 列,且查询使用
empty或notEmpty函数按该列进行过滤时,索引分析无法工作的问题。此修复对应 #11286。#11303(alexey-milovidov)。 - 修复了一个问题:当查询速度估算不正确时,如果查询被
max_network_bandwidth、max_execution_speed或priority设置限流,min_execution_speed的限制可能不起作用或工作异常。将timeout_before_checking_execution_speed的默认值更改为非零值,否则min_execution_speed和max_execution_speed设置将不会生效。修复了 #11297、#5732 和 #6228。可用性改进:在clickhouse-client中避免将异常信息与进度条拼接。#11296 (alexey-milovidov)。 - 修复在调用
SET DEFAULT ROLE时传入错误参数导致的崩溃。此更改修复了 #10586。#11278(Vitaly Baranov)。 - 修复读取 Protobuf 格式异常数据时发生的崩溃。修复了 #5957 和 #11203。#11258(Vitaly Baranov)。
- 修复了一个 bug:在所有键均已过期时,
cache-dictionary可能返回默认值而不是正确值。此问题仅影响字符串字段。#11233(Nikita Mikhaylov)。 - 修复在从
VIEW读取且内部查询中包含常量时出现的错误Block structure mismatch in QueryPipeline。修复了 #11181。#11205(Nikolai Kochetov)。 - 修复潜在异常
Invalid status for associated output。 #11200 (Nikolai Kochetov). - 修复在高阶函数中,当捕获的参数为
Array(Array(LowCardinality))时可能出现的Cannot capture column错误。 #11185 (Nikolai Kochetov). - 修复了 S3 通配符匹配(globbing)在键数量超过 1000 且使用某些后端时可能失败的问题。#11179 (Vladimir Chebotarev)。
- 如果数据跳过索引依赖于在后台合并过程中将被修改的列(对于 SummingMergeTree、AggregatingMergeTree 以及 TTL GROUP BY),则索引会被错误计算。该问题已通过将索引计算移动到合并之后,在合并后的数据上计算索引来修复。 #11162 (Azat Khuzhin).
- 修复 Kafka 在基于限制进行重新调度时的性能问题,此前这些限制会被无条件应用。#11149 (filimonov).
- 修复了在对使用 Kafka 引擎的表执行 DROP 操作(或在服务器重启期间)时偶发出现的挂起问题。#11145 (filimonov).
- 修复针对简单查询过度预留线程的问题(在更改 pipeline 之后部分失效的用于减少线程数的优化)。 #11114 (Azat Khuzhin).
- 通过保留表达式的顺序(这足以修复该问题),并强制聚合器优先使用列名而不是索引,修复在启用谓词优化(
enable_optimize_predicate_expression=1)时、对包含HAVING子句的分布式查询(即需要在发起查询的服务器上进行过滤的情况)的处理。修复:#10613、#11413、#10621(Azat Khuzhin)。
构建/测试/打包改进
ClickHouse 发布 v20.4.4.18-stable 2020-05-26
与 v20.4.3.16-stable 相比没有变更。
ClickHouse 发布 v20.4.3.16-stable 2020-05-23
Bug 修复
- 当没有任何内容被最终确定时,移除了 mutation 完成任务中的日志记录。#11109 (alesapin)。
- 修复
registerDiskS3中的内存泄漏。 #11074 (Pavel Kovalenko). - 修复了在停止 Kafka 引擎表时可能出现的数据丢失问题。#11048 (filimonov).
- 修复了
parseDateTime64BestEffort参数解析错误。#11038 (Vasily Nemkov). - 修复了在表未成功创建时,
MergeTree中极少数情况下可能出现的潜在 use-after-free 错误。#10986, #10970 (alexey-milovidov). - 修复了 Atomic 数据库的元数据(重命名时使用的相对路径)和数据(符号链接使用的相对路径)的处理方式。#10980 (Azat Khuzhin).
- 修复了在
Atomic数据库引擎中并发执行ALTER和DROP DATABASE查询时可能导致的服务器崩溃问题。#10968 (tavplubix). - 修复了
getRawData()方法中原始数据大小错误的问题。#10964 (Igr). - 修复了 20.1 及更早版本之间在两级聚合上的不兼容问题。当在发起节点和远程节点上使用不同版本的 ClickHouse,且
GROUP BY结果集较大并且聚合是基于单个 String 字段执行时,就会触发该不兼容问题。这会导致结果中同一个键对应多行未合并的记录。#10952 (alexey-milovidov)。 - 修复了
DistributedBlockOutputStream发送部分写入的文件的问题。 #10940 (Azat Khuzhin). - 修复了在执行
SELECT count(notNullIn(NULL, []))时出现的崩溃问题。#10920 (Nikolai Kochetov)。 - 修复了在对
Kafka表引擎执行DROP操作时(或在服务器重启期间)偶发的挂起问题。 #10910 (filimonov). - 修复了类似
a TO b, c TO a这样的多个ALTER RENAME语句无法执行的问题。 #10895 (alesapin). - 修复了在针对同一列从多个线程获取聚合函数状态结果时可能出现的竞态条件。这种情况只会在以下场景中发生:当你在读取使用
Memory引擎、并以AggregateFunction存储quantile*函数状态的表时调用finalizeAggregation函数。#10890(Nikolai Kochetov)。 - 修复了 Distributed 表中元组的向后兼容性问题。 #10889 (Anton Popov).
- 修复了在
StringHashTable中查找不存在的键时出现的SIGSEGV。#10870 (Azat Khuzhin). - 修复了在从使用
Atomic引擎的数据库中删除LiveView表之后出现的WATCH挂起问题。#10859 (tavplubix). - 修复了
ReplicatedMergeTree中的一个缺陷,该缺陷可能会导致某些包含OPTIMIZE的ALTER查询在某个副本变为非活动状态后仍然一直等待该副本,从而发生挂起。#10849 (tavplubix)。 - 现在,当参与
CONSTRAINT表达式的列被重命名时,会同步更新相应的约束。修复了 #10844。#10847(alesapin)。 - 修复了
cache-dictionary中可能读取未初始化内存的问题。 #10834 (alexey-milovidov). - 在调用
Block::sortColumns()后修复了列顺序。#10826 (Azat Khuzhin)。 - 修复了在未请求为标识符添加引号时
ODBCbridge 出现的问题。修复了 #7984。#10821(alexey-milovidov)。 - 修复了
DateLUT中的UBSan和MSan报告问题。#10798 (alexey-milovidov)。 - 修正了键条件中的错误类型转换。修复了 #6287。#10791(Andrew Onyshchuk)。
- 修复了
parallel_view_processing的行为。现在,即使发生异常,所有对MATERIALIZED VIEW的插入也应无一例外地完成。修复了 #10241。#10757 (Nikolai Kochetov)。 - 修复了在与
-State组合使用时-OrNull和-OrDefault组合器的问题。#10741 (hcz)。 - 修复函数
h3EdgeAngle中可能发生的缓冲区溢出问题。 #10711 (alexey-milovidov). - 修复了在表包含大量数据分片时导致并发
ALTER操作被锁定的 bug。 #10659 (alesapin). - 修复了在服务器在表启动前关闭时,
StorageBuffer中出现的nullptr解引用问题。#10641 (alexey-milovidov)。 - 修复了
optimize_skip_unused_shards与LowCardinality搭配使用时的问题。 #10611 (Azat Khuzhin). - 修复了同步变更中对条件变量的处理。在某些情况下,发往该条件变量的信号可能会丢失。 #10588 (Vladimir Chebotarev).
- 修复了在
loadStoredObject()尚未完成时调用createDictionary()可能导致的崩溃问题。#10587 (Vitaly Baranov)。 - 修复了在列
ALIAS的默认表达式类型与列类型不同情况下的SELECT查询。#10563 (Azat Khuzhin)。 - 实现了
DateTime64与String类型值之间的比较。#10560(Vasily Nemkov)。 - 默认禁用
GROUP BYsharding_key 优化(optimize_distributed_group_by_sharding_key已经引入且默认关闭,这是由于对 sharding_key 的分析较为棘手,最简单的例子是在 sharding key 中使用if),并修复其在WITH ROLLUP/CUBE/TOTALS下的行为。#10516 (Azat Khuzhin)。 - 已修复 #10263。#10486(Azat Khuzhin)。
- 添加了针对
max_rows_to_sort设置的测试。#10268 (alexey-milovidov). - 为创建 Bloom Filter 索引新增了向后兼容支持。#10551。#10569 (Winter Zhang)。
ClickHouse 发行版 v20.4.2.9,2020-05-12
向后不兼容的变更
- 系统表(例如
system.query_log、system.trace_log、system.metric_log)对于大小小于 10 MiB 的数据分片使用紧凑数据分片格式。紧凑数据分片格式自 20.3 版本起开始支持。如果你打算降级到低于 20.3 的版本,需要手动删除/var/lib/clickhouse/data/system/中系统日志表的数据。 - 当字符串比较涉及
FixedString且被比较参数长度不同时,比较时将长度较短的字符串视为已经填充至与长度较长字符串相同的长度。这样可以实现 SQL 兼容性,如果我们将FixedString数据类型视为对应 SQL 中的CHAR。此更改修复了 #9272。#10363(alexey-milovidov) - 使
SHOW CREATE TABLE的输出改为多行。现在更易阅读,也更接近 MySQL。#10049(Azat Khuzhin) - 新增设置
validate_polygons,用于pointInPolygon函数,默认启用。#9857(alexey-milovidov)
新功能
- 增加对从 ClickHouse 到 Zookeeper 的安全连接的支持 #10184 (Konstantin Lebedev)
- 支持自定义 HTTP 处理器。说明见 #5436。#7572(Winter Zhang)
- 添加 MessagePack 输入/输出格式。#9889 (Kruglov Pavel)
- 新增 Regexp 输入格式。 #9196 (Kruglov Pavel)
- 新增输出格式
Markdown,用于在 Markdown 文档中嵌入表格。#10317 (Kruglov Pavel) - 为字典添加了对自定义 settings 部分的支持,并修复了问题 #2829。#10137(Artem Streltsov)
- 为
CREATE DICTIONARY的 DDL 查询添加了对自定义设置的支持 #10465(Artem Streltsov) - 新增一个简单的服务器级内存分析器,当服务器内存使用量超过下一个分配阈值时收集内存分配上下文信息。 #10444 (alexey-milovidov)
- 添加设置
always_fetch_merged_part,用于限制副本自行执行合并,并始终优先从其他副本下载。 #10379 (alesapin) - 添加函数
JSONExtractKeysAndValuesRaw,用于从 JSON 对象中提取原始数据 #10378 (hcz) - 将操作系统的内存使用情况添加到
system.asynchronous_metrics。 #10361 (alexey-milovidov) - 为函数
least和greatest增加了泛型版本。现在它们可以处理任意数量、任意类型的参数。此更改修复了 #4767 #10318(alexey-milovidov) - 现在 ClickHouse 在自身内部控制字典源的超时。向缓存字典配置中新增了两个配置项:
strict_max_lifetime_seconds(默认等于max_lifetime),以及query_wait_timeout_milliseconds(默认值为一分钟)。第一个配置项在配合allow_read_expired_keys设置使用时也很有用(用于禁止读取已经严重过期的键)。#10337 (Nikita Mikhaylov) - 添加 log_queries_min_type 参数,用于筛选哪些记录会被写入 query_log #10053 (Azat Khuzhin)
- 新增函数
isConstant。该函数用于检查其参数是否为常量表达式,并返回 1 或 0。主要用于开发、调试和演示。 #10198 (alexey-milovidov) - 添加 joinGetOrNull 函数,在键缺失时返回 NULL,而不是返回默认值。 #10094 (Amos Bird)
- 如果设置了选项
transform_null_in,则在IN运算符中将NULL视为等于NULL。 #10085 (achimbab) - 为 MergeTree 表引擎系列添加
ALTER TABLE ... RENAME COLUMN。 #9948 (alesapin) - 支持并行分布式 INSERT SELECT 语句。 #9759 (vxider)
- 新增支持在不使用
distributed_group_by_no_merge时查询 Distributed over Distributed ... #9923 (Azat Khuzhin) - 添加函数
arrayReduceInRanges,用于在给定范围内聚合数组元素。#9598 (hcz) - 在 Prometheus exporter 中添加 Dictionary 状态信息。 #9622 (Guillaume Tassery)
- 添加函数
arrayAUC#8698 (taiyang-li) - 支持
DROP VIEW语句,以获得更好的 TPC-H 兼容性。#9831 (Amos Bird) - 新增 windowFunnel() 的 'strict_order' 选项 #9773 (achimbab)
- 支持
DATE和TIMESTAMPSQL 运算符,例如SELECT date '2001-01-01'#9691 (Artem Zuikov)
实验特性
- 新增实验性数据库引擎 Atomic。它支持非阻塞的
DROP和RENAME TABLE查询,以及原子性的EXCHANGE TABLES t1 AND t2查询 #7512 (tavplubix) - 初步支持基于 S3 的 ReplicatedMergeTree(目前实现方式尚不理想) #10126 (Pavel Kovalenko)
错误修复
- 修复了在
MATERIALIZED VIEW的内部查询中包含依赖表时标量结果计算错误的问题 #10603 (Nikolai Kochetov) - 修复了一个问题:当
readonly=2且cancel_http_readonly_queries_on_client_close=1时,客户端关闭连接会导致 HTTP 请求卡住。 #10684 (tavplubix) - 修复了在服务器启动时抛出异常会导致 StorageBuffer 段错误的问题。修复了 #10550 #10609(tavplubix)
- 查询语句
SYSTEM DROP DNS CACHE现在也会清除用于检查用户是否被允许从特定 IP 地址发起连接的缓存 #10608 (tavplubix) - 修复在单个查询中多次对同一集合使用
IN运算符的情况。修复了 #10539 #10686(Anton Popov) - 修复
generateRandom在处理嵌套类型时的崩溃问题。修复了 #10583。#10734(Nikolai Kochetov) - 修复
SummingMergeTree中LowCardinality(FixedString)键列在合并后可能出现的数据损坏。修复 #10489。#10721(Nikolai Kochetov) - 修复
aggregation_memory_efficient_merge_threads设置项的逻辑。 #10667 (palasonic1) - 修复总计消失的问题。如果查询包含
JOIN或带有外部WHERE条件的子查询,总计可能会被错误过滤掉。修复了 #10674 #10698(Nikolai Kochetov) - 修复在启用
distributed_aggregation_memory_efficient时远程查询无法并行执行的问题。对应修复 #10655 #10664(Nikolai Kochetov) - 修复在使用
LIMIT的查询中可能出现的行数不正确问题。对应修复了 #10566、#10709、#10660(Nikolai Kochetov) - 修复在某些情况下将紧凑部分合并到另一紧凑部分后可能出现的索引损坏问题。 #10531 (Anton Popov)
- 修复了一种问题:当 mutation 已完成所有 part,却仍然停留在
is_done=0状态。#10526 (alesapin) - 修复在 Unix 纪元起点,对于相对于 UTC 具有小数偏移的时区出现的溢出问题。修复了 #9335。#10513(alexey-milovidov)
- 改进输入格式的诊断能力。修复了 #10204 #10418(tavplubix)
- 修复
simpleLinearRegression()在处理大整数时的数值溢出 #10474 (hcz) - 修复 Distributed 引擎关闭过程中的 use-after-free,避免等待发送所有批次 #10491 (Azat Khuzhin)
- 向 clickhouse-server Docker 镜像添加 CA 证书 #10476 (filimonov)
- 修复在使用
addressToLine函数或 AggregateFunctionState 列时可能出现的罕见无限循环。 #10466 (Alexander Kuzmenkov) - 在分布式查询过程中处理 ZooKeeper 的 “no node error” 错误 #10050 (Daniel Chen)
- 修复了在列的默认值被修改后服务器无法附加表的错误。#10441 (alesapin)
- 对 ALIAS 列,将默认表达式类型隐式转换为列类型 #10563 (Azat Khuzhin)
- 在
ATTACH DATABASE失败时不要删除 metadata 目录 #10442 (Winter Zhang) - 避免对系统 tzdata 的依赖。修复在 CentOS 8 上加载
Africa/Casablanca时区的问题。修复 #10211 #10425 (alexey-milovidov) - 修复了在使用 quorum 写入方式插入数据后又删除数据(DROP PARTITION、TTL 等)时出现的一些问题。这些问题会导致 INSERT 操作卡住,或者在 SELECT 查询中抛出误报异常。修复了 #9946 #10188(Nikita Mikhaylov)
- 在创建 BloomFilter 索引时,检查参数的数量和类型 #9623 #10431 (Winter Zhang)
- 优先使用
fallback_to_stale_replicas而不要使用skip_unavailable_shards,否则在同时设置了这两个选项且没有最新副本时,查询会失败(来自 @alex-zaitsev 的补丁)#10422 (Azat Khuzhin) - 修复了在包含 ARRAY JOIN、ORDER BY 和 LIMIT 的查询中可能返回不完整结果的问题。对应修复为 #10226。#10427(Vadim Plakhtinskiy)
- 在执行 DETACH/ATTACH 后将数据库名添加到字典名中,以修复 system.dictionaries 表和
SYSTEM RELOAD查询 #10415 (Azat Khuzhin) - 修复处理器流水线中 extremes 可能产生的错误结果。 #10131 (Nikolai Kochetov)
- 修复在启用
distributed_group_by_no_merge设置时可能出现的潜在段错误(在 20.3.7.46 中由 #10131 引入)。#10399(Nikolai Kochetov) - 修复
Array(Tuple(...))数据类型错误的扁平化处理方式。修复了 #10259 #10390(alexey-milovidov) - 修正 JOIN 内部常量的列名,避免与 JOIN 外部常量的列名发生冲突 #9950 (Alexander Kuzmenkov)
- 修正
Block::sortColumns()之后的列顺序 #10826 (Azat Khuzhin) - 修复
ConcatProcessor中在远程查询时可能出现的Pipeline stuck错误。 #10381 (Nikolai Kochetov) - 不要为聚合预留磁盘空间。修复 #9241 #10375 (Azat Khuzhin)
- 修复针对那些相对于 UTC 的时区偏移曾在正负之间变更的时区(例如 Pacific/Kiritimati)时,
datetime函数行为错误的问题。修复了 #7202 #10369(alexey-milovidov) - 避免
dictIsIn函数出现无限循环。修复 #515 #10365 (alexey-milovidov) - 默认禁用 GROUP BY sharding_key 优化功能,并修复其在 WITH ROLLUP/CUBE/TOTALS 下的问题 #10516 (Azat Khuzhin)
- 在检查数据部分时同时检查错误代码,如果错误为“not enough memory”等内存不足类错误,则不要将该数据部分标记为损坏。修复了 #6269 #10364 (alexey-milovidov)
- 在 system 系统表中显示未加载的字典信息。#10234 (Vitaly Baranov)
- 修复在表启动前服务器关闭时,StorageBuffer 中的 nullptr 解引用问题。 #10641 (alexey-milovidov)
- 修复了
ReplicatedMergeTree中DROP与OPTIMIZE之间的竞争条件。如果存在并发的OPTIMIZE查询,DROP可能会在 ZooKeeper 的副本路径中留下垃圾内容。 #10312 (tavplubix) - 修复在同时混用逗号 JOIN 和
NAMESJOIN 的查询中出现的 'Logical error: CROSS JOIN has expressions' 错误。解决了 #9910 #10311(Artem Zuikov) - 修复了使用
max_bytes_before_external_group_by的查询。 #10302 (Artem Zuikov) - 修复了解析器在某些情况下对最大递归深度限制处理存在的问题。这修复了 #10283。此修复可能会引入轻微的不兼容变更:通过 clickhouse-client 发送的较长且嵌套较深的查询可能会被拒绝执行,你需要相应地调整
max_query_size和max_parser_depth设置。#10295(alexey-milovidov) - 允许在包含多个 JOIN 的查询中使用
count(*)。修复 #9853 #10291 (Artem Zuikov) - 修复在使用
max_rows_to_group_by和group_by_overflow_mode = 'break'时出现的Pipeline stuck错误。 #10279 (Nikolai Kochetov) - 修复在使用 DDL 查询创建
range_hashed字典时出现的Cannot add column错误,对应问题 #10093。#10235(alesapin) - 修复一个极少发生的异常
Cannot drain connections: cancel first。#10239 (Nikolai Kochetov) - 修复了一个问题:当用户尝试在
ENGINE = Replicated*的表上执行 ALTER UPDATE/DELETE 时,ClickHouse 会抛出 "Unknown function lambda." 错误消息。现在用于检查非确定性函数的逻辑已经能够正确处理 lambda 表达式。#10237 (Alexander Kazakov) - 修复了在包含 Lazy 引擎的数据库上运行 SELECT ... FROM system.tables 时,可能在 StorageSystemTables 中出现的相对少见的段错误。 #10209 (Alexander Kazakov)
- 修复在从
system.numbers或system.zeros等无限数据源读取时,查询本应在 LIMIT 处停止却可能出现无限执行的问题。 #10206 (Nikolai Kochetov) - 修复了 Date 类型的
generateRandom函数。这修复了 #9973。修复了一个边缘情况:向使用旧式分区的 MergeTree 表插入年份为 2106 的日期时,分区名称却被命名为 1970 年的问题。 #10218 (alexey-milovidov) - 当 View 的表定义与其 SELECT 查询不一致时,执行类型转换。此更改修复了 #10180、#10022 和 #10217(alexey-milovidov)
- 修复在解析符合 RFC-2822 的字符串且星期几为星期二或星期四时的
parseDateTimeBestEffort行为。此修复解决了 #10082 #10214(alexey-milovidov) - 修复 JOIN 内部常量列名可能与 JOIN 外部常量列名冲突的问题。 #10207 (alexey-milovidov)
- 修复在包含 arrayJoin 函数时(某些场景) move-to-prewhere 优化的问题。这修复了 #10092 #10195(alexey-milovidov)
- 修复原生 mysql-connector-java (JDBC) 的 SCRAMBLE 中出现分隔符的错误 #10140 (BohuTANG)
- 修复在未指定数据库时执行访问检查会默认使用当前数据库的问题。 #10192 (Vitaly Baranov)
- 修复对包含 compact parts 的表执行 ALTER 操作时出现的问题。 #10130 (Anton Popov)
- 新增
allow_nondeterministic_mutations设置,用于放宽在 mutation 中使用非确定性函数时的限制。 #10186 (filimonov) - 修复对字典执行的
DROP TABLE#10165 (Azat Khuzhin) - 在向 Distributed 表执行
INSERT时,如果结构不匹配则自动转换数据块 #10135 (Azat Khuzhin) - 当按分区键将插入的块拆分为多个 part 时,记录的行数不正确(被记录为所有 part 的总和)。 #10138 (alexey-milovidov)
- 为 MySQL 数据库引擎增加部分参数检查,并支持标识符参数 #10077 (Winter Zhang)
- 修正在创建新副本时对
index_granularity_bytes的错误检查,修复了 #10098。#10121 (alesapin) - 修复
CHECK TABLE在包含 skip 索引的表上的查询问题。#10068 (alesapin) - 修复嵌套表仅有一个分片时的 Distributed-over-Distributed 问题 #9997 (Azat Khuzhin)
- 修复在包含
JOIN和UNION ALL的查询中可能发生的数据行丢失问题。修复 #9826、#10113。 ... #10099(Nikolai Kochetov) - 修复在使用本地 ClickHouse 服务器作为源时字典中的 bug。如果字典中的类型与源中的类型不兼容,可能会导致内存破坏。 #10071 (alesapin)
- 修复了从旧版本 ClickHouse 升级时,如果不存在
/table/replicas/replica_name/metadata节点,复制表无法启动的问题。修复了 #10037。#10095(alesapin) - 修复错误
Cannot clone block with columns because block has 0 columns ... While executing GroupingAggregatedTransform。该错误会在启用distributed_aggregation_memory_efficient设置时出现,当分布式查询从不同分片读取混合了单级和两级聚合的聚合数据时触发。 #10063 (Nikolai Kochetov) - 修复启动时附加包含物化视图的数据库失败导致的死锁问题 #10054 (Azat Khuzhin)
- 修复在对含有尾部零字节的字符串键执行 GROUP BY 时可能发生的段错误(#8636, #8925)。... #10025 (Alexander Kuzmenkov)
- 修复在别名可能覆盖限定列名时导致分布式查询结果错误的问题。修复了 #9672 #9714 #9972(Artem Zuikov)
- 修复
SYSTEM RESTART REPLICAS中潜在的死锁问题 #9955 (tavplubix) - 修正用于远程查询执行的线程数量(自 20.3 起引入的性能回退)。当从
Distributed表发出的查询在本地和远程分片上同时执行时会出现该问题。修复了 #9965 #9971(Nikolai Kochetov) - 修复了
ATTACH PART中的DeleteOnDestroy逻辑(之前可能会导致已附加的 part 被自动删除),并新增了一些测试 #9410 (Vladimir Chebotarev) - 修复一个导致
ON CLUSTERDDL 查询在服务器启动时卡住的问题。#9927 (Gagan Arneja) - 修复在对某些数据库执行查询时的某个处理阶段未能获取所需表的错误。修复了 #9699。#9949(achulkov2)
- 修复在
JOIN与TOTALS同时出现时触发的 "Not found column in block" 错误。修复了 #9839 #9939 (Artem Zuikov) - 修复在
CREATE USER命令中对多个主机的解析 #9924 (Vitaly Baranov) - 修复 Join 表引擎中的
TRUNCATE操作(#9917)。#9920(Amos Bird) - 修复
ReplicatedMergeTree中drop和optimize之间的竞争条件。#9901 (alesapin) - 在启用
optimize_skip_unused_shards时修复 Distributed 的DISTINCT行为。#9808 (Azat Khuzhin) - 修复在 ALTER 语句中出现的 "scalar does not exist" 错误(#9878)。... #9904(Amos Bird)
- 修复在
distributed_product_mode=\'local\'模式下使用限定名称时的错误。修复了 #4756 #9891(Artem Zuikov) - 对于 INSERT 查询,现在分片会将来自发起端的设置限制在自身约束范围内,而不是抛出异常。此修复允许向约束不同的分片发送 INSERT 查询。此更改改进了对 #9447 的修复。#9852(Vitaly Baranov)
- 在向 Kafka broker 提交 offset 时增加重试机制,因为如果在
offsets.commit.timeout.ms指定的时间内__consumer_offsets主题没有足够的副本可用,它可能会拒绝提交 #9884 (filimonov) - 修复在
WHERE中使用底层表虚拟列时 Distributed 引擎的行为 #9847 (Azat Khuzhin) - 修复了在某些情况下未正确使用函数参数指定时区的问题。 #9574 (Vasily Nemkov)
- 修复在分布式表上执行同时包含 PREWHERE 和 WHERE 的查询且设置
distributed_product_mode = 'local'时会出现的“具有相同别名的不同表达式”错误。#9871 (Artem Zuikov) - 修复在具有复合主键的表上执行变更时的过度内存消耗问题。这修复了 #9850。#9860 (alesapin)
- 修复根据设置
allow_introspection_functions计算自省函数权限的逻辑。#9840 (Vitaly Baranov) - 修复在使用和不使用 Processors 时的 max_distributed_connections #9673 (Azat Khuzhin)
- 在客户端修复了可能出现的异常
Got 0 in totals chunk, expected 1。该问题会在包含JOIN的查询中出现,当右表没有任何行时触发。示例:select * from system.one t1 join system.one t2 on t1.dummy = t2.dummy limit 0 FORMAT TabSeparated;。修复了 #9777。... #9823 (Nikolai Kochetov) - 修复在包含表列表之外(例如在 WHERE 子句中)使用 COMMA JOIN 的子查询时出现的 'COMMA to CROSS JOIN rewriter is not enabled or cannot rewrite query' 错误。修复了 #9782 #9830(Artem Zuikov)
- 修复在设置
optimize_skip_unused_shards时,由于键的表达式无法转换为其字段类型而导致的服务器崩溃问题 #9804 (Azat Khuzhin) - 修复
splitByString中空字符串处理。#9767 (hcz) - 修复在 compact parts 上执行
ALTER TABLE DELETE COLUMN时出错的问题。#9779 (alesapin) - 修复了通过 HTTP(使用 processors 管线)执行查询时
rows_before_limit_at_least缺失的问题。修复了 #9730 #9757(Nikolai Kochetov) - 修复
ALTER查询(mutation)中内存占用过多的问题。此修复解决了 #9533 和 #9670。#9754(alesapin) - 修复可能导致永久出现“Cannot schedule a task”错误的问题。#9154 (Azat Khuzhin)
- 修复外部字典 DDL 中反引号转义的缺陷。修复了 #9619。 #9734 (alesapin)
- 修复了
text_log中的数据竞争问题,但它不会导致任何实际故障。#9726 (alexey-milovidov) - 修复复制中的一个错误:当用户在上一版本中执行过 mutation 操作时,会导致复制无法进行。此更改修复了 #9645。#9652 (alesapin)
- 修复了
sumKahan和sumWithOverflow的内部函数名称错误。这会在远程查询中使用这些函数时导致异常。#9636 (Azat Khuzhin) - 新增设置
use_compact_format_in_distributed_parts_names,允许在对Distributed表执行INSERT查询时,以更紧凑的格式写入文件。此更改修复了 #9647。#9653(alesapin) - 修复在 JOIN 键列中使用 LowCardinality 时的 RIGHT 和 FULL JOIN。 #9610 (Artem Zuikov)
- 修复
MergeTreeRangeReader中可能出现的异常Size of filter does not match size of column和Invalid number of rows in Chunk。这些异常可能在某些执行PREWHERE的场景下触发。 #9612 (Anton Popov) - 允许对启用了内部复制的 Distributed 表执行
ALTER ON CLUSTER。修复了 #3268 #9617(shinoi2) - 修复了这样一个问题:在编写
time + 1这类简单算术表达式时,时区不会被保留(与time + INTERVAL 1 SECOND这样的表达式相比)。此变更修复了 #5743 #9323(alexey-milovidov)
改进
- 在比较 DateTime 与字符串字面量时使用时区信息。此更改修复了 #5206。#10515(alexey-milovidov)
- 当无法从文本输入格式解析 Decimal 值时,打印详细诊断信息。 #10205 (alexey-milovidov)
- 为分布式/缓冲调度池添加任务/内存指标 #10449 (Azat Khuzhin)
- 在 clickhouse-local 和 HTTP 接口中,对于 SELECT DISTINCT 查询,一旦结果就绪就立即显示。此更改修复了 #8951 #9559 (alexey-milovidov)
- 允许在
clickhouse-copier中使用SAMPLE OFFSET查询语句替代cityHash64(PRIMARY KEY) % N == n来进行分片。要使用此功能,请在命令行参数中传入--experimental-use-sample-offset 1。 #10414 (Nikita Mikhaylov) - 当确定第一列的值不可能包含 BOM 时,允许在 TSV 中解析 BOM。这修复了 #10301 #10424 (alexey-milovidov)
- 添加对 Avro 嵌套字段插入的支持 #10354 (Andrew Onyshchuk)
- 在非数据修改模式下,如果指定的类型相同,则允许对列执行
ALTER操作。 #10382 (Vladimir Chebotarev) - 在 GROUP BY 分片键上自动启用
distributed_group_by_no_merge(当已设置optimize_skip_unused_shards时)#10341(Azat Khuzhin) - 使用 LIMIT/LIMIT BY/ORDER BY 优化使用 GROUP BY sharding_key 的分布式查询 #10373 (Azat Khuzhin)
- 添加了一个设置
max_server_memory_usage,用于限制服务器的总内存使用量。指标MemoryTracking的计算现在不会再出现偏差。设置max_memory_usage_for_all_queries现已废弃且不再起任何作用。修复了 #10293。#10362(alexey-milovidov) - 添加配置项
system_tables_lazy_load。如果将其设置为 false,则包含日志的 system 表会在服务器启动时加载。Alexander Burmak、Svyatoslav Tkhon Il Pak、#9642 #10359 (alexey-milovidov) - 在分布式发送中使用后台线程池(background_schedule_pool_size)#10263 (Azat Khuzhin)
- 使用后台线程池执行后台缓冲区刷新。#10315 (Azat Khuzhin)
- 增加对删除未完全写入部分这一特殊情况的支持。这修复了 #9940。#10221(alexey-milovidov)
- 在进行 GROUP BY 优化时,使用 isInjective(),而不是维护这类函数的手动列表。 #10342 (Azat Khuzhin)
- 如果客户端在刚建立连接后立即发送 RST 数据包,则避免在日志中打印错误消息。这是带有 keepalived 和 VRRP 的 IPVS 负载均衡器的典型行为。此更改修复了 #1851 #10274 (alexey-milovidov)
- 允许解析浮点类型中的
+inf。此更改关闭了 #1839 #10272(alexey-milovidov) - 实现了适用于 Nested 类型的
generateRandom表函数。修复了 #9903 #10219(alexey-milovidov) - 在 MySQL 兼容接口中提供
max_allowed_packed设置,以便某些客户端能够通过 MySQL 协议与 ClickHouse 通信。 #10199 (BohuTANG) - 允许在 GLOBAL IN 中使用字面量(例如
SELECT * FROM remote('localhost', system.one) WHERE dummy global in (0))#10196(Azat Khuzhin) - 修复
clickhouse-client交互模式中的若干小问题 #10194 (alexey-milovidov) - 避免不必要的字典加载(system.tables、DROP/SHOW CREATE TABLE) #10164 (Azat Khuzhin)
- RWLock 更新:为 getLock() 添加 timeout 参数,并重构实现为阶段公平 #10073 (Alexander Kazakov)
- 增强对原生 mysql-connector-java(JDBC)的兼容性 #10021 (BohuTANG)
- 函数
toString被视为单调函数,即使在对 String 或 LowCardinality(String) 参数的恒真情况中使用,也可以用于索引分析。#10110 (Amos Bird) - 为
{CREATE|DROP} USER/ROLE/ROW POLICY/SETTINGS PROFILE/QUOTA、GRANT等命令添加对ON CLUSTER子句的支持。 #9811 (Vitaly Baranov) - 为 S3 URI 提供虚拟主机式访问支持 #9998 (Pavel Kovalenko)
- 现在,在字典 DDL 查询中,无参数字典的布局类型可以在不使用圆括号的情况下指定。修复了 #10057。#10064 (alesapin)
- 添加在文件路径中使用带前导零的数字范围的功能 #9989 (Olga Khvostikova)
- 优化 CROSS JOIN 的内存使用。#10029 (Artem Zuikov)
- 在获取远程表结构且已设置 skip_unavailable_shards 时,尝试连接集群中的所有分片。 #7278 (nvartolomei)
- 将
total_rows/total_bytes添加到system.tables表中。 #9919 (Azat Khuzhin) - 系统日志表现在默认使用多态 part(polymorphic parts)。 #9905 (Anton Popov)
- 在 system.settings/merge_tree_settings 中添加一个 type 列 #9909 (Azat Khuzhin)
- 在服务器启动时尽早检查可用的 CPU 指令。 #9888 (alexey-milovidov)
- 从 mutation 中移除
ORDER BY阶段,因为我们在单线程中只会从单个有序的 part 读取数据。同时增加检查,确保 mutation 中的行按排序键排序,且该顺序未被打乱。#9886 (alesapin) - 在 FixedString 作为左操作数时实现 LIKE 运算符。这是为了更好地支持 TPC-DS 查询。#9890 (alexey-milovidov)
- 添加
force_optimize_skip_unused_shards_no_nested,用于对嵌套的 Distributed 表禁用force_optimize_skip_unused_shards#9812 (Azat Khuzhin) - 现在 MergeTree 数据部分的列大小只计算一次。#9827 (alesapin)
- 为
optimize_skip_unused_shards计算常量表达式(例如SELECT * FROM foo_dist WHERE key=xxHash32(0))#8846 (Azat Khuzhin) - 对在 TTL 表达式中使用
Date或DateTime列的检查已被移除。#9967 (Vladimir Chebotarev) - 优化 DiskS3 硬链接的实现。 #9760 (Pavel Kovalenko)
- 当将
multiple_joins_rewriter_version设置为 2 时,会启用第二版多重 JOIN 重写算法,它会保持未发生冲突的列名原样不变。该版本支持带有USING的多个 JOIN,并允许对包含子查询的 JOIN 使用select *。 #9739 (Artem Zuikov) - 实现用于 StorageMergeTree 的“非阻塞”ALTER #9606 (alesapin)
- 为 DiskS3 添加对 MergeTree 的完整支持 #9646 (Pavel Kovalenko)
- 扩展
splitByString,以支持空字符串作为分隔符。 #9742 (hcz) - 向
system.trace_log添加timestamp_ns列。该列包含跟踪事件的高精度时间戳,可用于构建线程分析(“火焰图”)的时间线。 #9696 (Alexander Kuzmenkov) - 当启用
send_logs_level设置时,避免日志消息与查询进度交错输出。#9634 (Azat Khuzhin) - 新增对
MATERIALIZE TTL IN PARTITION的支持。 #9581 (Vladimir Chebotarev) - 在 Avro 嵌套字段中增加对复杂类型的支持 #10502 (Andrew Onyshchuk)
性能改进
- 为 Partial MergeJoin 中的右表提供了更优的插入逻辑。#10467 (Artem Zuikov)
- 提升了行式格式的性能(对于窄表,CSV 提升超过 10%,Avro 提升超过 35%)。#10503 (Andrew Onyshchuk)
- 提升了在
IN运算符右侧显式定义集合且左侧为元组时的查询性能。#10385 (Anton Popov) - 降低了 HashJoin 中哈希表的内存占用。#10416 (Artem Zuikov)
- 在 StorageDictionary 之上实现了特殊的 HashJoin。允许将
dictGet()函数改写为 JOIN。此变更本身不会破坏向后兼容性,但可能会在某些安装环境中触发问题 #8400。#10133 (Artem Zuikov) - 在目标表支持的情况下,启用对物化视图的并行插入。#10052 (vxider)
- 改进了使用单调函数的索引分析性能。#9607#10026 (Anton Popov)
- 使用 SSE2 或 SSE4.2 SIMD 内在函数加速 Bloom filter 中的标记化过程。#9968 (Vasily Nemkov)
- 改进了在
IN运算符右侧显式定义集合时的查询性能。修复了 20.3 版本中的性能回归问题。#9740 (Anton Popov) - 现在 clickhouse-copier 会将每个分区拆分为若干段并独立复制。#9075 (Nikita Mikhaylov)
- 增加了更多聚合方法。例如,现在 TPC-H 查询 1 将选择
FixedHashMap<UInt16, AggregateDataPtr>,并获得 25% 的性能提升。#9829 (Amos Bird) - 在 pre-limit 转换阶段为多个流使用单一行计数器。这有助于在带有
limit但没有order by的查询中(例如select f(x) from (select x from t limit 1000000000))避免合并流水线中的各个流,从而在后续处理中使用多线程。#9602 (Nikolai Kochetov)
构建/测试/打包改进
- 使用 ClickHouse-Extras 提供的 AWS SDK 库分支 #10527 (Pavel Kovalenko)
- 为新的 ALTER RENAME COLUMN 查询添加集成测试。 #10654 (vzakaznikov)
- 修复在使用错误参数调用函数
now64时可能发生的有符号整数溢出问题。此更改修复了 #8973 #10511(alexey-milovidov) - 拆分 fuzzer 和 sanitizer 配置,以使构建配置与 OSS-Fuzz 兼容。 #10494 (kyprizel)
- 修复 clang-10 中的 clang-tidy 问题。 #10420 (alexey-milovidov)
- 在错误信息中显示绝对路径。否则 KDevelop 将无法跳转到正确的文件,而是会新建并打开一个文件。 #10434 (alexey-milovidov)
- 添加了
ASAN_OPTIONS环境变量,以使用 AddressSanitizer 调查 CI 压力测试中的错误。#10440 (Nikita Mikhaylov) - 在 clang 构建中启用 ThinLTO(实验性功能)。 #10435 (alexey-milovidov)
- 移除在系统安装 Z3 求解器时可能被引入的对 Z3 的意外依赖。 #10426 (alexey-milovidov)
- 将集成测试的 Docker 文件移动到 docker/ 目录中。 #10335 (Ilya Yatsishin)
- 允许在 CI 中使用
clang-10,以确保 #10238 已被修复。#10384 (alexey-milovidov) - 将 OpenSSL 更新到上游 master 分支。修复了一个可能导致 TLS 连接失败,并出现
OpenSSL SSL_read: error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error和SSL Exception: error:2400006E:random number generator::error retrieving entropy错误消息的问题。该问题存在于 20.1 版本中。#8956 (alexey-milovidov) - 修复 clang-10 构建。 #10238 #10370 (Amos Bird)
- 为物化视图的并行 INSERT添加性能测试。#10345 (vxider)
- 修复不稳定的测试用例
test_settings_constraints_distributed.test_insert_clamps_settings。 #10346 (Vitaly Baranov) - 在 CI 中添加用于上传 ClickHouse 测试结果的工具 #10330 (Ilya Yatsishin)
- 将 junit_to_html 工具的测试结果转换为 JSONEachRow 格式 #10323 (Ilya Yatsishin)
- 更新 cctz。 #10215 (alexey-milovidov)
- 支持从原始的 JUnit XML 报告生成 HTML 报告。#10247 (Ilya Yatsishin)
- 更新最低编译器版本检查。修复该问题的根本原因 #10250 #10256 (alexey-milovidov)
- 对分布式 Live View 表提供初步支持 #10179 (vzakaznikov)
- 修复 MergeTreeIndexFullText 中的 MSan 误报。该问题最初出现在 #9968。#10801(alexey-milovidov)
- clickhouse-docker-util #10151 (filimonov)
- 将 pdqsort 更新到较新版本 #10171 (Ivan)
- 将 libdivide 更新到 v3.0 #10169 (Ivan)
- 在启用多态部件时添加检查。 #10086 (Anton Popov)
- 为 FreeBSD 添加交叉编译构建支持。这修复了 #9465 #9643 (Ivan)
- 为 #6924 #6980 添加性能测试(filimonov)
- 在
File引擎中添加对/dev/null的支持,以便更好地进行性能测试 #8455 (Amos Bird) - 将 /dbms 目录下的所有文件夹上移一级 #9974 (Ivan)
- 添加一个测试,用于检查在单线程从 MergeTree 读取时是否保持顺序。作为对 #9670 #9762 的补充(alexey-milovidov)
- 修复
00964_live_view_watch_events_heartbeat.py测试以避免竞态条件。 #9944 (vzakaznikov) - 修复集成测试
test_settings_constraints#9962 (Vitaly Baranov) - 每个函数放在自己的文件中,第 12 部分。 #9922 (alexey-milovidov)
- 针对分析元组数组极度缓慢的情况添加了性能测试。#9872 (alexey-milovidov)
- 将 zstd 升级到 1.4.4。它在性能和压缩比方面有一些小幅提升。如果你运行的副本使用不同版本的 ClickHouse,可能会看到类似如下且带有说明的错误信息:
Data after merge is not byte-identical to data on another replicas.。这些消息是正常的,无需担心。 #10663 (alexey-milovidov) - 修复
system.stack_trace中的 TSan 报告。 #9832 (alexey-milovidov) - 已移除对
clock_getres的依赖。 #9833 (alexey-milovidov) - 添加了使用 clang-tidy 的标识符命名检查。 #9799 (alexey-milovidov)
- 更新 "builder" Docker 镜像。此镜像不会在 CI 中使用,但对开发者很有用。#9809 (alexey-milovidov)
- 移除 CI 中不再使用的旧
performance-test工具。clickhouse-performance-test很好,但现在我们使用的是更为先进的工具,它通过复杂的统计公式进行比较测试,从而无论环境发生何种变化都能获得可靠的结果。 #9796 (alexey-milovidov) - 已添加大部分 clang-static-analyzer 检查项。#9765 (alexey-milovidov)
- 将 Poco 更新到 1.9.3,为支持 MongoDB URI 做准备。 #6892 (Alexander Kuzmenkov)
- 使用
-DUSE_STATIC_LIBRARIES=0 -DENABLE_JEMALLOC=0修复构建问题 #9651 (Artem Zuikov) - 对于变更日志脚本,如果合并提交被 cherry-pick 到发布分支,则从提交说明中获取 PR 名称。 #9708 (Nikolai Kochetov)
- 在 backport 脚本中支持
vX.X-conflicts标签。 #9705 (Nikolai Kochetov) - 修复回移植脚本中的
auto-label。 #9685 (Nikolai Kochetov) - 在 Darwin 交叉编译中使用 libc++,使其与本地构建保持一致。 #9665 (Hui Wang)
- 修复不稳定的测试
01017_uniqCombined_memory_usage。这是 #7236 的后续。#9667 (alexey-milovidov) - 修复在原生 macOS Clang 编译器下的构建问题 #9649 (Ivan)
- 支持在
pthread_mutex_lock、pthread_mutex_unlock函数周围注入各种故障。#9635 (alexey-milovidov) - 为
packager脚本添加对clang-tidy的支持。 #9625 (alexey-milovidov) - 添加对使用未捆绑的 msgpack 的支持。#10168 (Azat Khuzhin)
ClickHouse 版本 v20.3
ClickHouse 版本 v20.3.21.2-lts,2020-11-02
Bug Fix
- 修复
sharding_key中的dictGet(以及类似场景,即函数上下文被持久存储时)的问题。#16205(Azat Khuzhin)。 - 修复在查询
Distributed表且查询中包含WHERE、PREWHERE和GLOBAL IN时得到错误的空结果的问题。修复了 #15792。#15933(Nikolai Kochetov)。 - 修复
TSV/CSVWithNames格式中缺失或多余表头的问题。此修复对应 #12504。#13343(Azat Khuzhin)。
ClickHouse 版本 v20.3.20.6-lts,2020-10-09
Bug Fix
- 在执行
MOVE或REPLACE PARTITION之后,或者在极少数情况下执行DETACH或DROP PARTITION之后,Mutation 可能会在等待某个不存在的数据部分时挂起。该问题已修复。#15724、#15537(tavplubix)。 - 修复了对同一
MySQL引擎表包含大量子查询时查询挂起的问题。此前,如果在一个查询中针对同一MySQL表存在超过 16 个子查询,该查询会一直挂起。#15299(Anton Popov)。 - 修复在对 Merge 表执行 JOIN 的查询中,GROUP BY 出现
Unknown identifier的问题。#15242(Artem Zuikov)。 - 修复当子查询中包含
finalizeAggregation函数时,谓词下推无法生效的问题。修复了 #14847。#14937(filimonov)。 - 并发执行
ALTER ... REPLACE/MOVE PARTITION ...查询可能导致死锁。该问题已修复。#13626(tavplubix)。
ClickHouse 版本 v20.3.19.4-lts,2020-09-18
Bug Fix
- 修复在执行
SELECT查询时的罕见错误:当被查询的列具有依赖于另一列的DEFAULT表达式,而该另一列也具有DEFAULT、未出现在查询中,且在磁盘上不存在时,会导致错误。部分修复 #14531。#14845(alesapin)。 - 修复
ALTER UPDATE变更在赋值表达式中包含 Nullable 列且赋值为常量值(如UPDATE x = 42)时,会导致列中出现错误值或发生段错误(segfault)的问题。修复 #13634、#14045。#14646(alesapin)。 - 修复 Decimal 乘法结果错误的问题,原因是结果列的小数位数(scale)错误。#14603(Artem Zuikov)。
Improvement
- 在 compact parts 中支持自定义 codec。#12183(Anton Popov)。
ClickHouse release v20.3.18.10-lts, 2020-09-08
Bug Fix
- 当异常发生在
PipelineExecutor本身时,停止查询执行。这可以防止在极少数情况下出现查询挂起的问题。是对 #14334 的延续。#14402(Nikolai Kochetov)。 - 修复缓存字典(cache-dictionary)有时返回默认值而不是来自数据源的实际值的问题。#13624(Nikita Mikhaylov)。
- 修复从 users.xml 解析行策略(row policies)时,当数据库或表名包含点(
.)时的错误。修复 #5779、#12527。#13199(Vitaly Baranov)。 - 修复 CAST(Nullable(String), Enum()) 的行为。#12745(Azat Khuzhin)。
- 修复
text_log中的数据竞争。这并不对应任何实际的 bug。#9726(alexey-milovidov)。
Improvement
- 修复对长查询返回的错误类型不正确的问题。对于合法查询,有可能得到不是
Max query size exceeded的语法错误。#13928(Nikolai Kochetov)。 - 当在 parseDateTimeBestEffortOrNull/Zero 函数中值未被完整解析时,返回 NULL/零值。修复 #7876。#11653(alexey-milovidov)。
Performance Improvement
- 对使用 LowCardinality 的非常短的查询进行小幅优化。#14129(Anton Popov)。
Build/Testing/Packaging Improvement
- 修复在迁移到 clang-10 后在 HashTable 中出现的 UBSan 报告(对 nullptr 执行加零操作)。#10638 (alexey-milovidov)。
ClickHouse release v20.3.17.173-lts, 2020-08-15
缺陷修复
- 修复在使用 StorageMerge 且设置
set enable_optimize_predicate_expression=1的 JOIN 查询中的崩溃问题。#13679 (Artem Zuikov)。 - 修复包含
NULL元素的元组进行比较时的无效返回类型。修复 #12461。#13420 (Nikolai Kochetov)。 - 修复包含常量列且
ORDER BY为主键前缀时的查询问题。#13396 (Anton Popov)。 - 在 roundUpToPowerOfTwoOrZero() 中,对于最高位为 1 的数字,返回传入的数值本身。#13234 (Azat Khuzhin)。
ClickHouse release v20.3.16.165-lts 2020-08-10
缺陷修复
- 修复了当将 Unix 时间戳作为参数传入时
parseDateTimeBestEffort函数中的错误。这修复了 #13362 中描述的问题。#13441(alexey-milovidov)。 - 修复了在包含
NaN值的 Float 类型上调用uniqExact、topK、sumDistinct等聚合函数时,可能出现的性能较低和结果略有偏差的问题。该问题还会在调试构建中触发断言。本次修复了 #12491。#13254(alexey-milovidov)。 - 修复了在
if函数中,当条件为可为空(Nullable)的constexpr且该条件不是字面量NULL时的行为。修复了 #12463。#13226(alexey-milovidov)。 - 修复了在数组元素为 Nullable 类型且数组下标也为 Nullable 类型的情况下,
arrayElement函数中的断言错误。此更改修复了 #12172。#13224(alexey-milovidov)。 - 修复了在从本地副本执行 SELECT 查询时对线程数量施加的不必要限制。#12840 (Nikolai Kochetov).
- 修复了在使用
WITH TOTALS的查询中,数据中可能出现的额外多出的一行问题。 #12747 (Nikolai Kochetov). - 修复了在
IN子句中将包含大量元素的 tuple 解释为函数时的性能问题。即用户出于某些晦涩原因,将WHERE x IN (1, 2, ...)写成WHERE x IN tuple(1, 2, ...)的情况。#12700(Anton Popov)。 - 修复了
input_format_parallel_parsing的内存跟踪问题(通过将线程附加到组上)。 #12672 (Azat Khuzhin). - 修复 #12293,在子查询包含 WITH 子句时允许谓词下推。#12663 (Winter Zhang)。
- 修复了 #10572,解决了在使用常量表达式时 Bloom 过滤器索引的问题。#12659(Winter Zhang)。
- 修复了在 broker 不可用(以及某些其他情况下)时 StorageKafka 出现的 SIGSEGV 问题。 #12658 (Azat Khuzhin).
- 修复了使用缓存布局的外部字典中的竞态条件,该问题可能导致服务器崩溃。 #12566 (alesapin).
- 修复了在
enable_mixed_granularity_parts=1时执行ALTER DELETE查询会导致旧数据分片损坏的错误。已修复 #12536。#12543(alesapin)。 - 在函数
in的参数数量无效时提供了更清晰的异常信息。#12529(Anton Popov)。 - 修复了从紧凑部分读取数据时的性能问题。 #12492 (Anton Popov)。
- 修复了启用
text_log时的死锁问题。#12452(alexey-milovidov)。 - 修复了在使用 StorageMerge 时可能出现的段错误。关闭 #12054。#12401(tavplubix)。
- 修复了在使用
TOTALS/ROLLUP/CUBE时,带有-State和Nullable参数的聚合函数的问题。此更改修复了 #12163。#12376(alexey-milovidov)。 - 修复了
WITH FILL修饰符中列顺序的处理问题。此前不会遵循ORDER BY子句中指定的列顺序。#12306 (Anton Popov)。 - 当存在通过虚拟列(例如
Merge表中的_table)或系统表中的索引列过滤数据的表达式(例如从system.tables查询时按数据库名称过滤),且该表达式返回Nullable类型时,避免触发 “bad cast” 异常。此更改修复了 #12166。#12305(alexey-milovidov)。 - 在
TrieDictionary加载失败时显示错误。#12290 (Vitaly Baranov)。 - 函数
arrayFill在处理空数组时行为不正确,可能导致崩溃。此更改修复了 #12263。#12279(alexey-milovidov)。 - 为
LowCardinality类型实现向通用类型的转换。这样就可以对包含 LowCardinality 列和其他列的表执行 UNION ALL 操作。修复了 #8212。修复了 #4342。#12275(alexey-milovidov)。 - 修复了在进行多次连续插入时,
StorageFile中某些特殊类型的头信息被重复写入的问题。此修复解决了 #6155。#12197(Nikita Mikhaylov)。 - 修复了在处理不等于 0 或 1 的 UInt8 值时的逻辑函数。#12196(Alexander Kazakov)。
- 修复了在 GROUP BY 单射函数消除过程中对
dictGet参数的检查。 #12179 (Azat Khuzhin). - 修复了
ALTER DELETE中的错误逻辑,该逻辑会在条件结果为 NULL 时误删记录。此修复解决了 #9088,并关闭了 #12106。#12153(alexey-milovidov)。 - 修复了在存在别名时,将查询转换后发送到外部 DBMS(如 MySQL、ODBC)的问题。这修复了 #12032。#12151(alexey-milovidov)。
- 修复了整数除法中可能发生的溢出问题。此更改修复了 #12119。#12140(alexey-milovidov)。
- 修复了
greatCircleDistance、geoDistance中潜在的无限循环问题,从而解决了 #12117。#12137(alexey-milovidov)。 - 避免在带有
JOIN或子查询且附加到系统日志(system.query_log、metric_log 等)或附加到底层为 engine=Buffer 的表的物化视图中出现There is no query异常。 #12120 (filimonov). - 修复了由于对总线程数的限制不正确而导致的带有
UNION的SELECT查询性能问题。修复了 #12030。#12103(Nikolai Kochetov)。 - 修复了使用
-StateResample组合器时发生的段错误。#12092 (Anton Popov)。 - 修复了从
VIEW中执行 SELECT 时对线程数的不必要限制。修复了 #11937。#12085(Nikolai Kochetov)。 - 修复了在
PREWHERE使用错误类型时可能导致的崩溃。修复了 #12053、#12060。#12060(Nikolai Kochetov)。 - 修复了在
LowCardinality类型下使用函数defaultValueOfArgumentType时出现的错误Expected single dictionary argument for function。修复了 #11808。#12056(Nikolai Kochetov)。 - 修复了在高阶函数中使用
Tuple(LowCardinality)参数时出现的Cannot capture column错误,解决了 #9766。#12055(Nikolai Kochetov)。 - 在加载数据库时并行解析表元数据,修复了在存在大量表时导致服务器启动缓慢的问题。#12045 (tavplubix).
- 使
topK聚合函数在处理 Enum 类型时返回 Enum 值。修复了 #3740。#12043(alexey-milovidov)。 - 修正了约束检查逻辑,使其判断约束是否为常量表达式。此更改修复了 #11360。#12042(alexey-milovidov)。
- 修复了在包含
Nullable列的情况下对元组进行错误比较的问题。修复了 #11985。#12039(Nikolai Kochetov)。 - 修复了在调用函数
if且参数为不同长度的FixedString类型时产生错误结果并可能导致崩溃的问题。修复了 #11362。#12021(alexey-milovidov)。 - 如果查询中返回的唯一表达式是函数
neighbor,则当以偏移量-9223372036854775808调用该函数时,可能会返回空结果。此更改修复了 #11367。#12019(alexey-milovidov)。 - 修复了
generateRandom中可能导致崩溃的数组大小溢出问题。该修复解决了 #11371。#12013 (alexey-milovidov)。 - 修复了潜在的浮点异常。这一修改关闭了 #11378。#12005(alexey-milovidov)。
- 修正了服务器启动时日志消息中错误的设置名称。#11997 (alexey-milovidov)。
- 修复了在
Values格式中出现的Query parameter was not set错误。解决了 #11918。#11936(tavplubix)。 - 在查询中为替换参数(参数化查询)保留别名。修复了 #11914。#11916(alexey-milovidov)。
- 修复了在解析 DateTime64 时可能出现的浮点运算异常,已修复 #11374。#11875(alexey-milovidov)。
- 通过
HTTP接口修复了内存核算(在wait_end_of_query=1时影响可能较大)。#11840 (Azat Khuzhin). - 修复了在条件中包含 NULL 时
if()返回错误结果的问题。#11807 (Artem Zuikov). - 在进行相等性比较之前,先解析存储在 ZooKeeper 中的元数据。 #11739 (Azat Khuzhin).
- 修复了在与包含别名的
ORDER BY子句一起使用LIMIT n WITH TIES时出现的问题。#11689 (Anton Popov). - 修复 cache 字典中潜在的未初始化内存读取问题。 #10834 (alexey-milovidov)。
性能改进
- 对包含字面量的 IN 运算符未能使用索引,在 v19.3 附近引入了导致性能回退的问题。本次修复了 #10574。#12062(nvartolomei)。
ClickHouse 发行版 v20.3.12.112-lts 2020-06-25
Bug 修复
- 修复在
prewhere条件中使用Nullable列导致的罕见崩溃,是对 #11608 的后续修复。#11869(Nikolai Kochetov)。 - 不允许在高阶函数中使用 arrayJoin。此前这样会导致协议同步异常。此更改关闭了 #3933。#11846(alexey-milovidov)。
- 修复查询线程数过多的问题。 #11788 (Nikolai Kochetov).
- 修复类似
SELECT *, xyz.*这类查询的非预期行为,此类查询原本应报错却意外执行成功。#11753(hexiaoting)。 - 现在,在执行元数据 ALTER 期间,将会取消副本拉取任务。 #11744 (alesapin).
- 修复了由于在 Values 输入格式中错误地推导复杂字面量类型而引发的 LOGICAL_ERROR。 #11732 (tavplubix)。
- 修复在常量列上使用
ORDER BY ... WITH FILL时的问题。#11697 (Anton Popov). - 在与 XDBC bridge 通信时传入正确的超时设置。此前在检查 bridge 存活状态以及接收元信息时未能正确应用超时。#11690 (alexey-milovidov)。
- 修复了一个会导致
system.mutations状态不正确的错误。该错误可能会导致系统显示整个 mutation 已经完成,但实际上服务器在复制队列中仍然保留MUTATE_PART任务并尝试执行它们。此修复对应 #11611。#11681(alesapin)。 - 添加对带有大小写不敏感标志的正则表达式的支持。修复 #11101 和 #11506。#11649(alexey-milovidov)。
- 如果设置了行级安全,则移除简单的 COUNT 查询优化。在早期版本中,用户会得到表中记录的总数,而不是过滤后的记录数。此更改修复了 #11352。#11644(alexey-milovidov)。
- 修复 String 类型的布隆过滤器(数据跳过索引)。#11638(Azat Khuzhin)。
- 修复在 PREWHERE 条件中使用 Nullable 列时导致的罕见崩溃(可能与 #11572 有关)。#11608(Nikolai Kochetov)。
- 修复在对
Buffer表进行采样读取时出现的Block structure mismatch错误。#11602 (Nikolai Kochetov)。 - 修复在
exception.code() % 256 = 0时clickhouse-client退出码错误的问题。 #11601 (filimonov). - 修复服务器启动时与“Mark cache size was lowered”相关的日志消息中的一个小错误,并关闭了 #11399。#11589(alexey-milovidov)。
- 修复在包含
PREWHERE column in (subquery)和ARRAY JOIN的查询中出现的Size of offsets does not match size of column错误。 #11580 (Nikolai Kochetov). - HTTP 会话中的所有查询都使用相同的 query_id。已修复。#11578 (tavplubix)。
- 现在,clickhouse-server 的 Docker 容器在检查服务器存活状态时将优先使用 IPv6。 #11550 (Ivan Starkov)。
- 修正
<node>的 shard_num/replica_num(此前会导致 use_compact_format_in_distributed_parts_names 选项失效)。 #11528 (Azat Khuzhin). - 修复在使用 -State 聚合函数进行聚合时中途抛出异常导致的内存泄漏问题。已修复 #8995。#11496(alexey-milovidov)。
- 修复在别名可能覆盖带限定符的列名时导致分布式查询返回错误结果的问题。修复了 #9672 和 #9714。#9972(Artem Zuikov)。
ClickHouse 发行版 v20.3.11.97-lts 2020-06-10
新特性
- 现在 ClickHouse 会在自身端控制字典源的超时时间。在缓存字典配置中新增了两个设置项:
strict_max_lifetime_seconds,默认取值为max_lifetime,以及query_wait_timeout_milliseconds,默认值为一分钟。第一个设置项在搭配allow_read_expired_keys设置时也很有用(用于禁止读取已严重过期的键)。#10337(Nikita Mikhaylov)。
Bug 修复
- 修复在启用
min_bytes_to_use_direct_io且启用 PREWHERE,并使用 SAMPLE 或高并发线程数时可能出现的Data compressed with different methods错误。修复了 #11539。#11540(alexey-milovidov)。 - 修复编解码器返回的压缩大小。#11448 (Nikolai Kochetov).
- 修复当某列使用带有非字面量参数的压缩编解码器时的服务器崩溃问题。修复了 #11365。#11431(alesapin)。
- 修复 pointInPolygon 在点为 NaN 时的问题。修复 #11375。#11421(Alexey Ilyukhov)。
- 修复在包含 LowCarinality(T) 和 Nullable(T) 的 JOIN 中出现的崩溃。#11380。#11414(Artem Zuikov)。
- 修复针对错误
USING键的错误代码。#11373。#11404(Artem Zuikov)。 - 修复了在参数超出纬度/经度范围时的
geohashesInBox行为。#11403(Vasily Nemkov)。 - 改进
joinGet()函数的错误信息。 #11389 (Artem Zuikov). - 修复了在包含 external sort 和 limit 的查询中可能出现的
Pipeline stuck错误。修复 #11359。#11366(Nikolai Kochetov)。 - 移除 ReplicatedMergeTree 在发送数据部件时使用的冗余锁。 #11354 (alesapin).
- 在多行模式下修复 clickhouse-client 对
\G(纵向输出)的支持,从而关闭 #9933。#11350(alexey-milovidov)。 - 修复在直接从 StorageJoin(未使用 JOIN)执行 SELECT 时的崩溃问题以及错误的可空性处理。#11340 (Artem Zuikov).
- 修复
quantilesExactWeightedArray中的崩溃问题。#11337 (Nikolai Kochetov). - 现在在
ALTER查询中,会在修改元数据之前先停止合并操作。 #11335 (alesapin). - 在将
parallel_view_processing设置为1时,恢复对MATERIALIZED VIEW的并行写入。修复 #10241。#11330(Nikolai Kochetov)。 - 修复 visitParamExtractRaw 在提取的 JSON 中包含不成对的 { 或 [ 的字符串时的处理。#11318 (Ewout).
- 修复 ThreadPool 中极罕见的竞态条件。 #11314 (alexey-milovidov).
- 修复转换过程中潜在的未初始化内存使用问题。例如:
SELECT toIntervalSecond(now64())。 #11311 (alexey-milovidov)。 - 修复了当表的主键中包含
Array类型列且查询使用empty或notEmpty函数按该列进行过滤时,索引分析不起作用的问题。该修复解决了 #11286。#11303(alexey-milovidov)。 - 修复了在查询被
max_network_bandwidth、max_execution_speed或priority设置限流时,查询速度估算可能不正确,导致min_execution_speed限制可能不起作用或行为异常的错误。将timeout_before_checking_execution_speed的默认值更改为非零值,否则min_execution_speed和max_execution_speed设置将不会产生任何效果。修复了 #11297。修复了 #5732。修复了 #6228。可用性改进:在clickhouse-client中避免将异常消息与进度条拼接显示。#11296(alexey-milovidov)。 - 修复了在读取 Protobuf 格式的格式错误数据时出现的崩溃问题。修复了 #5957 和 #11203。#11258(Vitaly Baranov)。
- 修复了一个 bug:在仅存在过期键时,cache-dictionary 可能返回默认值而不是实际值的问题。此问题仅影响字符串字段。#11233 (Nikita Mikhaylov)。
- 修复在从内部查询中包含常量的
VIEW读取时出现的Block structure mismatch in QueryPipeline错误,解决了 #11181。#11205(Nikolai Kochetov)。 - 修复潜在异常
Invalid status for associated output。 #11200 (Nikolai Kochetov). - 修复在高阶函数中使用捕获参数
Array(Array(LowCardinality))时可能出现的Cannot capture column错误。 #11185 (Nikolai Kochetov). - 修复了 S3 通配符匹配的问题,该问题在键数量超过 1000 个并且使用某些后端时可能会导致失败。#11179 (Vladimir Chebotarev).
- 如果 data skipping index 依赖于在后台合并过程中将要被修改的列(适用于 SummingMergeTree、AggregatingMergeTree 以及 TTL GROUP BY),则其计算结果会不正确。通过将索引计算移动到合并之后,从而在合并后的数据上计算索引,已修复此问题。#11162(Azat Khuzhin)。
- 修复针对简单查询过度保留线程的问题(用于减少线程数的优化在执行管线变更后部分失效)。 #11114 (Azat Khuzhin).
- 修复分布式查询中谓词优化功能(
enable_optimize_predicate_expression=1)在包含HAVING子句的查询中的问题(即需要在发起查询的服务器端进行过滤时),方法是保持表达式的顺序(这本身就足以修复该问题),并强制聚合器优先使用列名而非索引。修复:#10613、#11413。#10621(Azat Khuzhin)。 - 引入提交重试逻辑,以在偏移量提交在罕见情况下失败时,降低从 Kafka 获取重复数据的可能性。#9884 (filimonov).
性能改进
- 对每次调用任意读取外部字典的函数,仅获取字典并检查访问权限一次。 #10928 (Vitaly Baranov).
构建/测试/打包改进
ClickHouse 版本 v20.3.10.75-lts 2020-05-23
缺陷修复
- 在 mutation 最终化任务中,如果没有任何内容被最终完成,则不再记录日志。 #11109 (alesapin).
- 修复了
parseDateTime64BestEffort参数解析中的错误。#11038 (Vasily Nemkov)。 - 修正了
getRawData()方法中原始数据大小不正确的问题。 #10964 (Igr). - 修复了在 20.1 及更早版本之间存在的两级聚合不兼容问题。当在发起节点与远程节点上使用不同版本的 ClickHouse,且
GROUP BY结果集较大并且仅按单个String字段进行聚合时,会出现这种不兼容性。这会导致在结果中,同一键对应出现多行未合并的数据。#10952 (alexey-milovidov). - 修复了
Distributed表中元组的向后兼容性问题。#10889 (Anton Popov). - 修复了在
StringHashTable中访问不存在的键时发生的SIGSEGV。 #10870 (Azat Khuzhin). - 修复了
ReplicatedMergeTree中的一个缺陷,该缺陷可能导致在某个副本变为不活跃后,某些带有OPTIMIZE的ALTER查询一直挂起等待该副本。 #10849 (tavplubix)。 - 在调用
Block::sortColumns()后修正了列的顺序。#10826 (Azat Khuzhin). - 修复了在未请求对标识符加引号时 ODBC bridge 出现的问题。修复了 #7984。 #10821 (alexey-milovidov)。
- 修复了
DateLUT中由UBSan和MSan报告的问题。#10798 (alexey-milovidov)。 - 修复键条件中的错误类型转换。修复了 #6287。#10791(Andrew Onyshchuk)
- 修复了
parallel_view_processing的行为。现在,即使发生异常,对MATERIALIZED VIEW的所有插入也应无一例外地完成。修复了 #10241。#10757(Nikolai Kochetov)。 - 修复了组合器 -
OrNull和 -OrDefault在与 -State组合使用时的问题。 #10741 (hcz)。 - 修复了在嵌套类型下使用
generateRandom时发生的崩溃。修复了 #10583。#10734(Nikolai Kochetov)。 - 修复了合并后可能发生的
SummingMergeTree中LowCardinality(FixedString)键列的数据损坏问题。修复了 #10489。#10721(Nikolai Kochetov)。 - 修复函数
h3EdgeAngle中可能出现的缓冲区溢出问题。#10711 (alexey-milovidov). - 修复了总计丢失的问题。如果查询包含带有外部
WHERE条件的JOIN或子查询,总计可能会被过滤掉。修复了 #10674。#10698(Nikolai Kochetov)。 - 修复了在同一查询中多次对
IN运算符使用相同集合的问题。#10686 (Anton Popov). - 修复了一个在
readonly=2且cancel_http_readonly_queries_on_client_close=1时,客户端关闭后导致 HTTP 请求卡住的 Bug。修复了 #7939、#7019、#7736、#7091。#10684(tavplubix)。 - 修正了
AggregateTransform构造函数中参数的顺序。#10667(palasonic1)。 - 修复了在启用
distributed_aggregation_memory_efficient时远程查询无法并行执行的问题。修复了 #10655。#10664(Nikolai Kochetov)。 - 修复了在使用
LIMIT的查询中可能导致返回行数不正确的问题。修复了 #10566、#10709。#10660(Nikolai Kochetov)。 - 修复了在表包含大量数据块(parts)时会导致并发 ALTER 操作被锁住的错误。#10659 (alesapin)。
- 修复了一个问题:在执行
SYSTEM DROP DNS CACHE查询时,会同时清除用于检查用户是否被允许从某些 IP 地址连接的缓存。 #10608 (tavplubix). - 修复了在
MATERIALIZED VIEW的内部查询中包含依赖表时出现的标量结果不正确的问题。#10603 (Nikolai Kochetov). - 修复了在
ALIAS列的默认表达式类型与列类型不一致时对该列执行SELECT查询的问题。 #10563 (Azat Khuzhin). - 已实现 DateTime64 与 String 值之间的比较。 #10560 (Vasily Nemkov)。
- 修复了索引损坏问题,该问题可能在将 compact 部分合并到另一个 compact 部分后,在某些情况下发生。 #10531 (Anton Popov).
- 修复了这样一种情况:mutation 已经处理完所有数据块,但仍然停留在
is_done=0状态。#10526 (alesapin). - 修复了在 Unix 纪元起始时,对于相对于
UTC具有小数偏移的时区出现的溢出问题。此更改修复了 #9335。 #10513 (alexey-milovidov)。 - 修复了
Distributed存储的异常关闭问题。 #10491 (Azat Khuzhin). - 修复了
simpleLinearRegression在处理大整数时出现的数值溢出问题。#10474 (hcz).
构建/测试/打包改进
- 修复 LZ4 库中的 UBSan 报告问题。#10631 (alexey-milovidov).
- 修复使用 clang-10 的构建。#10238。#10370 (Amos Bird).
- 新增针对
max_rows_to_sort设置的失败测试用例。#10268 (alexey-milovidov). - 对输入格式中诊断信息的打印做了一些改进。修复了 #10204。#10418 (tavplubix).
- 在 clickhouse-server 的 Docker 镜像中添加了 CA 证书。#10476 (filimonov).
Bug 修复
- 修复错误:
the BloomFilter false positive must be a double number between 0 and 1。#10551。#10569 (Winter Zhang).
ClickHouse 发布 v20.3.8.53,2020-04-23
错误修复
- 修复了在那些曾在 UTC 正偏移和负偏移之间发生过切换的时区(例如 Pacific/Kiritimati)上使用 datetime 函数时的错误行为。此更改修复了 #7202 #10369(alexey-milovidov)
- 修复在启用
distributed_group_by_no_merge时可能发生的段错误(该问题由 #10131 在 20.3.7.46 中引入)。#10399(Nikolai Kochetov) - 修复
Array(Tuple(...))数据类型的错误扁平化处理。此更改修复了 #10259 #10390(alexey-milovidov) - 在 Aggregator 中取消磁盘预留。修复了磁盘空间预留中的一个错误,该错误可能导致大型外部聚合在本可以成功完成的情况下却失败 #10375 (Azat Khuzhin)
- 修复了
ReplicatedMergeTree中DROP与OPTIMIZE之间的竞态条件。如果存在并发的OPTIMIZE查询,DROP可能会在 ZooKeeper 的副本路径中留下残留数据。 #10312 (tavplubix) - 修复在修改列默认值后服务器无法附加表的问题。#10441 (alesapin)
- 在加载表之前,如果执行 ATTACH DATABASE 失败,不要删除元数据目录。 #10442 (Winter Zhang)
- 修复了多个错误:当某些数据使用 quorum 插入后,又通过某种方式被删除(DROP PARTITION、TTL)时,会导致后续 INSERT 请求卡住,或者在 SELECT 查询中出现误报异常。此修复对应 #9946 #10188(Nikita Mikhaylov)
- 修复
ConcatProcessor中在远程查询时可能发生的Pipeline stuck错误。 #10381 (Nikolai Kochetov) - 修复 HashTable 中的错误行为,该问题会在尝试从缓冲区读取 HashMap 时导致编译错误。 #10386 (palasonic1)
- 允许在包含多个 JOIN 的查询中使用
count(*)。修复 #9853 #10291 (Artem Zuikov) - 优先使用
fallback_to_stale_replicas而不是skip_unavailable_shards,否则当同时指定这两个设置且没有最新状态的副本时,查询将会失败(补丁来自 @alex-zaitsev)。修复:#2564。#10422(Azat Khuzhin) - 修复了这样一个问题:当查询包含 ARRAY JOIN、ORDER BY 和 LIMIT 时,可能会返回不完整的结果。修复了 #10226。作者:Vadim Plakhtinskiy。#10427(alexey-milovidov)
- 在创建 Bloom Filter 索引时检查参数的数量和类型 #9623 #10431 (Winter Zhang)
性能改进
- 提升了在
IN运算符右侧显式定义集合、左侧为元组时的查询性能。该改动修复了 20.3 版本中的性能回归问题。#9740, #10385 (Anton Popov)
ClickHouse release v20.3.7.46, 2020-04-17
Bug 修复
- 修复在查询中混用逗号 JOIN 和按名称 JOIN 时出现
Logical error: CROSS JOIN has expressions错误的问题。#10311 (Artem Zuikov). - 修复使用
max_bytes_before_external_group_by的查询。#10302 (Artem Zuikov). - 在存在 arrayJoin 函数时(某些场景)修复了 move-to-prewhere 优化的问题。此修复解决了 #10092。#10195 (alexey-milovidov).
- 通过
allow_nondeterministic_mutations设置,允许在 mutation 中放宽对非确定性函数使用的限制。#10186 (filimonov).
ClickHouse release v20.3.6.40, 2020-04-16
新功能
- 新增函数
isConstant。该函数检查其参数是否为常量表达式,并返回 1 或 0,主要用于开发、调试和演示。#10198 (alexey-milovidov).
Bug 修复
- 修复在使用
max_rows_to_group_by和group_by_overflow_mode = 'break'时可能出现的Pipeline stuck错误。 #10279 (Nikolai Kochetov). - 修复一个可能出现的罕见异常
Cannot drain connections: cancel first。#10239 (Nikolai Kochetov). - 修复了一个问题:当用户尝试在 ENGINE = Replicated* 的表上执行 ALTER UPDATE/DELETE 时,ClickHouse 会抛出 "Unknown function lambda." 错误消息。用于检查非确定性函数的逻辑现在已能正确处理 lambda 表达式。#10237 (Alexander Kazakov)。
- 修复了针对 Date 类型的
generateRandom函数,解决了 #9973。同时修复了一个边界情况:在使用旧式分区方式的 MergeTree 表中插入年份为 2106 的日期时,分区名称中的年份却是 1970。#10218(alexey-milovidov)。 - 当视图的表定义与其 SELECT 查询不一致时执行类型转换。此更改修复了 #10180 和 #10022。#10217(alexey-milovidov)。
- 修复
parseDateTimeBestEffort在解析 RFC-2822 格式字符串时,当星期为周二或周四的处理问题。该修复解决了 #10082。#10214(alexey-milovidov)。 - 修复
JOIN内部常量列名可能与外部常量列名发生冲突的问题。 #10207 (alexey-milovidov). - 修复了在从
system.numbers或system.zeros等无限数据源读取数据时,本应在 LIMIT 处停止的查询可能出现无限执行的问题。 #10206 (Nikolai Kochetov)。 - 修复在未指定数据库时未使用当前数据库进行访问检查的问题。 #10192 (Vitaly Baranov).
- 在向 Distributed() 表执行 INSERT 时,如果结构不匹配则转换数据块。 #10135 (Azat Khuzhin).
- 修复 processors pipeline 中 extremes 可能产生不正确结果的问题。 #10131 (Nikolai Kochetov).
- 修复在使用 compact parts 时某些类型 ALTER 操作的问题。 #10130 (Anton Popov)。
- 修正在创建新副本时对
index_granularity_bytes的错误检查。修复 #10098。#10121(alesapin)。 - 修复在 Distributed 表结构与其底层表结构不一致时执行 INSERT 操作会导致的 SIGSEGV 崩溃。 #10105 (Azat Khuzhin).
- 修复在使用
JOIN和UNION ALL的查询中可能出现的行丢失。修复了 #9826、#10113。#10099(Nikolai Kochetov)。 - 修复了在从旧版 ClickHouse 升级时,由于不存在
/table/replicas/replica_name/metadata节点而导致复制表无法启动的问题。修复了 #10037。#10095(alesapin)。 - 为 MySQL Database Engine 新增了一些参数检查,并支持标识符类型参数。#10077 (Winter Zhang)。
- 修复本地 ClickHouse 服务器上的 ClickHouse 字典源中的 bug。当字典与数据源中的类型不兼容时,该 bug 可能导致内存损坏。#10071 (alesapin).
- 修复在包含 skip 索引的表上执行
CHECK TABLE查询时的错误。#10068 (alesapin)。 - 修复错误
Cannot clone block with columns because block has 0 columns ... While executing GroupingAggregatedTransform。当启用distributed_aggregation_memory_efficient设置项,并且分布式查询从不同分片读取不同聚合级别的数据(单层聚合和两层聚合混用)时会触发该问题。#10063 (Nikolai Kochetov)。 - 修复在对尾部包含零字节的字符串键执行 GROUP BY 时可能发生的段错误(#8636、#8925)。#10025(Alexander Kuzmenkov)。
- 修正用于远程查询执行的线程数量(修复自 20.3 起出现的性能退化问题)。当来自
Distributed表的查询在本地和远程分片上同时执行时会触发该问题。修复 #9965。#9971(Nikolai Kochetov)。 - 修复了一个问题:在处理针对某些数据库的查询的某个阶段,未能获取到所需的表。修复了 #9699。#9949(achulkov2)。
- 修复当
JOIN与TOTALS一起出现时的 “Not found column in block” 错误,并修复了问题 #9839。#9939(Artem Zuikov)。 - 修复在服务器启动时会导致
ON CLUSTERDDL 查询冻结的 bug。#9927(Gagan Arneja)。 - 修复在
CREATE USER命令中解析多个主机条件的问题,例如CREATE USER user6 HOST NAME REGEXP 'lo.?*host', NAME REGEXP 'lo*host'。 #9924 (Vitaly Baranov)。 - 修复 Join 表引擎中
TRUNCATE的问题(#9917)。#9920(Amos Bird)。 - 修复 ALTER 语句中的“scalar does not exist”错误(#9878)。#9904(Amos Bird)。
- 修复
ReplicatedMergeTree中drop和optimize操作之间的竞态条件。#9901 (alesapin). - 修复在
distributed_product_mode='local'模式下使用限定名时的错误。解决了 #4756 问题。#9891(Artem Zuikov)。 - 修复根据设置 'allow_introspection_functions' 计算自省函数权限的问题。#9840 (Vitaly Baranov)。
构建/测试/打包改进
- 修复集成测试
test_settings_constraints。#9962(Vitaly Baranov)。 - 移除对
clock_getres的依赖。#9833(alexey-milovidov)。
ClickHouse release v20.3.5.21,2020-03-27
Bug 修复
- 修复在分布式表上的查询同时包含 PREWHERE 和 WHERE 且执行
SET distributed_product_mode = 'local'时出现的 “Different expressions with the same alias” 错误。#9871(Artem Zuikov)。 - 修复在具有复合主键的表上,mutation 操作导致的过量内存消耗。此修复解决了 #9850。#9860(alesapin)。
- 对于 INSERT 查询,现在分片会将从发起端获取的设置限制到分片自身的约束范围内,而不是抛出异常。此修复允许向具有不同约束的分片发送 INSERT 查询。此变更改进了对 #9447 的修复。#9852(Vitaly Baranov)。
- 修复在存在 COMMA JOIN 的子查询(位于表列表之外,例如在 WHERE 中)时出现的 “COMMA to CROSS JOIN rewriter is not enabled or cannot rewrite query” 错误。修复了 #9782。#9830(Artem Zuikov)。
- 修复客户端上可能出现的
Got 0 in totals chunk, expected 1异常。该问题出现在包含JOIN的查询中,当右连接的表没有任何行时会触发。例如:select * from system.one t1 join system.one t2 on t1.dummy = t2.dummy limit 0 FORMAT TabSeparated;。修复了 #9777。#9823(Nikolai Kochetov)。 - 修复在无法转换类型时使用
optimize_skip_unused_shards导致的 SIGSEGV。#9804(Azat Khuzhin)。 - 修复
ALTER TABLE DELETE COLUMN在 compact parts 上的异常行为。#9779(alesapin)。 - 修复 max_distributed_connections(有无 Processors 情况)。#9673(Azat Khuzhin)。
- 修复少数情况下未正确使用函数参数时区的问题。#9574(Vasily Nemkov)。
改进
- 从 mutation 中移除 ORDER BY 阶段,因为我们在单线程中仅从一个已排序的 part 读取数据。同时增加检查,确保 mutation 中行的顺序按照排序键顺序排列,且该顺序不会被破坏。#9886(alesapin)。
ClickHouse release v20.3.4.10,2020-03-20
Bug Fix
- 此版本同样包含来自 20.1.8.41 的所有错误修复
- 修复通过 http(使用 processors pipeline)执行查询时缺少
rows_before_limit_at_least的问题。修复了 #9730。#9757(Nikolai Kochetov)
ClickHouse release v20.3.3.6, 2020-03-17
Bug Fix
- 此版本同样包含来自 20.1.7.38 的所有错误修复
- 修复复制机制中的一个错误:如果用户在上一版本中执行过 mutation,将导致复制无法工作。修复了 #9645。#9652(alesapin)。这使得 20.3 版本再次向后兼容。
- 新增设置
use_compact_format_in_distributed_parts_names,允许在向Distributed表执行INSERT查询时,以更加紧凑的格式写入文件。修复了 #9647。#9653(alesapin)。这使得 20.3 版本再次向后兼容。
ClickHouse release v20.3.2.1, 2020-03-12
向后不兼容变更
- 修复了在向拥有大量副本的
Distributed表发送数据时出现的file name too long问题。修复了副本凭据暴露在服务器日志中的问题。磁盘上的目录名格式已更改为[shard{shard_index}[_replica{replica_index}]]。#8911 (Mikhail Korotov) 升级到新版本后,由于旧版本的服务器无法识别新的目录格式,除非进行手动干预,否则无法降级。如果需要降级,必须手动将相应目录重命名为旧格式。仅当您在Distributed表上使用异步INSERT时,此变更才与您相关。在 20.3.3 版本中,我们将引入一个设置,使您可以逐步启用新格式。 - 已更改 mutation 命令在复制日志中的记录格式。在安装新版本之前,必须先等待所有旧的 mutation 全部处理完成。
- 实现一个简单的内存分析器,在超过软分配上限后,每额外分配 N 个字节时将堆栈跟踪信息转储到
system.trace_log中 #8765 (Ivan) #9472 (alexey-milovidov)system.trace_log表中的该列已从timer_type重命名为trace_type。这将需要对第三方性能分析和火焰图处理工具进行相应更改。 - 在所有场景下统一使用操作系统线程 ID,而不是内部线程编号。这修复了 #7477:旧版
clickhouse-client在启用send_logs_level设置时,无法接收服务器发送的日志,因为结构化日志消息的名称和类型发生了变化。另一方面,不同版本的服务器之间互相发送日志时,其类型也可能不同。如果未使用send_logs_level设置,则无需关心这一点。#8954 (alexey-milovidov) - 删除
indexHint函数 #9542 (alexey-milovidov) - 移除
findClusterIndex、findClusterValue函数。此更改修复了 #8641。如果你正在使用这些函数,请发送邮件至[email protected]#9543 (alexey-milovidov) - 现在不允许在创建列或添加列时使用
SELECT子查询作为默认表达式。#9481 (alesapin) - 在 JOIN 中,子查询现在必须指定别名。 #9274 (Artem Zuikov)
- 改进了
ALTER MODIFY/ADD查询逻辑。现在不能在未指定类型的情况下ADD列,MODIFY默认表达式不会改变列的类型,而对类型的MODIFY不会丢失默认表达式的值。修复了 #8669。#9227(alesapin) - 需要重启服务器才能使日志配置中的更改生效。这是为临时规避一个缺陷,即服务器仍然将日志写入已被删除的日志文件(参见 #8696)。#8707(Alexander Kuzmenkov)
experimental_use_processors设置默认启用。该设置会启用新的查询管线。这是一次内部重构,我们预计不会有任何可见变化。如果你遇到任何问题,请将其重新设为 0。#8768 (alexey-milovidov)
新功能
- 添加
Avro和AvroConfluent输入和输出格式 #8571 (Andrew Onyshchuk) #8957 (Andrew Onyshchuk) #8717 (alexey-milovidov) - 在
cache字典中对已过期键进行多线程、非阻塞更新(可选地允许读取旧数据)。 #8303 (Nikita Mikhaylov) - 新增查询语句
ALTER ... MATERIALIZE TTL。它会运行一次 mutation 操作,强制删除已按 TTL 过期的数据,并在所有数据片段中重新计算 TTL 元信息。#8775 (Anton Popov) - 如有需要,可将 HashJoin 切换为基于磁盘的 MergeJoin #9082 (Artem Zuikov)
- 为
ALTER TABLE添加了MOVE PARTITION命令 #4729 #6168 (Guillaume Tassery) - 支持在运行时从配置文件重新加载存储配置。#8594 (Vladimir Chebotarev)
- 允许将
storage_policy更改为不低于当前等级的存储策略。#8107 (Vladimir Chebotarev) - 为 S3 存储和表函数添加了对 glob 模式/通配符的支持。#8851 (Vladimir Chebotarev)
- 为
FixedString(N)数据类型实现了bitAnd、bitOr、bitXor、bitNot。#9091 (Guillaume Tassery) - 新增函数
bitCount。修复了 #8702。#8708(alexey-milovidov)#8749(ikopylov) - 添加
generateRandom表函数,用于根据给定的 schema 生成随机行,从而为任意测试表填充数据。#8994 (Ilya Yatsishin) JSONEachRowFormat:支持对象被包含在顶层数组中的特殊情况。#8860 (Kruglov Pavel)- 现在可以创建一个带有
DEFAULT表达式的列,其表达式依赖于另一列,而该列带有ALIAS默认表达式。#9489 (alesapin) - 允许在
clickhouse-obfuscator中指定大于源数据大小的--limit。数据会在使用不同随机种子的情况下重复生成。#9155 (alexey-milovidov) - 添加了
groupArraySample函数(类似于groupArray),基于水库抽样算法实现。#8286 (Amos Bird) - 现在,您可以通过系统指标监控
cache/complex_key_cache字典中更新队列的大小。 #9413 (Nikita Mikhaylov) - 当将设置
output_format_csv_crlf_end_of_line设为 1 时,允许在 CSV 输出格式中使用 CRLF 作为行分隔符 #8934 #8935 #8963 (Mikhail Korotov) - 实现更多 H3 API 函数:
h3GetBaseCell、h3HexAreaM2、h3IndexesAreNeighbors、h3ToChildren、h3ToString和stringToH3#8938 (Nico Mandery) - 引入了新的设置:
max_parser_depth,用于控制最大栈大小,以便支持大型复杂查询。修复了 #6681 和 #7668。#8647(Maxim Smirnov) - 新增
force_optimize_skip_unused_shards设置项,当无法跳过未使用的分片时抛出异常 #8805 (Azat Khuzhin) - 允许配置多个磁盘/卷,用于存储由
Distributed引擎发送的数据 #8756 (Azat Khuzhin) - 支持存储临时数据的存储策略(
<tmp_policy>)。#8750 (Azat Khuzhin) - 添加了
X-ClickHouse-Exception-CodeHTTP 头字段,如果在发送数据之前抛出了异常,则会设置该字段。实现了 #4971。#8786(Mikhail Korotov) - 新增函数
ifNotFinite。它仅是语法糖:ifNotFinite(x, y) = isFinite(x) ? x : y。 #8710 (alexey-milovidov) - 在
system.dictionaries表中新增last_successful_update_time列 #9394 (Nikita Mikhaylov) - 添加
blockSerializedSize函数(在磁盘上的未压缩大小) #8952 (Azat Khuzhin) - 新增函数
moduloOrZero#9358 (hcz) - 添加了系统表
system.zeros和system.zeros_mt,以及表函数zeros()和zeros_mt()。这些表(和表函数)仅包含一个名为zero、类型为UInt8的列,该列的值全部为零。它用于测试,作为生成大量行的最快方法。这修复了 #6604 #9593 (Nikolai Kochetov)
实验性功能
- 为
MergeTree系列表新增紧凑格式的 part,在该格式中所有列存储在同一个文件中。这有助于提升小批量且高频插入操作的性能。旧格式(每列一个文件)现在称为宽格式。数据存储格式由设置项min_bytes_for_wide_part和min_rows_for_wide_part控制。#8290 (Anton Popov) - 为
Log、TinyLog和StripeLog表增加对 S3 存储的支持。#8862 (Pavel Kovalenko)
错误修复
- 修复日志消息中不一致的空格。#9322 (alexey-milovidov)
- 修复了在创建表时,将未命名元组数组错误地扁平化为 Nested 结构的问题。#8866 (achulkov2)
- 修复了在
File表或file表函数中,当有过多文件匹配 glob 模式时可能出现的 “Too many open files” 错误。现在文件会被惰性按需打开。此修复对应 #8857 #8861 (alexey-milovidov) - DROP TEMPORARY TABLE 现在只会删除临时表。 #8907 (Vitaly Baranov)
- 在关闭服务器或对表执行 DETACH/ATTACH 操作时删除过期分区。#8602 (Guillaume Tassery)
- 调整默认磁盘从
data子目录计算可用空间的方式。修复了在将data目录挂载到单独设备(较为罕见的情况)时,可用空间计算不正确的问题。此修复对应 #7441 #9257 (Mikhail Korotov) - 允许在逗号(CROSS)JOIN 中内部使用
IN ()子句。 #9251 (Artem Zuikov) - 当 WHERE 子句中包含 [NOT] LIKE 运算符时,允许将 CROSS 重写为 INNER JOIN。 #9229 (Artem Zuikov)
- 修复在启用设置
distributed_aggregation_memory_efficient时,GROUP BY查询可能产生错误结果的问题。修复 #9134。#9289(Nikolai Kochetov) - 在缓存字典的指标中,已命中的键被统计为未命中。 #9411 (Nikita Mikhaylov)
- 修复在 #8598 中引入的导致复制协议不兼容的问题。#9412 (alesapin)
- 修复了
ReplicatedMergeTree表在启动时queue_task_handle上的竞态条件。 #9552 (alexey-milovidov) - 在
SHOW TABLES NOT LIKE查询中,关键字NOT无法正常工作 #8727 #8940 (alexey-milovidov) - 为函数
h3EdgeLengthM添加了范围检查。如果没有该检查,可能会发生缓冲区溢出。#8945 (alexey-milovidov) - 修复了在对多个参数(超过 10 个)进行批量三元逻辑运算时的一个错误。 #8718 (Alexander Kazakov)
- 修复 PREWHERE 优化中的一个错误,该错误可能导致段错误或抛出
Inconsistent number of columns got from MergeTreeRangeReader异常。#9024 (Anton Popov) - 修复在启用查询分析器时,在安全连接中随机出现的意外
Timeout exceeded while reading from socket异常(在实际超时之前就被抛出)。同时新增connect_timeout_with_failover_secure_ms设置项(默认 100ms),其作用类似于connect_timeout_with_failover_ms,但用于安全连接(因为 SSL 握手比普通 TCP 连接更慢) #9026 (tavplubix) - 修复变更(mutation)完成状态处理中的 bug,解决变更可能卡在
parts_to_do=0且is_done=0状态的问题。 #9022 (alesapin) - 使用新的 ANY JOIN 逻辑,通过
partial_merge_join设置实现。现在在partial_merge_join=1时,可以执行ANY|ALL|SEMI LEFT和ALL INNERjoin。#8932 (Artem Zuikov) - 现在,分片会将从发起方获取的设置自动收紧到该分片自身的约束范围内,而不是抛出异常。此修复允许在约束条件不同的情况下向分片发送查询。 #9447 (Vitaly Baranov)
- 修复了
MergeTreeReadPool中的内存管理问题。 #8791 (Vladimir Chebotarev) - 修复当以字符串
e作为参数调用时的toDecimal*OrNull()系列函数问题。解决了 #8312 #8764(Artem Zuikov) - 确保
FORMAT Null不向客户端发送任何数据。 #8767 (Alexander Kuzmenkov) - 修复
LiveViewBlockInputStream中时间戳不会更新的问题。LIVE VIEW是一个实验性特性。#8644 (vxider) #8625 (vxider) - 修复了
ALTER MODIFY TTL的错误行为,此前无法删除旧的 TTL 表达式。 #8422 (Vladimir Chebotarev) - 修复了 MergeTreeIndexSet 中 UBSan 报告的问题。此修复解决了 #9250 和 #9365(alexey-milovidov)
- 修复了当 haystack 为零字节时
match和extract函数的行为。当 haystack 为常量时,其行为不正确。本次修复了 #9160 #9163(alexey-milovidov)#9345(alexey-milovidov) - 避免在 Apache Avro 第三方库中从析构函数抛出异常。 #9066 (Andrew Onyshchuk)
- 不要只提交从
Kafka轮询到的批次中的一部分,否则可能导致数据出现缺失。#8876 (filimonov) - 修复具有可为空值返回类型的
joinGet。 #8919 #9014 (Amos Bird) - 修复使用
T64编解码器压缩时的数据不兼容问题。 #9016 (Artem Zuikov) 修复T64压缩编解码器中的数据类型 ID,从而避免在受影响版本中产生错误的(解)压缩结果。 #9033 (Artem Zuikov) - 添加设置
enable_early_constant_folding,并在某些会导致错误的情况下禁用该设置。 #9010 (Artem Zuikov) - 修复涉及 VIEW 的下推谓词优化器并启用相关测试 #9011 (Winter Zhang)
- 修复在从
File存储读取时可能导致Merge表发生的段错误 #9387 (tavplubix) - 在
ATTACH PARTITION FROM、REPLACE PARTITION、MOVE TO TABLE中新增了对存储策略的检查。否则在重启后可能导致部分数据不可访问,并阻止 ClickHouse 启动。#9383 (Vladimir Chebotarev) - 修复在表设置了 TTL 时执行 ALTER 的问题。 #8800 (Anton Popov)
- 修复在执行
SYSTEM RELOAD ALL DICTIONARIES时,当某个字典正在被修改/添加/删除时可能出现的竞争条件。 #8801 (Vitaly Baranov) - 在之前的版本中,
Memory数据库引擎使用空的数据路径,因此表会被创建在path目录中(例如/var/lib/clickhouse/),而不是在数据库的数据目录中(例如/var/lib/clickhouse/db_name)。 #8753 (tavplubix) - 修复了关于缺少默认磁盘或策略的错误的日志消息。#9530 (Vladimir Chebotarev)
- 修复数组类型 bloom_filter 索引中 not(has()) 的问题。#9407 (achimbab)
- 允许
Log引擎表的首列(或前几列)为别名 #9231 (Ivan) - 修正单线程从
MergeTree表读取时的范围顺序问题。该问题可能导致MergeTreeRangeReader抛出异常或产生错误的查询结果。#9050 (Anton Popov) - 将
reinterpretAsFixedString的返回类型从String改为FixedString。#9052 (Andrew Onyshchuk) - 避免在极少数情况下用户收到错误的提示信息(返回
Success而不是详细的错误描述)。 #9457 (alexey-milovidov) - 在使用
Template格式且行模板为空时避免发生崩溃。 #8785 (Alexander Kuzmenkov) - 系统表元数据文件可能会在错误的位置创建 #8653(tavplubix),修复了 #8581。
- 修复 cache dictionary 中 exception_ptr 的数据竞争问题 #8303。#9379(Nikita Mikhaylov)
- 对于查询
ATTACH TABLE IF NOT EXISTS,不再抛出异常。此前,即使包含IF NOT EXISTS子句,如果表已存在也会抛出异常。#8967 (Anton Popov) - 修复了异常消息中缺失的右括号。 #8811 (alexey-milovidov)
- 在交互模式下启动 clickhouse-client 时,避免显示
Possible deadlock avoided消息。 #9455 (alexey-milovidov) - 修复了 base64 编码值末尾填充部分可能格式错误的问题,并更新了 base64 库。此更改修复了 #9491,并关闭了 #9492 和 #9500(alexey-milovidov)
- 防止在极少数情况下,在读取后缀之后但在提交之前发生异常时导致
Kafka中的数据丢失。修复了 #9378 #9507(filimonov) - 修复了
DROP TABLE IF EXISTS语句中的异常 #8663(Nikita Vasilev) - 修复当用户尝试对旧格式的
MergeTree表引擎系列执行ALTER MODIFY SETTING时发生的崩溃问题。 #9435 (alesapin) - 在与 JSON 相关的函数中支持无法用 Int64 表示的 UInt64 数值。将 SIMDJSON 更新到 master 分支。该更改修复了 #9209 #9344(alexey-milovidov)
- 修复在使用非严格单调函数索引时执行反向谓词的错误。 #9223 (Alexander Kazakov)
- 不要在
GROUP BY中对IN常量进行折叠 #8868 (Amos Bird) - 修复了
ALTER DELETE变更操作导致索引损坏的错误。此修复解决了 #9019 和 #8982。另外,修复了ReplicatedMergeTree中ALTER查询里极其罕见的竞争条件。#9048 (alesapin) - 当启用
compile_expressions设置时,在使用Nullable类型时,可能会在LLVMExecutableFunction中出现unexpected column错误 #8910(Guillaume Tassery) - 针对
Kafka引擎的多项修复:1)修复在 consumer group rebalance 期间出现的重复数据问题。2)修复在使用一次 poll 从多个分区拉取数据并只做部分提交时出现的罕见“空洞”问题(现在我们总是处理 / 提交整块拉取到的消息)。3)修复按块大小进行 flush 的逻辑(在此之前,只有按超时时间进行 flush 能够正常工作)。4)改进订阅流程(带有 assignment 反馈)。5)加快测试执行速度(在默认轮询间隔和超时时间下)。由于之前并未按块大小进行 flush(而文档要求应当如此),该 PR 在默认设置下可能会导致一定的性能下降(因为 flush 更频繁且块更小,效率较低)。如果在此变更后遇到性能问题,请将表中的kafka_max_block_size调大(例如CREATE TABLE ...Engine=Kafka ... SETTINGS ... kafka_max_block_size=524288)。修复 #7259 #8917(filimonov) - 修复了在进行 PREWHERE 优化后某些查询中出现的
Parameter out of bound异常。#8914 (Baudouin Giard) - 修复了函数
arrayZip在参数常量性不一致(同时包含常量与非常量)时的处理问题。 #8705 (alexey-milovidov) - 在执行
CREATE查询时,对存储引擎参数中的常量表达式进行折叠。将空数据库名替换为当前数据库。修复 #6508、#3492、#9262(tavplubix) - 现在不再允许创建或添加具有简单循环别名的列,例如
a DEFAULT b, b DEFAULT a。 #9603 (alesapin) - 修复了双重移动操作可能破坏原始数据分片(part)的错误。如果您使用
ALTER TABLE MOVE,则该修复与您相关 #8680 (Vladimir Chebotarev) - 允许在不使用反引号的情况下也能正确解析
interval标识符。修复了即使将interval标识符用反引号或双引号括起来,查询仍然无法执行的问题。修复了 #9124。#9142(alexey-milovidov) - 修复了模糊测试以及
bitTestAll/bitTestAny函数的不正确行为。#9143 (alexey-milovidov) - 修复在存在大量与第 n 行相等的行时,
LIMIT n WITH TIES可能导致崩溃或返回错误行数的问题。 #9464 (tavplubix) - 修复对在启用
insert_quorum时写入的数据分片执行 mutation 时的问题。 #9463 (alesapin) - 修复在销毁
Poco::HTTPServer期间出现的数据竞争。当服务器启动后立即关闭时可能会发生该问题。 #9468 (Anton Popov) - 修复了在运行
SHOW CREATE TABLE a_table_that_does_not_exist时会显示误导性错误信息的问题。 #8899 (achulkov2) - 修复了在
SELECT子句中包含常量且同时存在ORDER BY和LIMIT子句时,极少数情况下会出现的Parameters are out of bound异常。 #8892 (Guillaume Tassery) - 修复 mutation 完成流程,已完成的 mutation 可能仍然显示状态
is_done=0。 #9217 (alesapin) - 禁止对 MergeTree 表使用旧语法执行
ALTER ADD INDEX,因为该语法无效。#8822 (Mikhail Korotov) - 在服务器启动时,请不要访问
LIVE VIEW所依赖的表,以便服务器能够正常启动。在分离LIVE VIEW时,请同时移除其依赖关系。LIVE VIEW是一个实验性功能。#8824 (tavplubix) - 修复在执行
PREWHERE时MergeTreeRangeReader中可能发生的段错误。 #9106 (Anton Popov) - 修复在使用列 TTL 时可能出现的校验和不匹配问题。#9451 (Anton Popov)
- 修复了一个错误:当只有一个卷时,TTL 规则不会在后台移动数据分片。 #8672 (Vladimir Chebotarev)
- 修复了问题
Method createColumn() is not implemented for data type Set。此修复解决了 #7799。#8674 (alexey-milovidov) - 现在我们会更频繁地尝试完成 mutations。#9427 (alesapin)
- 通过减去常量 1 修复
intDiv#9351 (hcz) - 修复
BlockIO中可能存在的竞争条件。 #9356 (Nikolai Kochetov) - 修复在尝试使用或删除以错误参数创建的
Kafka表时导致服务器终止的问题。 #9513 (filimonov) - 添加了针对操作系统对
timer_create函数返回错误结果的变通方案。 #8837 (alexey-milovidov) - 修复了
min_marks_for_seek参数的使用错误。修复了在 Distributed 表中没有分片键且尝试跳过未使用分片时的错误消息。#8908 (Azat Khuzhin)
改进
- 在
ReplicatedMergeTree*引擎家族中基于 mutation(变更)机制实现ALTER MODIFY/DROP查询。现在ALTER查询只会在元数据更新阶段产生阻塞,之后将不再阻塞。 #8701 (alesapin) - 在
WHERE子句包含未限定名称时,新增将 CROSS 重写为 INNER JOIN 的功能。 #9512 (Artem Zuikov) - 使
SHOW TABLES和SHOW DATABASES查询支持WHERE表达式以及FROM/IN子句 #9076 (sundyli) - 新增了设置项
deduplicate_blocks_in_dependent_materialized_views。 #9070 (urykhy) - 在最近的更改之后,MySQL 客户端开始以十六进制形式输出二进制字符串,从而导致它们不可读(#9032)。在 ClickHouse 中的解决方法是将字符串列标记为 UTF-8,虽然并非在所有情况下都适用,但大多数情况下都是如此。#9079(Yuriy Baranov)
- 为
sumMap添加对 String 和 FixedString 类型键的支持 #8903 (Baudouin Giard) - 在 SummingMergeTree 的 map 中增加对字符串键的支持 #8933 (Baudouin Giard)
- 即使线程抛出异常,也会向线程池发送该线程的终止信号 #8736 (Ding Xiang Fei)
- 支持在
clickhouse-benchmark中设置query_id#9416 (Anton Popov) - 在
ALTER TABLE ... PARTITION partition查询中不再允许使用异常表达式。修复了 #7192 #8835(alexey-milovidov) - 表
system.table_engines现在提供有关功能支持的信息(例如supports_ttl或supports_sort_order)。 #8830 (Max Akhmedov) - 默认启用
system.metric_log。其中将包含以 "collect_interval_milliseconds" 间隔(默认一秒)采集的 ProfileEvents 和 CurrentMetrics 的值对应的行。该表非常小(通常只有几兆字节级别),默认收集这些数据是合理的。#9225 (alexey-milovidov) - 为同一组内的所有线程初始化查询分析器,例如,这样可以对
INSERT查询进行完整分析。修复 #6964 #8874 (Ivan) - 现在创建临时
LIVE VIEW时,使用CREATE LIVE VIEW name WITH TIMEOUT [42] ...,而不再使用CREATE TEMPORARY LIVE VIEW ...,因为之前的语法与CREATE TEMPORARY TABLE ...不一致 #9131 (tavplubix) - 添加
text_log.level配置参数,用于限制写入到system.text_log表的日志条目 #8809 (Azat Khuzhin) - 允许根据 TTL 规则将已下载的数据分片存放到磁盘/卷上 #8598 (Vladimir Chebotarev)
- 对于外部 MySQL 字典,允许复用 MySQL 连接池,使其在字典之间“共享”连接。此选项可显著减少到 MySQL 服务器的连接数量。 #9409 (Clément Rodriguez)
- 在
clickhouse-benchmark的输出中,对分位数显示最接近的查询执行时间,而不是插值后的数值。最好显示与实际查询执行时间相对应的数值。 #8712 (alexey-milovidov) - 支持在向 Kafka 插入数据时为消息添加 key 和时间戳。修复 #7198 #8969 (filimonov)
- 如果从终端运行服务器,则会通过不同颜色突出显示线程编号、查询 ID 和日志优先级。这样可以提高开发人员在阅读关联日志消息时的可读性。 #8961 (alexey-milovidov)
- 在为
Ordinary数据库加载表时改进异常信息。#9527 (alexey-milovidov) - 为包含聚合函数状态的数组实现
arraySlice支持。修复了 #9388 #9391(alexey-milovidov) - 允许在
IN运算符的右侧使用常量函数和常量数组。 #8813 (Anton Popov) - 如果在为 system.replicas 获取数据时发生 ZooKeeper 异常,则在单独的一列中显示该异常。对应实现 #9137 #9138(alexey-milovidov)
- 在销毁时原子地删除 MergeTree 数据部件。#8402 (Vladimir Chebotarev)
- 支持 Distributed 表的行级安全性。 #8926 (Ivan)
- 现在支持在设置值中识别后缀(如 KB、KiB 等)。#8072 (Mikhail Korotov)
- 防止在构建大型 JOIN 结果时发生内存耗尽。 #8637 (Artem Zuikov)
- 在
clickhouse-client的交互模式中,在补全建议中添加了集群名称。#8709 (alexey-milovidov) - 为一个线程组中的所有线程初始化查询分析器,例如,这样可以对 INSERT 查询进行完整分析 #8820 (Ivan)
- 在
system.query_log表中新增了exception_code列。 #8770 (Mikhail Korotov) - 在默认服务器配置文件中启用了端口
9004上的 MySQL 兼容服务器。修正了配置示例中的密码生成命令。#8771 (Yuriy Baranov) - 当文件系统为只读时,防止在关闭时发生 abort。修复了 #9094 #9100(alexey-milovidov)
- 当 HTTP POST 查询需要指定长度时,改进异常信息。 #9453 (alexey-milovidov)
- 为
HDFS和File引擎以及hdfs和file表函数添加_path和_file虚拟列 #8489 (Olga Khvostikova) - 修复在向
MATERIALIZED VIEW插入数据时,如果已向视图的内部表中添加新列会出现的Cannot find column错误。 #8766 #8788 (vzakaznikov) #8788 #8806 (Nikolai Kochetov) #8803 (Nikolai Kochetov) - 修复原生客户端-服务器协议中的进度处理方式:改为在最终更新之后(类似日志)再发送进度信息。此更改可能仅与使用原生协议的部分第三方工具相关。 #9495 (Azat Khuzhin)
- 添加系统指标,用于跟踪使用 MySQL 协议的客户端连接数(#9013)。#9015(Eugene Klimov)
- 从现在起,HTTP 响应将包含
X-ClickHouse-Timezone头部,其值与SELECT timezone()返回的时区值相同。#9493 (Denis Glazachev)
性能改进
- 提高使用 IN 分析索引时的性能。#9261 (Anton Popov)
- 在逻辑函数中使用更简单且更高效的代码,并进行代码清理。是对 #8718 和 #8728 的后续改进。(Alexander Kazakov)
- 通过借助 C++20 特性确保更严格的别名规则,从而整体提升性能(受影响查询的性能提升范围为 5%~200%)。#9304 (Amos Bird)
- 对比较函数内部循环应用更严格的别名规则。#9327 (alexey-milovidov)
- 对算术函数内部循环应用更严格的别名规则。#9325 (alexey-milovidov)
- 为 ColumnVector::replicate() 提供了大约 3 倍更快的实现,ColumnConst::convertToFullColumn() 也是基于该实现完成的。在对常量做物化时的测试中也会很有用。#9293 (Alexander Kazakov)
- 对
ColumnVector::replicate()进行另一项小幅性能优化(这会加速materialize函数以及高阶函数),是对 #9293 的进一步改进。#9442 (Alexander Kazakov) - 改进
stochasticLinearRegression聚合函数的性能。该补丁由 Intel 贡献。#8652 (alexey-milovidov) - 改进
reinterpretAsFixedString函数的性能。#9342 (alexey-milovidov) - 在处理器流水线中,对于
Null格式不再向客户端发送数据块。#8797 (Nikolai Kochetov) #8767 (Alexander Kuzmenkov)
构建/测试/打包改进
- 在 Windows Subsystem for Linux(WSL)中,异常处理现已正常工作。详见 https://github.com/ClickHouse-Extras/libunwind/pull/3。此更改修复了 #6480 和 #9564(sobolevsv)。
- 将
clickhouse-client的交互式行编辑库从readline替换为replxx#8416 (Ivan) - 在 FunctionsComparison 中提升构建速度并减少模板实例化次数。 #9324 (alexey-milovidov)
- 在 CI 中新增了
clang-tidy集成。另请参阅 #6044 #9566 (alexey-milovidov) - 现在在 CI 中链接 ClickHouse 时,即使使用
gcc,我们也会使用lld。#9049 (alesapin) - 当设置了
THREAD_FUZZER_*环境变量时,可以对线程调度进行随机化并插入干扰,有助于测试。#9459 (alexey-milovidov) - 在无状态测试中启用安全套接字功能 #9288 (tavplubix)
- 使 SPLIT_SHARED_LIBRARIES=OFF 更加健壮 #9156 (Azat Khuzhin)
- 使
performance_introspection_and_logging测试在服务器随机卡死的情况下也能保持可靠。这种情况可能会在 CI 环境中发生。另请参见 #9515 #9528(alexey-milovidov) - 在样式检查中对 XML 进行校验。 #9550 (alexey-milovidov)
- 修复了测试
00738_lock_for_inner_table中的竞态条件。该测试依赖于 sleep 调用。 #9555 (alexey-milovidov) - 移除
once类型的性能测试。这样可以在统计对比模式下运行所有性能测试,从而获得更可靠的结果。#9557 (alexey-milovidov) - 为算术函数新增了性能测试。#9326 (alexey-milovidov)
- 为
sumMap和sumMapWithOverflow聚合函数添加了性能测试,作为 #8933 和 #8947 的后续工作(alexey-milovidov) - 通过样式检查确保 ErrorCodes 的风格一致。 #9370 (alexey-milovidov)
- 为测试历史添加脚本。 #8796 (alesapin)
- 添加 GCC 警告
-Wsuggest-override,以定位并修复所有需要使用override关键字的地方。 #8760 (kreuzerkrieg) - 在 Mac OS X 上忽略 weak symbol,因为它必须被定义 #9538 (Deleted user)
- 对性能测试中部分查询的运行时间进行归一化处理。这是为了准备以对比模式运行所有性能测试。#9565 (alexey-milovidov)
- 修复部分测试,以便在查询测试中支持 pytest #9062 (Ivan)
- 在使用 MSan 构建时启用 SSL,以避免服务器在运行无状态测试时启动失败 #9531 (tavplubix)
- 修复测试结果中的数据库替换问题 #9384 (Ilya Yatsishin)
- 针对多种平台的构建修复 #9381 (proller) #8755 (proller) #8631 (proller)
- 在 stateless-with-coverage 测试 Docker 镜像中添加了 disks 部分 #9213 (Pavel Kovalenko)
- 使用 GRPC 进行构建时清理源码树中的文件 #9588 (Amos Bird)
- 通过从 Context 中移除 SessionCleaner 略微缩短构建时间,并简化 SessionCleaner 的代码。#9232 (alexey-milovidov)
- 更新了
clickhouse-test脚本中对卡住查询的检查 #8858 (Alexander Kazakov) - 从代码仓库中移除了一些多余文件。 #8843 (alexey-milovidov)
- 将 math 性能测试的类型从
once更改为loop。#8783 (Nikolai Kochetov) - 添加一个 Docker 镜像,用于生成我们代码库的交互式代码浏览器 HTML 报告。 #8781 (alesapin) 参见 Woboq Code Browser
- 在 MSan 下屏蔽了一些测试失败。#8780 (Alexander Kuzmenkov)
- 加速“exception while insert”测试。此测试在启用代码覆盖率的调试构建中经常超时。 #8711 (alexey-milovidov)
- 将
libcxx和libcxxabi更新到了 master 分支。为 #9304 #9308 做准备(alexey-milovidov) - 修复不稳定的测试用例
00910_zookeeper_test_alter_compression_codecs。 #9525 (alexey-milovidov) - 清理重复的链接器标志,确保链接器不会解析到意外的符号。#9433 (Amos Bird)
- 在测试镜像中添加
clickhouse-odbc驱动程序,以便通过其自带的 ODBC 驱动测试 ClickHouse 与 ClickHouse 之间的交互。#9348 (filimonov) - 修复若干单元测试中的缺陷。 #9047 (alesapin)
- 启用
-Wmissing-include-dirsGCC 警告,以消除所有指向不存在目录的 include —— 这些通常是由 CMake 脚本错误导致的 #8704 (kreuzerkrieg) - 当查询分析器无法工作时,请说明具体原因。此项变更对应 #9049 #9144(alexey-milovidov)
- 将 OpenSSL 更新到上游 master 版本。修复了一个可能导致 TLS 连接失败的问题,失败时会出现
OpenSSL SSL_read: error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error和SSL Exception: error:2400006E:random number generator::error retrieving entropy错误信息。该问题存在于 20.1 版本中。#8956 (alexey-milovidov) - 更新 server Dockerfile #8893 (Ilya Mazaev)
- 对 build-gcc-from-sources 脚本进行了一些小修正 #8774 (Michael Nacharov)
- 在未使用
number列的性能测试中将numbers替换为zeros。这将使测试结果更加清晰。 #9600 (Nikolai Kochetov) - 修复在 Column 构造函数中使用 initializer_list 时出现的栈溢出问题。 #9367 (已删除的用户)
- 将 librdkafka 升级到 v1.3.0。在 Mac OS X 上启用捆绑的
rdkafka和gsasl库。#9000 (Andrew Onyshchuk) - 修复 GCC 9.2.0 下的构建问题 #9306 (vxider)
ClickHouse 发布 v20.1
ClickHouse 发布 v20.1.16.120-stable 2020-60-26
Bug 修复
- 修复在
prewhere条件中使用Nullable列导致的罕见崩溃问题。是对 #11608 的后续修复。#11869(Nikolai Kochetov)。 - 不再允许在高阶函数内部使用
arrayJoin。此前这会导致协议同步被破坏。此修改关闭了 #3933。#11846(alexey-milovidov)。 - 修复类似
SELECT *, xyz.*这类查询的非预期行为,这些查询原本应该报错却能成功执行。#11753(hexiaoting)。 - 修复在 Values 输入格式中,由于复杂字面量类型推导错误导致的 LOGICAL_ERROR。#11732(tavplubix)。
- 修复对常量列使用
ORDER BY ... WITH FILL的问题。#11697(Anton Popov)。 - 与 XDBC bridge 通信时传递正确的超时时间。此前在检查 bridge 存活状态和接收元数据时,未正确遵守超时设置。#11690(alexey-milovidov)。
- 增加对带有大小写不敏感标志的正则表达式的支持。修复了 #11101 并修复了 #11506。#11649(alexey-milovidov)。
- 修复针对
String的布隆过滤器(数据跳过索引)的问题。#11638(Azat Khuzhin)。 - 修复在
prewhere条件中使用Nullable列导致的罕见崩溃问题。(可能与 #11572 有关联)。#11608(Nikolai Kochetov)。 - 修复在
exception.code() % 256 = 0时,clickhouse-client的错误退出码。#11601(filimonov)。 - 修正服务器启动时关于 "Mark cache size was lowered" 这一日志消息中的一个简单的错误。此修改关闭了 #11399。#11589(alexey-milovidov)。
- 现在
clickhouse-server的 Docker 容器在检查服务器存活时将优先使用 IPv6。#11550(Ivan Starkov)。 - 修复在执行使用带
-State后缀聚合函数的聚合过程中抛出异常时出现的内存泄漏问题。修复了 #8995。#11496(alexey-milovidov)。 - 修复在带有
FINAL修饰符以及ORDER BY优化时,将主键包裹在函数中使用的问题。#10715(Anton Popov)。
ClickHouse 发布 v20.1.15.109-stable 2020-06-19
Bug 修复
ClickHouse 发布 v20.1.14.107-stable 2020-06-11
Bug 修复
- 修复在包含
PREWHERE column in (subquery)和ARRAY JOIN的查询中出现错误Size of offsets does not match size of column的问题。#11580 (Nikolai Kochetov)。
ClickHouse 发布 v20.1.13.105-stable 2020-06-10
Bug 修复
- 修复在启用
min_bytes_to_use_direct_io且 PREWHERE 启用,并使用 SAMPLE 或高并发线程时可能出现的错误Data compressed with different methods。此修复解决了 #11539。#11540(alexey-milovidov)。 - 修复编解码器返回的压缩大小计算。 #11448 (Nikolai Kochetov).
- 修复当某列的压缩 codec 带有非字面量参数时出现的服务器崩溃问题。修复了 #11365。#11431(alesapin)。
- 修复 point 为 NaN 时的
pointInPolygon。解决了 #11375。#11421(Alexey Ilyukhov)。 - 修复了在参数超出纬度/经度范围时的 geohashesInBox 问题。 #11403 (Vasily Nemkov).
- 修复在使用外部排序(external sort)和 limit 的查询中可能出现的
Pipeline stuck错误。修复了 #11359。#11366(Nikolai Kochetov)。 - 修复
quantilesExactWeightedArray中的崩溃。 #11337 (Nikolai Kochetov). - 在设置
parallel_view_processing = 1时,恢复对MATERIALIZED VIEW的并行写入。修复 #10241。#11330(Nikolai Kochetov)。 - 修复 visitParamExtractRaw 在提取的 JSON 中遇到包含不成对 { 或 [ 的字符串时的行为。 #11318 (Ewout).
- 修复 ThreadPool 中极罕见的竞争条件。 #11314 (alexey-milovidov).
- 修复转换过程中可能使用未初始化内存的问题。例如:
SELECT toIntervalSecond(now64())。 #11311(alexey-milovidov)。 - 修复当表的主键中包含
Array类型列,且查询对该列使用empty或notEmpty函数进行过滤时导致索引分析失效的问题。此修复对应 #11286。#11303(alexey-milovidov)。 - 修复了一个错误:当查询被
max_network_bandwidth、max_execution_speed或priority设置限速时,查询速度估算可能不正确,从而导致min_execution_speed的限制可能不起作用或无法正常工作。将timeout_before_checking_execution_speed的默认值更改为非零值,否则min_execution_speed和max_execution_speed设置将不会生效。此更改修复了 #11297。此更改修复了 #5732。此更改修复了 #6228。可用性改进:在clickhouse-client中避免将异常信息与进度条拼接在一起。#11296(alexey-milovidov)。 - 修复在读取格式错误的 Protobuf 数据时发生的崩溃。此更改修复了 #5957 和 #11203。#11258(Vitaly Baranov)。
- 修复在高阶函数捕获类型为
Array(Array(LowCardinality))的参数时可能出现的Cannot capture column错误。#11185 (Nikolai Kochetov)。 - 如果 data skipping 索引依赖于在后台合并过程中会被修改的列(适用于 SummingMergeTree、AggregatingMergeTree 以及 TTL GROUP BY),则该索引会被错误地计算。此问题通过将索引计算移动到合并之后来修复,从而在合并后的数据上计算索引。#11162(Azat Khuzhin)。
- 如果没有任何内容被最终完成,则从 mutation 完成任务中移除日志记录。 #11109 (alesapin).
- 修复了 parseDateTime64BestEffort 参数解析中的错误。#10925。#11038 (Vasily Nemkov)。
- 修复
getRawData()方法返回的原始数据大小不正确的问题。 #10964 (Igr). - 修复 Distributed 表中元组的向后兼容性问题。#10889 (Anton Popov)。
- 修复 StringHashTable 中的 SIGSEGV(如果该键不存在时)。 #10870 (Azat Khuzhin)。
- 修复了
ReplicatedMergeTree中的一个 bug,它可能会导致某些针对OPTIMIZE查询的ALTER语句在某个副本变为非活跃状态后仍一直等待该副本而挂起。#10849 (tavplubix)。 - 在调用 Block::sortColumns() 之后修复列的顺序(并添加一个测试,用于展示它会影响某些实际用例,例如 Buffer 引擎)。 #10826 (Azat Khuzhin)。
- 修复了在未对标识符加引号时 ODBC bridge 存在的问题。此更改修复了 #7984。#10821(alexey-milovidov)。
- 修复 DateLUT 中 UBSan 和 MSan 报告的问题。 #10798 (alexey-milovidov).
-
- 在键条件中使用
src_type以确保正确的类型转换。修复 #6287。#10791 (Andrew Onyshchuk)。
- 在键条件中使用
- 修复
parallel_view_processing的行为。现在,即使发生异常,对所有MATERIALIZED VIEW的插入都应无一例外地完成。修复了 #10241。#10757(Nikolai Kochetov)。 - 修复在与 -State 组合使用时的 -OrNull 和 -OrDefault 组合器。#10741 (hcz).
- 修复总计消失的问题。如果查询包含
JOIN或带有外部WHERE条件的子查询,则总计可能会被过滤掉。修复了 #10674。#10698(Nikolai Kochetov)。 - 修复在单个查询中多次对同一集合使用
IN运算符的问题。#10686 (Anton Popov). - 修复
AggregateTransform构造函数的参数顺序。#10667(palasonic1)。 - 修复在启用
distributed_aggregation_memory_efficient时远程查询无法并行执行的问题。修复了 #10655。#10664(Nikolai Kochetov)。 - 修复分布式查询中谓词优化(
enable_optimize_predicate_expression=1)在带有HAVING子句(即需要在发起端服务器进行过滤)的查询中的问题:通过保留表达式的顺序(这本身就足以修复该问题),并强制聚合器优先使用列名而非索引。修复:#10613, #11413。#10621(Azat Khuzhin)。 - 修复错误
BloomFilter false positive 必须是介于 0 和 1 之间的双精度浮点数#10551。#10569(Winter Zhang)。 - 修复在
SELECT中使用列别名ALIAS时,其默认表达式类型与列类型不一致的问题。#10563 (Azat Khuzhin). -
- 实现了 DateTime64 与 String 类型值之间的比较(与 DateTime 的行为相同)。 #10560 (Vasily Nemkov).
ClickHouse 版本 v20.1.12.86,2020-05-26
Bug 修复
- 修复了 20.1 版本与更早版本之间在两级聚合上的不兼容问题。当在发起节点和远程节点上使用不同版本的 ClickHouse,且
GROUP BY结果较大,并且仅按单个String字段进行聚合时,会出现此不兼容性。这会导致结果中同一键对应的多行数据未被合并。 #10952 (alexey-milovidov). - 修复了在合并后可能发生的
SummingMergeTree中LowCardinality(FixedString)键列数据损坏。修复了 #10489。#10721(Nikolai Kochetov)。 - 修复了在
readonly=2且cancel_http_readonly_queries_on_client_close=1时,客户端关闭会导致 HTTP 请求卡住的问题。修复了 #7939、#7019、#7736、#7091。#10684(tavplubix)。 - 修复了一个问题:在执行
SYSTEM DROP DNS CACHE查询时,会连同用于检查用户是否被允许从某些 IP 地址连接的缓存一并清除。 #10608 (tavplubix). - 修复了在
MATERIALIZED VIEW的内部查询中,当该查询包含依赖的表时返回的标量结果不正确的问题。#10603 (Nikolai Kochetov). - 修复了这样一种情况:mutation 已处理完所有数据部分,但状态仍停留在
is_done=0。 #10526 (alesapin). - 修复了在 Unix 纪元起点,对于相对于 UTC 具有非整数偏移的时区出现的溢出问题。此修复对应 #9335。#10513(alexey-milovidov)。
- 修复了 Distributed 存储异常关闭的问题。#10491 (Azat Khuzhin).
- 修复了
simpleLinearRegression在处理大整数时的数值溢出问题。#10474 (hcz). - 修复了在
ATTACH DATABASE失败时误删 metadata 目录的问题。 #10442 (Winter Zhang)。 - 在创建
BloomFilter索引时增加了对参数数量和类型的检查 #9623。#10431(Winter Zhang)。 - 修复了包含
ARRAY JOIN、ORDER BY和LIMIT的查询可能返回不完整结果的问题。此更改修复了 #10226。#10427(alexey-milovidov)。 - 优先选择
fallback_to_stale_replicas,而不要使用skip_unavailable_shards。 #10422 (Azat Khuzhin). - 修复了对
Array(Tuple(...))数据类型的不正确扁平化处理。此更改修复了 #10259。#10390(alexey-milovidov)。 - 修复了
HashTable中的错误逻辑,曾在尝试从缓冲区读取 HashMap 时导致编译错误。#10386 (palasonic1). - 修复了在远程查询中可能出现的
ConcatProcessor中的Pipeline stuck错误。#10381(Nikolai Kochetov)。 - 修复了在使用
max_rows_to_group_by和group_by_overflow_mode = 'break'时可能出现的Pipeline stuck错误。#10279 (Nikolai Kochetov)。 - 修复了若干问题:当部分数据以 quorum 方式写入后,又被(
DROP PARTITION、TTL 等)删除时,会导致后续INSERT请求阻塞,或在执行SELECT时抛出误报异常。此改动修复了 #9946。#10188(Nikita Mikhaylov)。 - 修复了这样一种不兼容问题:当远程服务器使用 18.12.17 之前的版本,而发起请求的服务器使用更新版本,并且在
GROUP BY中同时使用固定键和非固定键且启用了 two-level group by 方法时会出现的问题。 #3254 (alexey-milovidov).
构建/测试/打包改进
ClickHouse v20.1.10.70 版本发布,2020-04-17
缺陷修复
- 修复一个可能出现的罕见异常
Cannot drain connections: cancel first。#10239 (Nikolai Kochetov). - 修复了一个问题:当用户尝试在
ENGINE = Replicated*的表上执行ALTER UPDATE/DELETE时,ClickHouse 会抛出'Unknown function lambda.'错误信息。现在对非确定性函数的检查已能正确处理 lambda 表达式。#10237 (Alexander Kazakov)。 - 修复
parseDateTimeBestEffort在处理星期二或星期四的 RFC-2822 格式字符串时的解析问题。修复了 #10082。#10214(alexey-milovidov)。 - 修复
JOIN中常量列的列名,以避免与JOIN外部常量列的列名发生冲突。 #10207 (alexey-milovidov)。 - 修复在从
system.numbers或system.zeros等无限数据源读取时,本应在 LIMIT 处停止却可能导致查询无限执行的问题。#10206 (Nikolai Kochetov). - 修复在存在
arrayJoin函数时(在某些情况下)move-to-prewhere 优化的问题。此修复解决了 #10092。#10195(alexey-milovidov)。 - 通过
allow_nondeterministic_mutations设置,新增在 mutation 中放宽对非确定性函数使用限制的功能。 #10186 (filimonov). - 在向使用
Distributed引擎的表执行INSERT时,如果表结构不匹配,则自动转换数据块。#10135(Azat Khuzhin)。 - 修复在向
Distributed表执行INSERT时,当其结构与底层表不同而导致的SIGSEGV问题。#10105(Azat Khuzhin)。 - 修复在包含
JOIN和UNION ALL的查询中可能出现的行丢失问题。修复 #9826、#10113。#10099(Nikolai Kochetov)。 - 为 MySQL 数据库引擎添加参数检查,并支持标识符类型参数。 #10077 (Winter Zhang)。
- 修复来自本机 ClickHouse 服务器的 ClickHouse 字典源中的 bug。当字典与数据源中的类型不兼容时,该 bug 可能导致内存损坏。#10071(alesapin)。
- 修复错误
Cannot clone block with columns because block has 0 columns ... While executing GroupingAggregatedTransform。该问题出现在启用distributed_aggregation_memory_efficient设置且分布式查询从不同分片读取聚合层级不同的数据时(单级与两级聚合混用)。#10063 (Nikolai Kochetov)。 - 修复在对末尾带有零字节的字符串键执行
GROUP BY时可能发生的段错误(#8636、#8925)。#10025(Alexander Kuzmenkov)。 - 修复了一个问题:在对某些数据库执行查询的某个处理阶段中,未能检索到所需的表。修复了 #9699。#9949(achulkov2)。
- 修复当
JOIN与TOTALS一起使用时会出现'Not found column in block'错误的问题。已修复 #9839。#9939(Artem Zuikov)。 - 修复了一个导致带有
ON CLUSTER的 DDL 查询在服务器启动时发生冻结的问题。#9927 (Gagan Arneja)。 - 为 Join 表引擎修复
TRUNCATE操作(#9917)。#9920(Amos Bird)。 - 修复 ALTER 查询中的
'scalar does not exist'错误(#9878)。#9904(Amos Bird)。 - 修复
ReplicatedMergeTree中 drop 与 optimize 之间的并发竞争问题。 #9901 (alesapin). - 修复了
ATTACH PART中的DeleteOnDestroy逻辑(该问题可能导致已附加的数据片段被自动删除),并增加了一些测试用例。#9410 (Vladimir Chebotarev)。
构建/测试/打包改进
- 修复单元测试
collapsing_sorted_stream。#9367 (Deleted user)。
ClickHouse 发行版 v20.1.9.54,2020-03-28
Bug 修复
- 修复在分布式表上查询同时包含
PREWHERE和WHERE,并且设置了SET distributed_product_mode = 'local'时出现的'Different expressions with the same alias'错误。#9871 (Artem Zuikov)。 - 修复对具有复合主键的表执行 mutation 时内存消耗过高的问题。此修复解决了 #9850。#9860 (alesapin)。
- 对于
INSERT查询,现在分片会将从发起端获得的设置裁剪到自身约束范围内,而不是直接抛出异常。此修复允许向约束不同的分片发送INSERT查询。此变更改进了对 #9447 的修复。#9852 (Vitaly Baranov)。 - 修复客户端上可能出现的异常
Got 0 in totals chunk, expected 1。它会在包含JOIN的查询中触发,当右表没有任何行时会发生。例如:select * from system.one t1 join system.one t2 on t1.dummy = t2.dummy limit 0 FORMAT TabSeparated;。修复了 #9777。#9823 (Nikolai Kochetov)。 - 修复在类型无法转换时,配合
optimize_skip_unused_shards使用会导致的SIGSEGV。#9804 (Azat Khuzhin)。 - 修复了若干未正确使用函数参数时区的情形。#9574 (Vasily Nemkov)。
改进
- 从 mutation 过程中移除
ORDER BY阶段,因为我们在单线程中从单个有序数据部分读取。同时添加检查,以保证 mutation 中行的顺序符合排序键顺序,且该顺序不会被破坏。#9886 (alesapin)。
构建/测试/打包改进
ClickHouse 发行版 v20.1.8.41,2020-03-20
缺陷修复
- 修复可能出现的永久性
Cannot schedule a task错误(由ParallelAggregatingBlockInputStream::Handler::onFinish/onFinishThread中未处理的异常导致)。修复了 #6833。 #9154 (Azat Khuzhin) - 修复
ALTER变更(mutation)查询中过高的内存消耗。修复了 #9533 和 #9670。 #9754 (alesapin) - 修复外部字典 DDL 中反引号处理的错误。修复了 #9619。 #9734 (alesapin)
ClickHouse 版本 v20.1.7.38,2020-03-18
错误修复
- 修复了
sumKahan和sumWithOverflow的内部函数名称错误,该问题会在远程查询中使用这些函数时导致异常。#9636(Azat Khuzhin)。这个问题存在于所有 ClickHouse 版本中。 - 允许对包含内部复制的
Distributed表执行ALTER ON CLUSTER。这修复了 #3268。#9617(shinoi2)。该问题影响所有 ClickHouse 版本。 - 修复了在
MergeTreeRangeReader中可能出现的异常Size of filter does not match size of column和Invalid number of rows in Chunk,这些异常可能在某些情况下执行PREWHERE时触发。修复了 #9132。#9612(Anton Popov) - 已修复以下问题:在编写诸如
time + 1这样的简单算术表达式时,不会保留时区(与time + INTERVAL 1 SECOND这样的表达式不同)。此修复对应 #5743。#9323(alexey-milovidov)。该问题存在于所有 ClickHouse 版本中。 - 现在无法创建或添加带有简单循环引用别名的列,例如
a DEFAULT b, b DEFAULT a。#9603 (alesapin) - 修复了 base64 编码值末尾填充可能格式错误的问题,并更新了 base64 库。修复了 #9491,关闭 #9492 #9500(alexey-milovidov)
- 修复在销毁
Poco::HTTPServer时出现的数据竞争问题。该问题可能在服务器刚启动后就立即被关闭时发生。#9468 (Anton Popov) - 修复在存在大量与第 n 行相同的行时,
LIMIT n WITH TIES可能发生的崩溃或返回行数不正确的问题。#9464 (tavplubix) - 修复在使用列 TTL 时可能出现的校验和不匹配问题。#9451 (Anton Popov)
- 修复当用户尝试对旧格式的
MergeTree表引擎系列执行ALTER MODIFY SETTING时发生的崩溃。#9435 (alesapin) - 现在我们会更频繁地尝试完成 mutation。 #9427 (alesapin)
- 修复在 #8598 中引入的复制协议不兼容问题。#9412 (alesapin)
- 修复数组类型的 bloom_filter 索引中 not(has()) 的问题。 #9407 (achimbab)
- 修复了在 haystack 为零字节时
match和extract函数的行为。当 haystack 为常量时,其行为不正确。此更改修复了 #9160 #9163 (alexey-milovidov) #9345 (alexey-milovidov)
构建/测试/打包改进
- 现在在 Windows Subsystem for Linux 上的异常处理已能正常工作。详情参见 https://github.com/ClickHouse-Extras/libunwind/pull/3 。此更改修复了 #6480 和 #9564(sobolevsv)
ClickHouse 发布 v20.1.6.30,2020-03-05
Bug 修复
- 修复在使用
T64编解码器进行压缩时出现的数据不兼容问题。 #9039 (abyss7) - 修正单线程读取 MergeTree 表时的范围顺序。修复了 #8964。 #9050 (CurtizJ)
- 修复在执行
PREWHERE时MergeTreeRangeReader中可能出现的段错误,解决了 #9064。 #9106 (CurtizJ) - 将
reinterpretAsFixedString修复为返回FixedString而非String。 #9052 (oandrew) - 修复
joinGet在可为空返回类型情况下的行为。修复 #8919 #9014 (amosbird) - 修复 fuzz 测试,以及
bitTestAll/bitTestAny函数的错误行为。 #9143 (alexey-milovidov) - 修复在
haystack为零字节时match和extract函数的行为问题:当haystack为常量时,其行为不正确。修复了 #9160 #9163 (alexey-milovidov) - 修复了在使用非严格单调函数索引时对取反谓词条件的执行方式。修复了 #9034 #9223 (Akazz)
- 允许在
WHERE子句中存在[NOT] LIKE运算符时,将CROSS重写为INNER JOIN。修复 #9191 #9229 (4ertus2) - 允许 Log 引擎表中的首列(或前几列)为别名列。 #9231 (abyss7)
- 允许在逗号连接中使用
IN()。修复 #7314。 #9251 (4ertus2) - 改进
ALTER MODIFY/ADD查询的逻辑。现在无法在未指定类型的情况下使用ADD添加列;使用MODIFY修改默认表达式不会改变列的类型,而使用MODIFY修改类型也不会丢失默认表达式的值。修复了 #8669。 #9227 (alesapin) - 修复变更(mutation)完成状态处理的问题:已完成的 mutation 仍然可能被标记为状态 is_done=0。 #9217 (alesapin)
- 为 system.numbers 和 system.numbers_mt 提供对 "Processors" 流水线的支持。同时修复了
max_execution_time未被正确遵守的问题。 #7796 (KochetovNicolai) - 修复
DictCacheKeysRequestedFound指标计数错误。 #9411 (nikitamikhaylov) - 在
ATTACH PARTITION FROM、REPLACE PARTITION、MOVE TO TABLE中新增了对存储策略的检查,否则可能会导致某些数据分片在重启后变得不可访问,并阻止 ClickHouse 启动。 #9383 (excitoon) - 修复了
MergeTreeIndexSet中 UBSan 报告的问题。该修复解决了 #9250 #9365 (alexey-milovidov) - 修复 BlockIO 中可能的数据竞争问题。 #9356 (KochetovNicolai)
- 在 JSON 相关函数中支持超出 Int64 范围的
UInt64数字。将SIMDJSON更新到 master。这修复了 #9209 #9344 (alexey-milovidov) - 修复当数据目录挂载到单独设备上时,空闲空间大小计算不正确的问题。对于默认磁盘,从数据子目录计算空闲空间。此修复解决了 #7441 #9257 (millb)
- 修复 TLS 连接可能失败并出现如下错误消息的问题:
OpenSSL SSL_read: error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error and SSL Exception: error:2400006E:random number generator::error retrieving entropy.将 OpenSSL 更新到上游 master 分支。 #8956 (alexey-milovidov) - 在执行
CREATE查询时,对存储引擎参数中的常量表达式进行折叠。将空数据库名称替换为当前数据库。修复了 #6508、#3492。同时修复了 ClickHouseDictionarySource 中对本地地址的检查。 #9262 (tabplubix) - 修复
StorageMerge中的段错误(segfault),该问题可能在从 StorageFile 读取数据时发生。 #9387 (tabplubix) - 在极少数情况下,当在读取 suffix 之后但在提交之前发生异常时,防止
Kafka中的数据丢失。修复 #9378。相关问题:#7175 #9507 (filimonov) - 修复在尝试使用或删除使用错误参数创建的
Kafka表时导致服务器终止的错误。修复了 #9494,并合并了 #9507。 #9513 (filimonov)
新功能
- 添加
deduplicate_blocks_in_dependent_materialized_views选项,用于控制对包含物化视图的表执行幂等插入时的行为。应 Altinity 的特别请求,此新功能被加入到该 bug 修复版本中。 #9070 (urykhy)
ClickHouse 发布 v20.1.2.4,2020-01-22
向后不兼容变更
- 将设置
merge_tree_uniform_read_distribution标记为废弃。服务器仍然识别该设置,但它不再产生任何效果。#8308 (alexey-milovidov) - 将函数
greatCircleDistance的返回类型更改为Float32,因为现在计算结果为Float32。#7993 (alexey-milovidov) - 现在要求查询参数采用“转义(escaped)”格式表示。例如,要传递字符串
a<tab>b,必须写为a\tb或a\<tab>b,并且在 URL 中分别为a%5Ctb或a%5C%09b。这样做是为了能够将 NULL 作为\N传递。这修复了 #7488。#8517 (alexey-milovidov) - 默认对
ReplicatedMergeTree启用use_minimalistic_part_header_in_zookeeper设置。这将大幅减少存储在 ZooKeeper 中的数据量。该设置自 19.1 版本起已被支持,并且我们已经在多个服务的生产环境中稳定使用了超过半年。如果存在降级到 19.1 之前版本的可能,请禁用该设置。#6850 (alexey-milovidov) - 数据跳过索引已达到生产就绪状态并默认启用。设置
allow_experimental_data_skipping_indices、allow_experimental_cross_to_join_conversion和allow_experimental_multiple_joins_emulation现已废弃且不起任何作用。#7974 (alexey-milovidov) - 为
StorageJoin增加新的ANY JOIN逻辑,使其与JOIN操作保持一致。若要在升级时不改变行为,需要在 Join 引擎表的元数据中添加SETTINGS any_join_distinct_right_table_keys = 1,或者在升级后重新创建这些表。#8400 (Artem Zuikov) - 现在需要重启服务器才能应用日志配置中的更改。这是一个临时变通方案,用于避免服务器继续写入已被删除的日志文件的 bug(见 #8696)。#8707 (Alexander Kuzmenkov)
新功能
- 在
system.merges中添加了关于 part 路径的信息。#8043 (Vladimir Chebotarev) - 新增支持在
ON CLUSTER模式下执行SYSTEM RELOAD DICTIONARY查询。 #8288 (Guillaume Tassery) - 新增支持在
ON CLUSTER模式下执行CREATE DICTIONARY查询。 #8163 (alesapin) - 现在
users.xml中的用户配置文件可以继承自多个配置文件。#8343 (Mikhail f. Shiryaev) - 添加了
system.stack_trace表,用于查看所有服务器线程的栈跟踪信息。这对于开发人员分析服务器状态非常有用。修复了 #7576。#8344(alexey-milovidov) - 新增支持可配置子秒级精度的
DateTime64数据类型。#7170 (Vasily Nemkov) - 添加了表函数
clusterAllReplicas,可用于查询集群中所有节点。 #8493 (kiran sunkari) - 添加聚合函数
categoricalInformationValue,用于计算离散型特征的信息值。 #8117 (hcz) - 通过并行解析
CSV、TSV和JSONEachRow格式的数据文件来加速处理。#7780 (Alexander Kuzmenkov) - 添加函数
bankerRound,用于执行银行家舍入法。 #8112 (hcz) - 在内置区域名称字典中支持更多语言:'ru', 'en', 'ua', 'uk', 'by', 'kz', 'tr', 'de', 'uz', 'lv', 'lt', 'et', 'pt', 'he', 'vi'。 #8189 (alexey-milovidov)
ANY JOIN逻辑的一致性有所改进。现在t1 ANY LEFT JOIN t2与t2 ANY RIGHT JOIN t1等价。#7665 (Artem Zuikov)- 添加
any_join_distinct_right_table_keys设置,用于为ANY INNER JOIN启用旧行为。#7665 (Artem Zuikov) - 新增
SEMI和ANTI JOIN。旧的ANY INNER JOIN行为现在可以通过SEMI LEFT JOIN获得。#7665 (Artem Zuikov) - 为
File引擎和file表函数添加了Distributed格式,允许从异步插入到Distributed表所生成的.bin文件中读取数据。 #8535 (Nikolai Kochetov) - 为
runningAccumulate添加可选的重置列参数,用于在每个新的键值出现时重置聚合结果。#8326 (Sergey Kononenko) - 添加对将 ClickHouse 用作 Prometheus 端点的支持。 #7900 (vdimir)
- 在
config.xml中添加<remote_url_allow_hosts>配置段,用于限制远程表引擎以及URL、S3、HDFS表函数所允许的主机。#7154 (Mikhail Korotov) - 新增函数
greatCircleAngle,用于计算球面上的距离(单位:度)。 #8105 (alexey-milovidov) - 调整地球半径,使其与 H3 库保持一致。#8105 (alexey-milovidov)
- 添加了用于输入和输出的
JSONCompactEachRow和JSONCompactEachRowWithNamesAndTypes格式。 #7841 (Mikhail Korotov) - 为基于文件的表引擎和表函数(
File、S3、URL、HDFS)新增特性,可根据额外的引擎参数或文件扩展名读写gzip文件。#7840 (Andrey Bodrov) - 添加了
randomASCII(length)函数,用于生成由随机 ASCII 可打印字符组成的字符串。 #8401 (BayoNet) - 新增函数
JSONExtractArrayRaw,用于从JSON字符串中返回由未解析的 JSON 数组元素组成的数组。 #8081 (Oleg Matrokhin) - 新增
arrayZip函数,用于将多个长度相同的数组组合成一个由元组构成的数组。 #8149 (Winter Zhang) - 为
*MergeTree表引擎族新增根据已配置的TTL表达式在不同磁盘之间移动数据的功能。 #8140 (Vladimir Chebotarev) - 新增聚合函数
avgWeighted,用于计算加权平均值。 #7898 (Andrey Bodrov) - 现已对
TSV、TSKV、CSV和JSONEachRow格式默认启用并行解析。#7894 (Nikita Mikhaylov) - 从
H3库中新增了几个地理函数:h3GetResolution、h3EdgeAngle、h3EdgeLength、h3IsValid和h3kRing。 #8034 (Konstantin Malanchev) - 在基于文件的存储和表函数中新增了对 brotli(
br)压缩的支持。修复了 #8156。#8526(alexey-milovidov) - 为
SimpleAggregationFunction类型添加groupBit*函数。#8485 (Guillaume Tassery)
错误修复
- 修复
Distributed引擎表重命名的问题。修复问题 #7868。#8306 (tavplubix) - 现在,在非 ClickHouse SQL 方言中,字典支持对任意字符串类型的属性使用
EXPRESSION。 #8098 (alesapin) - 修复异常的
INSERT SELECT FROM mysql(...)查询。该修复解决了 #8070 和 #7960。#8234(tavplubix) - 修复从
JSONEachRow插入默认Tuple时出现的 “Mismatch column sizes” 错误。解决了 #5653。#8606 (tavplubix) - 现在,如果在使用
LIMIT BY时同时使用WITH TIES,将会抛出异常。同时新增对在LIMIT BY中使用TOP的支持。此更改修复了 #7472。#7637(Nikita Mikhaylov) - 修复
clickhouse-odbc-bridge二进制文件中对较新版本 glibc 的意外依赖。#8046 (Amos Bird) - 修复
*MergeTree引擎族中 check 函数的缺陷。现在在最后一个 granule 与最后一个(非 final)mark 中的行数相等时,校验不会再失败。#8047 (alesapin) - 修复在执行
ALTER查询后,当底层数值类型与表中指定类型相同时向Enum*列插入数据的问题。此修复解决了 #7836。#7908(Anton Popov) - 允许在函数
substring中使用非常量的负数size参数。此前由于疏忽而被错误地禁止。本更改修复了 #4832。#7703 (alexey-milovidov) - 修复在向
(O|J)DBC表引擎传递错误个数的参数时出现的解析错误。 #7709 (alesapin) - 在向 syslog 发送日志时,使用正在运行的 clickhouse 进程的命令名称。在之前的版本中,会使用空字符串作为命令名称。 #8460 (Michael Nacharov)
- 修复对
localhost的允许主机检查。本 PR 修复了在 #8241 中提供的解决方案。#8342(Vitaly Baranov) - 修复了在处理长字符串参数时,当
argMin和argMax函数的结果被用于runningAccumulate函数时极少发生的崩溃问题。此修复对应 #8325 #8341(dinosaur) - 修复使用
Buffer引擎的表的内存过度分配问题。 #8345 (Azat Khuzhin) - 修复了这样一类函数中的潜在缺陷:可以将
NULL作为某个参数传入,但返回值为非NULL。 #8196 (alexey-milovidov) - 改进了后台进程线程池中
MergeTree表引擎的指标计算。#8194 (Vladimir Chebotarev) - 在存在行级表过滤器时,修复
WHERE子句中IN函数的行为。修复了 #6687 #8357(Ivan) - 现在,如果设置中的整型值未被完整解析,将抛出异常。 #7678 (Mikhail Korotov)
- 修复在查询包含两个以上本地分片的分布式表且使用聚合函数时出现的异常。#8164 (小路)
- 现在 Bloom 过滤器可以处理零长度数组,并且避免了冗余计算。#8242 (achimbab)
- 修复了通过将客户端主机与
users.xml中指定的host_regexp进行匹配来检查其是否被允许的逻辑。#8241 (Vitaly Baranov) - 放宽对含糊列的检查,以避免在存在多个
JOIN ON子句时产生误报。#8385 (Artem Zuikov) - 修复了在以下情况下可能发生的服务器崩溃(
std::terminate):当服务器无法以JSON或XML格式发送或写入String数据类型(需要进行UTF-8校验)的值时,或在使用 Brotli 算法压缩结果数据时,以及在某些其他罕见情况下发生的崩溃。修复了 #7603 #8384(alexey-milovidov) - 修复 CI 发现的
StorageDistributedDirectoryMonitor中的竞态条件,修复了 #8364。#8383(Nikolai Kochetov) - 现在,
*MergeTree表引擎系列中的后台合并操作可以更加准确地遵循存储策略中各卷的顺序。#8549 (Vladimir Chebotarev) - 现在表引擎
Kafka已能与Native格式正常配合使用。此更改修复了 #6731 #7337 #8003。#8016(filimonov) - 修复了带有表头的固定格式(如
CSVWithNames)在用于表引擎Kafka时会抛出 EOF(文件结束)异常的问题。#8016 (filimonov) - 修复了在
IN子句右侧从子查询创建集合时的一个错误。此修复解决了 #5767 和 #2542。#7755(Nikita Mikhaylov) - 修复从
File存储引擎读取时可能发生的崩溃。 #7756 (Nikolai Kochetov) - 修复了读取包含
list类型列的Parquet格式文件时的问题。#8334 (maxulan) - 修复当
max_parallel_replicas > 1且PREWHERE条件依赖 sampling key 时,分布式查询出现Not found column错误的问题。 #7913 (Nikolai Kochetov) - 修复当查询中使用依赖于表别名的
PREWHERE且由于主键条件导致结果集为空时出现的Not found column错误。 #7911 (Nikolai Kochetov) - 当参数为
Nullable时,修正了函数rand和randConstant的返回类型。现在这些函数始终返回UInt32,且绝不会返回Nullable(UInt32)。#8204 (Nikolai Kochetov) - 禁用了用于
WITH FILL表达式的谓词下推。这修复了 #7784。#7789(Winter Zhang) - 修复了在使用
FINAL子句时,SummingMergeTree的count()结果不正确的问题。 #3280 #7786 (Nikita Mikhaylov) - 修复了来自远程服务器的常量函数可能产生不正确结果的问题。该问题出现在使用
version()、uptime()等函数的查询中,这些函数在不同服务器上会返回不同的常量值。此更改修复了 #7666。#7689(Nikolai Kochetov) - 修复了下推谓词优化中的一个复杂 bug,该 bug 会导致结果不正确。此次修复解决了许多与下推谓词优化相关的问题。 #8503 (Winter Zhang)
- 修复
CREATE TABLE .. AS dictionary查询导致的崩溃。 #8508 (Azat Khuzhin) - 对
.g4文件中的 ClickHouse 语法进行了多处改进。 #8294 (taiyang-li) - 修复在对使用
Join引擎的表执行JOIN时导致崩溃的错误。修复了 #7556 #8254 #7915 #8100。#8298(Artem Zuikov) - 修复在执行
CREATE DATABASE时字典的冗余重新加载问题。 #7916 (Azat Khuzhin) - 限制从
StorageFile和StorageHDFS读取时的最大流数。修复 #7650。#7981(alesapin) - 修复在
ALTER ... MODIFY ... CODEC查询中,当用户同时指定默认表达式和 codec 时会触发的 bug。修复了 8593。#8614(alesapin) - 修复在后台合并
SimpleAggregateFunction(LowCardinality)类型列时出现的错误。 #8613 (Nikolai Kochetov) - 修正函数
toDateTime64中的类型检查。 #8375 (Vasily Nemkov) - 现在,当在 Join 引擎中使用不受支持的
join_use_nulls设置执行LEFT或FULL JOIN时,服务器不会崩溃。#8479 (Artem Zuikov) - 现在,即使
db不存在,执行DROP DICTIONARY IF EXISTS db.dict查询也不会抛出异常。#8185 (Vitaly Baranov) - 修复由于引用已移除的
IStorage对象而可能导致表函数(file、mysql、remote)崩溃的问题。修复在向表函数插入数据时对指定列的错误解析。 #7762 (tavplubix) - 在启动
clickhouse-server之前,确保网络已就绪。此更改修复了 #7507。#8570(Zhichang Yu) - 修复安全连接的超时处理,使查询不会无限期挂起。修复了 #8126。#8128 (alexey-milovidov)
- 修复
clickhouse-copier在并发 worker 之间出现的不必要争用问题。 #7816 (Ding Xiang Fei) - 现在,mutations 不再跳过已附加的分片,即使它们的 mutation 版本号大于当前的 mutation 版本号。#7812 (Zhichang Yu) #8250 (alesapin)
- 在将数据移动到另一块磁盘并重启服务器后,忽略
*MergeTree数据部分的冗余副本。#7810 (Vladimir Chebotarev) - 修复在
JOIN键中使用LowCardinality时导致FULL JOIN崩溃的问题。 #8252 (Artem Zuikov) - 禁止在 INSERT 查询语句中多次使用相同的列名,例如
INSERT INTO tbl (x, y, x)。这修复了 #5465、#7681。#7685(alesapin) - 针对未知 CPU 类型,在检测物理 CPU 核心数时增加了回退机制(使用逻辑 CPU 核心数)。修复了 #5239。#7726 (alexey-milovidov)
- 修复在物化列和别名列上出现的
There's no column错误。 #8210 (Artem Zuikov) - 修复了在使用
EXISTS查询且未带TABLE或DICTIONARY限定符时导致的服务器崩溃问题,比如EXISTS t。此修复解决了问题 #8172。该缺陷是在 19.17 版本中引入的。 #8213 (alexey-milovidov) - 修复在使用
SimpleAggregateFunction列时可能出现的一处罕见问题,其报错信息为"Sizes of columns does not match"。 #7790 (Boris Granveaud) - 修复了一个 bug:当用户的
allow_databases为空时会被授予对所有数据库的访问权限(allow_dictionaries也存在同样的问题)。#7793 (DeifyTheGod) - 修复当服务器已与客户端断开连接时客户端发生崩溃的问题。 #8071 (Azat Khuzhin)
- 修复在按主键前缀和非主键后缀列排序时的
ORDER BY行为。 #7759 (Anton Popov) - 检查表中是否存在带限定符的列。这修复了 #6836。#7758 (Artem Zuikov)
- 修复了在合并完成后立即运行
ALTER MOVE时的行为问题,该操作会错误地移动指定分区的超级分区。修复了 #8103。#8104(Vladimir Chebotarev) - 修复在使用列数不同的
UNION时可能导致的服务器崩溃问题。解决了 #7279。#7929(Nikolai Kochetov) - 修复函数
substr在长度参数为负数时返回子串的长度计算。 #8589 (Nikolai Kochetov) - 现在,当后台线程池中没有足够的空闲线程时,服务器将不再在
MergeTree中执行分片变更操作。 #8588 (tavplubix) - 修复
UNION ALLAST 格式化中的一个小错误。 #7999 (litao91) - 修复了针对负数的布隆过滤器(Bloom Filter)结果错误。修复了 #8317。#8566 (Winter Zhang)
- 修复了
decompress中潜在的缓冲区溢出漏洞。恶意用户可以传入伪造的压缩数据,从而导致越界读取。该问题由 Yandex 信息安全团队的 Eldar Zaitov 发现。#8404 (alexey-milovidov) - 修复
arrayIntersect中因整数溢出产生的错误结果。 #7777 (Nikolai Kochetov) - 现在,
OPTIMIZE TABLE查询在执行该操作时不会等待离线副本。 #8314 (javi santana) - 修复了用于
Replicated*MergeTree表的ALTER TTL解析器。#8318 (Vladimir Chebotarev) - 修复服务器与客户端之间的通信,使服务器在查询失败后能够读取临时表的信息。 #8084 (Azat Khuzhin)
- 修复在聚合 bitmap 与标量 bitmap 之间执行交集运算时出现的
bitmapAnd函数错误。#8082 (Yue Huang) - 根据 ZooKeeper《Programmer's Guide》完善
ZXid的定义,以修复clickhouse-cluster-copier中的 bug。#8088 (Ding Xiang Fei) odbc表函数现在会遵循external_table_functions_use_nulls设置。 #7506 (Vasily Nemkov)- 修复了导致罕见数据竞争的错误。 #8143 (Alexander Kazakov)
- 现在
SYSTEM RELOAD DICTIONARY会完全重新加载字典,并忽略update_field。修复了 #7440。#8037(Vitaly Baranov) - 支持在 CREATE 查询中检查字典是否存在。 #8032 (alesapin)
- 修复
Values格式中Float*的解析,从而解决 #7817。 #7870 (tavplubix) - 修复在
*MergeTree表引擎系列的一些后台操作中无法预留空间时发生的崩溃。#7873 (Vladimir Chebotarev) - 修复当表包含
SimpleAggregateFunction(LowCardinality)列时合并操作发生崩溃的问题。该修复解决了 #8515。#8522(Azat Khuzhin) - 恢复对所有 ICU 区域设置的支持,并新增对常量表达式应用排序规则的支持。同时在
system.collations表中新增语言名称列。#8051 (alesapin) - 修复当外部字典的最小存活时间为零(
LIFETIME(MIN 0 MAX N)、LIFETIME(N))时无法在后台更新的问题。#7983 (alesapin) - 修复使用 ClickHouse 作为数据源的外部字典在查询中包含子查询时的崩溃问题。#8351 (Nikolai Kochetov)
- 修复在使用
URL引擎的表中对文件扩展名的错误解析,从而修复了 #8157。#8419(Andrey Bodrov) - 修复针对无主键的
*MergeTree表的CHECK TABLE查询。修复 #7543。#7979(alesapin) - 修正了将
Float64转换为 MySQL 类型的逻辑。#8079 (Yuriy Baranov) - 现在,如果由于服务器崩溃导致表未被完全删除,服务器会尝试恢复并加载该表。 #8176 (tavplubix)
- 修复了在向不存在的文件中插入数据时,表函数
file崩溃的问题。现在在此情况下,会先创建该文件,然后再执行插入操作。#8177 (Olga Khvostikova) - 修复在启用
trace_log时可能发生的罕见死锁。#7838 (filimonov) - 为通过 DDL 查询创建的
RangeHashed外部字典新增对除Date之外其他类型的支持。修复 7899。 #8275 (alesapin) - 修复了在使用另一个函数的结果调用
now64()时发生的崩溃。#8270 (Vasily Nemkov) - 修复了通过 MySQL 线协议建立的连接中检测客户端 IP 的问题。#7743 (Dmitry Muzyka)
- 修复
arraySplit函数对空数组的处理。该修复解决了 #7708。#7747(hcz) - 修复了正在运行的其他
clickhouse-server的pid-file可能被删除的问题。 #8487 (Weiqing Xu) - 修复包含
invalidate_query的字典在重新加载时的问题,该问题会导致更新停止,并在之前的更新尝试中抛出异常。 #8029 (alesapin) - 修复了函数
arrayReduce中可能导致“double free”的错误,以及聚合函数组合器Resample中可能导致内存泄漏的错误。新增聚合函数aggThrow,可用于测试。 #8446 (alexey-milovidov)
改进
- 改进了在使用
S3表引擎时的日志记录。 #8251 (Grigory Pervakov) - 在调用
clickhouse-local且未传入任何参数时打印帮助信息。此更改修复了 #5335。#8230(Andrey Nagorny) - 新增设置
mutations_sync,用于以同步方式等待ALTER UPDATE/DELETE查询执行完成。 #8237 (alesapin) - 允许在
config.xml中将user_files_path设置为相对路径(其方式类似于format_schema_path)。#7632 (hcz) - 为带有
-OrZero后缀的转换函数添加针对非法类型的异常处理。#7880 (Andrey Konyaev) - 简化分布式查询中数据发送到分片时的头部格式。 #8044 (Vitaly Baranov)
Live View表引擎重构。 #8519 (vzakaznikov)- 为基于 DDL 查询创建的外部字典添加额外检查。 #8127 (alesapin)
- 修复在同时使用
FINAL和SAMPLE时出现的错误Column ... already exists,例如select count() from table final sample 1/2。修复了 #5186。#7907 (Nikolai Kochetov) - 现在
joinGet函数的第一个参数可以使用表标识符。 #7707 (Amos Bird) - 允许在作用于
Kafka表的子查询中使用MaterializedView。 #8197 (filimonov) - 现在,在磁盘之间移动数据的后台任务在单独的线程池中运行。 #7670 (Vladimir Chebotarev)
SYSTEM RELOAD DICTIONARY现在同步执行。 #8240 (Vitaly Baranov)- 现在堆栈跟踪显示的是物理地址(在对象文件中的偏移量),而不是虚拟内存地址(对象文件被加载到的地址)。这使得在二进制为位置无关且启用了 ASLR 时可以使用
addr2line。这修复了 #8360。#8387 (alexey-milovidov) - 为行级安全过滤器添加新语法支持:
<table name='table_name'>...</table>。修复 #5779。#8381 (Ivan) - 现在
cityHash函数可以处理Decimal和UUID类型。修复了 #5184。#7693(Mikhail Korotov) - 从 system logs 表中移除了固定的索引粒度(此前为 1024),因为在实现自适应粒度后已不再需要。 #7698 (alexey-milovidov)
- 当 ClickHouse 在未启用 SSL 的情况下编译时,也启用 MySQL 兼容服务器。 #7852 (Yuriy Baranov)
- 现在服务器会对分布式数据批次进行校验和检查,这样在批次数据损坏时可以提供更加详细的错误信息。 #7914 (Azat Khuzhin)
- 为
MySQL数据库引擎添加对DROP DATABASE、DETACH TABLE、DROP TABLE和ATTACH TABLE的支持。#8202 (Winter Zhang) - 在 S3 表函数和表引擎中添加身份验证。 #7623 (Vladimir Chebotarev)
- 为位于不同磁盘上的
MergeTree额外数据分片增加了检查,以避免在未定义的磁盘上丢失数据分片。 #8118 (Vladimir Chebotarev) - 为 Mac 客户端和服务器启用 SSL 支持。#8297 (Ivan)
- 现在 ClickHouse 可以充当 MySQL federated server(参见 https://dev.mysql.com/doc/refman/5.7/en/federated-create-server.html)。#7717(Maxim Fedotov)
clickhouse-client现在仅在 multiquery 开启且 multiline 关闭时才启用bracketed-paste。这修复了 #7757。#7761(Amos Bird)- 在
if函数中支持Array(Decimal)。 #7721 (Artem Zuikov) - 为
arrayDifference、arrayCumSum和arrayCumSumNegative函数新增对 Decimal 类型的支持。 #7724 (Artem Zuikov) - 已在
system.dictionaries表中添加lifetime列。 #6820 #7727 (kekekekule) - 改进了
*MergeTree表引擎对位于不同磁盘上的已有数据部分的检查。修复了 #7660。#8440(Vladimir Chebotarev) - 集成用于与
S3交互的AWS SDK,从而可以开箱即用地使用 S3 的全部功能。#8011 (Pavel Kovalenko) - 为
Live View表添加了对子查询的支持。#7792 (vzakaznikov) - 已移除对在
TTL表达式中使用Date或DateTime列的检查。 #7920 (Vladimir Chebotarev) - 磁盘相关信息已添加到
system.detached_parts表中。 #7833 (Vladimir Chebotarev) - 现在可以在无需重启的情况下修改
max_(table|partition)_size_to_drop设置。#7779 (Grigory Pervakov) - 错误信息的易用性略有改善。请用户不要删除
Stack trace:下方的行。#7897 (alexey-milovidov) - 改进了在 #7935 之后以多种格式从
Kafka引擎读取消息的能力。#8035(Ivan) - 进一步提升了对不支持
sha2_password认证插件的 MySQL 客户端的兼容性。#8036 (Yuriy Baranov) - MySQL 兼容服务器现在支持更多列类型。#7975 (Yuriy Baranov)
- 为基于底层
MergeTree表的Merge、Buffer和Materilized View存储实现ORDER BY优化。 #8130 (Anton Popov) - 现在我们始终使用
getrandom的 POSIX 实现,以提高在旧内核(< 3.17)上的兼容性。 #7940 (Amos Bird) - 改进 move TTL 规则中对有效目标的检查。#8410 (Vladimir Chebotarev)
- 针对
Distributed表引擎中损坏的插入批次提供了更完善的检查。#7933 (Azat Khuzhin) - 在
system.mutations表中新增一列,用于存放将来需要由 mutation 处理的 parts 名称数组。 #8179 (alesapin) - 针对处理器的并行归并排序优化。 #8552 (Nikolai Kochetov)
- 设置
mark_cache_min_lifetime现已废弃,不再产生任何效果。在之前的版本中,mark 缓存在内存中的大小可能会增长到超过mark_cache_size,以便在mark_cache_min_lifetime秒内保留数据。这会导致困惑,并造成高于预期的内存占用,在内存受限的系统上尤其糟糕。如果在安装此版本后发现性能下降,应增大mark_cache_size。 #8484 (alexey-milovidov) - 为在各处使用
tid做准备。这是完成 #7477 所必需的。#8276 (alexey-milovidov)
性能优化
- 处理器流水线中的性能优化。 #7988 (Nikolai Kochetov)
- 在缓存字典中过期键的非阻塞更新(允许读取旧值)。 #8303 (Nikita Mikhaylov)
- 在全局编译 ClickHouse 时不使用
-fno-omit-frame-pointer,从而多腾出一个寄存器可用。 #8097 (Amos Bird) - 提升
greatCircleDistance函数性能,并为其添加性能测试。 #7307 (Olga Khvostikova) - 优化了函数
roundDown的性能。 #8465 (alexey-milovidov) - 优化了
DateTime64数据类型上max、min、argMin、argMax的性能。 #8199 (Vasily Nemkov) - 在没有 LIMIT 或 LIMIT 较大且使用外部排序的情况下,提升了排序性能。#8545 (alexey-milovidov)
- 将浮点数格式化的性能最高提升至原来的 6 倍。 #8542 (alexey-milovidov)
- 优化了
modulo函数的性能。#7750 (Amos Bird) - 针对使用单列键的
ORDER BY和合并操作进行了优化。 #8335 (alexey-milovidov) - 针对
arrayReduce、-Array和-State组合器进行了更好的实现。 #7710 (Amos Bird) - 现在
PREWHERE现已优化,其效率至少不低于WHERE。 #7769 (Amos Bird) - 改进
round和roundBankers对负数的处理方式。#8229 (hcz) - 将
DoubleDelta和Gorilla编解码器的解码性能提高了约 30–40%。这修复了 #7082。#8019(Vasily Nemkov) - 提升了
base64相关函数的性能。#8444 (alexey-milovidov) - 新增了
geoDistance函数。它类似于greatCircleDistance,但基于 WGS-84 椭球模型进行近似计算。两个函数的性能几乎相同。 #8086 (alexey-milovidov) - 提升
Decimal数据类型的min和max聚合函数性能。#8144(Artem Zuikov) - 对
arrayReduce进行向量化处理。 #7608 (Amos Bird) if语句链现在会被优化为multiIf。 #8355 (kamalov-ruslan)- 修复在 19.15 中引入的
Kafka表引擎性能回归问题。此修复对应 #7261。#7935(filimonov) - 移除了 Debian 软件包中的
gcc偶尔默认启用的 PIE 代码生成。#8483 (alexey-milovidov) - 并行解析数据格式 #6553 (Nikita Mikhaylov)
- 默认启用对包含表达式的
Values的优化解析器(input_format_values_deduce_templates_of_expressions=1)。#8231 (tavplubix)
构建/测试/打包改进
- 修复
ARM和最小模式下的构建问题。#8304 (proller) - 在
clickhouse-server中,当未调用 std::atexit 时,添加覆盖率文件刷新。同时略微改进了带覆盖率的无状态测试中的日志输出。#8267 (alesapin) - 更新 contrib 中的 LLVM 库。避免使用来自系统软件包的 LLVM。#8258 (alexey-milovidov)
- 使捆绑的
curl的构建过程完全静默。#8232 #8203 (Pavel Kovalenko) - 修复一些
MemorySanitizer警告。#8235 (Alexander Kuzmenkov) - 在
CMakeLists.txt中使用add_warning和no_warning宏。#8604 (Ivan) - 为改进集成测试,新增对 Minio 兼容 S3 对象存储(https://min.io/)的支持。#7863 #7875 (Pavel Kovalenko)
- 已将
libc头文件导入到 contrib 中。这可以使在不同系统上的构建更加一致(仅适用于x86_64-linux-gnu)。#5773 (alexey-milovidov) - 从部分库中移除
-fPIC。 #8464 (alexey-milovidov) - 整理 curl 的
CMakeLists.txt文件。参见 https://github.com/ClickHouse/ClickHouse/pull/8011#issuecomment-569478910 #8459 (alexey-milovidov) CapNProto库中的静默警告。#8220 (alexey-milovidov)- 为短字符串优化的哈希表添加性能测试。#7679 (Amos Bird)
- 现在,即使在不支持
MADV_FREE的环境中,ClickHouse 也可以在AArch64上编译。这修复了 #8027。#8243(Amos Bird) - 更新
zlib-ng以修复 MemorySanitizer 相关问题。#7182 #8206 (Alexander Kuzmenkov) - 在非 Linux 系统上启用内部 MySQL 库,因为依赖操作系统软件包非常不可靠,通常根本无法正常工作。此更改修复了 #5765。#8426(alexey-milovidov)
- 在启用
libc++后,修复了某些系统上的构建问题。此更改取代了 #8374。#8380 (alexey-milovidov) - 提高
Field方法的类型安全性,以便发现更多错误。#7386 #8209 (Alexander Kuzmenkov) - 向
libc-headers子模块添加了缺失的文件。 #8507 (alexey-milovidov) - 修复性能测试输出中
JSON引号不正确的问题。 #8497 (Nikolai Kochetov) - 现在会为
std::exception和Poco::Exception显示堆栈跟踪。在之前的版本中,这仅适用于DB::Exception。这有助于改进诊断。#8501 (alexey-milovidov) - 为新版 glibc 移植
clock_gettime和clock_nanosleep。#8054 (Amos Bird) - 在面向开发者的示例配置中启用
part_log。#8609 (alexey-milovidov) - 修复
01036_no_superfluous_dict_reload_on_create_database*中重新加载为异步方式的问题。 #8111 (Azat Khuzhin) - 修复了编解码器性能测试。#8615 (Vasily Nemkov)
- 为
.tgz构建产物添加安装脚本及相应文档。#8612 #8591 (alesapin) - 移除了旧的
ZSTD测试(其创建于 2016 年,用于复现 1.0 之前版本的 ZSTD 中存在的 bug)。这修复了 #8618。#8619(alexey-milovidov) - 修复在 macOS Catalina 上的构建问题。 #8600 (meo)
- 在编解码器性能测试中增加了行数,以使结果更加显著。 #8574 (Vasily Nemkov)
- 在调试版本中,将
LOGICAL_ERROR异常视为断言失败,以便更容易被发现。#8475 (Alexander Kuzmenkov) - 使与格式相关的性能测试更加具有确定性。 #8477 (alexey-milovidov)
- 更新
lz4,以修复 MemorySanitizer 报错。 #8181 (Alexander Kuzmenkov) - 在异常处理逻辑中屏蔽一处已知的 MemorySanitizer 误报。#8182 (Alexander Kuzmenkov)
- 在
build/docker/build.sh中将gcc和g++更新到 9 版 #7766 (TLightSky) - 添加性能测试用例,以验证
PREWHERE比WHERE更慢。 #7768 (Amos Bird) - 修复一个不稳定测试用例的进展。 #8621 (alexey-milovidov)
- 避免 MemorySanitizer 针对来自
libunwind的数据产生报告。 #8539 (alexey-milovidov) - 将
libc++更新到最新版本。#8324 (alexey-milovidov) - 从源代码构建 ICU 库。修复了 #6460。#8219(alexey-milovidov)
- 从
libressl切换为openssl。完成此更改后,ClickHouse 现在支持 TLS 1.3 和 SNI。修复了 #8171。#8218(alexey-milovidov) - 修复了使用 SSL 中的
chacha20_poly1305时出现的 UBSan 报告(在连接到 https://yandex.ru/ 时会出现)。#8214 (alexey-milovidov) - 修正
.debLinux 发行版默认密码文件的权限设置。 #8075 (proller) - 改进了在
clickhouse-test中获取clickhouse-serverPID 的表达式。 #8063 (Alexander Kazakov) - 将 contrib/googletest 更新至 v1.10.0。 #8587 (Alexander Burmak)
- 修复了
base64库中的 ThreadSanitizer 报告。同时将该库更新到最新版本,但这无关紧要。本次修改修复了 #8397。#8403(alexey-milovidov) - 针对处理器修复
00600_replace_running_query。 #8272 (Nikolai Kochetov) - 从
CMakeLists.txt中移除对tcmalloc的支持以简化配置。#8310 (alexey-milovidov) - 现在,使用 gcc 的 Release 构建改为使用
libc++,而不再使用libstdc++。此前,libc++仅与 clang 一起使用。这将提高构建配置的一致性和可移植性。 #8311 (alexey-milovidov) - 在使用 MemorySanitizer 的构建中启用 ICU 库。 #8222 (alexey-milovidov)
- 屏蔽来自
CapNProto库的警告。 #8224 (alexey-milovidov) - 移除了针对
tcmalloc的特殊处理代码,因为它已不再受支持。#8225 (alexey-milovidov) - 在 CI 覆盖率任务中,优雅地关闭服务器以便它保存覆盖率报告。这解决了我们最近遇到的不完整覆盖率报告问题。#8142 (alesapin)
- 对所有编解码器在
Float64和UInt64值上的性能进行测试。#8349 (Vasily Nemkov) termcap已严重过时,并会导致各种问题(例如缺少"up"功能项,以及在需要多行移动时回显^J)。建议改用terminfo或捆绑的ncurses。 #7737 (Amos Bird)- 修复
test_storage_s3集成测试。#7734 (Nikolai Kochetov) - 支持使用
StorageFile(<format>, null)将数据块插入到指定格式的文件中,而无需真正写入磁盘。这在性能测试中是必需的。#8455 (Amos Bird) - 为功能测试添加了参数
--print-time,用于打印每个测试的执行时间。 #8001 (Nikolai Kochetov) - 在计算 RPN 时向
KeyCondition添加了断言语句,从而修复了 gcc-9 发出的警告。#8279 (alexey-milovidov) - 在 CI 构建中输出 CMake 选项。 #8273 (Alexander Kuzmenkov)
- 不为某些大型库生成调试信息。 #8271 (alexey-milovidov)
- 使
log_to_console.xml始终将日志写入 stderr,而不论是否为交互式环境。#8395 (Alexander Kuzmenkov) - 从
clickhouse-performance-test工具中移除了一些未使用的功能。 #8555 (alexey-milovidov) - 现在我们还会搜索与
clang-X版本对应的lld-X。 #8092 (alesapin) - Parquet 构建优化。 #8421 (maxulan)
- 启用更多 GCC 警告 #8221 (kreuzerkrieg)
- 适用于 Arch Linux 的软件包现在不仅支持运行 ClickHouse 客户端,还支持运行 ClickHouse 服务器。#8534 (Vladimir Chebotarev)
- 修复使用处理器的测试。细微的性能优化。 #7672 (Nikolai Kochetov)
- 更新 contrib/protobuf。 #8256 (Matwey V. Kornilov)
- 为在新年切换到 c++20 做准备。 "愿 C++ 的原力与 ClickHouse 同在。" #8447 (Amos Bird)
实验性功能
- 新增实验性设置
min_bytes_to_use_mmap_io。它允许在不将数据从内核复制到用户空间的情况下读取大文件。该设置默认禁用。建议将阈值设置为约 64 MB,因为 mmap/munmap 调用较慢。#8520 (alexey-milovidov) - 作为访问控制系统的一部分,重构了配额功能。新增表
system.quotas,新函数currentQuota、currentQuotaKey,以及新的 SQL 语法CREATE QUOTA、ALTER QUOTA、DROP QUOTA、SHOW QUOTA。#7257 (Vitaly Baranov) - 允许在跳过未知设置时给出警告,而不是抛出异常。#7653 (Vitaly Baranov)
- 作为访问控制系统的一部分,重构了行策略。新增表
system.row_policies,新函数currentRowPolicies(),以及新的 SQL 语法CREATE POLICY、ALTER POLICY、DROP POLICY、SHOW CREATE POLICY、SHOW POLICIES。#7808 (Vitaly Baranov)
安全修复
- 修复了在使用
File表引擎的表中可以读取目录结构的问题。此修复对应 #8536。#8537 (alexey-milovidov)