ClickHouse 版本发布 20.12
ClickHouse 版本发布 v20.12.5.14-稳定版本,2020-12-28
缺陷修复
- 在 merge 期间禁用使用 AIO 进行写入,因为这在极少数情况下可能会导致 merge 过程中的主键列数据损坏。#18481 (alesapin).
- 修复了在执行
toType(...)函数 (toDate、toUInt32等) 且参数类型为Nullable(String)时出现的value is too short错误。现在,这类函数在发生解析错误时会返回NULL,而不是抛出异常。修复了 #7673。#18445 (tavplubix). - 限制从 wide 到 compact parts 的 merge。在 vertical merge 的情况下,这会导致生成的 part 损坏。#18381 (Anton Popov).
- 修复了填充表
system.settings_profile_elements时的问题。此 PR 修复了 #18231。#18379 (Vitaly Baranov). - 修复了在使用 two-level aggregation 时,带有组合器
Distinct的聚合函数可能崩溃的问题。修复了 #17682。#18365 (Anton Popov). - 修复了查询
MODIFY COLUMN ... REMOVE TTL实际上未删除列生存时间 (TTL) 的错误。#18130 (alesapin).
构建/测试/打包改进
ClickHouse 版本发布 v20.12.4.5-稳定版本, 2020-12-24
缺陷修复
- 修复了在同时启用 IPv4/IPv6 双协议栈的机器上,server 无法访问
clickhouse-odbc-bridge进程的问题;修复了使用格式错误的查询执行 ODBC 字典更新和/或导致崩溃的问题;可能关闭了 #14489。#18278 (Denis Glazachev). - 修复了枚举与 Int 类型之间的键比较问题。此修复解决了 #17989。#18214 (Amos Bird).
- 修复了
MaterializeMySQLdatabase engine 中唯一键转换时崩溃的问题。此修复解决了 #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时,query optimization 可能产生错误结果的问题。#17887 (sundyli). - 修复了
topKaggregate function 中可能出现的段错误。此修复关闭了 #17404。#17845 (Maksim Kita). - 修复了 server 以守护进程模式运行时,
system.stack_trace表为空的问题。#17630 (Amos Bird).
ClickHouse 版本发布 v20.12.3.3-稳定版本,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 object,由
output_format_json_named_tuples_as_objects设置控制,默认禁用。#17175 (Alexander Kuzmenkov) 。 - 默认允许在 TSV 和 CSV 格式中将枚举值的 id 作为输入值。#16834 (Kruglov Pavel) 。
- 为 Nullable、LowCardinality、Array 和 Tuple 新增了 COLLATE 支持,其中嵌套类型为 String。同时还重构了 ColumnString.cpp 中与排序规则相关的代码。#16273 (Kruglov Pavel) 。
- 新增
tcpPort函数,返回该服务器监听的 TCP 端口。#17134 (Ivan) 。 - 新增数学函数:
acosh、asinh、atan2、atanh、cosh、hypot、log1p、sinh。#16636 (Konstantin Malanchev) 。 - 支持在不同副本之间分配 merge 操作。引入了
execute_merges_on_single_replica_time_thresholdMergeTree 设置。#16424 (filimonov) 。 - 为兼容 SQL 标准,新增设置
aggregate_functions_null_for_empty。该选项会重写查询中的所有 聚合函数,为它们添加-OrNull后缀。实现了 10273。#16123 (flynn) 。 - 更新了 DateTime 和 DateTime64 的解析,以接受字符串 Date 字面量格式。#16040 (Maksim Kita) 。
- 现在可以在
clickhouse-client中使用--history_file参数修改 history file 的路径。#15960 (Maksim Kita) 。
缺陷修复
- 修复了极少数情况下 server 可能停止接受连接的问题。#17542 (Amos Bird) 。
- 修复了 ClickHouse 在 Windows Subsystem for Linux 上运行时,在
Atomic数据库中执行RENAME查询会报Function not implemented错误的问题。修复了 #17661。#17664 (tavplubix) 。 - 如果禁用了
in_memory_parts_enable_wal,则不要从 WAL 中恢复 parts。#17802 (detailyang) 。 - 修复了 MergeTreeWriterSettings 中将
max_compress_block_size错误初始化为min_compress_block_size的问题。#17833 (flynn) 。 - 有关可删除表最大大小的异常消息显示有误。#17764 (alexey-milovidov) 。
- 修复了在向
Distributed表插入数据时,空间不足可能导致 segfault 的问题。#17737 (tavplubix). - 修复了 ClickHouse 无法恢复与 MySQL 服务器连接的问题。#17681 (Alexander Kazakov) 。
- 由于在
pool_size> 1 时存在竞态条件,执行ON CLUSTER查询时,可能会错误判断集群是否为环形 (交叉) 复制。现已修复。 #17640 (tavplubix). - 现在可在后台记录 MergeTree 表的异常
fmt::v7::format_error。此修复解决了 #17613。#17615 (alexey-milovidov) 。 - 在交互模式下使用 clickhouse-client 执行多行查询时,单行注释此前会被错误地延伸到整个查询末尾。此修复解决了 #13654。#17565 (alexey-milovidov) 。
- 修复了当相应变更在其他副本上被终止时,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)。 - 修复从
JOIN表读取LowCardinality类型时出现的崩溃问题。修复了 #17228。#17397 (Nikolai Kochetov) 。 - 修复
toInt256(inf)导致的栈溢出。Int256 是一项 Experimental 功能。已关闭 #17235。#17257 (flynn) 。 - 修复带有
LIMIT的 Distributed 查询可能记录Unexpected packet Data received from client错误的问题。#17254 (Azat Khuzhin) 。 - 修复了子查询中存在 const 列时 Set 索引失效的问题。此修复解决了 #17246。#17249 (Amos Bird) 。
- 修复了在索引比较类型不一致时,可能导致索引分析错误的问题。此修复解决了 #17122。#17145 (Amos Bird) 。
- 修复了会导致崩溃的 ColumnConst 比较问题。此修复解决了 #17088。#17135 (Amos Bird) 。
- 针对 MaterializeMySQL (Experimental 功能) 的多项修复。修复了 #16923;修复了 #15883;修复了在修改 MySQL binlog_checksum 时 MaterializeMySQL SYNC 失败的问题。#17091 (Winter Zhang) 。
- 修复了一个 bug:在非 leader 的 ReplicatedMergeTree 表上,
ON CLUSTER查询可能会一直挂起。#17089 (alesapin). - 修复了以下崩溃问题:当
some_table是通过AS table_function()创建时,执行CREATE TABLE ... AS some_table查询会发生崩溃。修复 #16944。#17072 (tavplubix). - 修复
funciton fuzzBits实现未完成的问题,相关 issue:#16980。#17051 (hexiaoting). - 修复了 CFA 寄存器为 RAX 时 LLVM’s libunwind 出现的问题。这是 LLVM’s libunwind 中的一个 bug。我们已经为此 bug 提供了变通方案。#17046 (alexey-milovidov).
- 避免可能在执行过程中被取消的远程查询 (如带有
LIMIT的查询) 出现不必要的网络错误。#17006 (Azat Khuzhin) 。 - 修复了
optimize_distributed_group_by_sharding_key设置在仅使用 OFFSET 的查询中存在的问题 (该设置默认禁用) 。#16996 (Azat Khuzhin) 。 - 修复了基于分布式表的 Merge 表在使用 JOIN 时的问题。#16993 (Azat Khuzhin).
- 修复了从 double 转换为大整数 (128 位、256 位) 时结果错误的问题。大整数支持仍处于 Experimental 状态。#16986 (Mike) 。
- 修复了一种可能导致服务器崩溃的情况:在
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) 。 - 修复了带有
ORDER BY的查询中可能出现的错误Illegal type of argument。修复了 #16580。#16928 (Nikolai Kochetov) 。 - 修复 InterpreterShowAccessQuery 中的奇怪代码。#16866 (tavplubix) 。
- 防止在使用函数
timeSeriesGroupSum时 ClickHouse server 崩溃。该函数已从较新的 ClickHouse 发行版中移除。#16865 (filimonov). - 修复了在启用查询分析器,且 ClickHouse 安装于 glibc 版本对某些函数的异步展开表 (据称) 存在缺陷的操作系统上时,偶发的静默崩溃问题。此修复解决了 #15301。此修复解决了 #13098。#16846 (alexey-milovidov) 。
- 修复了在未传入任何参数时使用
any导致崩溃的问题。这是对 #16803 的修复。抄送 @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)、变更或 collapsing 合并算法清理后产生的空 parts。#16895 (Anton Popov) 。
- 为分布式表中的异步发送目录启用紧凑格式:
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) ,server 启动时会因抛出异常而拒绝启动。#16815 (Ivan) 。 - 在缺少 distributed DDL 配置时,异常消息会更明确。此修复解决了 #5075。#16769 (Nikita Mikhaylov) 。
- 可用性改进:当
CODEC表达式在CREATE TABLE查询中位置不正确时,语法错误消息会提供更好的提示。此修复对应 #12493。#16768 (alexey-milovidov) 。 - 在 Distributed engine 启动时,删除 async INSERT 的空目录。#16729 (Azat Khuzhin) 。
- 针对在使用 nginx server 作为 proxy 时配合 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>配置,并且无需重启 server 即可重新加载。#16627 (Amos Bird) 。 - 支持在与远程资源建立的 https 连接中使用 SNI。这样即可连接到要求 SNI 的 Cloudflare 服务器。此修复解决了 #10055。#16252 (alexey-milovidov) 。
- 支持连接到需要 SNI 的
clickhouse-server安全端点。这在clickhouse-server部署于 TLS 代理之后时可以实现。#16938 (filimonov). - 修复了创建 materialized view 循环时可能出现的栈溢出问题。此修复关闭了 #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的 push down 优化。将Distributed的本地副本加入查询计划。#14936 (Nikolai Kochetov). - 修复了在 max_threads > 0 且 ORDER BY 中包含 expression 时,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).
Experimental 功能
构建/测试/打包改进
- 改进用于构建测试覆盖率的镜像。#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-稳定版本,2021-03-02
改进
缺陷修复
- 修复 BloomFilter 索引崩溃问题。修复了 #19757。#19884 (Maksim Kita) 。
- 如果启用了 system.text_log,则可能会发生死锁。此问题已在 #19874 中修复。#19875 (alexey-milovidov) 。
- 在先前版本中,函数 arrayEnumerateUniq 的异常参数可能会导致崩溃或陷入无限循环。此修复解决了 #19787。#19788 (alexey-milovidov) 。
- 修复了在对算术类型与字符串类型进行精确比较时出现的栈溢出问题。#19773 (tavplubix) 。
- 修复了
bitmapAndnot函数中的段错误。修复了 #19668。#19713 (Maksim Kita) 。 - 某些涉及大整数的函数可能会导致段错误。大整数属于 Experimental 功能。此项修复关闭了 #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) 。 - 如果某个文件中出现空数据块,则将 Distributed 批次标记为损坏。#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对枚举类型参数返回正确的类型。此修复关闭了 #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) 。
- 修复了变更包含某些转义文本时 (例如
ALTER ... UPDATE e = CAST('foo', 'Enum8(\'foo\' = 1')) 序列化错误的问题。修复 #18878。#18944 (alesapin) 。 - Attach 分区时应重置变更。#18804。#18935 (fastio) 。
- 修复了
clickhouse-local在关闭时可能卡住的问题。此修复解决了 #18891。#18893 (alexey-milovidov) 。 - 修复了 *If 组合器与一元函数及 Nullable 类型一起使用时的问题。 #18806 (Azat Khuzhin).
- 如果全局设置
network_compression_method被设为非默认值,服务器可能会拒绝异步分布式 INSERT。此修复解决了 #18741。#18776 (alexey-milovidov) 。 - 修复了在尝试将
NULL从Nullable(String)CAST 为Nullable(Decimal(P, S))时出现的Attempt to read after eof错误。现在,函数CAST在无法从可空字符串中解析出 decimal 时会返回NULL。修复 #7690。#18718 (Winter Zhang) 。 - 修复 Logger 参数数量不匹配的问题。#18717 (sundyli).
- 新增对 FixedString 数据类型的支持。在将数据从 MySQL 复制到 ClickHouse 时,会出现此异常:“Code: 50, e.displayText() = DB::Exception: Unsupported type FixedString(1)“。此补丁修复了 bug #18450,也修复了 #6556。#18553 (awesomeleo) 。
- 修复在包含
RIGHT或FULLJOIN 的子查询后使用ORDER BY时,可能出现的Pipeline stuck错误。#18550 (Nikolai Kochetov). - 修复了一个 bug:终止相应变更后,
ALTER查询可能会卡住。由 Thread Fuzzer 发现。#18518 (alesapin). - 在合并期间禁用使用 AIO 的写入,因为这可能会在极少数情况下导致合并时主键列数据损坏。#18481 (alesapin).
- 当结果无法计算时,在分析阶段禁用子查询的常量折叠。#18446 (Azat Khuzhin) 。
- 修复了对
Nullable(String)类型参数执行toType(...)函数 (toDate、toUInt32等) 时出现的value is too short错误。现在,这类函数在解析出错时会返回NULL,而不再抛出异常。修复 #7673。#18445 (tavplubix) 。 - 限制从 wide parts 到 compact parts 的合并操作。在 vertical merge 的情况下,这会导致生成的结果 part 损坏。#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) 。- 修复了在发生读取 backoff 时,从
MergeTree*读取可能导致查询结果不完整的问题 (日志中会出现消息<Debug> MergeTreeReadPool: Will lower number of threads) 。该问题是在 #16423 中引入的。修复了 #18137。#18216 (Nikolai Kochetov) 。 - 修复查询
MODIFY COLUMN ... REMOVE TTL未实际移除列的生存时间 (TTL) 时的错误。#18130 (alesapin). - 修复了谓词优化器中非确定性函数的问题。此修复解决了 #17244。#17273 (Winter Zhang) 。
- 变更在
MOVE或REPLACE PARTITION之后,或在极少数情况下于DETACH或DROP PARTITION之后,可能会因等待某个不存在的分片而卡住。此问题已修复。#15537 (tavplubix).
构建/测试/打包改进
ClickHouse 版本发布 v20.11.6.6-稳定版本,2020-12-24
缺陷修复
- 修复了在采用双
IPv4/IPv6 stack的机器上,server 无法访问clickhouse-odbc-bridge进程的问题;同时修复了在使用格式错误的查询更新 ODBC 字典时出现的问题和/或引发崩溃的情况。这可能解决了 #14489。#18278 (Denis Glazachev) 。 - 已修复枚举与 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 中恢复 parts。#17802 (detailyang) 。 - 修复了 ClickHouse 无法恢复与 MySQL 服务器连接的问题。#17681 (Alexander Kazakov) 。
- 修复了
optimize_trivial_count_query在使用分区条件时行为不一致的问题。#17644 (Azat Khuzhin) 。 - 修复了在 server 以守护进程模式运行时,
system.stack_trace表为空的问题。#17630 (Amos Bird). - 修复了 MergeTree 表在后台可能记录 xxception
fmt::v7::format_error的问题。此修复解决了 #17613。#17615 (alexey-milovidov). - 修复了
clickhouse-client在交互模式下处理多行查询时,单行注释被错误地延续到查询末尾的问题。此修复对应 #13654。#17565 (alexey-milovidov) 。 - 修复了一个问题:在极少数情况下,服务器可能会停止接受连接。#17542 (alexey-milovidov).
- 修复了这样一个问题:当对应的变更在其他副本上被终止时,alter 查询会卡住。此修复对应于 #16953。#17499 (alesapin).
- 修复了 ClickHouse 低估标记缓存大小时的 bug。这种情况可能发生在存在大量带有标记的微小文件时。#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). - 修复了一个 bug:在非 leader 的
ReplicatedMergeTreeTables上,ON CLUSTER查询可能会永久卡住。 #17089 (alesapin). - 修复了 fuzzer 发现的
fuzzBits函数中的问题。此修复解决了 #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且使用 joins 时,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) 。
- 修复了在聚合函数中使用后缀
if时远程查询失败的问题。此项修复解决了 #16574、#16231 和 #16610 (Winter Zhang) 。 - 修复了
select_sequential_consistency在优化后的简单计数查询和 system.tables 上导致行为不一致的问题。#16309 (Hao Chen) 。 - 使用 ColumnTransformer 替换不存在的列时会抛出错误。#16183 (hexiaoting).
ClickHouse 版本发布 v20.11.3.3-稳定版本,2020-11-13
缺陷修复
- 修复了一个罕见的静默崩溃问题:在启用查询分析器且 ClickHouse 安装在使用某个 glibc 版本的操作系统上时,该 glibc 版本据称对某些函数的异步展开表存在缺陷。此修复解决了 #15301。此修复解决了 #13098。#16846 (alexey-milovidov) 。
ClickHouse 版本发布 v20.11.2.1,2020-11-11
向后不兼容变更
- 如果在
distributed_ddl配置段中指定了某个profile,那么该 profile 可能会在服务器启动时覆盖defaultprofile 的设置。此问题已修复;现在,分布式 DDL 查询的设置不应再影响全局服务器设置。#16635 (tavplubix) 。 - 限制在键中使用不可比较的数据类型 (如
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 spans 会保存到
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}。这是指定LIMIT的 SQL 标准方式。#15855 (hexiaoting). errorCodeToName函数 - 返回 error 的变量名 (对分析query_log及类似日志很有用) 。system.errors表 - 显示 error 发生的次数 (遵循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) 。
Experimental 功能
- 新增函数
encrypt、aes_encrypt_mysql、decrypt、aes_decrypt_mysql。由于这些函数执行速度较慢,因此我们将其归类为 Experimental 功能。#11844 (Vasily Nemkov) 。
缺陷修复
- 对
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是一项 Experimental 功能。#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) 。 - 修复了在尝试执行
OPTIMIZE命令时clickhouse-local中抛出的异常。修复了 #16076。#16192 (filimonov). - 修复了 #15780 中的回归问题。例如,
indexOf([1, 2, 3], toLowCardinality(1))现在会被禁止,但其实不应该这样。#16038 (Mike). - 修复了 MySQL database 相关的问题。当作为 database engine 使用的 MySQL 服务器不可用时,某些查询会抛出异常,因为它们会尝试从已禁用的服务器获取表,但这其实并不必要。例如,查询
SELECT ... FROM system.parts应当只作用于 MergeTree 表,完全不应访问 MySQL database。#16032 (Kruglov Pavel). - 现在,当
ALTER MODIFY COLUMN ... DEFAULT ...的默认值与列类型不兼容时,会抛出异常。修复了 #15854。#15858 (alesapin) 。 - 已修复 IPv4CIDRToRange/IPv6CIDRToRange 函数,使其可接受 const 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 服务器用作 proxy 来使用
S3的情况,提供了一种变通方案。Nginx 目前不接受 path 为空的 URL,例如http://domain.com?delete,但原生 aws-sdk-cpp 会生成这种 URL。此提交使用了打补丁的 aws-sdk-cpp 版本,在这些情况下会生成以 ”/” 作为 path 的 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).- 在
system.query_thread_log中添加 current_database。#16558 (Azat Khuzhin) 。 - 允许将当前实例中已提交或已过期的 parts 拉取到 detached 目录。这在从另一个集群迁移表,且采用 N 对 1 分片映射时非常有用。这也与当前的 fetchPartition 实现一致。#16538 (Amos Bird).
- 对
RabbitMQ进行了多项改进:修复了 #16263 中的问题;还缩短了事件循环的生命周期,并增加了更高效的队列配置。#16426 (Kseniia Sumarokova) 。 - 修复
quantileDeterministic函数中的调试断言。在之前的版本中,尽管并不存在实际的 bug,它仍可能通过网络多传输最多两倍的数据。此项修复解决了 #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 表引擎家族中,可以不使用
ORDER BY而直接指定PRIMARY KEY。已关闭 #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 表引擎中 merges 分配的性能。用户应该感知不到这一变化。#16191 (alesapin).
- 通过预分配哈希表,加快了 hashed/sparse_hashed 字典的加载速度。#15454 (Azat Khuzhin).
- 现在,原本简单的 count 优化变得稍微复杂了一些。包含精确分区表达式的谓词现在也可以被优化了。这也修复了 #11092 中的问题:当
max_parallel_replicas > 1时会返回错误的 count。#15074 (Amos Bird).
构建/测试/打包改进
- 为无状态测试添加 flaky 检查。它会在合并前提前发现可能不稳定的功能测试。#16238 (alesapin).
- 为
croaring使用正确的版本,而不是 amalgamation 版本。#16285 (sundyli). - 改进
ya.make构建系统 (Arcadia) 的构建文件生成。#16700 (alexey-milovidov). - 为
MaterializeMySQL数据库引擎添加 MySQL BinLog 文件检查工具。MaterializeMySQL是一项 Experimental 功能。#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-稳定版本,2020-12-24
缺陷修复
- 修复了在使用双
IPv4/IPv6协议栈的机器上,server 无法访问clickhouse-odbc-bridge进程的问题;同时修复了在执行 ODBC 字典更新时,因使用格式错误的查询和/或引发崩溃的问题。这可能解决了 #14489。#18278 (Denis Glazachev) 。 - 修复了
枚举与 Int 类型之间的键比较问题。此项修复解决了 #17989。#18214 (Amos Bird) 。 - 修复了
MaterializeMySQLdatabase engine 中唯一键转换引发的崩溃问题。此修复解决了 #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中恢复 parts。#17802 (detailyang). - 修复了 ClickHouse 无法重新建立与 MySQL 服务器连接的问题。#17681 (Alexander Kazakov) 。
- 修复了在守护进程模式下运行时
system.stack_trace表为空的问题。#17630 (Amos Bird) 。 - 修复了在交互模式下使用
clickhouse-client执行多行查询时,单行注释被错误地延续到整个查询末尾的问题。此修复解决了 #13654。#17565 (alexey-milovidov). - 修复了在极少数情况下 server 可能停止接受连接的问题。#17542 (alexey-milovidov).
- 修复了以下问题:当对应的变更在另一个副本上被终止时,
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). - 修复了子查询中存在常量列时 Set 索引失效的问题。详见 #17246 。 #17249 (Amos Bird).
- 修复了会导致崩溃的
ColumnConst比较问题。此修复解决了 #17088。#17135 (Amos Bird) 。 - 修复了一个 bug:对于非 leader 的
ReplicatedMergeTreeTables,ON CLUSTER查询可能会一直卡住。#17089 (alesapin). - 修复了 fuzzer 发现的
fuzzBits函数中的错误。此修复解决了 #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) 。 - 修复了以下问题:此前 ClickHouse 通过 MySQL 协议执行
INSERT查询时,总是返回 0,而不是受影响的行数。此修复对应 #16605。#16715 (Winter Zhang) 。 - 修复了
TDigest不受控增长的问题。#16680 (hrissan). - 修复了在聚合函数中使用
if后缀时远程查询失败的问题。此修复解决了 #16574、#16231 和 #16610 (Winter Zhang) 。
ClickHouse 发行版 v20.10.4.1-稳定版本,2020-11-13
缺陷修复
- 修复了在启用 query profiler,且 ClickHouse 安装在 glibc 某些版本 (据推测其某些函数的异步展开表存在问题) 的操作系统上时,偶发的静默崩溃问题。此修复解决了 #15301 和 #13098。#16846 (alexey-milovidov).
- 修复了在启用
transform_null_in设置时,多列和 Tuple 上的INoperator 问题。修复了 #15310。#16722 (Anton Popov). - 修复了在 max_threads>0 且 ORDER BY 中包含 expression 时,optimize_read_in_order/optimize_aggregation_in_order 的问题。#16637 (Azat Khuzhin).
- 现在从输入中解析 AVRO 时,会从类型中移除 LowCardinality。修复了 #16188。#16521 (Mike).
- 修复了在使用 MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL Engine,且 MySQL Slave 上启用
slave_parallel_worker时,metadata 快速增长的问题,方法是正确缩减 GTID 集合。此修复解决了 #15951。#16504 (TCeason). - 修复了 Distributed 的 DROP TABLE 问题 (与 INSERT 存在竞态条件) 。#16409 (Azat Khuzhin).
- 修复了复制队列中超大 entries 的处理问题。如果表结构特别大 (接近 1 MB) ,在 ALTER 查询中可能会出现超大 entries。此修复解决了 #16307。#16332 (alexey-milovidov).
- 修复了 MySQL database 的一个问题。当用作 database engine 的 MySQL 服务器不可用时,某些查询会抛出异常,因为它们会尝试从已禁用的 server 获取表,但这其实没有必要。例如,查询
SELECT ... FROM system.parts应当只作用于 MergeTree 表,完全不应访问 MySQL database。#16032 (Kruglov Pavel).
改进
- 针对通过 nginx 服务器作为代理使用 S3 的场景,提供了一个变通方案。Nginx 目前不接受路径为空的 URL,例如 http://domain.com?delete,但原生 aws-sdk-cpp 会生成这种 URL。此提交使用了打过补丁的 aws-sdk-cpp 版本,在这种情况下会使用 ”/” 作为路径,例如 http://domain.com/?delete。[#16813](https://github.com/ClickHouse/ClickHouse/pull/16813) (ianton-ru).
ClickHouse 发行版 v20.10.3.30,2020-10-28
向后不兼容的变更
- 将
multiple_joins_rewriter_version标记为废弃,并移除 joins rewriter 的第一个版本。#15472 (Artem Zuikov). - 将
format_regexp_escaping_rule设置的默认值 (与Regexpformat 相关) 更改为Raw(即将整个子模式作为一个值读取) ,使其行为更符合用户预期。#15426 (alexey-milovidov). - 在 SQL 中新增对嵌套多行注释
/* comment /* comment */ */的支持。这符合 SQL 标准。#14655 (alexey-milovidov). - 新增了 MergeTree settings (
max_replicated_merges_with_ttl_in_queue和max_number_of_merges_with_ttl_in_pool) ,用于控制 background pool 和 replicated queue 中带有 TTL 的 merges 数量。只有在使用 delete TTL 时,此更改才会与旧版本不兼容。否则,复制仍将保持兼容。如果一次性更新所有 shard 副本,或者在完成所有副本更新前执行SYSTEM STOP TTL MERGES,则可以避免不兼容问题。如果 replication queue 中出现不兼容的 entry,首先执行SYSTEM STOP TTL MERGES,然后对分配了不兼容 TTL merge 的分区执行ALTER TABLE ... DETACH PARTITION ...。随后在单个副本上将其重新 Attach。#14490 (alesapin). - 从早于 20.5 的版本升级时,如果执行滚动更新,并且 cluster 中同时存在 20.5 及以上版本和低于 20.5 的版本,那么当旧版本的 ClickHouse 节点重启,且旧版本在新版本节点存在的情况下启动时,可能会导致
Part ... intersects previous part错误。为防止此错误,请先在所有 cluster 节点上安装较新的 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). - 新增
JSONStringsformat,可将数据输出为字符串数组。#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是一项 Experimental 功能。#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) 。 - 在
system.asynchronous_metric_log和system.metric_log表中新增event_time_microseconds。#14514 (Bharat Nallan) 。 - 在
system.query_log和system.query_thread_log表中新增query_start_time_microseconds字段。#14252 (Bharat Nallan) 。
缺陷修复
- 修复了无论限制为何,内存都可能被过度分配的问题。此修复关闭了 #14560。#16206 (alexey-milovidov).
- 修复
executable字典源卡顿的问题。在早期版本中,使用某些格式 (例如JSONEachRow) 时,子进程在至少输出一些内容之前,数据不会被传送给它。此项修复关闭了 #1697。此项修复关闭了 #2455。#14525 (alexey-milovidov). - 修复了函数
dictGet在发生异常时出现 double free 的问题。这种情况可能发生在字典加载出错时。#16429 (Nikolai Kochetov) 。 - 修复了带有 totals/rollup/cube 修饰符的 group by,以及作用于 group by 键的 min/max 函数相关问题。修复 #16393。#16397 (Anton Popov) 。
- 修复了在
prefer_localhost_replica=0且启用internal_replication时异步 Distributed INSERT 的问题。#16358 (Azat Khuzhin) 。 - 修复了 TwoLevelStringHashTable 实现中的一处严重错误,可能会导致内存泄漏。#16264 (Amos Bird) 。
- 修复了 lambda 表达式中某些错误聚合导致的段错误。#16082 (Anton Popov) 。
- 修复
ReplicatedVersionedCollapsingMergeTree的ALTER MODIFY ... ORDER BY查询挂起问题。此修复解决了 #15980。#16011 (alesapin). MaterializeMySQL(Experimental 功能) :修复 collate 名称和 charset 名称解析器,并支持字符串类型的length = 0。#16008 (Winter Zhang) 。- 现已支持对具有复杂键的字典使用
direct布局。#16007 (Anton Popov) 。 - 防止在一段时间未活动后发生复制错误时,副本卡住 5–10 分钟。#15987 (filimonov).
- 修复了在向 MaterializedView 插入数据或从中查询数据时,并发删除目标表导致的罕见段错误 (适用于 Atomic 数据库引擎) 。#15984 (tavplubix) 。
- 修复了 profile 解析中的歧义:
CREATE USER ... SETTINGS profile readonly现在会被视为使用名为readonly的 profile,而不是名为profile且带有 readonly 约束的设置项。此修复见 #15628。#15982 (Vitaly Baranov) 。 MaterializeMySQL(Experimental 功能) :修复了创建 database 失败时发生崩溃的问题。#15954 (Winter Zhang) 。- 修复了在表被并发重命名时,
DROP TABLE IF EXISTS因出现Table ... does not exist错误而失败的问题 (适用于 Atomic 数据库引擎) 。修复了并发执行某些涉及多个表的 DDL 查询 (如DROP DATABASE和RENAME TABLE) 时极少出现的死锁问题——还修复了在并发执行DROP/DETACH TABLE时,DROP/DETACH DATABASE因Table ... does not exist而失败的问题。#15934 (tavplubix). - 修复了以下问题:当查询包含
WHERE、PREWHERE和GLOBAL IN时,从Distributed表查询会错误地返回空结果。修复 #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(Experimental 功能) :修复select count()结果不准确的问题。#15767 (tavplubix) 。- 修复了某些仅选择虚拟列的查询场景。此前可能会抛出
Not found column _nothing in block异常。修复 #12298。#15756 (Anton Popov). - 修复 Atomic database 中带内部表的 materialized view 删除问题 (由于对 MV 的内部表递归执行 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设置默认值过低的问题,这可能导致副本过于频繁地丢失。通过选择最新的副本进行克隆,改进了丢失副本的恢复流程。同时,不再从丢失的副本中删除旧的 parts,而是将其 detach。#15701 (tavplubix) 。 - 修复了 MySQL 字典和表中的一个罕见竞态条件。#15686 (alesapin).
- 修复 AMQP-CPP 中一个 (无害的) 竞态条件。#15667 (alesapin).
- 修复错误
Cannot add simple transform to empty Pipe:当从Buffer表读取数据,且其结构与目标表不同时,如果目标表的查询返回空结果,就可能发生该错误。修复了 #15529。#15662 (Nikolai Kochetov) 。 - 在向使用 S3 的 MergeTree 插入数据时,现已可正确处理错误。基于 S3 的 MergeTree 是一项 Experimental 功能。#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之后,因等待某个不存在的分片而卡住。该问题已修复。 #15537 (tavplubix). - 修复了一个 bug:如果之前执行过使用相同模式的
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) 。 - 修复了一个 bug:像
SELECT toStartOfDay(today())这样的查询会因报错提示 time_zone 参数为空而失败。#15319 (Bharat Nallan) 。 - 修复了 MergeTree 表在重命名和后台清理期间出现的竞态条件。#15304 (alesapin)。
- 修复了在启用系统日志时服务器启动期间出现的罕见竞态条件。 #15300 (alesapin).
- 修复了查询中包含大量针对同一
MySQL引擎表的子查询时发生卡死的问题。此前,如果一个查询中包含超过 16 个针对同一MySQL表的子查询,就会一直卡死。 #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中的一个缺陷:在执行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) 。 - 修复了在 Mac OS 上的 Docker 中运行 clickhouse-server 时,Atomic database 执行 DDL 查询时出现的
Cannot rename ... errno: 22, strerror: Invalid argument错误。#15024 (tavplubix) 。 - 修复了在
RIGHT或FULL JOIN且join_algorith='auto'时,超出内存限制并需要将 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). - 在
system.asynchronous_metrics中发布每个逻辑核心的 CPU 频率。这修复了 #14923。#14924 (Alexander Kuzmenkov) 。 MaterializeMySQL(Experimental 功能) :修复了.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(Experimental 功能) :修复了 MySQL binlog 事件解析中的一个 bug,该问题会导致MaterializeMySQLdatabase engine 中出现Attempt to read after eof和Packet payload is not fully read。#14852 (Winter Zhang) 。- 修复了
SELECT查询中的一个少见错误:当被查询的列带有依赖于另一列的DEFAULT表达式,而该另一列同样带有DEFAULT、未出现在SELECT查询中且磁盘上不存在时,就会触发该错误。部分修复了 #14531。#14845 (alesapin). - 修复了一个问题:如果配置文件需要从 ZK 拉取 (使用
from_zkinclude 选项) ,server 在启动时与 ZooKeeper 通信过程中可能会卡住。此修复对应 #14814。#14843 (Alexander Kuzmenkov). - 修复了有符号类型在缩窄
Int -> Int转换时单调性检测错误的问题。该问题可能导致查询结果不正确。此缺陷在 #14513 中被发现。#14783 (Amos Bird) 。 Replace列转换器应将标识符替换为克隆的 AST。这修复了 #14695。#14734 (Amos Bird).- 修复了执行
ALTER ... MODIFY QUERY时,materialized view 元数据中默认数据库名称缺失的问题。#14664 (tavplubix) 。 - 修复一个 bug:当
ALTER UPDATE变更的赋值表达式中使用Nullable列和常量值 (如UPDATE x = 42) 时,可能会导致列中的值不正确或发生段错误。修复了 #13634、#14045。#14646 (alesapin) 。 - 修复了因结果列的小数标度错误导致的 Decimal 乘法结果错误问题。#14603 (Artem Zuikov).
- 修复
NullableLowCardinality上的函数has。#14591 (Mike). - 修复了 StorageReplicatedMergeTree 引擎在 CreateQuery 期间发生 Zookeeper 异常后未清理数据目录的问题。#14563 (Bharat Nallan) 。
- 修复了带有组合器
-Resample的函数中罕见的段错误;当参数非常大而导致溢出时,可能会出现此错误。#14562 (Anton Popov). - 修复了将
Nullable(String)转换为枚举时的一个错误。该问题由 #12745 引入。此修复解决了 #14435。#14530 (Amos Bird) 。 - 修复了
Nullable列排序顺序错误的问题。此修复解决了 #14344。#14495 (Nikita Mikhaylov) 。 - 修复了
currentDatabase()函数无法用于ON CLUSTERDDL 查询的问题。#14211 (Winter Zhang) 。 MaterializeMySQL(Experimental 功能) :修复了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) 。 - 如果为
Atomicdatabase 指定了NO DELAY或SYNC,则等待DROP/DETACH TABLE真正完成。#15448 (tavplubix). - 现在可以通过
ALTER查询修改VersionedCollapsingMergeTree的版本列类型。#15442 (alesapin) 。 - 在创建复制表时,展开
zookeeper_path中的{database}、{table}和{uuid}宏。如果RENAME TABLE可能导致服务器重启后zookeeper_path损坏,则不允许执行该操作。修复了 #6917。#15348 (tavplubix) 。 - 函数
now现支持 timezone 参数。这修复了 15264。#15285 (flynn). - 在
/docker-entrypoint-initdb.d/中的所有脚本执行完毕之前,不允许连接到 ClickHouse 服务器。 #15244 (Aleksei Kozharin). - 为
EXPLAIN PLAN查询新增了optimize设置。启用后,将应用查询计划级别的优化。默认情况下已启用。#15201 (Nikolai Kochetov). - 修正了 CAST 参数数量错误时的异常消息。此更改关闭了 #13992。#15029 (alexey-milovidov) 。
- 新增了在插入数据分区片段时禁用 TTL move 的选项。#15000 (Pavel Kovalenko) 。
- 执行变更时忽略键约束。如果没有这个拉取请求,在
force_index_by_date = 1或force_primary_key = 1时将无法执行变更。#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 watch 引起的潜在内存泄漏。#14693 (hustnn) 。
- 允许分布式 DDL 并行执行。#14684 (Azat Khuzhin) 。
- 添加
QueryMemoryLimitExceeded事件计数器。此更改修复了 #14589。#14647 (fastio) 。 - 修复了查询格式化中的一些尾随空白问题。#14595 (Azat Khuzhin) 。
- ClickHouse 对 partition expr 和 key expr 的处理方式不同。partition expr 用于构建包含相关列的 minmax 索引,而 primary key expr 则作为 expr 存储。有时,用户可能会按更粗的粒度对表进行分区,例如
partition by i / 1000。不过,二元运算符不具备单调性,这个 PR 尝试修复这一问题。它也可能让其他用例受益。#14513 (Amos Bird) 。 - 新增一个可跳过
DiskS3访问检查的选项。s3磁盘属于 Experimental 功能。#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) 。 - 支持在紧凑 parts 中使用自定义编解码器。#12183 (Anton Popov).
性能改进
- 默认为小型 parts 启用 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).
- 明确使用临时磁盘来存储 vertical merge 的临时数据。#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). - 由于链接时优化,ClickHouse 二进制文件变得更小了。
构建/测试/打包改进
- 现在,生产环境中的 ClickHouse 构建使用 clang-11。#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 manager。#15608 (Danila Kutenin) 。
- 不允许任何 C++ 翻译单元的构建时间超过 10 分钟,或占用超过 10 GB 的内存。这修复了 #14925。#15060 (alexey-milovidov) 。
- 通过将测试运行和 profile 运行拆分开来,使性能测试更加稳定,也更具代表性。#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) 。 - 可能修复了 base64 在支持 AVX-512 的服务器上的 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 和 1 分别替换为OFF和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-稳定版本,2020-12-07
性能改进
- 修复了在大量
MergeTree表上从Merge表读取数据时的性能问题。修复 #7748。#16988 (Anton Popov).
缺陷修复
- 如果禁用了
in_memory_parts_enable_wal,则不要从 WAL 中恢复 parts。#17802 (detailyang) 。 - 修复了向
Distributed表插入数据时因空间不足导致的段错误。#17737 (tavplubix) 。 - 修复了 ClickHouse 无法重新建立与 MySQL 服务器连接的问题。#17681 (Alexander Kazakov) 。
- 修复了在 Windows Subsystem for Linux 上运行 ClickHouse 时,在
Atomic数据库中执行RENAME查询出现Function not implementederror 的问题。修复了 #17661。#17664 (tavplubix) 。 - 当
clickhouse-client以交互模式执行多行查询时,单行注释会被错误地延伸到整个查询末尾。此修复解决了 #13654。#17565 (alexey-milovidov) 。 - 修复了一个问题:在极少数情况下,服务器可能会停止接受连接。#17542 (alexey-milovidov) 。
- 修复了这样一个问题:当对应的变更在其他副本上被终止时,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) 。
- 修复了导致崩溃的 ColumnConst 比较问题。此修复解决了 #17088。#17135 (Amos Bird) 。
- 修复了以下崩溃问题:当
some_table是通过AS table_function()创建时,执行CREATE TABLE ... AS some_table查询会导致崩溃。修复 #16944。#17072 (tavplubix). - 修复了函数 fuzzBits 的问题,相关 issue:#16980。#17051 (hexiaoting) 。
- 避免在执行过程中可能被取消的远程查询 (例如带有
LIMIT的查询) 出现不必要的网络错误。#17006 (Azat Khuzhin) 。 - 小幅优化。#16866 (tavplubix) 。
- 通过 MySQL 协议为 INSERT 查询返回受影响的行数。此前 ClickHouse 总是返回 0,现已修复。修复了 #16605。#16715 (Winter Zhang) 。
构建/测试/打包改进
ClickHouse 发行版 v20.9.6.14-稳定版本,2020-11-20
改进
- 现在可以连接到需要 SNI 的
clickhouse-server安全端点。当clickhouse-server位于 TLS 代理之后时,即可实现这一点。#16938 (filimonov). - 条件聚合函数 (例如:
avgIf、sumIf、maxIf) 在没有匹配行且使用 Nullable 参数时,应返回NULL。#13964 (Winter Zhang).
缺陷修复
- 修复
ON CLUSTER查询在非 leader 的 ReplicatedMergeTreeTables 上可能永久卡住的问题。#17089 (alesapin). - 发生错误时,重新解析
format_avro_schema_registry_url的 IP 地址。#16985 (filimonov). - 修复在执行
ALTER TABLE ... MODIFY COLUMN ... NewType后可能导致 server 崩溃的问题:当SELECT的WHERE表达式引用了正在修改的列,且 alter 尚未完成时,会触发该问题。#16968 (Amos Bird). - 安装脚本现在始终会在配置目录中创建子目录。这仅与使用自定义配置的 Docker 构建有关。#16936 (filimonov).
- 修复带有
ORDER BY的查询可能出现Illegal type of argument错误的问题。修复了 #16580。#16928 (Nikolai Kochetov). - 如果没有数据写入 WriteBufferFromS3,则中止分段上传。#16840 (Pavel Kovalenko).
- 修复在不带任何参数使用
any时发生崩溃的问题。这是对 #16803 的修复。cc @azat。#16826 (Amos Bird). - 修复在启用
transform_null_in设置时,多个列和 Tuple 上的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-稳定版本,2020-11-13
缺陷修复
- 修复了一个罕见的静默崩溃问题:当 query profiler 开启,且 ClickHouse 安装在使用某个 glibc 版本的操作系统上时,该版本中某些函数的异步展开表 (据推测) 存在缺陷。此修复解决了 #15301。此修复解决了 #13098。#16846 (alexey-milovidov).
- 现在,在从输入中解析 AVRO 时,会从类型中移除 LowCardinality。修复了 #16188。#16521 (Mike).
- 通过正确收缩 GTID 集合,修复了在使用 MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL Engine,且 MySQL Slave 上启用了
slave_parallel_worker时元数据快速增长的问题。此修复解决了 #15951。#16504 (TCeason). - 修复了 Distributed 的 DROP TABLE 问题 (与 INSERT 存在竞争条件) 。#16409 (Azat Khuzhin).
- 修复了复制队列中超大条目的处理问题。当表结构特别大 (接近 1 MB) 时,ALTER 查询中可能会出现这类超大条目。此修复解决了 #16307。#16332 (alexey-milovidov).
- 修复了行为不一致的问题:由于用于过滤的 Set 未创建,部分返回数据可能会被丢弃。#16308 (Nikita Mikhaylov).
- 修复了 MySQL 数据库的一个缺陷。当作为 database engine 使用的 MySQL 服务器不可用时,某些查询会抛出异常,因为它们会尝试从已停用的服务器获取表,而这其实没有必要。例如,查询
SELECT ... FROM system.parts应当只适用于 MergeTree 表,完全不应访问 MySQL 数据库。#16032 (Kruglov Pavel).
ClickHouse 发行版 v20.9.4.76-稳定版本 (2020-10-29)
缺陷修复
- 修复了函数
dictGet在异常情况下发生重复释放的问题。如果字典加载时出错,就可能出现这种情况。#16429 (Nikolai Kochetov) 。 - 修复了在
group by键上配合totals/rollup/cube修饰符以及 min/max 函数使用时的问题。修复了 #16393。#16397 (Anton Popov) 。 - 修复在 prefer_localhost_replica=0 和 internal_replication 条件下异步 Distributed INSERT 的问题。#16358 (Azat Khuzhin) 。
- 修复了 TwoLevelStringHashTable 实现中的一处严重错误代码,该问题可能导致内存泄漏。我很惊讶这个 bug 居然能潜伏这么久… #16264 (Amos Bird).
- 修复了内存可能不受限制约束而被过度分配的问题。此修复关闭了 #14560。#16206 (alexey-milovidov) 。
- 修复
ReplicatedVersionedCollapsingMergeTree中ALTER MODIFY ... ORDER BY查询卡住的问题。此修复解决了 #15980。#16011 (alesapin) 。 - 修复了排序规则名称和字符集名称的解析器,并支持字符串类型的
length = 0。#16008 (Winter Zhang) 。 - 支持在具有复杂键的字典中使用 direct 布局。#16007 (Anton Popov).
- 防止副本在一段时间未活动后发生复制错误时卡住 5–10 分钟。#15987 (filimonov).
- 修复了在向 MaterializedView 插入数据或从中查询时并发 drop 目标表而偶发的段错误问题 (适用于 Atomic 数据库引擎) 。#15984 (tavplubix) 。
- 修复了 profile 在解析中的歧义:
CREATE USER ... SETTINGS profile readonly现在会被视为使用了一个名为readonly的 profile,而不是一个名为profile且带有 readonly 约束的设置。这修复了 #15628。#15982 (Vitaly Baranov) 。 - 修复了创建数据库失败时导致崩溃的问题。#15954 (Winter Zhang) 。
- 修复了在表被并发重命名时,
DROP TABLE IF EXISTS因报出Table ... does not exist错误而失败的问题 (适用于 atomic 数据库引擎) 。修复了并发执行某些涉及多个表的 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设置默认值过低的问题,否则可能导致副本过于频繁地进入丢失状态。丢失副本的恢复流程也得到了改进,会选择最新的副本进行克隆。同时,不再从丢失的副本中移除旧的 parts,而是将其 detach。#15701 (tavplubix). - 修复错误
Cannot add simple transform to empty Pipe:当从Buffer表读取数据,且其结构与目标表不同时,如果目标表的查询结果为空,就可能触发该错误。修复 #15529。#15662 (Nikolai Kochetov) 。 - 修复了 S3 表函数中通配符相关的错误:未将 URL 中的区域应用到 S3 客户端配置中。#15646 (Vladimir Chebotarev) 。
- 在分离只读表时,递减
ReadonlyReplica指标。修复了 #15598。#15592 (sundyli) 。 - 向 ReplicatedMergeTree 传递单个参数时,将抛出错误,而不是忽略它。#15516 (nvartolomei) 。
改进
- 现在无论集群配置中的
<internal_replication>设置如何,都允许执行ALTER ... ON CLUSTER查询。#16075 (alesapin)。 - 创建表时,会展开
ReplicatedMergeTree参数中的{database}、{table}和{uuid}宏。#16160 (tavplubix)。
ClickHouse 发行版 v20.9.3.45-稳定版本 (2020-10-09)
缺陷修复
- 修复了在向
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之后,因等待某个不存在的 part 而卡住。该问题已修复。#15537 (tavplubix) 。 - 修复了一个 bug:如果之前执行过使用相同
pattern的LIKE,ILIKE运算符就会变为区分大小写。#15536 (alesapin)。 - 修复了这样一种
Missing columns错误:选择的数据中缺少某些列,而这些列又依赖于数据中同样缺失的其他列。修复 #15530。#15532 (alesapin). - 修复了 DDLWorker 中事件订阅的一个 bug,该问题在极少数情况下可能导致
ON CLUSTER查询挂起。此问题由 #13450 引入。#15477 (alesapin). - 当
boundingRatio聚合函数的第二个参数类型不正确时,会正确报告错误。#15407 (detailyang) 。 - 修复了一个 bug:像
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中的一个问题:执行ALTER查询后,无法将采用新结构的数据插入Buffer。修复了 #15117。#15192 (alesapin) 。 - 调整 mysql 列定义数据包中 decimals 字段的大小。#15152 (maqroll) 。
- 修复了在 Mac OS 上通过 docker 运行 clickhouse-server 时,在 Atomic 数据库中执行 DDL 查询出现的
Cannot rename ... errno: 22, strerror: Invalid argument错误。#15024 (tavplubix) 。 - 修复了子查询包含 finalizeAggregation 函数时谓词下推无法生效的问题。修复 #14847。#14937 (filimonov) 。
- 修复了一个问题:如果需要从 ZK 拉取配置文件 (使用
from_zkinclude 选项) ,服务器在启动时与 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).
缺陷修复
- 修复了一个问题:当
ALTER UPDATE变更的赋值表达式中包含 Nullable 列和常量值 (如UPDATE x = 42) 时,可能导致列值错误或发生段错误。修复了 #13634、#14045。#14646 (alesapin) 。 - 修复了因 Decimal 乘法结果错误导致结果列小数标度错误的问题。#14603 (Artem Zuikov).
- 修复了
Nullable列排序顺序不正确的问题。此修复解决了 #14344。#14495 (Nikita Mikhaylov) 。 - 修复了在索引分析中,当
FixedString类型的主键与长度更短的字符串比较时,比较结果不一致的问题。此修复对应 #14908。#15033 (Amos Bird) 。 - 修复了一个 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函数时可能触发“超出内存限制”错误的问题。此项修复对应 #13383。#14889 (alexey-milovidov) 。 - 修复尝试向 StorageFile(fd) 执行 INSERT 时触发的 SIGSEGV。 #14887 (Azat Khuzhin).
- 修复了
SELECT查询中的一个罕见错误:当查询的列带有DEFAULT表达式,且该表达式依赖于另一列,而另一列同样带有DEFAULT、未出现在 SELECT 查询中且磁盘上不存在时,就会触发该错误。部分修复了 #14531。#14845 (alesapin) 。 - 修复了对有符号类型进行收窄
Int -> Int转换时单调性检测错误的问题。该问题可能导致查询结果不正确。此 bug 在 #14513 中被发现。#14783 (Amos Bird) 。 - 修复了执行
ALTER ... MODIFY QUERY时,materialized view 元数据中缺失默认数据库名称的问题。#14664 (tavplubix). - 修复了在涉及 LowCardinality 和 Nullable 类型时,函数
has可能返回错误结果的问题。#14591 (Mike). - 在为使用 ReplicatedMergeTree Engine 的表执行 CREATE 查询时,如果发生 ZooKeeper 异常,则会清理数据目录。#14563 (Bharat Nallan).
- 修复了带有组合器
-Resample的函数中偶发的段错误,该错误可能会在参数极大导致溢出时出现。 #14562 (Anton Popov). - 检查
topKaggregate function 中的数组大小是否发生溢出。如果没有这项检查,用户可能会发送带有精心构造参数的查询,进而导致 server 崩溃。此修复关闭了 #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 是一项 Experimental 功能。#14320 (Bharat Nallan) 。
- 修复带有嵌套解释器的查询在使用 EXPLAIN PIPELINE graph=1 时 QueryPlan 的生命周期问题。#14315 (Azat Khuzhin).
- 改进了对 SSD cache 复杂键外部字典中 tuple 大小的检查。此修复解决了 #13981。#14313 (alexey-milovidov).
- 禁止在
ALIAS列类型上使用CODEC。修复了 #13911。#14263 (Bharat Nallan) 。 - 修复在非全局级别执行 GRANT ALL 语句时的问题。#13987 (Vitaly Baranov) 。
- 修复了 lambda 中
arrayJoin()的捕获问题 (此前会抛出带有逻辑错误信息的异常) 。#13792 (Azat Khuzhin).
Experimental 功能
- 新增
db-generator工具,可根据给定的 SELECT 查询生成随机数据库。当用户只提供不完整的错误报告时,它可用于帮助复现问题。#14442 (Nikita Mikhaylov) #10973 (ZeDRoman).
改进
- 允许在 Distributed 存储中使用多卷存储配置。#14839 (Pavel Kovalenko).
- 禁止在
toStartOf*类函数中使用空的time_zone参数。#14509 (Bharat Nallan). - 对于
SET @@var = value这类查询,MySQL 处理程序现在会返回OK。此类语句会被忽略。之所以需要这样做,是因为某些 MySQL 驱动会在握手后发送SET @@查询进行初始化,参见 https://github.com/ClickHouse/ClickHouse/issues/9336#issuecomment-686222422 。#14469 (BohuTANG). - 现在,如果生存时间 (TTL) 之前未被物化,则会在 merge 期间应用。#14438 (alesapin).
- 现在
clickhouse-obfuscator已支持 UUID 类型,如 #13163 中所提议。#14409 (dimarub2000). - 新增设置
system_events_show_zero_values,如 #11384 中所提议。#14404 (dimarub2000). - 在
MaterializeMySQL中将主键隐式转换为非 NULL (与MySQL相同) 。修复了 #14114。#14397 (Winter Zhang). - 将 boost multiprecision 中的宽整数 (256 位) 替换为 https://github.com/cerevra/int 的实现。256 位整数仍处于 Experimental 阶段。#14229 (Artem Zuikov).
- 为
system.part_log中的 parts 添加默认压缩 编解码器,名称为default_compression_codec。#14116 (alesapin). - 为
DateTime类型添加 precision 参数。这样可以使用DateTime名称来代替DateTime64。#13761 (Winter Zhang). - 为
Redis外部字典添加了 requirepass 认证。#13688 (Ivan Torgashov). RabbitMQ引擎改进:增加了 connection 和 channel 故障处理、正确的提交、insert 失败处理、改进了 exchange、增强了 queue 持久性和 queue 恢复能力,并新增了 queue 设置。修复了测试。#12761 (Kseniia Sumarokova).- compact parts 现已支持自定义 编解码器。#12183 (Anton Popov).
性能改进
- 在启用
optimize_skip_unused_shards和optimize_distributed_group_by_sharding_key时,优化了对带有 GROUP BY sharding_key 的 Distributed 表执行 LIMIT/LIMIT BY/ORDER BY 查询的性能。#10373 (Azat Khuzhin). - 支持并行为多个
JOIN和IN创建 Set。这可能会略微提升包含多个不同IN subquery表达式的查询性能。#14412 (Nikolai Kochetov). - 通过为每个消费者分配独立线程来提升 Kafka 引擎性能。并为流式引擎 (如 Kafka) 单独提供线程池。#13939 (fastio).
构建/测试/打包改进
- 通过移除
Functions中的调试信息,减小调试构建的二进制体积。这只对 Yandex 内部一个仍在使用非常老旧链接器的项目有必要。#14549 (alexey-milovidov). - 为使用 clang 11 进行构建做好准备。#14455 (alexey-milovidov).
- 修复回移脚本中的逻辑。此前版本中,任何颜色为 100% 红色的标签都会触发它,这很奇怪。#14433 (alexey-milovidov).
- 集成测试使用默认的基础配置。对于实例,所有配置变更都通过
main_configs、user_configs和dictionaries参数显式指定。#13647 (Ilya Yatsishin).
ClickHouse 发行版 20.8
ClickHouse 发行版 v20.8.12.2-lts,2021-01-16
缺陷修复
- 修复了带一元函数和 Nullable 类型的 *If 组合器问题。 #18806 (Azat Khuzhin).
- 限制从 wide 到 compact parts 的合并;在 vertical merge 情况下,这会导致结果 part 损坏。 #18381 (Anton Popov).
ClickHouse 发行版 v20.8.11.17-lts,2020-12-25
缺陷修复
- 在合并期间禁用使用 AIO 进行写入,因为这在极少数情况下可能会导致合并时主键列数据损坏。#18481 (alesapin).
- 修复了在执行
toType(...)函数 (toDate、toUInt32等) 且参数类型为Nullable(String)时出现的value is too short错误。现在,这类函数在发生解析错误时会返回NULL,而不是抛出异常。修复了 #7673。#18445 (tavplubix). - 修复了在使用两级聚合时,带有
Distinct组合器的聚合函数可能崩溃的问题。修复了 #17682。#18365 (Anton Popov).
ClickHouse 发行版 v20.8.10.13-lts,2020-12-24
缺陷修复
- 当使用数值大于 2^32 的
logger.size参数配置服务器日志轮转时,日志无法被正确轮转。#17905 (Alexander Kuzmenkov) 。 - 修复了 MergeTreeWriterSettings 中错误地用
min_compress_block_size初始化max_compress_block_size的问题。#17833 (flynn). - 修复了 ClickHouse 无法恢复与 MySQL 服务器的连接的问题。 #17681 (Alexander Kazakov).
- 修复了这样一个问题:当对应的变更在另一副本上被终止时,
ALTER查询会挂起。此修复解决了 #16953。#17499 (alesapin). - 修复了一个在 ClickHouse 低估标记缓存大小时会出现的错误。当存在大量带有标记的很小文件时,可能会出现该问题。#17496 (alesapin).
- 修复了启用设置
optimize_redundant_functions_in_order_by时ORDER BY的相关问题。#17471 (Anton Popov) 。 - 修复了会导致崩溃的
ColumnConst比较问题。此修复解决了 #17088。#17135 (Amos Bird). - 修复了一个问题:对于非 leader 的 ReplicatedMergeTree 表,
ON CLUSTER查询可能会一直挂起。#17089 (alesapin). - 避免在执行过程中可能被取消的远程查询 (例如带有
LIMIT的查询) 出现不必要的网络错误。#17006 (Azat Khuzhin). - 发生错误时,重新解析
format_avro_schema_registry_url的 IP 地址。#16985 (filimonov) 。 - 修复了这样一个可能导致 server 崩溃的问题:在
ALTER TABLE ... MODIFY COLUMN ... NewType尚未完成时,如果对正在修改的列执行包含WHEREexpression 的SELECT,就可能触发该问题。#16968 (Amos Bird). - 安装脚本现在应始终在配置目录中创建子目录。这仅适用于使用自定义配置的 Docker 构建。#16936 (filimonov).
- 修复了带有
ORDER BY的查询中可能出现的Illegal type of argument错误。修复 #16580。#16928 (Nikolai Kochetov)。 - 如果未向 WriteBufferFromS3 写入任何数据,则中止分段上传。#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
缺陷修复
- 修复了一个罕见的静默崩溃问题:当 query profiler 开启,且 ClickHouse 安装在 glibc 版本对某些函数的异步回溯表 (据称) 存在缺陷的操作系统上时,可能会出现此问题。此修复解决了 #15301。此修复解决了 #13098。#16846 (alexey-milovidov).
- 现在在解析输入的 AVRO 数据时,会从类型中移除 LowCardinality。修复了 #16188。#16521 (Mike).
- 通过正确缩减 GTID 集合,修复了在使用 MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL Engine,且在 MySQL Slave 上启用
slave_parallel_worker时元数据快速增长的问题。此修复解决了 #15951。#16504 (TCeason). - 修复了 Distributed 的 DROP TABLE 问题 (与 INSERT 存在竞态) 。#16409 (Azat Khuzhin).
- 修复了复制队列中超大条目的处理问题。如果表结构特别大 (接近 1 MB) ,ALTER 查询中可能会出现超大条目。此修复解决了 #16307。#16332 (alexey-milovidov).
- 修复了这样一种不一致行为:由于用于过滤的 Set 未创建,返回数据中的一部分可能会被丢弃。#16308 (Nikita Mikhaylov).
- 修复了 MySQL 数据库的一个问题。当用作数据库引擎的 MySQL 服务器不可用时,某些查询会抛出异常,因为它们会尝试从已禁用的服务器获取表,而这其实并不必要。例如,查询
SELECT ... FROM system.parts应当只对 MergeTree 表生效,完全不应访问 MySQL 数据库。#16032 (Kruglov Pavel).
ClickHouse 发行版 v20.8.5.45-lts,2020-10-29
缺陷修复
- 修复了函数
dictGet在发生异常时可能出现的重复释放问题。如果字典加载失败,就可能发生这种情况。#16429 (Nikolai Kochetov). - 修复了在
group by键上使用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) 。 - 修复 collate 名称和字符集名称的解析,并支持字符串类型的
length = 0。#16008 (Winter Zhang) 。 - 允许具有复杂键的字典使用 direct 布局。#16007 (Anton Popov).
- 防止副本在一段时间未活动后发生复制错误时卡住 5-10 分钟。#15987 (filimonov).
- 修复在向 MaterializedView 插入数据或从中查询时,并发删除目标表 (适用于 Atomic database engine) 导致的罕见段错误。#15984 (tavplubix) 。
- 修复了 settings profile 解析中的歧义:
CREATE USER ... SETTINGS profile readonly现在会被视为使用名为readonly的 profile,而不是名为profile且带有 readonly 限制的设置。这修复了 #15628。#15982 (Vitaly Baranov) 。 - 修复了数据库创建失败时导致崩溃的问题。#15954 (Winter Zhang) 。
- 修复了在并发重命名表时,
DROP TABLE IF EXISTS因报出Table ... does not exist错误而失败的问题 (针对 Atomic 数据库引擎) 。修复了并发执行某些涉及多个表的 DDL 查询 (如DROP DATABASE和RENAME TABLE) 时罕见的死锁问题。修复了在并发执行DROP/DETACH TABLE时,DROP/DETACH DATABASE因报出Table ... does not exist而失败的问题。#15934 (tavplubix). - 修复了在查询包含
WHERE、PREWHERE和GLOBAL IN时,从Distributed表查询会错误返回空结果的问题。修复 #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的默认值过低的问题,这可能导致副本过于频繁地丢失。通过选择最新的副本进行克隆,改进了丢失副本的恢复流程。同时,不再从丢失的副本中删除旧的 parts,而是将其 detach。#15701 (tavplubix). - 修复错误
Cannot add simple transform to empty Pipe:从Buffer表读取数据时,如果其结构与目标表不同,且目标表的查询结果为空,就可能触发该错误。修复了 #15529。#15662 (Nikolai Kochetov) 。 - 修复了 S3 表函数中通配符相关的 bug,未将 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
缺陷修复
- 修复查询计划中
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). - 修复了一个问题:如果此前执行过使用相同模式的
LIKE,ILIKE运算符就会失去大小写不敏感特性。#15536 (alesapin) 。 - 修复了这样一种
Missing columns错误:选择的数据中不存在某些列,而这些列又依赖于数据中其他同样不存在的列时,就会出现该错误。修复 #15530。#15532 (alesapin). - 修复了 DDLWorker 中事件订阅的一个 bug,该问题在极少数情况下可能导致
ON CLUSTER中的查询挂起。该问题是在 #13450 中引入的。#15477 (alesapin) 。 - 当
boundingRatioaggregate function 的第二个参数类型错误时,会正确报告 error。#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 列定义数据包中 decimals 字段的大小。#15152 (maqroll) 。
- 我们已经在 String 和 FixedString 之间采用了填充比较 (https://github.com/ClickHouse/ClickHouse/blob/master/src/Functions/FunctionsComparison.h#L333) 。此 PR 将相同的逻辑应用于 field 比较,从而修复了将 FixedString 用作主键时的问题。此修复对应 #14908。#15033 (Amos Bird) 。
- 如果使用精心构造的参数调用函数
bar,则可能发生缓冲区溢出。此修复已关闭 #13926。#15028 (alexey-milovidov) 。 - 修复了在 Mac OS 上的 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 频率。这修复了 #14923。#14924 (Alexander Kuzmenkov) 。 - 修复了使用
MaterializeMySQL数据库引擎时出现.metadata.tmp File exists错误的问题。#14898 (Winter Zhang) 。 - 修复了一个问题:如果需要从 ZK 拉取配置文件 (使用
from_zkinclude 选项) ,服务器在启动时与 ZooKeeper 通信时可能会卡住。此项修复对应 #14814。#14843 (Alexander Kuzmenkov) 。 - 修复了有符号类型在进行收窄
Int -> Intcast 时单调性检测错误的问题。该问题可能导致查询结果错误。此 bug 在 #14513 中披露。#14783 (Amos Bird) 。 - 修复了
Nullable列排序顺序错误的问题。此修复解决了 #14344。#14495 (Nikita Mikhaylov) 。
改进
ClickHouse 发行版 v20.8.3.18-稳定版本,2020-09-18
缺陷修复
- 修复了某些对
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时,materialized view 元数据中缺少默认数据库名称的问题。#14664 (tavplubix). - 修复了一个问题:当
ALTER UPDATE变更的赋值表达式中使用 Nullable 列和常量值 (例如UPDATE x = 42) 时,可能导致列值错误或发生段错误。修复了 #13634、#14045。#14646 (alesapin). - 修复了 Decimal 乘法结果错误的问题,其原因是结果列的 decimal 标度不正确。#14603 (Artem Zuikov).
- 新增了一个检查器,因为无论调用
lc->isNullable()还是调用ls->getDictionaryPtr()->isNullable(),都无法返回正确结果。#14591 (myrrc). - 修复了为 StorageReplicatedMergeTree engine 执行 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-稳定版本,2020-09-08
向后不兼容的变更
- 现在,
OPTIMIZE FINAL查询不会再为创建生存时间 (TTL) 之前添加的 parts 重新计算 TTL。请使用一次ALTER TABLE ... MATERIALIZE TTL来计算它们;之后,OPTIMIZE FINAL就会正确处理 TTL。此行为对复制表而言此前从未生效。#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).
问题修复
- 修复了客户端在 interactive mode 下进度条遮挡可见数据的问题。此修复解决了 #12562、#13369、#13584 和 #12964。#13691 (alexey-milovidov) 。
- 修复了按多个列排序时
LowCardinality列排序顺序错误的问题。此修复解决了 #13958。#14223 (Nikita Mikhaylov) 。 - 检查
topK聚合函数中的数组大小溢出。若无此检查,用户可能会发送带有精心构造参数的查询,从而导致服务器崩溃。此修复关闭了 #14452。#14467 (alexey-milovidov) 。 - 修复了一个缺陷:如果表中存在仅包含单个分片的分区,可能会导致错误的合并任务分配。#14444 (alesapin).
- 如果
PipelineExecutor本身发生异常,则停止查询执行。这可以避免极少数情况下查询挂起。对 #14334 的延续修复。 #14402 #14334 (Nikolai Kochetov). - 修复了对通过
AS table_function创建的表执行ALTER查询时发生的崩溃。修复了 #14212。#14326 (alesapin). - 修复了使用 REFRESH 命令执行 ALTER LIVE VIEW 查询时出现的异常。live view 属于 Experimental 功能。#14320 (Bharat Nallan) 。
- 修复带有嵌套解释器的查询在 QueryPlan 生命周期方面的问题 (适用于 EXPLAIN PIPELINE graph=1) 。#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) 。 - 修复了
pointInPolygon在将常量二维数组用作多边形时的问题。#14079 (Alexey Ilyukhov) 。 - 修复了
Poco::Exception: no space left on device补充信息中错误的挂载点。#14050 (tavplubix) 。 - 修复了在非全局级别执行
GRANT ALL语句时的问题。#13987 (Vitaly Baranov). - 修复解析器,使其拒绝将带有引擎的 create table 识别为表函数。#13940 (hcz).
- 修复了在启用
optimize_duplicate_order_by_and_distinct设置时,使用DISTINCT关键字且包含 UNION ALL 子查询的 select 查询结果错误的问题。#13925 (Artem Zuikov) 。 - 修复了重命名
Distributed表时可能出现的死锁问题。#13922 (tavplubix) 。 - 修复了按多列排序时
FixedString列排序错误的问题。修复 #13182。#13887 (Nikolai Kochetov) 。 - 修复在使用非默认参数时,
topK/topKWeighted合并结果可能不准确的问题。#13817 (Azat Khuzhin) 。 - 修复了从带有 SET 类型 INDEX 的 MergeTree 表读取数据时,与 NULL 比较会失败的问题。此修复对应 #13686。#13793 (Amos Bird) 。
- 修复 Lambda 中
arrayJoin捕获的问题 (LOGICAL_ERROR) 。#13792 (Azat Khuzhin) 。 - 为函数
range添加 step 溢出检查。#13790 (Azat Khuzhin) 。 - 修复了并发执行
DROP DATABASE和CREATE TABLE时出现的Directory not empty错误。#13756 (alexey-milovidov) 。 - 为
h3KRing函数增加范围检查。此修复解决了 #13633。#13752 (alexey-milovidov) 。 - 修复了 DETACH 与后台合并之间的竞态条件。detach 后,parts 可能会重新恢复。这是对 #8602 的后续;该 PR 并未修复此问题,但引入了一个在极少数情况下开始失败的测试,从而暴露了这个问题。#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 和
set enable_optimize_predicate_expression=1时 JOIN 崩溃的问题。#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) 。
- 修复 compact parts 中二级索引损坏的问题。Compact parts 属于 Experimental 功能。#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 组合器的限制提高到 1M。#13947 (Mikhail f. Shiryaev) 。
- 修复了 AvroConfluent 格式中的一个错误:收到异常小且格式损坏的消息时,Kafka 表引擎会停止处理消息。#13941 (Gervasio Varela).
- 修复了长查询返回错误报错信息的问题。对于正确的查询,此前除了
Max query size exceeded之外,还可能收到其他语法错误。#13928 (Nikolai Kochetov) 。 - 改进了
TabSeparated格式中 NULL 值的错误提示。#13906 (jiang tao) 。 - 如果 Array 元素类型为 Float32/Float64,函数
arrayCompact将按位比较 NaN。在之前的版本中,如果 Array 元素类型为 Float32/Float64,NaN 始终被视为不相等;而如果类型更复杂,例如 Nullable(Float64),则 NaN 始终被视为相等。这样就解决了 #13857。#13868 (alexey-milovidov) 。 - 修复了
lgamma函数中的数据竞争。该问题仅在tsan中被发现,实际上并未产生任何副作用。#13842 (Nikolai Kochetov). - 避免将数组作为字段处理时查询过慢,改为抛出异常。#13753 (alexey-milovidov).
- 新增了 Redis requirepass 认证 (用于 Redis 字典源) 。#13688 (Ivan Torgashov).
- 新增 MergeTree 预写日志 (WAL) 转储工具。WAL 是一项 Experimental 功能。 #13640 (BohuTANG) 。
- 在早期版本中,
lcm函数如果使用特意构造的参数调用,可能会在调试构建中触发断言失败。此项修复了 #13368。#13510 (alexey-milovidov) 。 - 在更多情况下为
toDate/toDateTime函数提供单调性。单调性信息用于索引分析 (更复杂的查询将能够使用索引) 。现在,对输入参数的饱和处理更加自然,从而提供了更好的单调性。#13497 (Amos Bird) 。 - 支持自定义设置使用复合标识符。自定义设置是 ClickHouse 代码库与其他代码库之间的集成接口 (对 ClickHouse 本身没有实际收益) #13496 (Vitaly Baranov) 。
- 并行将 parts 从 DiskLocal 移动到 DiskS3。
DiskS3仍属 Experimental 功能。#13459 (Pavel Kovalenko) 。 - 默认启用混合粒度的 parts。 #13449 (alesapin) 。
- 在 S3 重定向中正确检查远程主机 (安全相关) 。#13404 (Vladimir Chebotarev).
- 在 system.events 中添加
QueryTimeMicroseconds、SelectQueryTimeMicroseconds和InsertQueryTimeMicroseconds。#13336 (ianton-ru) 。 - 修复了 Decimal 的负指数过大时触发的调试断言问题。修复了 #13188。#13228 (alexey-milovidov) 。
- 为 DiskS3 新增了缓存层 (将标记和索引文件缓存到本地磁盘) 。
DiskS3是一项 Experimental 功能。#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). - 如果在扫描 parts 时超出
max_rows_to_read限制,则立即失败。这样做是为了在已明确max_rows_to_read超限时,跳过对所有选中 parts 的范围扫描。对于涉及大量 parts 的查询,这项改动效果相当明显。#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).
Experimental 功能
- ClickHouse 现已可作为 MySQL 副本运行——由
MaterializeMySQL数据库引擎实现。实现了 #4006。#10851 (Winter Zhang) 。 - 新增类型
Int128、Int256、UInt256及其相关函数。Decimal 扩展支持 Decimal256 (精度最高可达 76 位) 。这些新类型由设置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 的交互就是个糟糕的主意 (单元测试本来就不该用于验证复杂的分布式系统) 。我们已经为此使用 integration tests,而且它们更适合这个目的。#13745 (alexey-milovidov) 。
- 添加了用于风格检查的 Docker 镜像。新增了一项风格检查,以确保所有 docker 和 docker compose 文件都位于 docker 目录中。#13724 (Ilya Yatsishin) 。
- 修复了 Mac OS 上 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) 。
- 将 Dockerfiles 从 integration tests 移至
docker/test目录。runnerDocker 容器中提供了 docker_compose 文件。Docker 镜像在 CI 中构建,而不是在 integration tests 中构建。#13448 (Ilya Yatsishin) 。
ClickHouse 20.7 发行版
ClickHouse 发行版 v20.7.2.30-稳定版本,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 将无法正常工作,或者 merge 的最大大小会被限制得过小。系统将抛出异常并说明应如何处理。此项关闭了 #10897。#12728 (alexey-milovidov) 。 - 从早于 20.5 的版本升级时,如果执行滚动更新,并且集群中同时存在 20.5 及以上版本和低于 20.5 的版本,那么当旧版本的 ClickHouse 节点在较新版本节点已存在的情况下重启时,可能会导致
Part ... intersects previous part错误。为防止此错误,请先在所有集群节点上安装较新的 clickhouse-server 软件包,然后再执行重启 (这样 clickhouse-server 重启后将以新版本启动) 。
新功能
- Polygon 字典类型,可高效执行“逆地理编码”查找——即在包含大量多边形 (世界地图) 的字典中根据坐标查找区域。它采用了经过精心优化的递归网格算法,以保持较低的 CPU 和内存占用。 #9278 (achulkov2).
- 为预配置用户新增 LDAP 身份验证支持 (“Simple Bind”方法) 。 #11234 (Denis Glazachev).
- 引入设置
alter_partition_verbose_result,可为某些类型的ALTER TABLE ... PARTITION ...查询输出所涉及 parts 的信息 (目前为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). - 为兼容 MySQL,新增
FROM_UNIXTIME函数,参见 12149。 #12484 (flynn). - 如果启用了
allow_nullable_key表设置,则允许在 MergeTree 表中使用 Nullable 类型作为键。关闭 #5319。 #12433 (Amos Bird). - 新增与 COS 的集成。 #12386 (fastio).
- 新增
mapAdd和mapSubtract函数,用于对按键映射的值执行加减运算。 #11735 (Ildus Kurbangaliev).
问题修复
- 修复了必须在单个副本上执行的查询中
ON CLUSTER过早超时的问题。修复了 #6704、#7228、#13361、#11884。#13450 (alesapin)。 - 修复了由 #12277 引入的标记包含搜索中的崩溃问题。#14225 (Amos Bird) 。
- 修复了
cache布局外部字典中的竞态条件,该问题可能导致服务器崩溃。#12566 (alesapin) 。 - 修复了客户端在交互模式下进度条遮挡可见数据的问题。此修复解决了 #12562、#13369、#13584 和 #12964。#13691 (alexey-milovidov) 。
- 修复了在使用 ORDER BY 按多个列排序时,
LowCardinality列排序顺序错误的问题。此修复解决了 #13958。#14223 (Nikita Mikhaylov) 。 - 移除了硬编码的超时设置,此前它会错误地覆盖缓存字典的
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 类型 INDEX 的 MergeTree 表读取数据时,与 NULL 比较会失败的问题。此修复对应 #13686。#13793 (Amos Bird) 。
- 修复函数
range()中step参数的溢出问题。#13790 (Azat Khuzhin) 。 - 修复了并发执行
DROP DATABASE和CREATE TABLE时出现的Directory not empty错误。 #13756 (alexey-milovidov) 。 - 为
h3KRing函数添加范围检查,修复了 #13633。#13752 (alexey-milovidov) 。 - 修复了 DETACH 与后台合并之间的竞态条件。执行 detach 后,parts 可能会重新出现。这是 #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 类型字典在某些情况下会返回默认值,而不是 source 中已有值的问题。#13624 (Nikita Mikhaylov) 。
- 修复 compact parts 中二级索引损坏的问题 (compact parts 是一项 Experimental 功能) 。#13538 (Anton Popov) 。
- 修复了函数
netloc中的错误代码。此修复解决了 #13335。#13446 (alexey-milovidov) 。 - 修复了将 Unix 时间戳作为参数传入
parseDateTimeBestEffort函数时出现的解析错误。此修复解决了 #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和Parquetformat 输出为空的问题,因为对于这些 format 来说,空输出是无效的。#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). - 修复
LEFT ASOF JOIN在join_use_nulls=1时发生崩溃的问题。#13291 (Artem Zuikov) 。 - 修复了在查询来自延迟副本时可能出现的错误
Totals having transform was already added to pipeline。#13290 (Nikolai Kochetov) 。 - 如果用户向函数
h3ToChildren传入特意构造的参数,server 可能会崩溃。此修复解决了 #13275。#13277 (alexey-milovidov) 。 - 修复了在包含
NaN值的 Float 类型上调用uniqExact、topK、sumDistinct及类似聚合函数时,可能出现的性能较低和结果略有偏差的问题。该问题还会在 debug 构建中触发断言。此修复解决了 #12491。#13254 (alexey-milovidov). - 修复了 KeyCondition 中的断言问题:当主键包含带单调函数的表达式,且查询中包含与类型不同的常量的比较时,会触发该问题。此修复解决了 #12465。#13251 (alexey-milovidov) 。
- 对于在函数 roundUpToPowerOfTwoOrZero() 中最高有效位 (MSB) 已置位的数字,返回其原值。这可防止数组大小溢出时出现潜在错误。#13234 (Azat Khuzhin) 。
- 修复了函数 if 在 cond 为非字面量 NULL 的 Nullable constexpr 时的问题。修复了 #12463。#13226 (alexey-milovidov)。
- 修复了
arrayElement函数中的断言错误:当数组元素为 Nullable,且数组下标也为 Nullable 时会触发该错误。此修复解决了 #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 BYTuple 且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).
- 修复一个罕见缺陷:当
ALTER DELETE和ALTER MODIFY COLUMN查询同时作为一次变更执行时,会导致count.txt中的行数不正确,进而造成分片中的数据错误。此外,还修复了ALTER RENAME COLUMN和ALTER ADD COLUMN同时执行时的一个小问题。#12760 (alesapin). - 使用
clickhouse字典源查询远程表时,所用凭据有误。#12756 (sundyli). - 修复
CAST(Nullable(String), Enum())。#12745 (Azat Khuzhin) 。 - 修复了大型元组的性能问题:它们在
IN子句中会被解释为函数。即用户出于某种难以理解的原因,写成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 中布隆过滤器索引在使用常量表达式时的问题。#12659 (Winter Zhang) 。
- 修复了 StorageKafka 在 broker 不可用时 (以及不止这种情况) 发生的 SIGSEGV。#12658 (Azat Khuzhin) 。
- 新增了对带有
Array(UUID)参数的if函数的支持。此修复解决了 #11066。#12648 (alexey-milovidov) 。 - CREATE USER IF NOT EXISTS 现在在用户已存在时不再抛出异常。此修复解决了 #12507。#12646 (Vitaly Baranov).
- 在一些意外情况下,执行
ALTER ... UPDATE时可能会抛出There is no supertype...异常 (例如对 UInt64 列做减法时) 。此项修复了 #7306。此项修复了 #4165。#12633 (alexey-milovidov) 。 - 修复了使用外部排序的查询可能出现的
Pipeline stuck错误。修复 #12617。#12618 (Nikolai Kochetov) 。 - 修复
OPTIMIZE DEDUPLICATE的错误:Output of TreeExecutor is not sorted。修复 #11572。#12613 (Nikolai Kochetov) 。 - 修复了在查询优化过程中,函数
any结果的别名可能丢失的问题。#12593 (Anton Popov). - 在 DROP TABLE 时删除分布式表中的数据 (异步 INSERT 产生的块) 。#12556 (Azat Khuzhin).
- 现在,当文件
checksums.txt缺失时,ClickHouse 会重新计算 parts 的校验和。该问题自 #9827 起一直存在。#12545 (alesapin) 。 - 修复了在
enable_mixed_granularity_parts=1时,执行ALTER DELETE查询后旧 parts 损坏的问题。修复 #12536。#12543 (alesapin) 。 - 修复了 live view 表中的竞态条件,该问题可能导致数据重复。LIVE VIEW 是一项 Experimental 功能。 #12519 (vzakaznikov) 。
- 修复了
AggregateFunction(avg, ...)值的 binary format 向后兼容性。此修复解决了 #12342。#12486 (alexey-milovidov) 。 - 修复了使用字典进行 JOIN 时,若连接条件基于字典键表达式而导致的崩溃问题:
t JOIN dict ON expr(dict.id) = t.id。在这种情况下禁用字典连接优化。#12458 (Artem Zuikov) 。 - 修复了在指定非常大的 LIMIT 或 OFFSET 时发生的溢出问题。此修复解决了 #10470。此修复解决了 #11372。#12427 (alexey-milovidov).
- kafka:修复了当批次中间存在带有错误的消息时发生 SIGSEGV 的问题。 #12302 (Azat Khuzhin).
改进
- 在 ZooKeeper 中保留更少的日志。在服务器/表/插入操作较多且存在离线副本时,避免 ZooKeeper 节点过度膨胀。#13100 (alexey-milovidov).
- 现在,如果在 ALTER 或变更期间发生错误,异常将转发给客户端。已关闭 #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) 。 - 支持对包含 NULL 的 Arrays 使用
*Map聚合函数。修复了 #13157。#13225 (alexey-milovidov) 。 - 避免在解析 DateTime 值时发生 overflow,否则会在其 timezone 中导致负的 Unix timestamp (例如 Moscow 时区中的
1970-01-01 00:00:00) 。现在会改为截断到零。此项修复了 #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) 。
- 现在,在处理 compact part 时遇到损坏的 parts,也会将其报告出来。Compact parts 是一项 Experimental 功能。#13282 (Amos Bird).
- 修复了
geohashesInBox中的断言问题。此修复解决了 #12554。#13229 (alexey-milovidov) 。 - 修复了
parseDateTimeBestEffort中的 assert。此修复解决了 #12649。#13227 (alexey-milovidov) 。 - 对 Processors/PipelineExecutor 做了一项小优化:在合适的时候跳出循环。 #13058 (Mark Papadakis).
- 支持省略 TABLE 关键字执行 TRUNCATE 表。#12653 (Winter Zhang).
- 修复默认会覆盖 EXPLAIN 查询 format 的问题。此修复解决了 #12541。#12541 (BohuTANG) 。
- 支持以更标准的方式指定 JOIN 的 kind 和 type:使用
LEFT SEMI JOIN而不是SEMI LEFT JOIN。目前这两种写法都正确。#12520 (Artem Zuikov). - 将
multiple_joins_rewriter_version的默认值改为 2。这样会启用新的多 JOIN 重写器,该重写器能够识别列名。#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,则在对所有列执行 CLEAR 的 ALTER 请求时,ALTER 可能会卡住。现已修复 #7941。#12382 (alexey-milovidov).
- 避免在每次查询后都从历史文件中重新加载自动补全 (以免与其他客户端会话的历史记录发生重叠) 。#13086 (Azat Khuzhin) 。
性能改进
- 某些操作的内存使用量最多可降低 2 倍。#12424 (alexey-milovidov).
- 优化精确匹配 PK 范围的查询的 PK 查找。#12277 (Ivan Babrou).
- 对带有
LowCardinality的超短查询做了轻微优化。#14129 (Anton Popov). - 略微提升了按 UInt8/UInt16 键进行 aggregation 的性能。#13091 和 #13055 (alexey-milovidov).
- 在查询计划中对
LIMITstep 实现下推 (子查询内部) 。#13016 (Nikolai Kochetov). - 在 parts 上并行执行主键查找和跳过索引阶段,如 #11564 中所述。#12589 (Ivan Babrou).
- 当
set optimize_if_transform_strings_to_enum = 1时,将函数 “if” 和 “transform” 的 String 类型 argument 转换为枚举。#12515 (Artem Zuikov). - 当
set optimize_monotonous_functions_in_order_by=1时,在ORDER BY中将单调函数替换为其 argument。#12467 (Artem Zuikov). - 新增 order by 优化:当
set optimize_redundant_functions_in_order_by = 1时,将ORDER BY x, f(x)重写为ORDER by x。#12404 (Artem Zuikov). - 当子查询包含
WITHclause 时,允许 predicate 下推。此修复解决了 #12293 #12663 (Winter Zhang). - 提升从 compact parts 读取数据的性能。Compact parts 是一项 Experimental 功能。#12492 (Anton Popov).
- 尝试在
DiskS3中实现流式优化。DiskS3 是一项 Experimental 功能。#12434 (Vladimir Chebotarev).
构建/测试/打包改进
- 使用
shellcheck对 sh 测试进行 lint 检查。#13200 #13207 (alexey-milovidov) 。 - 添加了一个脚本,用于在 GitHub hook 中为拉取请求设置标签。#13183 (alesapin) 。
- 删除了部分递归子模块。参见 #13378。#13379 (alexey-milovidov) 。
- 确保所有子模块都来自正确的 URL。#13379 的后续内容。此修复解决了 #13378。#13397 (alexey-milovidov) 。
- 新增了对用户自定义设置的支持,这些设置可在查询内部访问。当 ClickHouse engine 用作另一个系统的组件时,此功能是必需的。#13013 (Vitaly Baranov) 。
- 在 TestFlows 中新增了对 INSERT 权限 RBAC 功能的测试。扩展了进行 SELECT 测试的表范围。新增了 Requirements,以匹配新的表引擎测试。#13340 (MyroTk).
- 修复压力测试中服务器重启期间的超时错误。#13321 (alesapin) 。
- 现在,快速测试会通过重试来等待服务器。 #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。移除了测试中无用的 include。#13073 (Nikita Mikhaylov) 。
- 新增了 TestFlows 中针对
SELECT权限的 RBAC 功能测试。#13061 (Ritaank Tiwari) 。 - 在快速测试检查中重新运行了部分测试。#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).
- 现在会检查 server 在压力测试后能否启动。这修复了 #12473。#12496 (alesapin) 。
- 将 fmtlib 更新到 master 分支 (7.0.1) 。#12446 (alexey-milovidov) 。
- 为快速测试添加了 Docker 镜像。#12294 (alesapin) 。
- 调整集成测试的配置路径。#12285 (Ilya Yatsishin) 。
- 添加了一个编译器选项,用于控制栈帧大小不要过大。这将有助于在栈空间较小的 fiber 中运行代码。#11524 (alexey-milovidov).
- 更新 gitignore-files 文件。#13447 (vladimir-golovchenko) 。
ClickHouse 20.6 发行版
ClickHouse 版本发布 v20.6.3.28-稳定版本
向后不兼容变更
- 从低于 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 strictness (不支持 ANY、SEMI、ANTI、ASOF) 。#12118 (Artem Zuikov)。 - 新增函数
initializeAggregation,用于根据单个值初始化聚合。#12109 (Guillaume Tassery)。 - 支持
ALTER TABLE ... [ADD|MODIFY] COLUMN ... FIRST。#4006。#12073 (Winter Zhang)。 - 新增函数
parseDateTimeBestEffortUS。#12028 (flynn)。 - 支持将
ORCformat 用于输出 (此前仅支持输入) 。#11662 (Kruglov Pavel)。
问题修复
- 修复了在启用
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。修复了PrettyCompactMonoBlock中的 extremes/总计问题。此修复解决了 #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及类似 aggregate functions 时,可能出现的性能较低和结果略有偏差的问题。该问题还会在 debug 构建中触发断言。此修复解决了 #12491。#13254 (alexey-milovidov). - 修复了在 cond 为 nullable constexpr 且不是字面量 NULL 时,函数 if 的问题。修复 #12463。#13226 (alexey-milovidov) 。
- 修复了
arrayElement函数中的断言错误,该错误会在数组元素为 Nullable 且数组下标也为 Nullable 时触发。此修复解决了 #12172。#13224 (alexey-milovidov) 。 - 修复了
DateTime64在参数为常量时的转换函数问题。 #13205 (Azat Khuzhin). - 修复了涉及函数的错误索引分析问题。该问题在读取
MergeTree表时,可能导致错误地剪枝 parts。修复 #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) 。 - 修复了从本地副本查询时对线程数进行不必要限制的问题。#12840 (Nikolai Kochetov) 。
- 修复了一个罕见的 bug:当
ALTER DELETE和ALTER MODIFY COLUMN查询同时执行并作为一次变更处理时,会导致count.txt中的行数错误,进而造成 part 中的数据不正确。另修复了ALTER RENAME COLUMN与ALTER ADD COLUMN同时执行时的一个小 bug。#12760 (alesapin). - 修复了
CAST(Nullable(String), Enum())。#12745 (Azat Khuzhin) 。 - 修复了
IN子句中将大型元组误解释为函数时的性能问题。具体来说,就是用户出于某些不太常见的原因,写成WHERE x IN tuple(1, 2, ...)而不是WHERE x IN (1, 2, ...)的情况。#12700 (Anton Popov). - 修复了
input_format_parallel_parsing的内存跟踪问题 (通过将线程关联到组) 。#12672 (Azat Khuzhin) 。 - 修复了 bloom filter 索引在 const expression 下的问题。此修复对应 #10572。#12659 (Winter Zhang) 。
- 修复了
StorageKafka在 broker 不可用等情况下出现的SIGSEGV。#12658 (Azat Khuzhin) 。 - 新增了对参数为
Array(UUID)的函数if的支持。此修复解决了 #11066。#12648 (alexey-milovidov) 。 CREATE USER IF NOT EXISTS现在在用户已存在时不再抛出异常。此修复解决了 #12507。#12646 (Vitaly Baranov) 。- 改进了磁盘访问存储中的异常信息。 #12625 (alesapin).
- 函数
groupArrayMoving*在 distributed queries 中无法正常工作。其结果会以错误的 Data type 进行计算 (未提升到最大类型) 。函数groupArrayMovingAvg返回的是整数,与avg函数的结果不一致。此项修复了 #12568。#12622 (alexey-milovidov). - 修复了函数
any没有别名的问题。#12593 (Anton Popov) 。 - 修复了
cache布局外部字典中的竞态条件,该问题可能导致服务器崩溃。#12566 (alesapin). - 在 DROP TABLE 时,删除分布式表的数据 (异步 INSERT 产生的块) 。#12556 (Azat Khuzhin).
- 修复了一个 bug:当
enable_mixed_granularity_parts=1时,ALTER DELETE查询会导致旧 parts 损坏。修复了 #12536。#12543 (alesapin) 。 - 对于参数数量不正确的函数
in,改进了异常提示。#12529 (Anton Popov). - 修复了 live view 表中的竞态条件问题,该问题可能会导致数据重复。#12519 (vzakaznikov).
- 修复了读取 compact parts 时的性能问题。#12492 (Anton Popov) 。
- 修复了
AggregateFunction(avg, ...)值的 binary format 向后兼容性问题。此修复解决了 #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) 。
- 对布隆过滤器索引参数进行了额外检查。这修复了 #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时,此前返回的异常代码是LOGICAL_ERROR,而不是BAD_ARGUMENTS(我们保证绝不会出现代码为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 优化中的错误代码。该 bug 是在 #10067 中引入的。#12148 (alexey-milovidov).
- 修复了整数除法中可能发生的溢出问题。此项修复解决了 #12119。#12140 (alexey-milovidov).
- 修复了
greatCircleDistance和geoDistance中可能导致无限循环的问题。此修复解决了 #12117。#12137 (alexey-milovidov) 。 - 规范化对 “pid” 文件的处理。在先前版本中,如果 server 在未正常关闭的情况下被杀掉,且另一个进程恰好使用了此前运行的 server 相同的 pid,server 可能会拒绝启动。此外,即使已有另一个 server 正在运行,在 server 启动失败时,pid 文件也可能被删除。此修复解决了 #3501。#12133 (alexey-milovidov).
- 修复了一个会导致 ReplicatedVersionedCollapsingMergeTree 表在 ZooKeepeer 中的表元数据不正确的问题。修复 #12093。#12121 (alesapin).
- 避免在带有 JOIN,或带有附加到系统日志 (system.query_log、metric_log 等) 或 engine=Buffer 底层表的子查询的 materialized view 中出现 “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) 。 - 修复了 StorageKafka 在执行
DROP TABLE时出现的 SIGSEGV。 #12075 (Azat Khuzhin). - 修复了在
PREWHERE中使用错误类型时可能导致的崩溃。修复 #12053、#12060。#12060 (Nikolai Kochetov) 。 - 修复了高阶函数在使用
Tuple(LowCardinality)参数时出现的Cannot capture column错误。修复 #9766。#12055 (Nikolai Kochetov) 。 - 修复了对常量表达式约束的检查问题。此修复解决了 #11360。#12042 (alexey-milovidov) 。
- 修复了使用不同长度的
FixedString类型参数调用函数if时返回错误结果以及可能导致崩溃的问题。此修复解决了 #11362。#12021 (alexey-milovidov) 。
改进
- 允许以更标准的方式设置
JOINkind 和 type:使用LEFT SEMI JOIN,而不是SEMI LEFT JOIN。目前两种写法都正确。#12520 (Artem Zuikov). - 为 Buffer engine 添加了 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()#9336 2. 添加了 MySQL 替换查询集成测试。#12314 (BohuTANG). - 为 MySQL client/driver 添加了
KILL QUERY [connection_id],用于取消长时间运行的查询,见 issue #12038。#12152 (BohuTANG). - 在
formatDateTimefunction 中新增了对%g(两位 ISO 年) 和%G(四位 ISO 年) 替换的支持。#12136 (vivarum). - 在 system.disks 中新增了
type列。#12115 (ianton-ru). - 改进了
REVOKE命令:现在仅对将被 revoke 的访问要求 grant/admin option。例如,执行REVOKE ALL ON *.* FROM user1时,不再要求必须拥有通过 grant option 授予的完整访问权限。新增命令REVOKE ALL FROM user1——它会从user1撤销所有已授予的 roles。#12083 (Vitaly Baranov). - 为 load_balancing 添加了副本优先级 (用于手动设定负载均衡优先级) 。#11995 (Azat Khuzhin).
- 将 S3 元数据中的路径改为相对路径,从而可以更方便地处理 S3 blob。#11892 (Vladimir Chebotarev).
性能改进
- 通过排序键前缀提升了
ORDER BY和GROUP BY的性能 (通过optimize_aggregation_in_order设置启用,默认关闭) 。#11696 (Anton Popov) 。 - 当
set optimize_injective_functions_inside_uniq=1时,会移除uniq*()内部的单射函数。#12337 (Ruslan Kamalov) 。 - 修复了 IN 运算符在使用字面量时未使用索引的问题,这是大约在 v19.3 中引入的性能回退。此项修复了 #10574。#12062 (nvartolomei) 。
- 为 DiskS3 实现了单分片上传 (实验性功能) 。#12026 (Vladimir Chebotarev) 。
Experimental 功能
- 在
MergeTree家族表中新增了 parts 的内存格式,数据会先存储在内存中。parts 会在首次合并时写入磁盘。如果某个 part 的行数或字节数低于阈值min_rows_for_compact_part和min_bytes_for_compact_part,则会以内存格式创建。此外,还提供了对 Write-Ahead-Log 的可选支持;该功能默认启用,并由设置in_memory_parts_enable_wal控制。 #10697 (Anton Popov).
构建/测试/打包改进
- 为 clickhouse-client 实现了基于 AST 的查询模糊测试模式。最近通过模糊测试发现的问题列表见此标签。其中大多数都是由该工具发现的,另有少数由 SQLancer 和
00746_sql_fuzzy.pl发现。#12111 (Alexander Kuzmenkov). - 新增了基于 Testflows 框架的测试类型。#12090 (vzakaznikov).
- 新增了 S3 HTTPS 集成测试。#12412 (Pavel Kovalenko).
- 从独立线程中记录 sanitizer trap 消息。这将防止在线程 sanitizer 下可能发生的死锁。#12313 (alexey-milovidov).
- 现在功能测试和压力测试可以使用旧版本的
clickhouse-test脚本运行了。#12287 (alesapin). - 移除了在构建
orc期间莫名创建文件的行为。#12258 (Nikita Mikhaylov). - 将通用的 docker compose 文件放入集成 docker 容器中。#12168 (Ilya Yatsishin).
- 修复了 CodeQL 发出的警告。
CodeQL是另一种静态 analyzer,未来会与我们已经在使用的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-稳定版本 2020-08-10
问题修复
- 修复了包含函数时索引分析错误的问题。这可能会导致在读取
MergeTree表时错误地剪枝 parts。修复了 #13060。修复了 #12406。#13081 (Anton Popov). - 修复了从本地副本执行查询时,对线程数施加不必要限制的问题。#12840 (Nikolai Kochetov) 。
- 修复了在
IN子句中将大型元组解释为函数时的性能问题。也就是用户出于某些莫名其妙的原因,写成WHERE x IN tuple(1, 2, ...)而不是WHERE x IN (1, 2, ...)的情况。#12700 (Anton Popov). - 修复了
input_format_parallel_parsing的内存跟踪问题 (通过将线程关联到组) 。#12672 (Azat Khuzhin) 。 - 修复了带常量表达式的布隆过滤器索引。此修复解决了 #10572。#12659 (Winter Zhang) 。
- 修复了
StorageKafka在 broker 不可用时 (以及其他情况下) 出现的SIGSEGV。#12658 (Azat Khuzhin). - 新增了对参数为
Array(UUID)的函数if的支持。此修复解决了 #11066。#12648 (alexey-milovidov) 。 - 修复了函数
any没有别名的问题。#12593 (Anton Popov) 。 - 修复了使用
cache布局的外部字典中的竞态条件,该问题可能导致服务器崩溃。#12566 (alesapin). - 在执行 DROP TABLE 时,删除分布式表的数据 (异步 INSERT 产生的块) 。#12556 (Azat Khuzhin) 。
- 修复了一个 bug:当
enable_mixed_granularity_parts=1时,ALTER DELETE查询会导致旧 parts 损坏。已修复 #12536。#12543 (alesapin) 。 - 改进了函数
in在参数数量无效时的异常提示。#12529 (Anton Popov). - 修复了
live view表中的竞态条件问题,该问题可能导致数据重复。#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) 。
- 修复了 TOTALS/ROLLUP/CUBE 对带有
-State和Nullable参数的聚合函数的处理问题。此修复对应 #12163。#12376 (alexey-milovidov) 。 - 修复了
Kafka引擎中批次中间某条消息出错时导致 SIGSEGV 的问题。#12302 (Azat Khuzhin) 。 - 修复了
SummingMergeTreeengine 对分区键中的列求和时的行为。在显式指定要汇总的列且这些列与分区键列相交时,新增了一个异常。这修复了 #7867。#12173 (Nikita Mikhaylov) 。 - 修复了在存在别名时,发送到外部 DBMS (如 MySQL、ODBC) 的查询转换错误。此修复解决了 #12032。#12151 (alexey-milovidov) 。
- 修复了一个会导致 ZooKeepeer 中 ReplicatedVersionedCollapsingMergeTree 表的元数据不正确的 bug。修复 #12093。#12121 (alesapin).
- 修复了从
VIEW查询时对线程数进行不必要限制的问题。修复了 #11937。#12085 (Nikolai Kochetov) 。 - 修复了在
join_algorithm=partial_merge的 JOIN 中使用 LowCardinality 类型时发生的崩溃问题。#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-稳定版本 2020-07-02
向后不兼容变更
COUNT(DISTINCT)和uniq聚合函数家族现在返回非Nullable结果。如果所有传入值均为NULL,则返回 0。这提高了 SQL 兼容性。#11661 (alexey-milovidov).- 增加了对用户级设置放置位置错误情况的检查。用户级设置应在
users.xml中为特定用户的 profile 写在<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 重启后将以新版本启动) 。
新特性
- 用于在表中自动粗化数据并进行 rollup 的
TTL DELETE WHERE和TTL GROUP BY。#10537 (expl0si0nn). - 实现了 PostgreSQL 线协议。#10242 (Movses).
- 新增了用户、角色、授权、profile、配额和行策略的系统表;新增了命令 SHOW USER、SHOW [CURRENT|ENABLED] ROLES、SHOW SETTINGS PROFILES。#10387 (Vitaly Baranov) 。
- 支持通过 ODBC 表函数写入 #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 风格全局变量语法 (存根) 的支持。这是为了兼容 MySQL 协议所必需的。 #11832 (alexey-milovidov).
- 为
clickhouse-client添加了基于replxx的语法高亮功能。#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) 。 clickhouse-format工具现在可以在使用-n参数时对多个查询进行格式化。#10852 (Darío).- 可为 DiskS3 配置代理解析器。#10744 (Pavel Kovalenko) 。
- 使
pointInPolygon支持非常量 Polygon。现在,PointInPolygon 可接受 Array(Array(Tuple(…, …))) 作为第二个参数,即由 Polygon 及其孔组成的数组。#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) 。
- 新增了新函数,可按不同精度将 DateTime64 导入/导出为 Int64:
to-/fromUnixTimestamp64Milli/-Micro/-Nano。#10923 (Vasily Nemkov) 。 - 支持为 MongoDB 字典指定
mongodb://URI。#10915 (Alexander Kuzmenkov) 。 - 现在可以在不配合 LIMIT 子句的情况下使用 OFFSET 关键字。#10802 (Guillaume Tassery) 。
- 新增了
system.licenses表。该表包含位于contrib目录中的第三方库许可证。此项变更关闭了 #2890。#10795 (alexey-milovidov). - 新增函数 function toStartOfSecond(DateTime64) -> DateTime64,用于将 DateTime64 值的亚秒部分置零。#10722 (Vasily Nemkov) 。
- 新增输入格式
JSONAsString,可接受由换行符、空格和/或逗号分隔的一系列 JSON 对象。#10607 (Kruglov Pavel) 。 - 允许以内存分析时使用比 4 MiB 更细的粒度步长。新增了采样内存 Profiler,用于捕获随机分配/释放操作。#10598 (alexey-milovidov) 。
SimpleAggregateFunction现已支持sumMap。#10000 (Ildus Kurbangaliev) 。- 支持 Distributed 表引擎的
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). - 现在,在执行元数据 ALTER 期间,副本拉取操作将被取消。#11744 (alesapin) 。
- 在检查是否相等之前,先解析存储在 ZooKeeper 中的元数据。#11739 (Azat Khuzhin) 。
- 修复了在 Values 输入格式中因复杂字面量类型推断错误导致的 LOGICAL_ERROR。 #11732 (tavplubix).
- 修复了
ORDER BY ... WITH FILL在常量列上的问题。#11697 (Anton Popov) 。 - 修复了
SYSTEM SYNC REPLICA中一种极其罕见的竞态条件。如果某个复制表在创建的同时,另一个客户端又通过独立连接对该表发出SYSTEM SYNC REPLICA命令 (这种情况不太可能发生,因为另一个客户端理应知道该表已创建) ,就可能导致 nullptr 解引用。#11691 (alexey-milovidov). - 与 XDBC bridge 通信时应传递适当的超时参数。最近在检查 bridge 是否存活以及接收元信息时,超时参数未得到正确处理。#11690 (alexey-milovidov).
- 修复了
LIMIT n WITH TIES与包含别名的ORDER BY语句搭配使用时的问题。 #11689 (Anton Popov). - 修复在并行
FINAL下执行 select 查询时可能出现的Pipeline stuck问题。修复了 #11636。#11682 (Nikolai Kochetov) 。 - 修复了一个会导致
system.mutations状态不正确的错误。它可能显示整个变更已完成,但服务器的复制队列中仍有MUTATE_PARTtask,并会尝试执行它们。此修复解决了 #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) 。
- 修复了 server 启动时日志消息中关于“标记缓存大小已降低”的一个小错误。此修复关闭了 #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) 。
- 修复了在列的压缩编解码器使用非常量参数时导致的 server 崩溃问题。修复 #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 中发送 parts 时,移除冗余锁。#11354 (alesapin) 。
- 修复了 clickhouse-client 在多行模式下对
\G(垂直输出) 的支持问题。此修复关闭了 #9933。#11350 (alexey-milovidov) 。 - 修复使用
Lazy数据库时可能出现的段错误。#11348 (alexey-milovidov) 。 - 修复了直接从
Join表引擎查询 (不使用 JOIN) 时的崩溃问题以及错误的可空性。 #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).
- 修复了
clickhouse-copier中一个轻微的数据竞争问题。由集成测试发现。#11313 (alexey-milovidov) 。 - 修复了转换过程中可能出现的内存未初始化问题。示例:
SELECT toIntervalSecond(now64())。#11311 (alexey-milovidov) 。 - 修复了一个问题:当表的主键包含 Array 列,且查询使用
empty或notEmpty函数对该列进行过滤时,索引分析将无法正常工作。此修复对应 #11286。#11303 (alexey-milovidov)。 - 修复了一个 bug:当查询速度估算不准确时,如果查询因
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字典中只存在已过期的键时,可能会返回默认值而非正常值。此问题仅影响 String 字段。#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) 。 - 修复了
S3glob 匹配在键数量超过 1000 且某些后端情况下可能失败的问题。#11179 (Vladimir Chebotarev) 。 - 如果数据跳过索引依赖的列会在后台合并期间被修改 (SummingMergeTree、AggregatingMergeTree 以及 TTL GROUP BY 均属于这种情况) ,其计算结果就会不正确。这个问题已通过将索引计算移到合并之后来修复,从而确保索引基于合并后的数据计算。#11162 (Azat Khuzhin).
- 修复了在对
engine=Kafka的表执行 DROP 时 (或在 server 重启期间) 有时会出现的卡住问题。#11145 (filimonov) 。 - 修复了简单查询中线程预留过多的问题 (这是为减少线程数量所做的优化,但在管道变更后部分失效) 。#11114 (Azat Khuzhin) 。
- 如果未完成任何最终化操作,则移除变更最终化任务的日志。 #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 engine 表在终止过程中可能导致数据遗漏的问题。#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) 。 - 修复了在对 engine=Kafka 的表执行 DROP 操作时 (或在服务器重启期间) 有时会出现的卡死问题。 #10910 (filimonov).
- 现在支持执行多个
ALTER RENAME,例如a TO b, c TO a。#10895 (alesapin) 。 - 修复了一种可能出现的竞态条件:当从多个线程中获取同一列的聚合函数状态结果时,可能会发生该问题。据我所知,唯一会触发该问题的方式,是在从使用
Memory引擎、并为quanite*函数存储AggregateFunction状态的表读取数据时,使用finalizeAggregation函数。 #10890 (Nikolai Kochetov) 。 - 修复分布式表中 Tuple 的向后兼容性问题。#10889 (Anton Popov) 。
- 修复 StringHashTable 中的 SIGSEGV 问题 (如果该类键不存在) 。#10870 (Azat Khuzhin) 。
- 修复了在使用
Atomic引擎的数据库中删除LiveView表后,WATCH卡住的问题。#10859 (tavplubix). - 修复了
ReplicatedMergeTree中的一个缺陷:某些针对OPTIMIZE查询的ALTER操作在某个副本变为非活跃后,可能会因等待该副本而卡住。#10849 (tavplubix). - 现在,如果
CONSTRAINT表达式中涉及的列被重命名,相应的约束也会更新。修复了 #10844。#10847 (alesapin) 。 - 修复 cache 字典中可能读取未初始化内存的问题。#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) 。 - 修复总计行消失的问题。如果查询包含带外部 WHERE 条件的 join 或子查询,总计行可能会被过滤掉。修复了 #10674。#10698 (Nikolai Kochetov) 。
- 修复 HTTP insert 的原子性。此修复解决了 #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) 。 - 修复了一个 bug:当表中有大量 parts 时,会导致并发 ALTER 操作被锁定。#10659 (alesapin).
- 修复了在表启动前 server 已关闭时,StorageBuffer 中
nullptr解引用的问题。#10641 (alexey-milovidov). - 修复了带有
HAVING子句的 distributed queries 在谓词优化 (enable_optimize_predicate_expression=1) 中的问题 (即需要在发起 server 上进行过滤时) :通过保留表达式顺序即可修复;此外,还强制聚合器使用列名而非索引。修复:#10613、#11413。#10621 (Azat Khuzhin) 。 - 修复了 optimize_skip_unused_shards 在 LowCardinality 下的问题。#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) 。 - 修复错误:
the BloomFilter false positive must be a double number between 0 and 1#10551。#10569 (Winter Zhang) 。 - 修复了当 ALIAS 列的默认表达式类型与列类型不同时,对其执行 SELECT 出现的问题。#10563 (Azat Khuzhin).
- 实现了 DateTime64 与 String 值的比较 (与 DateTime 相同) 。#10560 (Vasily Nemkov).
- 修复索引损坏问题;在某些情况下,将 compact parts 合并为另一个 compact part 后可能会出现该问题。 #10531 (Anton Popov).
- 默认禁用 GROUP BY 分片键优化 (
optimize_distributed_group_by_sharding_key已引入,但由于分片键分析存在一些复杂情况,因此默认关闭,一个简单的例子是在分片键中使用if) ,并修复其在 WITH ROLLUP/CUBE/TOTALS 场景下的问题。#10516 (Azat Khuzhin). - 修复:#10263 (在该 PR 之后,通过 INSERT 发送到 dist 的操作在每次 INSERT 时都会被延迟) 修复:#8756 (该 PR 会在同时满足以下所有条件时导致分布式发送失效 (我猜目前这种配置不太常见) :
internal_replication == false、多个本地分片 (会激活 hardlinking 代码) 以及distributed_storage_policy(会导致link(2)因EXDEV而失败) ) 。#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 中的元数据已被移除且不存在,则允许对 Replicated 表执行 DROP (使用 TestKeeper 进行测试且服务器已重启时也会出现这种情况) 。即使与 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) ,则在服务器日志中记录 warning 而不是 error。请注意,如果服务器无法监听列出的所有地址,仍会像以前一样拒绝启动。此修复见 #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/Zero 函数中,如果值未被完全解析,则返回 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 引擎配合使用。修复过早落盘的问题。修复当
kafka_num_consumers大于 topic 中的分区数量时的性能问题。#11599 (filimonov). - 改进
multiple_joins_rewriter_version=2的逻辑。修复 lambda 别名导致的未知列错误。#11587 (Artem Zuikov) 。 - 无法解析列声明列表时,会提供更清晰的异常消息。此更改关闭了 #10403。#11537 (alexey-milovidov) 。
- 优化了
enable_optimize_predicate_expression=1对 VIEW 的处理逻辑。#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指标的值。此前版本中,该值会在准备发送某些文件时被设置;但如果发生异常且仍有部分文件处于待处理状态,该值就会变为 0。现在,它表示 filesystem 中待处理文件的数量。#11220 (alexey-milovidov). - 新增对多词数据类型名称 (例如
DOUBLE PRECISION和CHAR VARYING) 的支持,以提升 SQL 兼容性。#11214 (Павел Потемкин). - 为某些数据类型增加同义词。#10856 (Павел Потемкин).
- 查询日志现默认默认启用。#11184 (Ivan Blinkov) 。
- 在 system.users 表中以及执行 SHOW CREATE USER 查询时,显示身份验证类型。#11080 (Vitaly Baranov) 。
- 在显式执行
DROP DATABASE时,删除Memory数据库引擎中的数据。修复了 #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) 。
- 在某些 parse 错误情况下,将 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。修复了 TEMPORARY 表中 CONSTRAINTS 被忽略的问题。此修复解决了 #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 formats 时,改进了
clickhouse-client的性能。在之前的版本中,计算 UTF-8 字符串的可见宽度可能会花费大量时间。此更改关闭了 #11323。#11323 (alexey-milovidov) 。 - 优化了带有
ORDER BY且LIMIT较小 (小于max_block_size) 的查询性能。#11171 (Albert Kidrachev) 。 - 添加运行时 CPU 检测,以选择并调度最佳的函数实现。新增对面向多个目标进行代码生成的支持。此项已关闭 #1017。#10058 (DimasKovas).
- 默认启用对
clickhouse二进制文件的mlock。这可以防止clickhouse可执行文件在高 IO 负载下被换出到磁盘。#11139 (alexey-milovidov). - 使使用
sum聚合函数且不带 GROUP BY 键的查询运行速度提高数倍。#10992 (alexey-milovidov). - 通过消除一些冗余的数据移动,优化了 radix sort (用于在
ORDER BY中处理简单键) 。#10981 (Arslan Gumerov) 。 - 在 MergeJoin 中对左表中较大的 parts 进行排序。将左侧块缓存在内存中。新增
partial_merge_join_left_table_buffer_bytes设置,用于控制左侧块缓冲区的大小。#10601 (Artem Zuikov). - 移除子查询中重复的 ORDER BY 和 DISTINCT;此优化可通过
optimize_duplicate_order_by_and_distinct启用 #10067 (Mikhail Malafeev) 。 - 此功能会消除 GROUP BY 部分中其他键上的函数,可通过
optimize_group_by_function_keys启用 #10051 (xPoSx). - 新增了一项优化:将算术运算从聚合函数中移出,可通过
optimize_arithmetic_operations_in_aggregate_functions启用 #10047 (Ruslan) 。 - 使用基于 Poco 而不是 curl 的 S3 HTTP 客户端。这将提升 S3 存储和表函数的性能,并降低其内存占用。#11230 (Pavel Kovalenko).
- 修复了与基于限制的重调度有关的 Kafka 性能问题;此前这些限制总是会被应用。#11149 (filimonov).
- 为 jemalloc 启用 percpu_arena:percpu (这将减少线程池导致的内存碎片) 。#11084 (Azat Khuzhin).
- 优化从 S3 HTTP 客户端读取响应时的内存占用。 #11561 (Pavel Kovalenko).
- 调整默认 Kafka 设置以提升性能。#11388 (filimonov) 。
Experimental 功能
- 新增数据类型
Point(Tuple(Float64, Float64)) 和Polygon(Array(Array(Tuple(Float64, Float64)))。#10678 (Alexey Ilyukhov) 。 - 新增
hasSubstr函数,可用于在数组中查找子序列。注意:该函数很可能会在不另行通知的情况下更名。#11071 (Ryad Zenine) 。 - 新增了 OpenCL 支持和 bitonic 排序算法,可用于对单列中的整数类型数据排序。构建时需要使用标志
-DENABLE_OPENCL=1。若要使用 bitonic 排序算法而非其他算法,需要将 Setting 选项special_sort设置为bitonic_sort,并确保 OpenCL 可用。此功能不会提升性能或带来其他改进,仅作为示例和演示用途提供。如果这一方向后续没有进一步发展,它很可能会在不久的将来被移除。#10232 (Ri) 。
构建、测试和打包改进
- 对 programs 和 utils 启用 clang-tidy。#10991 (alexey-milovidov) 。
- 移除对
tzdata的依赖:如果/usr/share/zoneinfo目录不存在,也不会报错。请注意,即使系统中未安装 tzdata,ClickHouse 中的所有时区也都能正常工作。#11827 (alexey-milovidov). - 新增了 MSan 和 UBSan 压力测试。请注意,我们已经有用于功能测试的 MSan 和 UBSan,而 “stress” 测试则是另一类测试。#10871 (alexey-milovidov) 。
- 在崩溃消息中打印编译器构建 ID。这能让我们更准确地判断发生崩溃的是哪个 binary。新增函数
buildId。#11824 (alexey-milovidov) 。 - 新增了一项测试,以确保在执行 FREEZE 查询后,变更操作仍能正常工作。#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) 。
- 如果 server 构建为调试版本或启用了 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) 。
- 为非常量 Polygon 增加性能测试。#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 Client 库添加 MSan 抑制规则。 #10800 (alexey-milovidov).
- GRPC make 未能找到 protobuf 文件,因此通过添加正确的链接修改了 make 文件。#10794 (mnkonkova) 。
- 为 base、utils 和 programs 启用额外警告 (
-Weverything) 。请注意,我们已经在大部分代码中启用了该警告。#10779 (alexey-milovidov). - 在 #10396 中,来自库的警告抑制被误声明为公开。#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 加 0) 。#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) 。
- 添加 fuzzers,并为集成到 oss-fuzz 做准备。#10546 (kyprizel).
- 修复 FreeBSD 的构建问题。#10150 (Ivan) 。
- 新增了一个基于 pytest 框架的查询测试构建。#10039 (Ivan) 。
ClickHouse 发布版本 v20.4
ClickHouse 发布版本 v20.4.8.99-稳定版本 2020-08-10
缺陷修复
- 修复了
parseDateTimeBestEffort函数在将 Unix 时间戳作为参数传入时出现的错误。修复了 #13362。#13441 (alexey-milovidov). - 修复了对包含 NaN 值的 Float 类型调用
uniqExact、topK、sumDistinct及类似聚合函数时,可能出现的性能偏低和结果略有偏差的问题。该问题还会在 debug 构建中触发断言。此修复解决了 #12491。#13254 (alexey-milovidov) 。 - 修复了当 cond 为 Nullable constexpr 且不是字面量 NULL 时的 if 函数问题。修复了 #12463。#13226 (alexey-milovidov) 。
- 修复了
arrayElement函数中的断言错误,该错误会在数组元素为 Nullable 且数组下标也为 Nullable 时发生。此修复解决了 #12172。#13224 (alexey-milovidov) 。 - 修复了带有函数的索引分析错误。在读取
MergeTree表时,这可能会导致错误地剪枝 parts。修复了 #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 中布隆过滤器索引在 const 表达式下的问题。#12659 (Winter Zhang) 。
- 修复了
StorageKafka在 broker 不可用等情况下出现的SIGSEGV。 #12658 (Azat Khuzhin). - 新增了对参数为
Array(UUID)的函数if的支持。此更改修复了 #11066。#12648 (alexey-milovidov) 。 - 修复了使用 cache 布局的外部字典中的竞态条件,该问题可能导致服务器崩溃。#12566 (alesapin).
- 在 DROP TABLE 时,会删除分布式表的数据 (来自异步 INSERT 的块) 。#12556 (Azat Khuzhin) 。
- 修复了一个 bug:当
enable_mixed_granularity_parts=1时,执行ALTER DELETE查询后,旧的 parts 会损坏。修复了 #12536。#12543 (alesapin) 。 - 改进了函数
in在参数个数无效时的异常信息。#12529 (Anton Popov) 。 - 修复了读取 compact parts 时的性能问题。#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) 或系统表中的“索引”列过滤数据的表达式时出现 “bad cast” 异常,例如在查询system.tables时按 database 名称过滤,且该表达式返回Nullable类型时。此修复对应 #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) 。 - 修复了 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” 文件的处理方式。在之前的版本中,如果 server 在未正常关闭的情况下被强制终止,且存在另一个进程使用了与此前运行的 server 相同的 pid,server 可能会拒绝启动。此外,即使另一个 server 仍在运行,如果 server 启动失败,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) 。 - 修复了函数
defaultValueOfArgumentType在处理LowCardinality类型时出现的错误: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) 。
- 修复了 server 启动时日志消息中的错误设置项名称。#11997 (alexey-milovidov) 。
- 修复了
Values格式中Query parameter was not set的问题。修复 #11918。#11936 (tavplubix)。 - 在查询 (参数化查询) 中保留用于替换的别名。这修复了 #11914。#11916 (alexey-milovidov) 。
- 修复了将存储策略从默认策略更改后未发生 moves 的问题。 #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) 。
发布版本 v20.4.6.53-稳定版本 2020-06-25
缺陷修复
- 修复了在 prewhere 条件中使用
Nullable列导致的罕见崩溃。此修复是 #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 *, xyz.*这类查询的异常行为:这类查询原本会执行成功,但按预期应当报错。#11753 (hexiaoting). - 现在,在修改元数据时,副本拉取操作会被取消。#11744 (alesapin) 。
- 修复了 Values 输入格式中复杂字面量类型推导错误导致的 LOGICAL_ERROR。#11732 (tavplubix).
- 修复
ORDER BY ... WITH FILL在常量列上的问题。#11697 (Anton Popov) 。 - 与 XDBC bridge 通信时传递正确的超时时间。最近在检查 bridge 存活状态和接收元信息时,超时时间未得到正确处理。#11690 (alexey-milovidov).
- 修复了将
LIMIT n WITH TIES与包含别名的ORDER BY语句一起使用时的问题。#11689 (Anton Popov) 。 - 修复了一个会导致
system.mutations状态异常的错误。该错误可能会显示整个变更已完成,但服务器的复制队列中仍有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) 。 - 修复了
clickhouse-client在 exception.code() % 256 = 0 时退出码错误的问题。#11601 (filimonov) 。 - 修复了 server 启动时日志消息 “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-稳定版本 2020-06-10
缺陷修复
- 修复了错误
Data compressed with different methods:如果启用了min_bytes_to_use_direct_io,且 PREWHERE 生效,并使用 SAMPLE 或较多线程时,可能会发生此错误。此修复解决了 #11539。#11540 (alexey-milovidov) 。 - 修复编解码器返回的压缩后大小。#11448 (Nikolai Kochetov) 。
- 修复了当某列的压缩编解码器包含非字面量参数时服务器崩溃的问题。修复了 #11365。#11431 (alesapin) 。
- 修复了 pointInPolygon 在点为 NaN 时的问题。修复 #11375。#11421 (Alexey Ilyukhov)。
- 修复了在 MergeTree 关闭过程中,如果表未成功创建,可能读取未初始化内存的问题。#11420 (alexey-milovidov).
- 修复了
geohashesInBox在参数超出纬度/经度取值范围时的问题。#11403 (Vasily Nemkov). - 修复带有外部排序和 limit 的查询可能出现的
Pipeline stuck错误。修复 #11359。#11366 (Nikolai Kochetov) 。 - 在 ReplicatedMergeTree 中发送 parts 时,去除冗余锁。#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 字典可能会返回默认值而不是正常值。该问题仅影响字符串字段。#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).
- 修复了对 engine=Kafka 的表执行 DROP 时 (或在服务器重启期间) 有时会卡住的问题。#11145 (filimonov) 。
- 修复了简单查询中过度预留线程的问题 (这是用于减少线程数量的一项优化,但在管道相关变更后部分失效) 。#11114 (Azat Khuzhin).
- 修复了带有
HAVING子句的分布式查询在谓词优化 (enable_optimize_predicate_expression=1) 中的问题 (即需要在发起 server 上进行过滤时) :通过保留表达式顺序即可修复;同时还强制聚合器使用列名而非索引。修复:#10613、#11413。#10621 (Azat Khuzhin) 。
构建/测试/打包改进
ClickHouse 发布版本 v20.4.4.18-稳定版本 2020-05-26
发布版本 v20.4.3.16-稳定版本 2020-05-23
缺陷修复
- 如果未完成任何最终化操作,则移除变更最终化任务的日志记录。#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). - 修复了无法执行多个
ALTER RENAME操作的问题,例如a TO b, c TO a。#10895 (alesapin). - 修复了一个可能发生的竞争条件:当多个线程同时获取同一列的聚合函数状态结果时,可能会触发该问题。只有在从使用
Memory引擎、且存储了quantile*函数AggregateFunction状态的表中读取数据时,调用finalizeAggregation函数才会出现这种情况。#10890 (Nikolai Kochetov) 。 - 修复了分布式表中元组的向后兼容问题。#10889 (Anton Popov) 。
- 修复了
StringHashTable中在此类键不存在时会触发的SIGSEGV问题。#10870 (Azat Khuzhin) 。 - 修复了从使用
Atomic引擎的数据库中删除LiveView表后,WATCH卡住的问题。#10859 (tavplubix) 。 - 修复了
ReplicatedMergeTree中的一个 bug:在某个副本变为非活动状态后,某些针对OPTIMIZE查询的ALTER可能会因等待该副本而一直挂起。#10849 (tavplubix). - 如果参与
CONSTRAINT表达式的列被重命名,相关约束现在也会随之更新。修复了 #10844。#10847 (alesapin)。 - 已修复 cache 字典中可能读取未初始化内存的问题。#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) 。 - 修复了
-OrNull和-OrDefault组合器与-State结合使用时的问题。 #10741 (hcz). - 修复了函数
h3EdgeAngle中可能的缓冲区溢出问题。#10711 (alexey-milovidov) 。 - 修复了一个 bug:当表中有大量 parts 时,会导致并发 ALTER 操作被锁定。#10659 (alesapin).
- 修复了在表启动前 server 已关闭时
StorageBuffer中nullptr被解引用的问题。#10641 (alexey-milovidov) 。 - 修复了
LowCardinality场景下optimize_skip_unused_shards的问题。#10611 (Azat Khuzhin) 。 - 修复了同步变更的条件变量处理问题。在某些情况下,发往该条件变量的信号可能会丢失。 #10588 (Vladimir Chebotarev).
- 修复了在
loadStoredObject()完成前调用createDictionary()可能引发的崩溃问题。#10587 (Vitaly Baranov) 。 - 修复了在
SELECTALIAS列时默认表达式类型与列类型不一致的问题。#10563 (Azat Khuzhin). - 支持了 DateTime64 与 String 值之间的比较。#10560 (Vasily Nemkov) 。
- 默认禁用
GROUP BY的 sharding_key 优化 (由于对 sharding_key 的分析存在一些棘手情况,例如 sharding key 中包含if,因此引入的optimize_distributed_group_by_sharding_key默认保持关闭) ,并修复了其在WITH ROLLUP/CUBE/TOTALS中的问题。#10516 (Azat Khuzhin) 。 - 已修复 #10263。#10486 (Azat Khuzhin) 。
- 新增了关于
max_rows_to_sort设置的测试。#10268 (alexey-milovidov) 。 - 为创建 bloom filter 索引增加了向后兼容性。#10551。#10569 (Winter Zhang) 。
发布版本 v20.4.2.9,2020-05-12
不兼容的变更
- 系统表 (例如 system.query_log、system.trace_log、system.metric_log) 对大小小于 10 MiB 的 parts 使用 compact 数据分区片段格式。compact 数据分区片段格式自 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) - 新增了对字典中自定义设置部分的支持。同时修复了问题 #2829。#10137 (Artem Streltsov)
- 在 DDL 查询中的
CREATE DICTIONARY中新增了对自定义设置的支持 #10465 (Artem Streltsov) - 添加了一个简单的服务器级内存分析器,当服务器内存使用量高于下一个分配阈值时,会收集分配上下文。#10444 (alexey-milovidov)
- 添加设置
always_fetch_merged_part,限制副本自行合并 parts,并始终优先从其他副本拉取。 #10379 (alesapin) - 新增
JSONExtractKeysAndValuesRaw函数,用于从 JSON 对象中提取原始数据 #10378 (hcz) - 将操作系统的内存使用情况添加到
system.asynchronous_metrics。#10361 (alexey-milovidov) - 为函数
least和greatest添加了泛型变体。现在,它们支持任意数量、任意类型的参数。这修复了 #4767 #10318 (alexey-milovidov) - 现在,ClickHouse 在自身侧控制字典源的超时。为 cache 字典配置新增了两个设置:
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 表查询 Distributed 表的能力 (无需
distributed_group_by_no_merge) … #9923 (Azat Khuzhin) - 新增函数
arrayReduceInRanges,用于对给定范围内的数组元素进行聚合。#9598 (hcz) - 为 Prometheus 导出器添加字典状态。#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)
Experimental 功能
- 新增实验性数据库引擎 Atomic。支持非阻塞的
DROP和RENAME TABLE查询,以及原子的EXCHANGE TABLES t1 AND t2查询 #7512 (tavplubix) - 初步支持基于 S3 的 ReplicatedMergeTree (目前实现方式还不够理想) #10126 (Pavel Kovalenko)
缺陷修复
- 修复了当
MATERIALIZED VIEW的内部查询包含依赖表时,标量结果不正确的问题 #10603 (Nikolai Kochetov) - 修复了一个 bug:当
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) - 修复索引损坏问题;在某些情况下,将 compact parts 合并为另一个 compact part 后,可能会出现该问题。#10531 (Anton Popov)
- 修复了一种情况:变更已处理完所有 parts,但仍卡在
is_done=0。 #10526 (alesapin) - 修复了带有相对 UTC 小数偏移时区在 Unix 纪元起始处的溢出问题。修复 #9335。#10513 (alexey-milovidov)
- 改进了输入格式的诊断信息。修复了 #10204 #10418 (tavplubix)
- 修复
simpleLinearRegression()在处理大整数时出现的数值溢出问题 #10474 (hcz) - 修复 Distributed 关闭时释放后使用的问题,避免等待发送完所有批次 #10491 (Azat Khuzhin)
- 向 clickhouse-server Docker 镜像中添加 CA 证书 #10476 (filimonov)
- 修复了一个罕见的死循环问题,该问题可能在使用
addressToLine函数或 AggregateFunctionState 列时发生。#10466 (Alexander Kuzmenkov) - 处理分布式查询期间的 ZooKeeper “无节点”错误 #10050 (Daniel Chen)
- 修复了在修改列默认值后,服务器无法附加表的问题。 #10441 (alesapin)
- 对于 ALIAS 列,默认表达式的类型会被隐式转换为列类型 #10563 (Azat Khuzhin)
- 如果
ATTACH DATABASE失败,不要删除元数据目录 #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时可能发生的段错误 (该设置由 #10131 在 20.3.7.46 中引入) 。#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) 中的错误行为。修复 #7202 #10369 (alexey-milovidov)
- 避免
dictIsIn函数中陷入无限循环。修复 #515 #10365 (alexey-milovidov) - 默认禁用 GROUP BY sharding_key 优化,并修复 WITH ROLLUP/CUBE/TOTALS 下的相关问题 #10516 (Azat Khuzhin)
- 检查 parts 时会检查错误代码;如果错误类似于 “内存不足”,则不要将该 part 标记为损坏。修复了 #6269 #10364 (alexey-milovidov)
- 在系统表中显示未加载字典的信息。#10234 (Vitaly Baranov)
- 如果在表启动前 server 已关闭,修复 StorageBuffer 中的 nullptr 解引用问题。#10641 (alexey-milovidov)
- 修复了
ReplicatedMergeTree中DROP与OPTIMIZE的竞态问题。如果存在并发的OPTIMIZE查询,DROP可能会在 ZooKeeper 的副本路径中遗留一些垃圾数据。#10312 (tavplubix) - 修复在查询中混用逗号和具名 JOIN 时出现的 ‘Logical error: CROSS JOIN has expressions’ 错误。修复 #9910 #10311 (Artem Zuikov)
- 修复了使用
max_bytes_before_external_group_by的查询相关问题。#10302 (Artem Zuikov) - 修复了在某些情况下限制 parser 最大递归深度的问题。此修复解决了 #10283。该修复可能会带来轻微的不兼容性:通过 clickhouse-client 发起的超长且层级很深的查询可能无法执行,你需要相应调整设置
max_query_size和max_parser_depth。#10295 (alexey-milovidov) - 允许使用
count(*)配合多个 JOIN。修复了 #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) - 修复了一个 bug:当用户尝试对使用 ENGINE = Replicated* 的表执行 ALTER UPDATE/DELETE 时,ClickHouse 会抛出 “Unknown function lambda.” 错误。现在,对非确定性函数的检查已能正确处理 lambda 表达式。#10237 (Alexander Kazakov)
- 修复了 StorageSystemTables 中一个较为少见的段错误:在使用 Lazy 引擎的 database 上运行 SELECT … FROM system.tables 时会触发该问题。 #10209 (Alexander Kazakov)
- 修复了一个可能导致查询无限执行的问题:从
system.numbers或system.zeros这类无限源读取时,查询本应在 LIMIT 处停止。#10206 (Nikolai Kochetov) - 修复了 Date 类型的 “generateRandom” 函数。此修复解决了 #9973。修复了一个边界情况:当将年份为 2106 的日期插入采用旧式分区方式的 MergeTree 表时,分区名称却被标记为 1970 年。#10218 (alexey-milovidov)
- 如果视图的表定义与 SELECT 查询不一致,则进行类型转换。这修复了 #10180 和 #10022 #10217 (alexey-milovidov)
- 修复了
parseDateTimeBestEffort在处理 RFC-2822 格式字符串时,若星期几为星期二或星期四会出错的问题。此修复对应 #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设置放宽在变更中使用非确定性函数限制的功能。#10186 (filimonov) - 修复对字典误调用
DROP TABLE的问题 #10165 (Azat Khuzhin) - 向 Distributed 表执行
INSERT时,如果结构不匹配,则会转换块 #10135 (Azat Khuzhin) - 当插入的块因分区键而被拆分为多个 parts 时,行数被错误地记录为所有 parts 的总和。#10138 (alexey-milovidov)
- 为 MySQL Database Engine 增加了一些参数检查,并支持标识符类型的参数 #10077 (Winter Zhang)
- 修复创建新副本时对
index_granularity_bytes的错误校验。修复 #10098。#10121 (alesapin) - 修复了表包含跳过索引时
CHECK TABLE查询中的缺陷。#10068 (alesapin) - 修复嵌套表仅有一个分片时的 Distributed-over-Distributed 问题 #9997 (Azat Khuzhin)
- 修复包含
JOIN和UNION ALL的查询可能出现的行丢失问题。修复了 #9826、#10113。… #10099 (Nikolai Kochetov) - 修复了将本地 ClickHouse server 用作源时字典中的一个错误。如果字典和源中的类型不兼容,可能会导致内存损坏。#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) - 修复了启动时包含 materialized view 的数据库 attach 失败时发生的死锁问题 #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逻辑问题,该问题可能导致已附加的分片被自动删除,并新增了几个测试 #9410 (Vladimir Chebotarev) - 修复了服务器启动时
ON CLUSTERDDL 查询卡死的问题。#9927 (Gagan Arneja) - 修复了一个问题:在针对某些数据库的查询处理过程中的某个阶段,未能获取到所需的表。修复 #9699。#9949 (achulkov2)
- 修复了
JOIN与TOTALS同时出现时的’块中找不到列’错误。修复 #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_offsetstopic 没有足够的副本可用,broker 可能会拒绝此次提交 #9884 (filimonov) - 修复在
WHERE中使用底层表虚拟列时 Distributed engine 的行为问题 #9847 (Azat Khuzhin) - 修复了某些情况下未正确使用函数参数 timezone 的问题。#9574 (Vasily Nemkov)
- 修复了在分布式表上查询同时包含 PREWHERE 和 WHERE,且
SET distributed_product_mode = 'local'时出现的“Different expressions with the same alias”错误。#9871 (Artem Zuikov) - 修复了复合主键表在执行变更时内存占用过高的问题。此修复解决了 #9850。#9860 (alesapin)
- 修复根据设置
allow_introspection_functions计算内部信息函数授权时的问题。#9840 (Vitaly Baranov) - 修复启用和未启用处理器时的 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且用于 key 的 expression 无法转换为其 field 类型时,server 崩溃的问题 #9804 (Azat Khuzhin) - 修复
splitByString对空字符串的处理问题。#9767 (hcz) - 修复 compact parts 上失效的
ALTER TABLE DELETE COLUMN查询。#9779 (alesapin) - 修复了通过 HTTP 执行查询且使用处理器管道时缺少
rows_before_limit_at_least的问题。修复 #9730 #9757 (Nikolai Kochetov) - 修复
ALTER查询 (变更) 中过高的内存占用。此修复解决了 #9533 和 #9670。#9754 (alesapin) - 修复可能持续出现的“Cannot schedule a task”错误。#9154 (Azat Khuzhin)
- 修复了外部字典 DDL 中反引号引用的问题。修复了 #9619。#9734 (alesapin)
- 修复了
text_log中的数据竞争问题。这并不对应任何实际的 bug。#9726 (alexey-milovidov) - 修复了复制中的一个错误:如果用户在上一版本中执行过变更,复制将无法正常工作。此修复解决了 #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) - 允许对使用内部复制的分布式表执行
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)
- 为 distributed/buffer 调度池新增任务/内存指标 #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)
- 当指定的类型相同时,允许在非修改数据模式下更改列。#10382 (Vladimir Chebotarev)
- 按分片键执行
GROUP BY时自动启用distributed_group_by_no_merge(如果设置了optimize_skip_unused_shards) #10341 (Azat Khuzhin) - 优化带有 GROUP BY sharding_key 的 Distributed 表上的 LIMIT/LIMIT BY/ORDER BY 查询 #10373 (Azat Khuzhin)
- 新增设置
max_server_memory_usage,用于限制服务器的总内存使用量。指标MemoryTracking现在计算时不再存在偏差。设置max_memory_usage_for_all_queries现已废弃,不再生效。此更改修复了 #10293。#10362 (alexey-milovidov) - 新增配置选项
system_tables_lazy_load。如果将其设为 false,则包含日志的系统表会在服务器启动时加载。Alexander Burmak、Svyatoslav Tkhon Il Pak、#9642 #10359 (alexey-milovidov) - 分布式发送改用后台线程池 (background_schedule_pool_size) #10263 (Azat Khuzhin)
- 使用后台线程池执行后台缓冲区刷新。#10315 (Azat Khuzhin)
- 支持一种删除未完整写入的 parts 的特殊情况处理。此项修复了 #9940。#10221 (alexey-milovidov)
- 使用 isInjective() 代替手动维护此类函数列表,以优化 GROUP BY。#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 查询中,对于不带参数的字典,其 layout 类型可以省略圆括号直接指定。修复了 #10057。#10064 (alesapin)
- 新增了在文件路径中使用带前导零的数字范围的功能 #9989 (Olga Khvostikova)
- 优化了 CROSS JOIN 的内存占用。#10029 (Artem Zuikov)
- 在获取远程表结构且设置了 skip_unavailable_shards 时,会尝试连接到集群中的所有分片。#7278 (nvartolomei)
- 在
system.tables表中新增total_rows/total_bytes。#9919 (Azat Khuzhin) - 系统日志表现已默认使用多态 parts。#9905 (Anton Popov)
- 在 system.settings/merge_tree_settings 中添加 type 列 #9909 (Azat Khuzhin)
- 在 server 启动时尽可能早地检测可用的 CPU 指令集。 #9888 (alexey-milovidov)
- 从变更中移除
ORDER BY阶段,因为我们是在单个线程中从单个有序分片读取数据。同时新增检查,以确保变更中的行按排序键排序,且这一顺序不会被破坏。#9886 (alesapin) - 支持在左操作数为 FixedString 时使用 LIKE 运算符。这有助于更好地支持 TPC-DS 查询。#9890 (alexey-milovidov)
- 新增
force_optimize_skip_unused_shards_no_nested,用于对嵌套的分布式表禁用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)
- 如果设置
set 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列。该列包含 trace 事件的高精度时间戳,可用于构建线程 profile 的时间线 (“火焰图”) 。#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) - 当 materialized view 的目标表支持时,启用其并行插入。#10052 (vxider)
- 提升了单调函数场景下的索引分析性能。#9607#10026 (Anton Popov)
- 使用 SSE2 或 SSE4.2 SIMD 内在函数来加速布隆过滤器中的标记化。#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 transform 中为多个流使用单个行计数器。这有助于避免在带有
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环境变量,用于排查在启用 Address sanitizer 的 CI 压力测试中出现的错误。#10440 (Nikita Mikhaylov) - 为 clang 构建启用 ThinLTO (Experimental) 。#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)
- 为 materialized view 的并行 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)
- 初步支持基于 Distributed 的 live view 表 #10179 (vzakaznikov)
- 修复 MergeTreeIndexFullText 中的 MSan (误报) 报告。该问题最早出现在 #9968。#10801 (alexey-milovidov)
- clickhouse-docker-util #10151 (filimonov)
- 将 pdqsort 更新到较新版本 #10171 (Ivan)
- 将 libdivide 更新至 v3.0 #10169 (Ivan)
- 增加对启用多态 parts 的检查。#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)
- 回移脚本现已支持
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
缺陷修复
- 修复了
sharding_key(以及类似场景,例如函数上下文被永久存储时) 中的 dictGet 问题。#16205 (Azat Khuzhin). - 修复了当查询包含
WHERE、PREWHERE和GLOBAL IN时,从Distributed表查询会错误返回空结果的问题。修复了 #15792。#15933 (Nikolai Kochetov). - 修复了
TSV/CSVWithNames格式中表头缺失或多出的错误。此修复解决了 #12504。#13343 (Azat Khuzhin).
发布版本 v20.3.20.6-lts,2020-10-09
缺陷修复
- 在执行
MOVE或REPLACE PARTITION后,或者在少数情况下执行DETACH或DROP PARTITION后,变更可能会因等待某个不存在的数据分片而卡住。现已修复。#15724, #15537 (tavplubix). - 修复了对同一
MySQLengine 表包含大量子查询时查询卡住的问题。此前,如果一个查询中针对同一MySQL表的子查询超过 16 个,查询就会一直卡住。#15299 (Anton Popov). - 修复了当查询对 Merge 表执行 JOIN 时,GROUP BY 中出现“Unknown identifier”的问题。#15242 (Artem Zuikov).
- 修复了当子查询包含 finalizeAggregation function 时,谓词下推无法生效的问题。修复了 #14847。#14937 (filimonov).
- 并发执行
ALTER ... REPLACE/MOVE PARTITION ...查询可能导致死锁。现已修复。#13626 (tavplubix).
发布版本 v20.3.19.4-lts,2020-09-18
缺陷修复
- 修复了
SELECT查询中的一个罕见错误:当被查询的列带有依赖于另一列的DEFAULT表达式,而另一列同样带有DEFAULT、未出现在SELECT查询中且磁盘上也不存在时,就会触发该错误。部分修复了 #14531。#14845 (alesapin) 。 - 修复了一个 bug:当
ALTER UPDATE变更在赋值表达式中使用 Nullable 列和常量值 (如UPDATE x = 42) 时,可能导致列值错误或发生段错误。修复了 #13634、#14045。#14646 (alesapin) 。 - 修复了由于结果列的小数标度错误而导致的 Decimal 乘法结果错误问题。#14603 (Artem Zuikov) 。
改进
- compact parts 现已支持自定义编解码器。#12183 (Anton Popov).
ClickHouse 发布版本 v20.3.18.10-lts,2020-09-08
缺陷修复
- 如果异常发生在
PipelineExecutor自身内部,则停止查询执行。这可以避免极少数情况下查询挂起的问题。此项为 #14334 的后续修复。#14402 (Nikolai Kochetov). - 修复了缓存字典有时会返回默认值,而不是源中实际存在的值的问题。#13624 (Nikita Mikhaylov).
- 修复了当数据库名或表名包含点号时,无法从 users.xml 解析行策略的问题。此修复解决了 #5779 和 #12527。#13199 (Vitaly Baranov).
- 修复了 CAST(Nullable(String), Enum())。#12745 (Azat Khuzhin).
- 修复了
text_log中的数据竞争问题。它不会对应任何实际缺陷。#9726 (alexey-milovidov).
改进
- 修复长查询返回错误信息不正确的问题。对于正确的查询,此前可能会收到
Max query size exceeded之外的语法错误。 #13928 (Nikolai Kochetov). - 在 parseDateTimeBestEffortOrNull/Zero 函数中,当值未被完全解析时,返回 NULL/0。此修复解决了 #7876。 #11653 (alexey-milovidov).
性能改进
- 对使用 LowCardinality 的超短查询做了小幅优化。#14129 (Anton Popov).
构建/测试/打包改进
- 修复了迁移到 clang-10 后在 HashTable 中出现的 UBSan 报告 (对 nullptr 加 0) 。#10638 (alexey-milovidov) 。
ClickHouse 发布版本 v20.3.17.173-lts,2020-08-15
缺陷修复
- 修复了在 JOIN 与 StorageMerge 一起使用并设置
set enable_optimize_predicate_expression=1时发生崩溃的问题。#13679 (Artem Zuikov). - 修复了比较包含
NULL元素的元组时返回类型无效的问题。修复 #12461。#13420 (Nikolai Kochetov). - 修复了包含常量列且
ORDER BY为主键前缀的查询问题。#13396 (Anton Popov). - 在 roundUpToPowerOfTwoOrZero() 中,对于设置了 MSB 的数字,返回其原始值。#13234 (Azat Khuzhin).
ClickHouse 发布版本 v20.3.16.165-lts 2020-08-10
缺陷修复
- 修复了将 Unix 时间戳作为参数传入
parseDateTimeBestEffort函数时出现的错误。该修复解决了 #13362。#13441 (alexey-milovidov) 。 - 修复了在带有
NaN值的 Float 类型上调用uniqExact、topK、sumDistinct及类似聚合函数时,可能出现的性能较低和结果略有偏差的问题。该问题还会在调试构建中触发断言。此修复解决了 #12491。#13254 (alexey-milovidov) 。 - 修复了 if 函数在 cond 为非字面量 NULL 的 Nullable constexpr 时的问题。修复了 #12463。#13226 (alexey-milovidov).
- 修复了
arrayElement函数中的断言错误,该问题发生在数组元素为 Nullable 且数组下标也为 Nullable 时。此修复对应 #12172。#13224 (alexey-milovidov). - 修复了从本地副本执行查询时,对线程数量施加不必要限制的问题。#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 中布隆过滤器索引在使用 const 表达式时的问题。#12659 (Winter Zhang) 。
- 修复了 StorageKafka 在 broker 不可用等情况下发生的 SIGSEGV。 #12658 (Azat Khuzhin).
- 修复了使用 cache 布局的外部字典中的竞态条件,该问题可能导致服务器崩溃。#12566 (alesapin) 。
- 修复了一个 bug:在
enable_mixed_granularity_parts=1时,执行ALTER DELETE查询后会导致旧 parts 损坏。修复了 #12536。#12543 (alesapin). - 改进了当函数
in的参数数量无效时抛出的异常信息。#12529 (Anton Popov). - 修复了读取 compact parts 时的性能问题。#12492 (Anton Popov) 。
- 在启用
text_log时修复了死锁问题。#12452 (alexey-milovidov) 。 - 修复了 StorageMerge 中可能出现的段错误。关闭 #12054。#12401 (tavplubix)。
- 修复了带有
-State和Nullable参数的聚合函数中TOTALS/ROLLUP/CUBE的问题。此修复解决了 #12163。#12376 (alexey-milovidov). - 修复了
WITH FILL修饰符中列的顺序。此前未遵循ORDER BY语句中的列顺序。#12306 (Anton Popov). - 避免在存在按虚拟列 (例如
Merge表中的_table) 或系统表中的“索引”列过滤数据的表达式时出现 “bad cast” 异常;例如,在查询system.tables时按数据库名称过滤,且该表达式返回Nullable类型。此修复解决了 #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). - 修复了当 UInt8 值不为 0 或 1 时逻辑函数的问题。#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) 。 - 避免附加到系统日志 (system.query_log、metric_log 等) 或
engine=Buffer底层表的、带有 joins 或 subqueries 的 materialized views 出现There is no query异常。#12120 (filimonov). - 修复了因线程总数限制错误导致的带有
UNION的SELECT查询性能问题。修复了 #12030。#12103 (Nikolai Kochetov)。 - 修复了
-StateResample组合器引发的段错误。#12092 (Anton Popov). - 修复了从
VIEW查询时对线程数的不必要限制。修复了 #11937。#12085 (Nikolai Kochetov)。 - 修复了在
PREWHERE中使用错误类型时可能导致的崩溃。修复 #12053、#12060。#12060 (Nikolai Kochetov) 。 - 修复了函数
defaultValueOfArgumentType在使用LowCardinality类型时出现的错误:Expected single dictionary argument for function。修复 #11808。#12056 (Nikolai Kochetov) 。 - 修复了高阶函数在使用
Tuple(LowCardinality)参数时出现的错误Cannot capture column。修复 #9766。#12055 (Nikolai Kochetov) 。 - 在加载数据库时并行解析表的元数据。这修复了表数量较多时服务器启动缓慢的问题。#12045 (tavplubix).
- 使
topK聚合函数在 枚举 类型上返回 枚举 值。这修复了 #3740。#12043 (alexey-milovidov) 。 - 修复了约束为常量表达式时的约束检查问题。此修复解决了 #11360。#12042 (alexey-milovidov) 。
- 修复了将元组与
Nullable列进行错误比较的问题。修复了 #11985。#12039 (Nikolai Kochetov) 。 - 修复了调用函数
if时,传入不同长度的FixedString类型参数可能导致结果错误或崩溃的问题。此修复解决了 #11362。#12021 (alexey-milovidov) 。 - 如果查询中唯一返回的 expression 是函数
neighbor,且该函数以偏移量-9223372036854775808调用,则结果可能为空。此修复解决了 #11367。#12019 (alexey-milovidov) 。 - 修复了 generateRandom 中可能导致崩溃的数组大小潜在溢出问题。此项修复对应 #11371。#12013 (alexey-milovidov) 。
- 修复了潜在的浮点异常问题。已关闭 #11378。#12005 (alexey-milovidov) 。
- 修复了 server 启动时日志消息中错误的设置名称。#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) 。
- 修复了
LIMIT n WITH TIES与包含别名的ORDER BY语句配合使用时的问题。#11689 (Anton Popov) 。 - 修复了 cache 字典中可能读取未初始化内存的问题。#10834 (alexey-milovidov) 。
性能改进
- 使用字面量时,IN 运算符不会使用索引;这是在 v19.3 前后引入的一项性能回退。此修复解决了 #10574。#12062 (nvartolomei) 。
发布版本 v20.3.12.112-lts 2020-06-25
缺陷修复
- 修复了在 prewhere 条件中使用
Nullable列时偶发的崩溃问题。此修复延续了 #11608。#11869 (Nikolai Kochetov) 。 - 不允许在高阶函数中使用 arrayJoin。此前这会导致协议同步异常。此修复已关闭 #3933。#11846 (alexey-milovidov).
- 修复查询使用线程过多的问题。#11788 (Nikolai Kochetov) 。
- 修复了诸如
SELECT *, xyz.*这类查询的异常行为:这些查询原本应报错,却被成功执行了。#11753 (hexiaoting). - 现在,在修改元数据期间,副本拉取操作会被取消。#11744 (alesapin) 。
- 修复了 Values 输入格式中因复杂字面量类型推断错误导致的 LOGICAL_ERROR。#11732 (tavplubix).
- 修复了在常量列上使用
ORDER BY ... WITH FILL时的问题。#11697 (Anton Popov) 。 - 与 XDBC bridge 通信时传递正确的超时设置。最近在检查 bridge 存活状态和接收元信息时,超时设置未生效。 #11690 (alexey-milovidov).
- 修复了一个会导致
system.mutations状态不正确的错误。它可能显示整个变更已完成,但服务器的复制队列中仍有MUTATE_PARTtask,并会尝试执行它们。此修复解决了 #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). - 修复了
clickhouse-client在 exception.code() % 256 = 0 时退出码错误的问题。 #11601 (filimonov). - 修复了 server 启动时,日志消息 “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) 。 - 修复了在别名可能覆盖带限定符列名时,distributed queries 返回错误结果的问题。修复了 #9672 #9714。#9972 (Artem Zuikov).
ClickHouse 发布版本 v20.3.11.97-lts 2020-06-10
新特性
- 现在,字典源的超时由 ClickHouse 端控制。为 cache 字典配置新增了两项设置:
strict_max_lifetime_seconds,默认值为max_lifetime;以及query_wait_timeout_milliseconds,默认值为一分钟。第一项设置与allow_read_expired_keys搭配使用时也很有用 (可禁止读取过期时间过长的键) 。#10337 (Nikita Mikhaylov).
缺陷修复
- 修复了在启用
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). - 修复了带有外部排序和 limit 的查询中可能出现的
Pipeline stuckerror。修复了 #11359。#11366 (Nikolai Kochetov) 。 - 在 ReplicatedMergeTree 中发送 parts 时,移除多余的锁。#11354 (alesapin) 。
- 修复了 clickhouse-client 在多行模式下对
\G(纵向输出) 的支持。此修复解决了 #9933。#11350 (alexey-milovidov) 。 - 修复直接从 StorageJoin 执行 select (不使用 JOIN) 时发生的崩溃问题以及错误的可空性。#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) 。 - 修复了一个 bug:当查询速度估算不准确时,如果查询因
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 format 格式的畸形数据时发生崩溃的问题。此修复解决了 #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 glob 匹配在键数量超过 1000 且某些后端上可能失败的问题。#11179 (Vladimir Chebotarev) 。
- 如果数据跳过索引依赖于会在后台合并过程中被修改的列 (适用于 SummingMergeTree、AggregatingMergeTree 以及 TTL GROUP BY) ,就会导致计算不正确。此问题已通过将索引计算移到合并之后来修复,从而使索引基于合并后的数据进行计算。#11162 (Azat Khuzhin).
- 修复了简单查询时预留线程过多的问题 (用于减少线程数量的优化在管道变更后部分失效) 。#11114 (Azat Khuzhin) 。
- 修复了带有
HAVING子句的分布式查询在谓词优化 (enable_optimize_predicate_expression=1) 中的问题 (即需要在发起端服务器上进行过滤时) :通过保留表达式的顺序即可修复;同时还强制聚合器使用列名而不是索引。修复:#10613、#11413。#10621 (Azat Khuzhin) 。 - 引入提交重试逻辑,以降低在极少数偏移量提交失败的情况下从 Kafka 获取重复数据的可能性。#9884 (filimonov) 。
性能改进
- 对每次调用任何读取外部字典的函数,只获取一次字典并检查一次访问权限。#10928 (Vitaly Baranov).
构建/测试/打包改进
ClickHouse 发布版本 v20.3.10.75-lts 2020-05-23
缺陷修复
- 若未完成任何最终化操作,则移除变更最终化任务的日志输出。#11109 (alesapin).
- 修复了
parseDateTime64BestEffort参数解析相关的问题。#11038 (Vasily Nemkov) 。 - 修复了方法
getRawData()返回的原始数据大小不正确的问题。#10964 (Igr). - 修复了 20.1 及更早版本之间在双层聚合上的兼容性问题。当发起节点和远程节点使用不同版本的 ClickHouse,且
GROUP BY结果集较大,并且聚合是基于单个Stringfield 执行时,就会出现这种兼容性问题。这会导致结果中同一个键对应多行未 merge 的行。#10952 (alexey-milovidov). - 修复了
Distributed表中元组的向后兼容性问题。#10889 (Anton Popov) 。 - 修复了
StringHashTable中在该键不存在时出现的SIGSEGV。 #10870 (Azat Khuzhin) 。 - 修复了
ReplicatedMergeTree中的一个 bug:在某个副本变为非活动状态后,某些针对OPTIMIZE查询的ALTER可能会因一直等待该副本而卡住。#10849 (tavplubix). - 修复了
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) 。 - 修复了组合器
-OrNull和-OrDefault与-State结合使用时的问题。#10741 (hcz) 。 - 修复了
generateRandom在嵌套类型情况下崩溃的问题。修复 #10583。#10734 (Nikolai Kochetov) 。 - 修复了
SummingMergeTree中LowCardinality(FixedString)键列在合并后可能发生的数据损坏问题。修复 #10489。#10721 (Nikolai Kochetov) 。 - 修复了函数
h3EdgeAngle中可能出现的缓冲区溢出问题。#10711 (alexey-milovidov) 。 - 修复了 totals 消失的问题。如果查询包含 join,或带有外部 WHERE 条件的子查询,totals 可能会被过滤掉。修复了 #10674。#10698 (Nikolai Kochetov) 。
- 修复了在同一查询中多次对相同集合使用
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) 。 - 修复了一个 bug:当表中有大量 parts 时,会导致并发 ALTER 操作被锁定。#10659 (alesapin).
- 修复了一个 bug:执行
SYSTEM DROP DNS CACHE查询时,还会一并删除用于检查用户是否允许从某些 IP 地址连接的缓存。 #10608 (tavplubix). - 修复了
MATERIALIZED VIEW的内部查询在包含依赖表时产生错误 scalar 结果的问题。#10603 (Nikolai Kochetov) 。 - 修复了对默认表达式类型与列类型不一致的
ALIAS列执行SELECT时的问题。#10563 (Azat Khuzhin). - 支持了 DateTime64 与 String 值之间的比较。#10560 (Vasily Nemkov) 。
- 修复了索引损坏问题:在某些情况下,将 compact parts 合并为另一个 compact part 后,可能会出现该问题。#10531 (Anton Popov) 。
- 修复了一种情况:变更已完成所有 parts,但仍卡在
is_done=0。 #10526 (alesapin). - 修复了相对
UTC存在小数偏移的时区在 Unix 纪元起始处的溢出问题。此修复解决了 #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). - 改进了 input format 中诊断信息的输出。修复了 #10204。#10418 (tavplubix).
- 在 clickhouse-server Docker image 中添加了 CA certificates。#10476 (filimonov).
缺陷修复
- 修复错误
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
缺陷修复
- 修复了 datetime 函数在相对于 UTC 的偏移曾在正负之间变动的时区中行为不正确的问题 (例如 Pacific/Kiritimati) 。此修复对应 #7202 #10369 (alexey-milovidov)
- 修复了在启用
distributed_group_by_no_merge时可能发生的段错误 (该问题在 20.3.7.46 中引入,见 #10131) 。#10399 (Nikolai Kochetov) - 修复了
Array(Tuple(...))数据类型被错误展平的问题。此修复对应于 #10259 #10390 (alexey-milovidov) - 移除 Aggregator 中的磁盘预留。这修复了磁盘空间预留中的一个问题;此前即使本可成功完成,大型外部聚合也可能因此失败 #10375 (Azat Khuzhin)
- 修复了
ReplicatedMergeTree中DROP与OPTIMIZE的竞争条件问题。如果同时存在OPTIMIZE查询,DROP可能会在 ZooKeeper 的副本路径中残留一些垃圾数据。#10312 (tavplubix) - 修复了修改列默认值后服务器无法附加表的问题。#10441 (alesapin)
- 如果在加载表之前 attach 数据库失败,请不要删除元数据目录。 #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)
- 创建 BloomFilter 索引时校验参数数量及类型 #9623 #10431 (Winter Zhang)
性能改进
- 提升了
IN运算符右侧显式定义 Set、左侧使用元组时的查询性能。此修复解决了 20.3 版本中的性能回退问题。#9740, #10385 (Anton Popov)
ClickHouse 发行版 v20.3.7.46,2020-04-17
缺陷修复
- 修复了在查询中混用逗号 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设置放宽在变更中使用非确定性函数限制的能力。#10186 (filimonov).
ClickHouse 发行版 v20.3.6.40,2020-04-16
新功能
- 新增函数
isConstant。该函数用于检查其参数是否为常量表达式,并返回 1 或 0。它主要用于开发、调试和演示。#10198 (alexey-milovidov).
缺陷修复
- 修复了在使用
max_rows_to_group_by和group_by_overflow_mode = 'break'时出现Pipeline stuck错误的问题。#10279 (Nikolai Kochetov). - 修复一种罕见情况下可能出现的异常:
Cannot drain connections: cancel first。#10239 (Nikolai Kochetov) 。 - 修复了一个 bug:当用户尝试对使用
ENGINE = Replicated*的表执行 ALTER UPDATE/DELETE 时,ClickHouse 会抛出 “Unknown function lambda.” 错误。现在,对非确定性函数的检查已能正确处理 lambda 表达式。#10237 (Alexander Kazakov) 。 - 修复了适用于 Date 类型的 “generateRandom” 函数。此修复对应 #9973。修复了一个边界情况:当年份为 2106 的日期被插入采用旧式分区方案的 MergeTree 表时,分区名称却被记为了 1970 年。#10218 (alexey-milovidov).
- 如果 View 的表定义与
SELECT查询不一致,则进行类型转换。此修复解决了 #10180 和 #10022。#10217 (alexey-milovidov) 。 - 修复了
parseDateTimeBestEffort在处理 RFC-2822 字符串且星期为星期二或星期四时的问题。此修复解决了 #10082。#10214 (alexey-milovidov) 。 - 修复 JOIN 内部常量的列名与 JOIN 外部常量名称可能发生冲突的问题。#10207 (alexey-milovidov).
- 修复了在从
system.numbers或system.zeros这类无限数据源读取时,查询本应在 LIMIT 处停止却可能无限执行的问题。#10206 (Nikolai Kochetov) 。 - 修复了在未指定数据库时,访问检查会使用当前数据库的问题。#10192 (Vitaly Baranov) 。
- 如果在向 Distributed() 执行 INSERT 时结构不匹配,则会转换块。#10135 (Azat Khuzhin) 。
- 修复处理器管道中 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 数据库引擎增加了一些参数检查,并支持标识符参数。#10077 (Winter Zhang) 。
- 修复了从 localhost 上的 ClickHouse server 获取数据的 ClickHouse 字典源中的一个缺陷。如果字典和源中的类型不兼容,该缺陷可能会导致内存损坏。#10071 (alesapin).
- 修复了表包含跳过索引时
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) 。 - 修复了一个 bug:在针对某些数据库的查询处理的某个阶段,未能获取所需的表。修复了 #9699。#9949 (achulkov2).
- 修复
JOIN与TOTALS同时出现时触发的 ‘在块中未找到列’ 错误。修复 #9839。#9939 (Artem Zuikov) 。 - 修复了一个 bug:
ON CLUSTERDDL 查询在服务器启动时会卡死。#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 发行版 v20.3.5.21,2020-03-27
缺陷修复
- 修复当查询在分布式表上同时包含 PREWHERE 和 WHERE,且
SET distributed_product_mode = 'local'时出现的 “Different expressions with the same alias” 错误。#9871 (Artem Zuikov). - 修复具有复合主键的表在执行变更时内存占用过高的问题。此修复解决了 #9850。#9860 (alesapin).
- 对于 INSERT 查询,分片现在会将从发起节点获取的设置限制在该分片的约束范围内,而不是抛出异常。此修复允许将 INSERT 查询发送到具有另一组约束的分片。此更改进一步完善了对 #9447 的修复。#9852 (Vitaly Baranov).
- 修复在表列表之外 (即在 WHERE 中) 使用 COMMA JOIN 的子查询场景下出现的 “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).
- 修复 compact parts 的
ALTER TABLE DELETE COLUMN查询失效的问题。#9779 (alesapin). - 修复 max_distributed_connections 在启用和未启用 Processors 时存在的问题。#9673 (Azat Khuzhin).
- 修复了若干函数参数的时区未被正确使用的情况。#9574 (Vasily Nemkov).
改进
ClickHouse 发行版 v20.3.4.10,2020-03-20
缺陷修复
- 此版本还包含 20.1.8.41 中的所有缺陷修复。
- 修复了通过 http 执行查询时缺少
rows_before_limit_at_least的问题 (在处理器管道中) 。该修复解决了 #9730。#9757 (Nikolai Kochetov)
ClickHouse 发行版 v20.3.3.6,2020-03-17
缺陷修复
- 此版本还包含 20.1.7.38 中的所有缺陷修复。
- 修复了复制中的一个问题:如果用户在上一版本中执行过变更操作,复制将无法正常工作。此修复解决了 #9645。#9652 (alesapin)。这使 20.3 版本重新具备向后兼容性。
- 新增设置
use_compact_format_in_distributed_parts_names,允许对写入Distributed表的INSERT查询文件使用更紧凑的格式。此修复解决了 #9647。#9653 (alesapin)。这使 20.3 版本重新具备向后兼容性。
ClickHouse 发行版 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 版本中,我们将引入一项设置,让你能够逐步启用新格式。 - 更改了变更命令的复制日志记录格式。安装新版本之前,必须等待旧变更处理完毕。
- 实现一个简单的内存分析器:超过软分配限制后,每分配 N 个字节就将调用栈信息转储到
system.trace_log中 #8765 (Ivan) #9472 (alexey-milovidov)system.trace_log中的列已从timer_type重命名为trace_type。这将需要对第三方性能分析和火焰图处理工具进行相应修改。 - 在所有地方都使用 OS 线程 ID,而不是内部线程编号。这修复了 #7477:旧版
clickhouse-client在启用send_logs_level设置时,无法接收由服务器发送的日志,因为结构化日志消息的名称和类型已经发生变化。另一方面,不同版本的服务器之间也可能相互发送类型不同的日志。如果你不使用send_logs_level设置,就无需关注这一点。#8954 (alexey-milovidov) - 移除
indexHint函数 #9542 (alexey-milovidov) - 移除
findClusterIndex、findClusterValue函数。此更改修复了 #8641。如果你曾使用这些函数,请发送电子邮件至clickhouse-feedback@yandex-team.com#9543 (alexey-milovidov) - 现在不再允许使用
SELECT子查询作为默认表达式来创建列或新增列。#9481 (alesapin) - 要求 JOIN 中的子查询必须具有别名。#9274 (Artem Zuikov)
- 改进了
ALTER MODIFY/ADD查询逻辑。现在,不能在未指定类型的情况下ADD列;MODIFY默认表达式不会更改列类型,而MODIFY类型也不会丢失默认表达式的值。修复了 #8669。#9227 (alesapin) - 需要重启服务器才能使日志配置中的更改生效。这是一种临时规避方案,用于避免服务器将日志写入已删除的日志文件这一 bug (参见 #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。它会执行变更,强制删除因生存时间 (TTL) 过期的数据,并重新计算所有 parts 中与 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 存储和表函数中使用 globs/通配符。#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 输出 format 中使用 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。该列中的值均为 0。出于测试目的,需要用它以最快的方式生成大量行。此项修复解决了 #6604 #9593 (Nikolai Kochetov)
Experimental 功能
- 在
MergeTree家族表中新增了 parts 的紧凑格式,所有列都存储在同一个文件中。这有助于提升小批量高频插入的性能。旧格式 (每列一个文件) 现称为 wide。数据存储格式由设置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)
- 修复了一个问题:当与 glob 模式匹配的文件过多时,在
File表引擎或file表函数中可能会出现“打开的文件过多”错误。现在,文件只会在实际需要时才打开。此修复对应 #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) - 关键字
NOT在SHOW TABLES NOT LIKE查询中无法使用 #8727 #8940 (alexey-milovidov) - 为函数
h3EdgeLengthM增加了范围检查。若无此检查,可能会发生缓冲区溢出。#8945 (alexey-milovidov) - 修复了一个 bug:对多个参数 (超过 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 connection 更慢) #9026 (tavplubix) - 修复了变更完成过程中的一个错误,该错误可能导致变更卡在
parts_to_do=0且is_done=0的状态。 #9022 (alesapin) - 使用支持
partial_merge_join设置的新 ANY JOIN 逻辑。现在可通过partial_merge_join=1执行ANY|ALL|SEMI LEFT和ALL INNERJOIN。#8932 (Artem Zuikov) - 分片现在会将从发起节点获取的设置限定在该分片的约束范围内,而不是抛出异常。此修复允许将查询发送到具有不同约束的分片。#9447 (Vitaly Baranov)
- 修复了
MergeTreeReadPool的内存管理问题。#8791 (Vladimir Chebotarev) - 修复
toDecimal*OrNull()函数家族在传入字符串e时的问题。修复 #8312 #8764 (Artem Zuikov) - 确保
FORMAT Null不向客户端发送任何数据。#8767 (Alexander Kuzmenkov) - 修复了
LiveViewBlockInputStream中 timestamp 未更新的问题。LIVE VIEW是一项 Experimental 功能。#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在 Nullable 返回类型上的问题。#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) - 在较早版本中,
Memorydatabase engine 使用空的数据路径,因此表会创建在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返回FixedString,而不是String。#9052 (Andrew Onyshchuk) - 避免极少数情况下用户收到错误的错误消息 (显示为
Success,而不是详细的错误描述) 。#9457 (alexey-milovidov) - 使用空的行模板时,
Template格式不再崩溃。#8785 (Alexander Kuzmenkov) - 系统表的元数据文件可能会被创建到错误的位置 #8653 (tavplubix)。修复了 #8581。
- 修复 cache 字典中 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。此外,还修复了ReplicatedMergeTreeALTER查询中极为罕见的竞态条件。#9048 (alesapin) - 启用
compile_expressions设置后,使用Nullable类型时,LLVMExecutableFunction中可能出现unexpected column#8910 (Guillaume Tassery) - 针对
Kafka引擎的多项修复:1) 修复了消费者组再平衡期间出现重复数据的问题。2) 修复了罕见的 ‘孔’ 问题:当一次 poll 从多个分区拉取数据且只部分提交时会出现该问题 (现在我们始终处理 / 提交整个已拉取的消息块) 。3) 修复了按块大小 flush 的问题 (此前只有按超时 flush 能够正常工作) 。4) 改进了订阅流程 (带有分配反馈) 。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) - 修复了一个与重复移动操作有关的 bug,该 bug 可能会损坏原始数据分片。如果您使用
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时写入的 parts 执行变更时出现的问题。#9463 (alesapin) - 修复了销毁
Poco::HTTPServer时发生的数据竞争问题。该问题可能出现在服务器启动后立即关闭的情况下。#9468 (Anton Popov) - 修复了一个 bug:运行
SHOW CREATE TABLE a_table_that_does_not_exist时会显示误导性的错误消息。#8899 (achulkov2) - 修复了一个少见场景下的
Parameters are out of bound异常:当SELECT子句中包含常量,且同时带有ORDER BY和LIMIT子句时会出现该异常。#8892 (Guillaume Tassery) - 修复变更完成状态的处理问题:变更已完成时,其状态仍可能显示为
is_done=0。#9217 (alesapin) - 禁止对使用旧语法的 MergeTree 表执行
ALTER ADD INDEX,因为该语法不起作用。#8822 (Mikhail Korotov) - 在服务器启动期间,不访问
LIVE VIEW所依赖的表,以便服务器能够顺利启动。同时,在分离LIVE VIEW时,也会移除LIVE VIEW的依赖关系。LIVE VIEW是一项 Experimental 功能。#8824 (tavplubix) - 修复执行
PREWHERE时MergeTreeRangeReader中可能发生的段错误。#9106 (Anton Popov) - 修复了列生存时间 (TTL) 可能导致的校验和不匹配问题。#9451 (Anton Popov)
- 修复了一个 bug:当只有一个卷时,parts 不会在后台根据生存时间 (TTL) 规则移动。#8672 (Vladimir Chebotarev)
- 修复了
Method createColumn() is not implemented for data type Set问题。此修复解决了 #7799。#8674 (alexey-milovidov) - 现在我们将尝试更频繁地完成变更操作。#9427 (alesapin)
- 修复
intDiv在除数为常量 -1 时的问题 #9351 (hcz) - 修复了
BlockIO中可能发生的竞态条件。#9356 (Nikolai Kochetov) - 修复了在尝试使用/删除因参数错误而创建的
Kafka表时导致服务器崩溃的问题。 #9513 (filimonov) - 如果操作系统对
timer_create函数返回错误结果,则增加了相应的变通处理方案。#8837 (alexey-milovidov) - 修复了
min_marks_for_seek参数使用中的错误。修复了在 Distributed 表中没有分片键时,尝试跳过未使用分片所显示的错误消息。#8908 (Azat Khuzhin)
改进
- 在
ReplicatedMergeTree*引擎家族中,基于变更机制实现了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” 间隔 (默认为 1 秒) 采集的 ProfileEvents 和 CurrentMetrics 值所在的行。该表非常小 (通常只有数 MB) ,因此默认收集这些数据是合理的。#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 和 timestamp。修复了 #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)
- 支持分布式表的行级安全性。 #8926 (Ivan)
- 现在可以在设置值中识别后缀 (如 KB、KiB 等) 。#8072 (Mikhail Korotov)
- 防止在构建大型 JOIN 结果时发生内存不足。#8637 (Artem Zuikov)
- 在
clickhouse-client的交互模式下,补全建议中新增了集群名称。#8709 (alexey-milovidov) - 为组中的所有线程初始化 query profiler,例如可对插入查询进行完整分析 #8820 (Ivan)
- 在
system.query_log表中新增了列exception_code。#8770 (Mikhail Korotov) - 在默认服务器配置文件中启用了端口
9004上的 MySQL 兼容服务器。修复了配置中示例里的密码生成命令。#8771 (Yuriy Baranov) - 防止在关闭时因文件系统处于只读状态而中止。这修复了 #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)
- 简化了 Logical Functions 中的代码并提高了效率,同时完成了一些代码清理。这是 #8718 的后续工作 #8728 (Alexander Kazakov)
- 通过借助 C++20 特性进一步强化严格别名规则,整体性能得到提升 (受影响查询的提升幅度为 5%..200%) 。 #9304 (Amos Bird)
- 对比较函数内部循环进一步强化了严格别名规则。 #9327 (alexey-milovidov)
- 对算术函数内部循环进一步强化了严格别名规则。 #9325 (alexey-milovidov)
- 为 ColumnVector::replicate() 提供了一个快约 3 倍的实现,ColumnConst::convertToFullColumn() 就是通过它实现的。此外,在测试中对常量进行 materialize 时也会很有帮助。 #9293 (Alexander Kazakov)
- 对
ColumnVector::replicate()做了另一项小幅性能优化 (可加速materialize函数和高阶函数) ,这是对 #9293 的进一步改进 #9442 (Alexander Kazakov) - 提升了
stochasticLinearRegressionaggregate function 的性能。该补丁由 Intel 贡献。 #8652 (alexey-milovidov) - 提升了
reinterpretAsFixedString函数的性能。 #9342 (alexey-milovidov) - 在处理器管道中,对于
Nullformat 不再向客户端发送块。 #8797 (Nikolai Kochetov) #8767 (Alexander Kuzmenkov)
构建/测试/打包改进
- 现在,Windows Subsystem for Linux 上的异常处理已可正常工作。参见 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 中,即使使用
gcc,我们也会用lld来链接 ClickHouse。#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 下忽略弱符号,因为它必须定义 #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 镜像中添加了磁盘部分 #9213 (Pavel Kovalenko)
- 在使用 GRPC 构建时移除源代码树中的文件 #9588 (Amos Bird)
- 通过将 SessionCleaner 从 Context 中移除,构建时间略有缩短。简化了 SessionCleaner 的代码。#9232 (alexey-milovidov)
- 更新了
clickhouse-test脚本中对卡住查询的检查 #8858 (Alexander Kazakov) - 从 repository 中移除了一些无用文件。#8843 (alexey-milovidov)
- 将 math 性能测试类型从
once改为loop。#8783 (Nikolai Kochetov) - 新增了一个 Docker image,可用于为我们的代码库生成交互式代码浏览器 HTML 报告。#8781 (alesapin) 请参见 Woboq Code Browser
- 在 MSan 环境下抑制一些测试失败。#8780 (Alexander Kuzmenkov)
- 加快“insert 时异常”测试。该测试在 debug-with-coverage 构建中经常超时。#8711 (alexey-milovidov)
- 将
libcxx和libcxxabi更新到 master,以便为 #9304 #9308 做准备 (alexey-milovidov) - 修复不稳定的测试
00910_zookeeper_test_alter_compression_codecs。#9525 (alexey-milovidov) - 清理重复的链接器标志。确保链接器不会查找非预期的符号。#9433 (Amos Bird)
- 将
clickhouse-odbcdriver 添加到测试镜像中。这样就可以通过 ClickHouse 自身的 ODBC driver 测试 ClickHouse 与 ClickHouse 之间的交互。#9348 (filimonov) - 修复了单元测试中的若干问题。#9047 (alesapin)
- 启用 GCC 警告
-Wmissing-include-dirs,以消除所有不存在的 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列的 perftests 中,将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-稳定版本 2020-60-26
缺陷修复
- 修复了在 prewhere 条件中使用
Nullable列时偶发崩溃的问题。这是 #11608 的后续修复。#11869 (Nikolai Kochetov). - 不再允许在高阶函数中使用 arrayJoin。此前这会导致协议同步异常。此修复关闭了 #3933。#11846 (alexey-milovidov).
- 修复了类似
SELECT *, xyz.*的查询本应报错却成功执行的异常行为。#11753 (hexiaoting). - 修复了 Values input format 中复杂字面量类型推断错误导致的 LOGICAL_ERROR。#11732 (tavplubix).
- 修复了
ORDER BY ... WITH FILL处理 const 列时的问题。#11697 (Anton Popov). - 与 XDBC bridge 通信时会传递正确的 timeout。此前在检查 bridge 存活状态和接收元信息时,timeout 最近未被正确遵守。#11690 (alexey-milovidov).
- 新增了对带有不区分大小写标志的正则表达式的支持。此修复解决了 #11101 和 #11506。#11649 (alexey-milovidov).
- 修复了 String 的布隆过滤器 (数据跳过索引) 问题。#11638 (Azat Khuzhin).
- 修复了在 prewhere 条件中使用
Nullable列时偶发崩溃的问题。 (可能与 #11572 有一定关联。) #11608 (Nikolai Kochetov). - 修复了 clickhouse-client 在 exception.code() % 256 = 0 时退出码错误的问题。#11601 (filimonov).
- 修复了 server 启动时关于“Mark cache size was lowered”的日志消息中的一个小错误。此修复关闭了 #11399。#11589 (alexey-milovidov).
- 现在 clickhouse-server docker 容器在检查 server 存活状态时会优先使用 IPv6。#11550 (Ivan Starkov).
- 修复了使用 -State 函数进行聚合时,中途抛出异常导致的内存泄漏问题。此修复解决了 #8995。#11496 (alexey-milovidov).
- 修复了主键被函数包裹时与 ‘FINAL’ 修饰符及 ‘ORDER BY’ 优化配合使用的问题。#10715 (Anton Popov).
ClickHouse 发行版 v20.1.15.109-稳定版本 2020-06-19
缺陷修复
ClickHouse 发行版 v20.1.14.107-稳定版本 2020-06-11
缺陷修复
- 修复了在包含
PREWHERE column in (subquery)和ARRAY JOIN的查询中出现的错误Size of offsets does not match size of column。#11580 (Nikolai Kochetov) 。
ClickHouse 发行版 v20.1.13.105-稳定版本 2020-06-10
缺陷修复
- 修复了这样一个错误:如果启用了
min_bytes_to_use_direct_io,且 PREWHERE 生效,同时使用 SAMPLE 或较多线程,就可能出现Data compressed with different methods。此修复对应 #11539。#11540 (alexey-milovidov). - 修复
codecs返回压缩后大小的问题。#11448 (Nikolai Kochetov) 。 - 修复当列的压缩编解码器使用非字面量参数时服务器崩溃的问题。修复了 #11365。#11431 (alesapin).
- 修复 pointInPolygon 在点为 nan 时的问题。修复了 #11375。#11421 (Alexey Ilyukhov).
- 修复了
geohashesInBox在参数超出纬度/经度范围时出现的问题。#11403 (Vasily Nemkov). - 修复带有外部排序和 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)。 - 如果数据跳过索引依赖的列会在后台合并过程中被修改 (SummingMergeTree、AggregatingMergeTree 以及 TTL GROUP BY 都属于这种情况) ,其计算结果会不正确。这个问题已通过将索引计算移至合并之后修复,因此索引会基于合并后的数据来计算。#11162 (Azat Khuzhin) 。
- 如果未完成任何最终化操作,则移除变更最终化任务中的日志记录。 #11109 (alesapin).
- 修复了 parseDateTime64BestEffort 参数解析方面的错误。#10925。#11038 (Vasily Nemkov) 。
- 修复
getRawData()方法返回的原始数据大小不正确的问题。 #10964 (Igr). - 修复分布式表中元组的向后兼容性问题。#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) 。 - 修复组合器 -OrNull 和 -OrDefault 与 -State 组合使用时的问题。 #10741 (hcz).
- 修复 Totals 消失的问题。如果查询包含带有外部 WHERE 条件的 join 或子查询,Totals 可能会被过滤掉。修复了 #10674。#10698 (Nikolai Kochetov) 。
- 修复了在同一查询中多次对同一个集合使用
IN运算符时出现的问题。#10686 (Anton Popov). - 修复 AggregateTransform 构造函数中参数顺序的问题。#10667 (palasonic1).
- 修复了在启用
distributed_aggregation_memory_efficient时远程查询无法并行执行的问题。修复 #10655。#10664 (Nikolai Kochetov) 。 - 修复了带有
HAVING子句的 distributed queries 的谓词优化问题 (enable_optimize_predicate_expression=1) (即当需要在发起端 server 上进行过滤时) :通过保留表达式顺序即可修复;此外,还强制聚合器使用列名而不是索引。修复项:#10613、#11413。#10621 (Azat Khuzhin) 。 - 修复错误
the BloomFilter false positive must be a double number between 0 and 1#10551。#10569 (Winter Zhang) 。 - 修复了在默认表达式类型与列类型不同时,对 ALIAS 列执行 SELECT 的问题。#10563 (Azat Khuzhin) 。
-
- 已支持 DateTime64 与 String 值进行比较 (与 DateTime 一样) 。#10560 (Vasily Nemkov).
ClickHouse 发行版 v20.1.12.86,2020-05-26
缺陷修复
- 修复了 20.1 与更早版本之间在两级聚合上的兼容性问题。当发起节点和远程节点使用不同版本的 ClickHouse,且 GROUP BY 结果较大,并且聚合是基于单个 String 字段执行时,就会出现这一问题。这会导致结果中同一个键出现多行未合并的行。#10952 (alexey-milovidov) 。
- 修复了
SummingMergeTree中LowCardinality(FixedString)键列在合并后可能出现的数据损坏问题。修复了 #10489。#10721 (Nikolai Kochetov) 。 - 修复了一个 bug:当
readonly=2且cancel_http_readonly_queries_on_client_close=1时,客户端关闭会导致 HTTP 请求卡住。修复了 #7939、#7019、#7736 和 #7091。#10684 (tavplubix) 。 - 修复了一个 bug:执行
SYSTEM DROP DNS CACHE查询时,也会删除用于检查用户是否允许从某些 IP 地址连接的缓存。 #10608 (tavplubix). - 修复了当
MATERIALIZED VIEW的内部查询包含依赖表时,该查询中的错误 scalar 结果问题。#10603 (Nikolai Kochetov) 。 - 修复了一种情况:变更已完成所有 parts,但仍然卡在
is_done=0。 #10526 (alesapin). - 修复了相对于 UTC 存在小数偏移的时区在 Unix 纪元起始处出现的溢出问题。此修复解决了 #9335。#10513 (alexey-milovidov) 。
- 修复了 Distributed 存储的不正确关闭问题。#10491 (Azat Khuzhin) 。
- 修复了
simpleLinearRegression在处理大整数时的数值溢出问题。#10474 (hcz). - 修复了 Attach 数据库失败时误删元数据目录的问题。#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) ,从而导致 INSERTs 卡住,或在 SELECTs 中误报异常。此修复对应 #9946。#10188 (Nikita Mikhaylov) 。
- 修复了以下情况下的兼容性问题:远程服务器使用早于 18.12.17 的版本,而发起端服务器使用较新版本,且
GROUP BY同时包含 Fixed 键和非 Fixed 键,并启用了两级 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设置放宽在变更中使用非确定性函数限制的功能。#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).
- 修复了从 localhost 上的 ClickHouse 服务器读取数据的 ClickHouse 字典源中的一个缺陷。如果字典和字典源中的类型不兼容,该缺陷可能会导致内存损坏。#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) 。 - 修复了一个 bug:在针对某些数据库的查询处理某个阶段,未能获取到所需的表。修复了 #9699。#9949 (achulkov2).
- 修复
JOIN与TOTALS同时出现时的'Not found column in block'错误。修复了 #9839。#9939 (Artem Zuikov) 。 - 修复了
ON CLUSTERDDL 查询在服务器启动时卡住的问题。#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
缺陷修复
- 修复当查询针对分布式表同时使用
PREWHERE和WHERE,并设置SET distributed_product_mode = 'local'时出现的'Different expressions with the same alias'错误。#9871 (Artem Zuikov). - 修复具有复合主键的表在执行变更时内存占用过高的问题。此修复解决了 #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).
改进
构建/测试/打包改进
ClickHouse 发布 v20.1.8.41,2020-03-20
缺陷修复
- 修复可能持续出现的
Cannot schedule a task错误 (由ParallelAggregatingBlockInputStream::Handler::onFinish/onFinishThread中未处理的异常导致) 。此修复解决了 #6833。#9154 (Azat Khuzhin) - 修复
ALTER查询 (变更) 中的内存占用过高问题。此修复解决了 #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) - 现在我们将尝试更频繁地完成变更操作。 #9427 (alesapin)
- 修复了在 #8598 中引入的复制协议兼容性问题。#9412 (alesapin)
- 修复了 Array 类型的 bloom_filter 索引中 not(has()) 的问题。#9407 (achimbab)
- 修复了
match和extract函数在 haystack 包含零字节时的行为问题。此前在 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
缺陷修复
- 修复使用
T64编解码器压缩时的数据不兼容问题。 #9039 (abyss7) - 修复在单线程中从 MergeTree 表读取时的范围顺序问题。修复了 #8964。 #9050 (CurtizJ)
- 修复了执行
PREWHERE时MergeTreeRangeReader中可能出现的段错误。修复 #9064。 #9106 (CurtizJ) - 修复
reinterpretAsFixedString应返回FixedString而非String的问题。 #9052 (oandrew) - 修复
joinGet在返回 Nullable 类型时的问题。修复 #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)
- 允许在逗号 JOIN 中使用
IN()。修复了 #7314。 #9251 (4ertus2) - 改进了
ALTER MODIFY/ADD查询逻辑。现在,不能在不指定类型的情况下ADD列;MODIFY默认表达式时不会更改列类型,而MODIFY类型时也不会丢失默认表达式的值。修复了 #8669。 #9227 (alesapin) - 修复变更最终完成状态的问题:已完成的变更状态仍可能显示为 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中增加了对存储策略的检查,否则可能导致某个 part 中的数据在重启后无法访问,并使 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中的段错误,该错误可能在从 StorageFile 读取时发生。 #9387 (tabplubix) - 防止在极少数情况下,在读取
suffix之后、提交之前发生异常时导致Kafka中的数据丢失。修复了 #9378。相关:#7175 #9507 (filimonov) - 修复了一个缺陷:对于因参数错误而创建的
Kafka表,在尝试使用或删除时会导致服务器终止。修复了 #9494。合并了 #9507。 #9513 (filimonov)
新功能
- 添加
deduplicate_blocks_in_dependent_materialized_views选项,用于控制对带有 materialized view 的表执行幂等插入时的行为。应 Altinity 的特别请求,这项新功能已加入该 bugfix 版本。 #9070 (urykhy)
ClickHouse 发布 v20.1.2.4,2020-01-22
向后不兼容的变更
- 设置
merge_tree_uniform_read_distribution已废弃。服务器仍可识别该设置,但它已不再生效。#8308 (alexey-milovidov) - 将函数
greatCircleDistance的返回类型更改为Float32,因为现在计算结果就是Float32。#7993 (alexey-milovidov) - 现在要求查询参数使用“转义”格式表示。例如,要传递字符串
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新增了与JOIN操作一致的ANY JOIN逻辑。若想在升级后保持行为不变,需要在 Join 表引擎表的元数据中添加SETTINGS any_join_distinct_right_table_keys = 1,或者在升级后重新创建这些表。#8400 (Artem Zuikov) - 现在需要重启服务器才能使日志配置中的更改生效。这是一个临时变通方案,用于避免服务器向已删除的日志文件写入日志的问题 (见 #8696) 。#8707 (Alexander Kuzmenkov)
新功能
- 在
system.merges中新增了有关分片路径的信息。#8043 (Vladimir Chebotarev) - 支持在
ON CLUSTER模式下执行SYSTEM RELOAD DICTIONARY查询。#8288 (Guillaume Tassery) - 新增支持在
ON CLUSTER模式下执行CREATE DICTIONARY查询。#8163 (alesapin) - 现在,
users.xml中的用户 profile 可以继承多个 profile。#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添加可选的 reset 列参数,可在每个新的键值处重置聚合结果。#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 array 元素,并将其作为数组返回。#8081 (Oleg Matrokhin) - 新增
arrayZip函数,支持将多个长度相同的数组组合成一个元组数组。#8149 (Winter Zhang) - 新增了可根据已配置的
TTL表达式在磁盘之间移动数据的功能,适用于*MergeTree表引擎家族。#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) - 现在,如果同时使用
WITH TIES和LIMIT BY,将会抛出异常。还新增了TOP与LIMIT BY结合使用的功能。此修复对应 #7472。#7637 (Nikita Mikhaylov) - 修复
clickhouse-odbc-bridge可执行文件对较新版本 glibc 的意外依赖。#8046 (Amos Bird) - 修复了
*MergeTree引擎家族中check函数的缺陷。现在,在最后一个粒度和最后一个标记中的行数相同 (非 FINAL) 时,不会再报错。 #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引擎表中的内存 overcommit 问题。#8345 (Azat Khuzhin) - 修复了一个潜在缺陷:某些函数可将
NULL作为参数之一,且返回值为非NULL。#8196 (alexey-milovidov) - 改进了
MergeTree表引擎后台进程线程池的指标计算。#8194 (Vladimir Chebotarev) - 修复在存在行级表过滤器时
WHERE语句中IN函数的问题。修复了 #6687 #8357 (Ivan) - 现在,如果设置值中的整数值未能被完全解析,就会抛出异常。#7678 (Mikhail Korotov)
- 修复了在对包含两个以上本地分片的分布式表进行查询时使用聚合函数会触发异常的问题。#8164 (小路)
- 现在 bloom filter 可以处理长度为零的数组,且不会进行冗余计算。#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子句右侧从子查询构建 Set 时的一个 bug。此修复解决了 #5767 和 #2542。#7755 (Nikita Mikhaylov) - 修复从
File存储读取时可能发生的崩溃。#7756 (Nikolai Kochetov) - 修复了读取包含
list类型列的Parquet格式文件时的问题。#8334 (maxulan) - 修复了以下错误:当
max_parallel_replicas > 1时,对于带有依赖于采样键的PREWHERE条件的分布式查询,会报Not found column。 #7913 (Nikolai Kochetov) - 修复了以下错误:当查询使用依赖于表别名的
PREWHERE,且由于主键条件导致结果集为空时,会报Not found column错误。#7911 (Nikolai Kochetov) - 修复了函数
rand和randConstant在参数为Nullable时的返回类型。现在这些函数始终返回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,该问题会导致结果错误。这一修复解决了谓词下推优化中的许多问题。#8503 (Winter Zhang)
- 修复
CREATE TABLE .. AS dictionary查询导致的崩溃问题。#8508 (Azat Khuzhin) - 改进了
.g4文件中的 ClickHouse 语法。#8294 (taiyang-li) - 修复了一个会导致使用
Join引擎的表在JOIN操作中崩溃的 bug。此修复解决了 #7556 #8254 #7915 #8100。 #8298 (Artem Zuikov) - 修复
CREATE DATABASE时重复触发的字典重新加载问题。#7916 (Azat Khuzhin) - 限制从
StorageFile和StorageHDFS读取时的最大流数。修复了 #7650。#7981 (alesapin) - 修复了
ALTER ... MODIFY ... CODEC查询中的一个问题:当用户同时指定默认表达式和 codec 时,会出错。修复了 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) - 修复了表函数 (
file、mysql、remote) 中因引用已删除的IStorage对象而可能导致的崩溃问题。修复了向表函数插入数据时所指定列的解析错误。#7762 (tavplubix) - 确保在启动
clickhouse-server之前网络已就绪。这修复了 #7507。#8570 (Zhichang Yu) - 修复了安全连接的超时处理问题,避免查询无限期挂起。此修复对应于 #8126。#8128 (alexey-milovidov)
- 修复
clickhouse-copier中并发工作线程之间不必要的争用。#7816 (Ding Xiang Fei) - 现在,变更不会跳过已附加的 parts,即使它们的变更版本大于当前变更版本也是如此。 #7812 (Zhichang Yu) #8250 (alesapin)
- 在将
*MergeTree数据分区片段移动到另一块磁盘并重启服务器后,忽略其冗余副本。#7810 (Vladimir Chebotarev) - 修复了在
JOIN键中使用LowCardinality时FULL JOIN发生崩溃的问题。#8252 (Artem Zuikov) - 禁止在插入查询中重复使用同一列名,例如
INSERT INTO tbl (x, y, x)。此修复解决了 #5465 和 #7681。#7685 (alesapin) - 为未知 CPU 增加了检测物理 CPU 核心数量的 fallback 机制 (使用逻辑 CPU 核心数) 。这修复了 #5239。#7726 (alexey-milovidov)
- 修复了物化列和别名列报
There's no column错误的问题。#8210 (Artem Zuikov) - 修复了在未使用
TABLE或DICTIONARY限定符时使用EXISTS查询导致的严重崩溃问题,例如EXISTS t。此修复解决了 #8172。该问题是在 19.17 版本中引入的。#8213 (alexey-milovidov) - 修复了一个罕见问题:使用
SimpleAggregateFunction列时,可能会出现"Sizes of columns does not match"报错。#7790 (Boris Granveaud) - 修复了一个问题:当用户的
allow_databases为空时,会被授予对所有数据库的访问权限 (allow_dictionaries也存在同样的问题) 。#7793 (DeifyTheGod) - 修复了服务器已断开与客户端连接时客户端崩溃的问题。#8071 (Azat Khuzhin)
- 修复按主键前缀和非主键后缀排序时
ORDER BY的行为异常。#7759 (Anton Popov) - 检查表中是否存在带限定符的列。此项修复了 #6836。#7758 (Artem Zuikov)
- 修复了在合并完成后立即执行
ALTER MOVE时会移动指定 superpart 的问题。修复了 #8103。#8104 (Vladimir Chebotarev) - 修复了在使用
UNION且列数不一致时,服务器可能崩溃的问题。修复 #7279。#7929 (Nikolai Kochetov) - 修复
substr函数在 size 为负数时返回子串长度不正确的问题。#8589 (Nikolai Kochetov) - 现在,如果后台线程池中没有足够的空闲线程,服务器将不会在
MergeTree中执行 part mutation。 #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)
- 修复
bitmapAnd函数在对聚合 bitmap 和标量 bitmap 求交时出现的错误。#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) - 修复了无 key 的
*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 wire 协议连接时无法正确检测客户端 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) - 由于已实现自适应粒度,固定索引粒度 (原为 1024) 在系统日志中已过时,因此已被移除。#7698 (alexey-milovidov)
- 在未启用 SSL 编译 ClickHouse 时,启用了 MySQL 兼容服务器。#7852 (Yuriy Baranov)
- 现在,服务器会对分布式批次计算校验和,因此当批次中的数据损坏时,能够提供更详细的错误信息。#7914 (Azat Khuzhin)
- 为
MySQL数据库引擎支持DROP DATABASE、DETACH TABLE、DROP TABLE和ATTACH TABLE。#8202 (Winter Zhang) - 为 S3 表函数和表引擎添加身份验证功能。#7623 (Vladimir Chebotarev)
- 增加了对位于不同磁盘上的额外
MergeTreeparts 的检查,以避免遗漏未定义磁盘上的数据分区片段。#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表引擎在不同磁盘上现有 parts 的检查。修复了 #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表添加一列,用于存储未来需要由变更处理的 parts 名称数组。#8179 (alesapin) - 处理器的并行归并排序优化。#8552 (Nikolai Kochetov)
- 设置
mark_cache_min_lifetime现已废弃,不再起作用。在早期版本中,标记缓存占用的内存可能会增长到超过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) - 在未调用
std::atexit时,为clickhouse-server添加覆盖率文件刷写。还略微改进了启用覆盖率的无状态测试中的日志。 #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也会显示 stack trace。此前的版本中,只有DB::Exception才会显示 stack trace。这提升了诊断能力。#8501 (alexey-milovidov) - 为较新的 glibc 版本适配
clock_gettime和clock_nanosleep。#8054 (Amos Bird) - 在供开发者使用的示例配置中启用
part_log。#8609 (alexey-milovidov) - 修复
01036_no_superfluous_dict_reload_on_create_database*中 reload 的异步执行问题。#8111 (Azat Khuzhin) - 修复了编解码器性能测试。#8615 (Vasily Nemkov)
- 为
.tgz构建包添加安装脚本及相关文档。#8612 #8591 (alesapin) - 移除了旧的
ZSTD测试 (该测试创建于 2016 年,用于复现 1.0 之前版本的 ZSTD 中曾出现的 bug) 。这修复了 #8618。#8619 (alexey-milovidov) - 修复了 Mac OS 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)
- 避免因来自
libunwind的数据而出现 MemorySanitizer 报告。#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库触发的 ThreadSaninitizer 报告。同时还将该库更新到了最新版本,不过这并不重要。此修复解决了 #8397。#8403 (alexey-milovidov) - 修复了处理器中的
00600_replace_running_query问题。 #8272 (Nikolai Kochetov) - 移除
tcmalloc支持,以简化CMakeLists.txt。#8310 (alexey-milovidov) - 发布版 gcc 构建现已改用
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 server,而不再仅限于客户端。#8534 (Vladimir Chebotarev)
- 修复了处理器相关测试。小幅性能优化。#7672 (Nikolai Kochetov)
- 更新 contrib/protobuf。 #8256 (Matwey V. Kornilov)
- 为迎接新年并准备切换到 C++20。“愿 C++ 原力与 ClickHouse 同在。” #8447 (Amos Bird)
Experimental 功能
- 新增实验性设置
min_bytes_to_use_mmap_io。它支持在读取大文件时无需将数据从内核复制到用户态。该设置默认禁用。由于 mmap/munmap 较慢,建议阈值设在约 64 MB。#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)