2020 更新日志
ClickHouse 发布版本 20.12
ClickHouse 发布版本 v20.12.5.14-stable,2020-12-28
Bug 修复
- 在合并期间禁用使用 AIO 写入,因为它可能导致合并期间主键列的极其罕见的数据损坏。 #18481 (alesapin)。
- 修复了使用
Nullable(String)
类型的参数执行toType(...)
函数 (toDate
,toUInt32
等) 时出现的value is too short
错误。现在,此类函数在解析错误时返回NULL
而不是抛出异常。修复了 #7673。 #18445 (tavplubix)。 - 限制从宽部件到紧凑部件的合并。在垂直合并的情况下,它导致了损坏的结果部件。 #18381 (Anton Popov)。
- 修复填充表
system.settings_profile_elements
。此 PR 修复了 #18231。 #18379 (Vitaly Baranov)。 - 修复了在使用两级聚合时,带有组合器
Distinct
的聚合函数中可能发生的崩溃。修复了 #17682。 #18365 (Anton Popov)。 - 修复了查询
MODIFY COLUMN ... REMOVE TTL
实际上并未删除列 TTL 的错误。 #18130 (alesapin)。
构建/测试/打包改进
ClickHouse 发布版本 v20.12.4.5-stable,2020-12-24
Bug 修复
- 修复了在具有双 IPv4/IPv6 堆栈的机器上,服务器无法访问
clickhouse-odbc-bridge
进程的问题; - 修复了使用格式错误的查询和/或导致崩溃来执行 ODBC 字典更新的问题;可能关闭了 #14489。 #18278 (Denis Glazachev)。 - 修复了 Enum 和 Int 类型之间的键比较。这修复了 #17989。 #18214 (Amos Bird)。
- 修复了
MaterializeMySQL
数据库引擎中的唯一键转换崩溃。这修复了 #18186 和 #16372 #18211 (Winter Zhang)。 - 修复了 S3 URL 解析中的
std::out_of_range: basic_string
。 #18059 (Vladimir Chebotarev)。 - 修复了由于 MaterializeMySQL 不支持转换 MySQL 前缀索引而导致某些表未从 MySQL 同步到 ClickHouse 的问题。这修复了 #15187 和 #17912 #17944 (Winter Zhang)。
- 修复了如果查询包含
ARRAY JOIN
,查询优化会产生错误结果的问题。 #17887 (sundyli)。 - 修复了
topK
聚合函数中可能发生的段错误。这关闭了 #17404。 #17845 (Maksim Kita)。 - 修复了服务器在守护程序模式下运行时
system.stack_trace
表为空的问题。 #17630 (Amos Bird)。
ClickHouse 发布版本 v20.12.3.3-stable,2020-12-13
向后不兼容的变更
- 默认启用
use_compact_format_in_distributed_parts_names
(请参阅文档以获取参考)。 #16728 (Azat Khuzhin)。 - 在创建使用
File
引擎的表时,接受与文件格式相关的用户设置(例如format_csv_delimiter
),并在所有INSERT
和SELECT
中使用这些设置。当前用户会话或 DML 查询本身的SETTINGS
子句中更改的文件格式设置不再影响查询。 #16591 (Alexander Kuzmenkov)。
新特性
- 添加
*.xz
压缩/解压缩支持。它允许在file()
函数中使用*.xz
。这关闭了 #8828。 #16578 (Abi Palagashvili)。 - 引入查询
ALTER TABLE ... DROP|DETACH PART 'part_name'
。 #15511 (nvartolomei)。 - 添加了新的 ALTER UPDATE/DELETE IN PARTITION 语法。 #13403 (Vladimir Chebotarev)。
- 允许在使用 JSON 输入/输出格式时将命名元组格式化为 JSON 对象,由
output_format_json_named_tuples_as_objects
设置控制,默认禁用。 #17175 (Alexander Kuzmenkov)。 - 添加了默认情况下在 TSV 和 CSV 格式中将枚举值作为其 ID 输入的可能性。 #16834 (Kruglov Pavel)。
- 为 Nullable、LowCardinality、Array 和 Tuple 添加 COLLATE 支持,其中嵌套类型为 String。还重构了 ColumnString.cpp 中与排序规则相关的代码。 #16273 (Kruglov Pavel)。
- 新的
tcpPort
函数返回此服务器侦听的 TCP 端口。 #17134 (Ivan)。 - 添加新的数学函数:
acosh
、asinh
、atan2
、atanh
、cosh
、hypot
、log1p
、sinh
。 #16636 (Konstantin Malanchev)。 - 可以在不同副本之间分配合并的可能性。引入了
execute_merges_on_single_replica_time_threshold
mergetree 设置。 #16424 (filimonov)。 - 为 SQL 标准兼容性添加设置
aggregate_functions_null_for_empty
。此选项将重写查询中的所有聚合函数,向其添加 -OrNull 后缀。实现了 10273。 #16123 (flynn)。 - 更新了 DateTime、DateTime64 解析以接受字符串日期文字格式。 #16040 (Maksim Kita)。
- 可以使用
--history_file
参数在clickhouse-client
中更改历史记录文件的路径。 #15960 (Maksim Kita)。
Bug 修复
- 修复了服务器在极少数情况下可能停止接受连接的问题。 #17542 (Amos Bird)。
- 修复了在 Linux 的 Windows 子系统上运行的 ClickHouse 中,在
Atomic
数据库中执行RENAME
查询时出现的Function not implemented
错误。修复了 #17661。 #17664 (tavplubix)。 - 如果
in_memory_parts_enable_wal
被禁用,则不要从 WAL 恢复部件。 #17802 (detailyang)。 - 修复了使用
min_compress_block_size
错误初始化 MergeTreeWriterSettings 的max_compress_block_size
。 #17833 (flynn)。 - 有关要删除的最大表大小的异常消息显示不正确。 #17764 (alexey-milovidov)。
- 修复了在插入
Distributed
表时空间不足可能发生的段错误。 #17737 (tavplubix)。 - 修复了 ClickHouse 无法恢复与 MySQL 服务器的连接的问题。 #17681 (Alexander Kazakov)。
- 当
pool_size
> 1 时,由于竞争条件,在执行ON CLUSTER
查询时,可能无法正确确定集群是否为循环(交叉)复制。已修复。 #17640 (tavplubix)。 fmt::v7::format_error
异常可能会在后台为 MergeTree 表记录。这修复了 #17613。 #17615 (alexey-milovidov)。- 当在交互模式下将 clickhouse-client 与多行查询一起使用时,单行注释错误地扩展到查询的末尾。这修复了 #13654。 #17565 (alexey-milovidov)。
- 修复了当在不同副本上终止相应的 mutation 时,alter 查询挂起的问题。修复了 #16953。 #17499 (alesapin)。
- 修复了 clickhouse 低估标记缓存大小的问题。当存在许多带有标记的小文件时,可能会发生这种情况。 #17496 (alesapin)。
- 修复了启用设置
optimize_redundant_functions_in_order_by
的ORDER BY
。 #17471 (Anton Popov)。 - 修复了由于不正确的优化而导致的
DISTINCT
之后的重复项。修复了 #17294。 #17296 (li chengxiang)。 #17439 (Nikolai Kochetov)。 - 修复了从具有
LowCardinality
类型的JOIN
表读取时发生的崩溃。修复了 #17228。 #17397 (Nikolai Kochetov)。 - 修复了
toInt256(inf)
堆栈溢出。Int256 是一项实验性功能。关闭了 #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 进行了多项修复(实验性功能)。修复了 #16923 修复了 #15883 修复了修改 MySQL binlog_checksum 时 MaterializeMySQL SYNC 失败的问题。 #17091 (Winter Zhang)。
- 修复了对于非领导者的 ReplicatedMergeTreeTables,
ON CLUSTER
查询可能永远挂起的错误。 #17089 (alesapin)。 - 修复了当
some_table
是AS table_function()
创建时,CREATE TABLE ... AS some_table
查询崩溃的问题。修复了 #16944。 #17072 (tavplubix)。 - 函数 fuzzBits 的 Bug 未完成实现,相关问题:#16980。 #17051 (hexiaoting)。
- 修复了当 CFA 寄存器为 RAX 时 LLVM 的 libunwind。这是 bug 在 LLVM 的 libunwind 中。我们已经有针对此 bug 的解决方法。 #17046 (alexey-milovidov)。
- 避免远程查询的不必要的网络错误,这些查询可能在执行期间被取消,例如带有
LIMIT
的查询。 #17006 (Azat Khuzhin)。 - 修复了仅针对 OFFSET 的查询的
optimize_distributed_group_by_sharding_key
设置(默认禁用)。 #16996 (Azat Khuzhin)。 - 修复了带有 JOIN 的 Distributed 表上的 Merge 表。 #16993 (Azat Khuzhin)。
- 修复了从 double 转换时大整数(128 位、256 位)中的错误结果。大整数支持是实验性的。 #16986 (Mike)。
- 修复了
ALTER TABLE ... MODIFY COLUMN ... NewType
之后可能发生的服务器崩溃,此时SELECT
在 altering 列上具有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)。 - 修复了带有
ORDER BY
的查询可能出现的Illegal type of argument
错误。修复了 #16580。 #16928 (Nikolai Kochetov)。 - 修复了 InterpreterShowAccessQuery 中的奇怪代码。 #16866 (tavplubix)。
- 防止在使用函数
timeSeriesGroupSum
时 clickhouse 服务器崩溃。该函数已从较新的 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
对优化后的简单计数查询和 system.tables 造成的不一致行为。#16309 (Hao Chen)。
改进
- 移除了被 TTL、mutation 或 CollapsingMergeTree 合并算法修剪后的空 parts。#16895 (Anton Popov)。
- 为 Distributed 表中的异步发送启用目录的紧凑格式:默认情况下
use_compact_format_in_distributed_parts_names
设置为 1。#16788 (Azat Khuzhin)。 - 如果未向 S3 写入任何数据,则中止分段上传。#16840 (Pavel Kovalenko)。
- 在发生错误时重新解析
format_avro_schema_registry_url
的 IP 地址。#16985 (filimonov)。 - 在 system.distribution_queue 中屏蔽 data_path 中的密码。#16727 (Azat Khuzhin)。
- 当列转换器替换不存在的列时抛出错误。#16183 (hexiaoting)。
- 当没有足够的内存供所有线程同时工作时,关闭并行解析。此外,当有人尝试插入极其巨大的行(> min_chunk_bytes_for_parallel_parsing)时,可能会出现诸如 "Memory limit exceeded" 之类的异常,因为每个要解析的片段都必须是独立的字符串集(一个或多个)。#16721 (Nikita Mikhaylov)。
- 安装脚本应始终在配置文件夹中创建子目录。这仅与使用自定义配置的 Docker 构建相关。#16936 (filimonov)。
- 更正 JSONEachRow、JSONCompactEachRow 和 RegexpRow 输入格式中错误消息的语法。#17205 (nico piderman)。
- 为
SOURCE(CLICKHOUSE(...))
设置默认的host
和port
参数为当前实例,并将默认的user
值设置为'default'
。#16997 (vdimir)。 - 当执行
ATTACH/DETACH TABLE <DICTIONARY>
时抛出一个信息丰富的错误消息。在此 PR 之前,detach table <dict>
可以工作,但会导致格式错误的内存元数据。#16885 (Amos Bird)。 - 添加 cutToFirstSignificantSubdomainWithWWW() 函数。#16845 (Azat Khuzhin)。
- 如果给出了错误的配置(缺少
metric_log
.collect_interval_milliseconds
),服务器将拒绝启动并显示异常消息。#16815 (Ivan)。 - 当分布式 DDL 的配置不存在时,提供更好的异常消息。此修复解决了 #5075 问题。#16769 (Nikita Mikhaylov)。
- 可用性改进:当
CODEC
表达式在CREATE TABLE
查询中位置错误时,在语法错误消息中提供更好的建议。此修复解决了 #12493 问题。#16768 (alexey-milovidov)。 - 在 Distributed 引擎启动时删除异步 INSERT 的空目录。#16729 (Azat Khuzhin)。
- 使用 nginx 服务器作为代理时,针对 S3 的解决方法。Nginx 当前不接受带有空路径的 URL,例如
http://domain.com?delete
,但原生的 aws-sdk-cpp 会生成此类 URL。此提交使用了修补后的 aws-sdk-cpp 版本,在这种情况下,它会将路径设置为 "/",例如http://domain.com/?delete
。#16709 (ianton-ru)。 - 允许
reinterpretAs*
函数用于相同大小的整数和浮点数。实现了 16640。#16657 (flynn)。 - 现在,可以在
config.xml
中更改<auxiliary_zookeepers>
配置,并在无需重启服务器的情况下重新加载。#16627 (Amos Bird)。 - 支持到远程资源的 https 连接中的 SNI。这将允许连接到需要 SNI 的 Cloudflare 服务器。此修复解决了 #10055 问题。#16252 (alexey-milovidov)。
- 使连接到需要 SNI 的
clickhouse-server
安全端点成为可能。当clickhouse-server
托管在 TLS 代理后面时,这是可能的。#16938 (filimonov)。 - 修复了如果创建了物化视图循环可能发生的堆栈溢出。此问题关闭了 #15732。#16048 (alexey-milovidov)。
- 简化了 MergeTree 表引擎系列的后台任务处理实现。对于用户来说,应该没有可见的变化。#15983 (alesapin)。
- MaterializeMySQL(实验性功能)的改进。当 MySQL 同步用户具有错误的权限时,抛出关于正确同步权限的异常。#15977 (TCeason)。
- 使
indexOf()
使用 BloomFilter。#14977 (achimbab)。
性能改进
- 使用 Floyd-Rivest 算法,它是 ClickHouse 部分排序用例的最佳算法。基准测试位于 https://github.com/danlark1/miniselect 和 此处。#16825 (Danila Kutenin)。
- 现在
ReplicatedMergeTree
表引擎系列为副本提取使用单独的线程池。池的大小受设置background_fetches_pool_size
限制,可以通过重启服务器进行调整。该设置的默认值为 3,这意味着并行提取的最大数量等于 3(并且允许利用 10G 网络)。修复了 #520 问题。#16390 (alesapin)。 - 修复了
quantileTDigest
状态的不受控制增长。#16680 (hrissan)。 - 向
EXPLAIN
添加VIEW
子查询描述。限制VIEW
的下推优化。向查询计划添加Distributed
的本地副本。#14936 (Nikolai Kochetov)。 - 修复了 max_threads > 0 且 ORDER BY 中存在表达式时
optimize_read_in_order
/optimize_aggregation_in_order
的问题。#16637 (Azat Khuzhin)。 - 修复了从大量
MergeTree
表中读取Merge
表的性能问题。修复了 #7748 问题。#16988 (Anton Popov)。 - 现在我们可以安全地修剪具有精确匹配的分区。有用案例:假设表按
intHash64(x) % 100
分区,并且查询具有关于intHash64(x) % 100
字面量的条件,而不是关于 x 的条件。#16253 (Amos Bird)。
实验性功能
构建/测试/打包改进
- 测试覆盖率构建镜像方面的改进。#17233 (alesapin)。
- 将嵌入式时区数据更新到 2020d 版本(同时将 cctz 更新到最新 master 版本)。#17204 (filimonov)。
- 修复了 Poco 中的 UBSan 报告。此问题关闭了 #12719。#16765 (alexey-milovidov)。
- 不要使用 UBSan 对第三方库进行检测。#16764 (alexey-milovidov)。
- 修复了缓存字典中的 UBSan 报告。此问题关闭了 #12641。#16763 (alexey-milovidov)。
- 修复了尝试将无限浮点数转换为整数时的 UBSan 报告。此问题关闭了 #14190。#16677 (alexey-milovidov)。
ClickHouse 20.11 版本
ClickHouse v20.11.7.16-stable 版本,2021-03-02
改进
错误修复
- BloomFilter 索引崩溃修复。修复了 #19757 问题。#19884 (Maksim Kita)。
- 如果启用了 system.text_log,则可能发生死锁。此修复解决了 #19874 问题。#19875 (alexey-milovidov)。
- 在之前的版本中,函数 arrayEnumerateUniq 的异常参数可能会导致崩溃或无限循环。此问题关闭了 #19787。#19788 (alexey-milovidov)。
- 修复了将算术类型与字符串类型进行精确比较时发生的堆栈溢出。#19773 (tavplubix)。
- 修复了
bitmapAndnot
函数中的段错误。修复了 #19668 问题。#19713 (Maksim Kita)。 - 某些带有大整数的函数可能会导致段错误。大整数是实验性功能。此问题关闭了 #19667。#19672 (alexey-milovidov)。
- 修复了
neighbor
函数对于LowCardinality
参数的错误结果。修复了 #10333 问题。#19617 (Nikolai Kochetov)。 - 修复了断开连接后 Connection 中 CompressedWriteBuffer 的 use-after-free 错误。#19599 (Azat Khuzhin)。
DROP/DETACH TABLE table ON CLUSTER cluster SYNC
查询可能会挂起,现已修复。修复了 #19568 问题。#19572 (tavplubix)。- 查询 CREATE DICTIONARY id 表达式修复。#19571 (Maksim Kita)。
- 修复了 merge_tree_min_rows_for_concurrent_read/merge_tree_min_bytes_for_concurrent_read=0/UINT64_MAX 时的 SIGSEGV。#19528 (Azat Khuzhin)。
- 如果使用特殊构造的参数调用
addMonth
函数,则可能发生缓冲区溢出(在内存读取时)。此修复解决了 #19441 和 #19413 问题。#19472 (alexey-milovidov)。 - 如果其中一个文件中存在空数据块,则将分布式批处理标记为损坏。#19449 (Azat Khuzhin)。
- 修复了 Uber H3 库中可能存在的缓冲区溢出。请参阅 https://github.com/uber/h3/issues/392。此问题关闭了 #19219。#19383 (alexey-milovidov)。
- 修复了 system.parts _state 列(查询此列时出现 LOGICAL_ERROR,原因是顺序不正确)。#19346 (Azat Khuzhin)。
- 修复了错误
Cannot convert column now64() because it is constant but values of constants are different in source and result
。是 #7156 问题的延续。#19316 (Nikolai Kochetov)。 - 修复了当并发的
ALTER
和DROP
查询在处理 ReplicatedMergeTree 表时可能挂起的问题。#19237 (alesapin)。 - 修复了从
ORC
格式的文件中无限读取的问题(在 #10580 中引入)。修复了 #19095 问题。#19134 (Nikolai Kochetov)。 - 修复了 clickhouse 无法从
LowCardinality(Nullable(...))
中读取压缩编解码器并抛出异常Attempt to read after EOF
的启动错误。修复了 #18340 问题。#19101 (alesapin)。 - 修复了通过 http 接口使用
Template
或CustomSeparated
格式插入数据时出现的There is no checkpoint
错误。修复了 #19021 问题。#19072 (tavplubix)。 - 限制了对旧语法中创建的
MergeTree
表的MODIFY TTL
查询。之前该查询成功执行,但实际上没有任何效果。#19064 (Anton Popov)。 - 确保
groupUniqArray
为 Enum 类型的参数返回正确的类型。此问题关闭了 #17875。#19019 (alexey-milovidov)。 - 修复了如果将
ignore
函数与LowCardinality
参数一起使用时可能出现的错误Expected single dictionary argument for function
。修复了 #14275 问题。#19016 (Nikolai Kochetov)。 - 修复了将
LowCardinality
列插入到使用TinyLog
引擎的表中的问题。修复了 #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')
)的 mutation 序列化不正确的问题。修复了 #18878 问题。#18944 (alesapin)。 - ATTACH partition 应重置 mutation。#18804。#18935 (fastio)。
- 修复了 clickhouse-local 在关闭时可能挂起的问题。此修复解决了 #18891 问题。#18893 (alexey-milovidov)。
- 修复了 *If 组合器与一元函数和 Nullable 类型一起使用的问题。#18806 (Azat Khuzhin)。
- 如果将设置
network_compression_method
全局设置为非默认值,则异步分布式 INSERT 可能会被服务器拒绝。此修复解决了 #18741 问题。#18776 (alexey-milovidov)。 - 修复了尝试将
NULL
从Nullable(String)
转换为Nullable(Decimal(P, S))
时出现的Attempt to read after eof
错误。现在,当CAST
函数无法从可空字符串解析十进制数时,它将返回NULL
。修复了 #7690 问题。#18718 (Winter Zhang)。 - 修复了 Logger 中参数大小不匹配的问题。#18717 (sundyli)。
- 添加了 FixedString 数据类型支持。当将数据从 MySQL 复制到 ClickHouse 时,我遇到了此异常 "Code: 50, e.displayText() = DB::Exception: Unsupported type FixedString(1)"。此补丁修复了 #18450 和 #6556 问题。#18553 (awesomeleo)。
- 修复了在使用带有
RIGHT
或FULL
JOIN 的子查询后使用ORDER BY
时可能出现的Pipeline stuck
错误。#18550 (Nikolai Kochetov)。 - 修复了可能导致在相应的 mutation kill 之后
ALTER
查询挂起的错误。由线程模糊测试发现。#18518 (alesapin)。 - 在合并期间禁用使用 AIO 写入,因为它可能导致合并期间主键列的极其罕见的数据损坏。 #18481 (alesapin)。
- 当无法计算结果时,禁用分析阶段子查询的常量折叠。#18446 (Azat Khuzhin)。
- 修复了使用
Nullable(String)
类型的参数执行toType(...)
函数 (toDate
,toUInt32
等) 时出现的value is too short
错误。现在,此类函数在解析错误时返回NULL
而不是抛出异常。修复了 #7673。 #18445 (tavplubix)。 - 限制从宽部件到紧凑部件的合并。在垂直合并的情况下,它导致了损坏的结果部件。 #18381 (Anton Popov)。
- 修复填充表
system.settings_profile_elements
。此 PR 修复了 #18231。 #18379 (Vitaly Baranov)。 - 修复了带有常量参数的二元函数的索引分析,这会导致错误的查询结果。此修复解决了 #18364 问题。#18373 (Amos Bird)。
- 修复了在使用两级聚合时,带有组合器
Distinct
的聚合函数中可能发生的崩溃。修复了 #17682。 #18365 (Anton Popov)。 - 现在,如果只能从
table
中选择任何一列,则可以执行SELECT count() FROM table
。此 PR 修复了 #10639 问题。#18233 (Vitaly Baranov)。 - 现在
SELECT JOIN
需要对每个连接的表具有SELECT
权限。此 PR 修复了 #17654 问题。#18232 (Vitaly Baranov)。 - 修复了在读取
MergeTree*
时,如果发生读取退避(日志中出现消息<Debug> MergeTreeReadPool: Will lower number of threads
)可能导致不完整的查询结果的问题。在 #16423 中引入。修复了 #18137 问题。#18216 (Nikolai Kochetov)。 - 修复了查询
MODIFY COLUMN ... REMOVE TTL
实际上并未删除列 TTL 的错误。 #18130 (alesapin)。 - 修复了带有谓词优化器的不确定性函数。此修复解决了 #17244 问题。#17273 (Winter Zhang)。
- Mutation 可能会在等待
MOVE
或REPLACE PARTITION
之后,或者在极少数情况下,在DETACH
或DROP PARTITION
之后等待某些不存在的 part。此问题已修复。#15537 (tavplubix)。
构建/测试/打包改进
ClickHouse v20.11.6.6-stable 版本,2020-12-24
错误修复
- 修复了在具有双
IPv4/IPv6 堆栈
的机器上服务器无法访问clickhouse-odbc-bridge
进程的问题,并修复了 ODBC 字典更新使用格式错误的查询和/或导致崩溃的问题。这可能关闭了 #14489 问题。#18278 (Denis Glazachev)。 - 修复了 Enum 和 Int 类型之间的键比较。这修复了 #17989。 #18214 (Amos Bird)。
- 修复了
MaterializeMySQL
数据库引擎中的唯一键转换崩溃。这修复了 #18186 和 #16372 #18211 (Winter Zhang)。 - 修复了 S3 URL 解析中的
std::out_of_range: basic_string
。 #18059 (Vladimir Chebotarev)。 - 修复了由于 MaterializeMySQL 不支持转换 MySQL 前缀索引而导致某些表未从 MySQL 同步到 ClickHouse 的问题。这修复了 #15187 和 #17912 #17944 (Winter Zhang)。
- 修复了如果查询包含
ARRAY JOIN
,查询优化会产生错误结果的问题。 #17887 (sundyli)。 - 修复了
topK
聚合函数中可能发生的段错误。此问题关闭了 #17404。#17845 (Maksim Kita)。 - 如果
in_memory_parts_enable_wal
被禁用,则不要从 WAL 恢复部件。 #17802 (detailyang)。 - 修复了 ClickHouse 无法恢复与 MySQL 服务器的连接的问题。 #17681 (Alexander Kazakov)。
- 修复了带有分区谓词的
optimize_trivial_count_query
的不一致行为。#17644 (Azat Khuzhin)。 - 修复了服务器在守护程序模式下运行时
system.stack_trace
表为空的问题。 #17630 (Amos Bird)。 - 修复了对于 MergeTree 表,xxception
fmt::v7::format_error
可能在后台记录的行为。此修复解决了 #17613 问题。#17615 (alexey-milovidov)。 - 修复了在交互模式下使用 clickhouse-client 且多行查询和单行注释被错误地扩展到查询末尾的行为。此修复解决了 #13654 问题。#17565 (alexey-milovidov)。
- 修复了服务器在极少数情况下可能停止接受连接的问题。#17542 (alexey-milovidov)。
- 修复了在不同副本上杀死相应的 mutation 时 alter 查询挂起的问题。此修复解决了 #16953 问题。#17499 (alesapin)。
- 修复了 mark 缓存大小被 clickhouse 低估的错误。当存在大量带有 mark 的小文件时,可能会发生这种情况。#17496 (alesapin)。
- 修复了启用设置
optimize_redundant_functions_in_order_by
时的ORDER BY
。#17471 (Anton Popov)。 - 修复了由于不正确的优化可能导致在
DISTINCT
之后出现重复项的问题。此修复解决了 #17294 问题。 #17296 (li chengxiang)。 #17439 (Nikolai Kochetov)。 - 修复了从带有
LowCardinality
类型的JOIN
表中读取数据时发生的崩溃问题。此修复解决了 #17228 问题。 #17397 (Nikolai Kochetov)。 - 修复了子查询中存在 const 列时,set 索引失效的问题。此修复解决了 #17246 问题。 #17249 (Amos Bird)。
- 修复了当索引比较的类型不同时,可能发生的错误索引分析。此修复解决了 #17122 问题。 #17145 (Amos Bird)。
- 修复了导致崩溃的
ColumnConst
比较问题。此修复解决了 #17088 问题。 #17135 (Amos Bird)。 - 修复了对于非 leader
ReplicatedMergeTreeTables
,ON CLUSTER
查询可能永远挂起的问题。 #17089 (alesapin)。 - 修复了在 funciton
fuzzBits
中发现的 fuzzer 错误。此修复解决了 #16980 问题。 #17051 (hexiaoting)。 - 避免远程查询的不必要的网络错误,这些查询可能在执行期间被取消,例如带有
LIMIT
的查询。 #17006 (Azat Khuzhin)。 - 修复了从 double 类型转换为大整数(128 位、256 位)时结果错误的问题。 #16986 (Mike)。
- 在发生错误时重新解析
format_avro_schema_registry_url
的 IP 地址。#16985 (filimonov)。 - 修复了当
SELECT
在正在被修改的列上使用WHERE
表达式,并且 alter 操作尚未完成时,可能发生的服务器崩溃问题(在ALTER TABLE ... MODIFY COLUMN ... NewType
操作之后)。 #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)。 - 修复了 ClickHouse 始终返回 0 而不是通过 MySQL 协议执行
INSERT
查询时受影响行数的行为。此修复解决了 #16605 问题。 #16715 (Winter Zhang)。 - 修复了 TDigest 的不受控制的增长。 #16680 (hrissan)。
- 修复了在使用 Aggregate 函数中的后缀
if
时,远程查询失败的问题。此修复解决了 #16574 和 #16231 问题。 #16610 (Winter Zhang)。 - 修复了针对优化后的简单 count 查询和 system.tables,由
select_sequential_consistency
引起的不一致行为。 #16309 (Hao Chen)。 - 当 ColumnTransformer 替换不存在的列时,抛出错误。 #16183 (hexiaoting)。
ClickHouse 发布 v20.11.3.3-stable 版本,2020-11-13
Bug 修复
- 修复了当查询分析器开启且 ClickHouse 安装在 glibc 版本存在(据称)某些函数的异步展开表损坏的操作系统上时,极少数情况下发生的静默崩溃。此修复解决了 #15301。此修复还解决了 #13098。#16846 (alexey-milovidov)。
ClickHouse 发布 v20.11.2.1 版本,2020-11-11
向后不兼容的变更
- 如果在
distributed_ddl
配置部分指定了某些profile
,则此 profile 可能会在服务器启动时覆盖default
profile 的设置。此问题已修复,现在分布式 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
表,该表显示当前正在运行的后台 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
函数 - 返回错误的变量名(对于分析 query_log 和类似日志很有用)。system.errors
表 - 显示错误发生的次数(遵循system_events_show_zero_values
)。 #16438 (Azat Khuzhin)。- 添加了函数
untuple
,这是一个特殊函数,可以通过展开命名元组向 SELECT 列表引入新列。 #16242 (Nikolai Kochetov, Amos Bird)。 - 现在我们可以通过查询参数提供标识符。这些参数可以用作表对象或列。 #16594 (Amos Bird)。
- 为 MergeTree BloomFilter 索引添加了对大整数(UInt256、Int128、Int256)和 UUID 数据类型的支持。大整数是一项实验性功能。 #16642 (Maksim Kita)。
- 添加了
farmFingerprint64
函数(非加密字符串哈希)。 #16570 (Jacob Hayes)。 - 添加了
log_queries_min_query_duration_ms
,只有慢于此设置值的查询才会进入query_log
/query_thread_log
(即类似 mysql 中的slow_query_log
)。 #16529 (Azat Khuzhin)。 - 能够在
Alpine
之上创建 docker 镜像。使用 ubuntu 20.04 的预编译二进制文件和 glibc 组件。 #16479 (filimonov)。 - 添加了
toUUIDOrNull
、toUUIDOrZero
转换函数。 #16337 (Maksim Kita)。 - 添加了
max_concurrent_queries_for_all_users
设置,有关用例,请参见 #6636。 #16154 (nvartolomei)。 - 为 clickhouse-client 添加了一个新选项
print_query_id
。它有助于生成带有客户端生成的当前查询 ID 的任意字符串。还在 clickhouse-client 中默认打印查询 ID。 #15809 (Amos Bird)。 - 添加了
tid
和logTrace
函数。这关闭了 #9434 问题。 #15803 (flynn)。 - 添加了函数
formatReadableTimeDelta
,该函数将时间增量格式化为人类可读的字符串 ... #15497 (Filipe Caixeta)。 - 为多磁盘配置中的卷添加了
disable_merges
选项。 #13956 (Vladimir Chebotarev)。
实验性功能
- 新函数
encrypt
、aes_encrypt_mysql
、decrypt
、aes_decrypt_mysql
。这些函数运行缓慢,因此我们将其视为实验性功能。 #11844 (Vasily Nemkov)。
Bug 修复
- 在
system.distribution_queue
中掩盖 data_path 中的密码。 #16727 (Azat Khuzhin)。 - 修复了在启用
transform_null_in
设置的情况下,对多个列和元组使用IN
运算符的问题。修复了 #15310 问题。#16722 (Anton Popov)。 - 如果查询的表没有 sampling,则设置
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 Engine 时的 bug。
MaterializeMySQL
是一项实验性功能。 #16504 (TCeason)。 - 专门构造的带有
Decimal
类型的round
函数参数会导致整数除以零。此修复解决了 #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 数据库的 bug。当用作数据库引擎的 MySQL 服务器关闭时,某些查询会引发异常,因为它们尝试从禁用的服务器获取表,但这没有必要。例如,查询
SELECT ... FROM system.parts
应该仅适用于 MergeTree 表,而根本不接触 MySQL 数据库。 #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 服务器作为代理来解决使用
S3
的问题。Nginx 当前不接受带有空路径的 URL,例如http://domain.com?delete
,但 vanilla aws-sdk-cpp 会生成这种 URL。此提交使用修补的 aws-sdk-cpp 版本,该版本在此类情况下使 URL 的路径为 "/",例如http://domain.com/?delete
。 #16814 (ianton-ru)。 - 改进了输入数据中解析错误的诊断。在
Cannot read all data
错误时提供行号。 #16644 (alexey-milovidov)。 - 使
minMap
和maxMap
的行为更符合期望。它不会跳过结果中的零值。修复了 #16087 问题。 #16631 (Ildus Kurbangaliev)。 - 更好地在运行时更新 ZooKeeper 配置。 #16630 (sundyli)。
- 尽早应用 SETTINGS 子句。它允许在查询中修改更多设置。这关闭了 #3178 问题。 #16619 (alexey-milovidov)。
- 现在
event_time_microseconds
字段以 Decimal64 格式存储,而不是 UInt64。 #16617 (Nikita Mikhaylov)。 - 现在参数化函数可以在
APPLY
列转换器中使用。 #16589 (Amos Bird)。 - 改进了后台任务的调度,该任务删除了
Atomic
数据库中已删除表的数据。如果表实际上没有数据目录,则Atomic
数据库不会创建指向表数据目录的损坏的符号链接。 #16584 (tavplubix)。 WITH
部分 (CTE) 中的子查询可以通过名称引用WITH
部分中之前的子查询。 #16575 (Amos Bird)。- 将 current_database 添加到
system.query_thread_log
中。 #16558 (Azat Khuzhin)。 - 允许将当前实例中已提交或过时的 parts fetch 到 detached 目录中。当从另一个集群迁移表并具有 N 到 1 个 shards 映射时,这很有用。它也与当前的 fetchPartition 实现一致。 #16538 (Amos Bird)。
RabbitMQ
的多项改进:修复了 #16263 的 bug。还最大限度地缩短了事件循环的生命周期。添加了更高效的队列设置。 #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 表引擎系列指定
PRIMARY KEY
而不带ORDER BY
。关闭了 #15591 问题。 #16284 (alesapin)。 - 如果系统中没有 tmp 文件夹(chroot、配置错误等),
clickhouse-local
将在当前目录中创建临时子文件夹。 #16280 (filimonov)。 - 添加了对嵌套数据类型(如命名元组)作为子类型的支持。修复了 #15587 问题。 #16262 (Ivan)。
- 支持
DROP DATABASE
的database_atomic_wait_for_drop_and_detach_synchronously
/NO DELAY
/SYNC
。 #16127 (Azat Khuzhin)。 - 添加了
allow_nondeterministic_optimize_skip_unused_shards
(以允许在分片键中使用非确定性函数,如rand()
或dictGet()
)。 #16105 (Azat Khuzhin)。 - 修复了通过 HTTP 查询的
memory_profiler_step
/max_untracked_memory
问题(包含测试)。修复了在 xml 配置文件中全局调整此值也无济于事的问题,因为无论如何都不会应用这些设置,仅使用默认值 (4MB) used。修复了 http 查询的最根 ThreadStatus 的query_id
(通过在读取 query_id 后初始化 QueryScope)。 #16101 (Azat Khuzhin)。 - 现在允许执行
ALTER ... ON CLUSTER
查询,而与集群配置中的<internal_replication>
设置无关。 #16075 (alesapin)。 - 修复了由于加载建议导致
clickhouse-client
可能在退出时异常终止的罕见问题。此修复解决了 #16035。 #16047 (alexey-milovidov)。 - 为具有复杂键的
Redis
字典添加了cache
布局的支持。 #15985 (Anton Popov)。 - 修复了在配置错误(
connections_with_failover_max_tries
设置为 0)时查询挂起(无限循环)的问题。 #15876 (Azat Khuzhin)。 - 将一些日志消息的级别从 information 更改为 debug,这样信息消息将不会为每个查询都显示。此更改关闭了 #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 assignment 的性能。对用户来说应该是不可见的。 #16191 (alesapin)。
- 通过预先分配哈希表,加速了 hashed/sparse_hashed 字典的加载速度。 #15454 (Azat Khuzhin)。
- 现在,简单的 count 优化变得稍微复杂一些。包含精确分区表达式的谓词也可以被优化。此更改还修复了 #11092,该问题在
max_parallel_replicas > 1
时返回错误的计数。 #15074 (Amos Bird)。
构建/测试/打包改进
- 为无状态测试添加了不稳定性检查。它将提前检测到潜在的不稳定的功能测试,在它们被合并之前。 #16238 (alesapin)。
- 使用
croaring
的正确版本,而不是 amalgamation。 #16285 (sundyli)。 - 改进了
ya.make
构建系统 (Arcadia) 的构建文件生成。 #16700 (alexey-milovidov)。 - 为
MaterializeMySQL
数据库引擎添加了 MySQL BinLog 文件检查工具。MaterializeMySQL
是一个实验性功能。 #16223 (Winter Zhang)。 - 检查非可执行文件是否具有可执行位。人们经常不小心从 Windows 提交可执行文件。 #15843 (alexey-milovidov)。
- 检查头文件中是否包含
#pragma once
。 #15818 (alexey-milovidov)。 - 修复了 libhdfs3 中非法的代码风格
&vector[idx]
。此修复解决了 libcxx debug build 问题。另请参阅 https://github.com/ClickHouse-Extras/libhdfs3/pull/8 。 #15815 (Amos Bird)。 - 修复了 Mac OS 上一个杂项示例工具的构建。请注意,我们在 CI 中不在 Mac OS 上构建示例(我们只构建 ClickHouse 二进制文件),因此它很有可能再次崩溃。此修复解决了 #15804。 #15808 (alexey-milovidov)。
- 简化了 Sys/V init 脚本。 #14135 (alexey-milovidov)。
- 为了提高
db_generator
的可用性,为其添加了boost::program_options
。此更改关闭了 #15940。 #15973 (Nikita Mikhaylov)。
ClickHouse 20.10 版本
ClickHouse v20.10.7.4-stable 版本发布,2020-12-24
Bug 修复
- 修复了在具有双
IPv4/IPv6
堆栈的机器上,服务器无法访问clickhouse-odbc-bridge
进程的问题,并修复了 ODBC 字典更新使用格式错误的查询和/或导致崩溃的问题。这可能关闭了 #14489。 #18278 (Denis Glazachev)。 - 修复了 Enum 和 Int 类型之间的键比较。此修复解决了 #17989。 #18214 (Amos Bird)。
- 修复了
MaterializeMySQL
数据库引擎中的唯一键转换崩溃。这修复了 #18186 和 #16372 #18211 (Winter Zhang)。 - 修复了 S3 URL 解析中的
std::out_of_range: basic_string
。 #18059 (Vladimir Chebotarev)。 - 修复了由于 MaterializeMySQL 不支持转换 MySQL 前缀索引而导致某些表未从 MySQL 同步到 ClickHouse 的问题。这修复了 #15187 和 #17912 #17944 (Winter Zhang)。
- 修复了
topK
聚合函数中可能发生的段错误。此问题关闭了 #17404。#17845 (Maksim Kita)。 - 如果
in_memory_parts_enable_wal
被禁用,则不从WAL
恢复 parts。 #17802 (detailyang)。 - 修复了 ClickHouse 无法恢复与 MySQL 服务器的连接的问题。 #17681 (Alexander Kazakov)。
- 修复了服务器在守护程序模式下运行时
system.stack_trace
表为空的问题。 #17630 (Amos Bird)。 - 修复了当
clickhouse-client
在交互模式下使用多行查询时,单行注释错误地扩展到查询末尾的行为。此修复解决了 #13654。 #17565 (alexey-milovidov)。 - 修复了服务器在极少数情况下可能停止接受连接的问题。#17542 (alexey-milovidov)。
- 修复了当相应的 mutation 在不同的副本上被杀死时,
ALTER
查询挂起的问题。此修复解决了 #16953。 #17499 (alesapin)。 - 修复了 mark 缓存大小被 clickhouse 低估的错误。当存在大量带有 mark 的小文件时,可能会发生这种情况。#17496 (alesapin)。
- 修复了启用设置
optimize_redundant_functions_in_order_by
时的ORDER BY
。#17471 (Anton Popov)。 - 修复了由于不正确的优化而可能在
DISTINCT
之后出现的重复项。修复了 #17294。 #17296 (li chengxiang). #17439 (Nikolai Kochetov)。 - 修复了从带有
LowCardinality
类型的JOIN
表中读取数据时发生的崩溃问题。此修复解决了 #17228 问题。 #17397 (Nikolai Kochetov)。 - 修复了子查询中存在 const 列时,set 索引失效的问题。此修复解决了 #17246 问题。 #17249 (Amos Bird)。
- 修复了导致崩溃的
ColumnConst
比较。此修复解决了 #17088 。 #17135 (Amos Bird)。 - 修复了对于非 leader
ReplicatedMergeTreeTables
,ON CLUSTER
查询可能永远挂起的问题。 #17089 (alesapin)。 - 修复了 fuzzer 发现的函数
fuzzBits
中的 bug。此修复解决了 #16980。 #17051 (hexiaoting)。 - 避免远程查询的不必要的网络错误,这些查询可能在执行期间被取消,例如带有
LIMIT
的查询。 #17006 (Azat Khuzhin)。 - 修复了从 double 类型转换为大整数(128 位、256 位)时结果错误的问题。 #16986 (Mike)。
- 在发生错误时重新解析
format_avro_schema_registry_url
的 IP 地址。#16985 (filimonov)。 - 修复了当
SELECT
在正在被修改的列上使用WHERE
表达式,并且 alter 操作尚未完成时,可能发生的服务器崩溃问题(在ALTER TABLE ... MODIFY COLUMN ... NewType
操作之后)。 #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
写入任何数据,则中止 multipart 上传。 #16840 (Pavel Kovalenko)。 - 修复了在不带任何参数的情况下使用
any
函数时发生的崩溃问题。此修复解决了 #16803 问题。 #16826 (Amos Bird)。 - 修复了 ClickHouse 始终返回 0 而不是通过 MySQL 协议执行
INSERT
查询时受影响行数的行为。此修复解决了 #16605 问题。 #16715 (Winter Zhang)。 - 修复了
TDigest
的不受控制的增长。 #16680 (hrissan)。 - 修复了在使用 Aggregate 函数中的后缀
if
时,远程查询失败的问题。此修复解决了 #16574 和 #16231 问题。 #16610 (Winter Zhang)。
ClickHouse v20.10.4.1-stable 版本发布,2020-11-13
Bug 修复
- 修复了当查询分析器开启且 ClickHouse 安装在 glibc 版本存在(据称)某些函数的异步展开表损坏的操作系统上时,极少数情况下发生的静默崩溃。此修复解决了 #15301。此修复还解决了 #13098。#16846 (alexey-milovidov)。
- 修复了在启用
transform_null_in
设置的情况下,对多个列和元组使用IN
运算符的问题。修复了 #15310 问题。#16722 (Anton Popov)。 - 这将修复带有 max_threads>0 和 ORDER BY 中表达式的 optimize_read_in_order/optimize_aggregation_in_order。 #16637 (Azat Khuzhin)。
- 现在,当从输入解析 AVRO 时,LowCardinality 会从类型中删除。修复了 #16188。 #16521 (Mike)。
- 通过正确收缩 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)。
- 修复了 MySQL 数据库的 bug。当用作数据库引擎的 MySQL 服务器关闭时,某些查询会引发异常,因为它们尝试从禁用的服务器获取表,但这没有必要。例如,查询
SELECT ... FROM system.parts
应该仅适用于 MergeTree 表,而根本不接触 MySQL 数据库。 #16032 (Kruglov Pavel)。
改进
- 使用 nginx 服务器作为代理时,可以绕过 S3 的使用。Nginx 当前不接受带有空路径的 URL,例如 http://domain.com?delete,但 vanilla aws-sdk-cpp 会生成这种 URL。此提交使用了修补后的 aws-sdk-cpp 版本,在这种情况下,它使 URL 的路径为 "/",例如 http://domain.com/?delete。 #16813 (ianton-ru)。
ClickHouse v20.10.3.30 版本发布,2020-10-28
向后不兼容的变更
- 使
multiple_joins_rewriter_version
过时。删除了 joins rewriter 的第一个版本。 #15472 (Artem Zuikov)。 - 更改了
format_regexp_escaping_rule
设置(它与Regexp
格式相关)的默认值,使其为Raw
(这意味着 - 将整个子模式读取为一个值),以使行为更符合用户的期望。 #15426 (alexey-milovidov)。 - 在 SQL 中添加了对嵌套多行注释
/* comment /* comment */ */
的支持。这符合 SQL 标准。 #14655 (alexey-milovidov)。 - 添加了 MergeTree 设置(
max_replicated_merges_with_ttl_in_queue
和max_number_of_merges_with_ttl_in_pool
)来控制后台池和复制队列中带有 TTL 的 merges 的数量。只有当您使用 delete TTL 时,此更改才会破坏与旧版本的兼容性。否则,复制将保持兼容。如果您一次更新所有分片副本,或者执行SYSTEM STOP TTL MERGES
直到您完成所有副本的更新,则可以避免不兼容性问题。如果您在复制队列中获得不兼容的条目,首先,执行SYSTEM STOP TTL MERGES
,然后在ALTER TABLE ... DETACH PARTITION ...
中分离分配了不兼容 TTL merge 的分区。在单个副本上将其重新附加。 #14490 (alesapin)。 - 当从早于 20.5 的版本升级时,如果执行滚动更新并且集群同时包含 20.5 或更高版本和低于 20.5 的版本,如果旧版本的 ClickHouse 节点重新启动并且在存在较新版本的情况下启动了旧版本,则可能导致
Part ... intersects previous part
错误。为了防止此错误,请先在所有集群节点上安装较新的 clickhouse-server 软件包,然后再执行重启(因此,当 clickhouse-server 重新启动时,它将使用新版本启动)。
新功能
- 后台数据重新压缩。为 MergeTree 表引擎系列添加了指定
TTL ... RECOMPRESS codec_name
的能力。 #14494 (alesapin)。 - 添加了并行 quorum 插入。此更改关闭了 #15601。 #15601 (Latysheva Alexandra)。
- 用于额外强制数据持久性的设置。对非复制设置很有用。 #11948 (Anton Popov)。
- 当重复块被写入到本地不存在的副本(尚未从副本中获取)时,不要忽略它,并在本地写入以达到与成功复制相同的效果。 #11684 (alexey-milovidov)。
- 现在我们支持
WITH <identifier> AS (subquery) ...
在查询上下文中引入命名子查询。此更改关闭了 #2416。此更改关闭了 #4967。 #14771 (Amos Bird)。 - 引入了
enable_global_with_statement
设置,该设置将第一个 select 的WITH
语句传播到同一级别的其他 select 查询,并使WITH
语句中的别名对子查询可见。 #15451 (Amos Bird)。 - 安全的集群间查询执行(使用 initial_user 作为当前查询用户)。 #13156 (Azat Khuzhin). #15551 (Azat Khuzhin)。
- 添加了删除列属性和表 TTL 的能力。引入了查询
ALTER TABLE MODIFY COLUMN col_name REMOVE what_to_remove
和ALTER TABLE REMOVE TTL
。这两个操作都是轻量级的,并在元数据级别执行。 #14742 (alesapin)。 - 添加了
RawBLOB
格式。它旨在输入或输出单个值,没有任何转义符和分隔符。此更改关闭了 #15349。 #15364 (alexey-milovidov)。 - 添加了
reinterpretAsUUID
函数,该函数允许将大端字节字符串转换为 UUID。 #15480 (Alexander Kuzmenkov)。 - 实现了
force_data_skipping_indices
设置。 #15642 (Azat Khuzhin)。 - 添加了一个设置
output_format_pretty_row_numbers
,用于在 Pretty 格式中对结果进行编号。此更改关闭了 #15350。 #15443 (flynn)。 - 添加了查询混淆工具。它允许共享更多查询以进行更好的测试。此更改关闭了 #15268。 #15321 (alexey-milovidov)。
- 添加了表函数
null('structure')
。 #14797 (vxider)。 - 添加了
formatReadableQuantity
函数。它对于人类读取大数字很有用。 #14725 (Artem Hnilov)。 - 添加了
LineAsString
格式,该格式接受以换行符分隔的行序列,每行都作为单个 String 字段进行解析。 #14703 (Nikita Mikhaylov), #13846 (hexiaoting)。 - 添加了
JSONStrings
格式,该格式以字符串数组形式输出数据。 #14333 (hcz)。 - 为
Regexp
格式添加了 "Raw" 列格式的支持。它允许简单地提取整个子模式,而无需任何转义规则。 #15363 (alexey-milovidov)。 - 允许为
TSV
输出格式配置NULL
表示形式。它由设置output_format_tsv_null_representation
控制,默认值为\N
。此更改关闭了 #9375。请注意,该设置仅控制输出格式,\N
是TSV
输入格式唯一支持的NULL
表示形式。 #14586 (Kruglov Pavel)。 - 为
MaterializeMySQL
支持 Decimal 数据类型。MaterializeMySQL
是一个实验性功能。 #14535 (Winter Zhang)。 - 添加新功能:
SHOW DATABASES LIKE 'xxx'
。 #14521 (hexiaoting)。 - 添加了一个脚本,用于将(任意)git 存储库导入到 ClickHouse 作为示例数据集。 #14471 (alexey-milovidov)。
- 现在,insert 语句可以在列列表中使用带有列转换器的星号(或变体)。 #14453 (Amos Bird)。
- 新的查询复杂度限制设置
max_rows_to_read_leaf
,max_bytes_to_read_leaf
用于分布式查询,以限制叶子节点上读取的最大行/字节数。限制仅应用于本地读取,不包括根节点上的最终合并阶段。 #14221 (Roman Khavronenko)。 - 允许用户在配置文件的
<replicated_merge_tree>
部分中为ReplicatedMergeTree*
存储指定设置。它的工作方式类似于<merge_tree>
部分。对于ReplicatedMergeTree*
存储,来自<merge_tree>
和<replicated_merge_tree>
的设置一起应用,但来自<replicated_merge_tree>
的设置具有更高的优先级。添加了system.replicated_merge_tree_settings
表。 #13573 (Amos Bird)。 - 添加了
mapPopulateSeries
函数。 #13166 (Ildus Kurbangaliev)。 - 支持 MySQL 类型:
decimal
(作为 ClickHouseDecimal
)和具有亚秒级精度的datetime
(作为DateTime64
)。 #11512 (Vasily Nemkov)。 - 将
event_time_microseconds
字段引入system.text_log
、system.trace_log
、system.query_log
和system.query_thread_log
表。 #14760 (Bharat Nallan)。 - 将
event_time_microseconds
添加到system.asynchronous_metric_log
&system.metric_log
表。 #14514 (Bharat Nallan)。 - 将
query_start_time_microseconds
字段添加到system.query_log
&system.query_thread_log
表。 #14252 (Bharat Nallan)。
Bug 修复
- 修复了内存可能被过度分配而忽略限制的情况。此更改关闭了 #14560。 #16206 (alexey-milovidov)。
- 修复了
executable
字典源挂起的问题。在之前的版本中,当使用某些格式(例如JSONEachRow
)时,数据不会在子进程至少输出某些内容之前馈送到子进程。此更改关闭了 #1697。此更改关闭了 #2455。 #14525 (alexey-milovidov)。 - 修复了函数
dictGet
中发生异常时的 double free。如果字典加载时出错,则可能会发生这种情况。 #16429 (Nikolai Kochetov)。 - 修复了带有 totals/rollup/cube modifers 和 group by 键上的 min/max 函数的 group by。修复了 #16393。 #16397 (Anton Popov)。
- 修复了带有 prefer_localhost_replica=0 和 internal_replication 的异步 Distributed INSERT。 #16358 (Azat Khuzhin)。
- 修复了 TwoLevelStringHashTable 实现中一个非常错误的代码,该代码可能导致内存泄漏。 #16264 (Amos Bird)。
- 修复了 lambda 中某些错误聚合情况下的段错误。 #16082 (Anton Popov)。
- 修复了
ReplicatedVersionedCollapsingMergeTree
的ALTER MODIFY ... ORDER BY
查询挂起的问题。此修复解决了 #15980。 #16011 (alesapin)。 MaterializeMySQL
(实验性功能):修复了 collate name & charset name 解析器,并支持字符串类型的length = 0
。 #16008 (Winter Zhang)。- 允许为具有复杂键的字典使用
direct
布局。 #16007 (Anton Popov)。 - 防止副本在不活动一段时间后发生复制错误时挂起 5-10 分钟。 #15987 (filimonov)。
- 修复了在插入或从 MaterializedView 中选择数据时,以及并发删除目标表(对于 Atomic 数据库引擎)时,罕见的段错误。 #15984 (tavplubix)。
- 修复了设置配置文件解析中的歧义:
CREATE USER ... SETTINGS profile readonly
现在被视为使用名为readonly
的配置文件,而不是名为profile
的设置,并带有 readonly 约束。此修复解决了 #15628。 #15982 (Vitaly Baranov)。 MaterializeMySQL
(实验性功能):修复了创建数据库失败时的崩溃。 #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:当重新分析查询时,具有相同别名的 difference 表达式。 #15886 (Winter Zhang)。
- 修复了 RBAC 实现中可能非常罕见的死锁。 #15875 (Vitaly Baranov)。
- 修复了在
ALTER MODIFY COLUMN
查询之后执行的SELECT ... ORDER BY DESC
查询中出现的异常Block structure mismatch
。修复了 #15800。 #15852 (alesapin)。 MaterializeMySQL
(实验性功能):修复了select count()
的不准确性。 #15767 (tavplubix)。- 修复了一些仅选择虚拟列的查询的情况。以前,可能会抛出
Not found column _nothing in block
异常。修复了 #12298。 #15756 (Anton Popov)。 - 修复了 Atomic 数据库中包含内部表的物化视图的删除问题(由于工作线程挂起,导致递归删除 MV 的内部表,所有后续的 DROP TABLE 操作都会挂起)。#15743 (Azat Khuzhin)。
- 如果首次尝试失败,则可以移动 part 到另一个磁盘/卷。#15723 (Pavel Kovalenko)。
- 修复了在
MATERIALIZED VIEW
的查询包含ARRAY JOIN
时,插入数据到MATERIALIZED VIEW
中可能发生的Cannot find column
错误。#15717 (Nikolai Kochetov)。 - 修复了
max_replicated_logs_to_keep
设置的默认值过低的问题,这可能导致副本过于频繁地丢失。通过选择最新的副本进行克隆,改进了丢失副本的恢复过程。同时,不要从丢失的副本中删除旧的 part,而是分离它们。#15701 (tavplubix)。 - 修复了 MySQL 字典和表中的罕见竞态条件。#15686 (alesapin)。
- 修复了 AMQP-CPP 中的(良性)竞态条件。#15667 (alesapin)。
- 修复了从
Buffer
表读取数据时,如果Buffer
表的结构与目标表不同,则发生的Cannot add simple transform to empty Pipe
错误。如果目标表对查询返回空结果,则可能发生这种情况。修复了 #15529。#15662 (Nikolai Kochetov)。 - 正确处理插入到带有 S3 的 MergeTree 表时的错误。基于 S3 的 MergeTree 是一项实验性功能。#15657 (Pavel Kovalenko)。
- 修复了 S3 表函数中的一个 bug:URL 中的 region 没有应用于 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)。 - Mutation 可能会在等待
MOVE
或REPLACE PARTITION
之后,或者在极少数情况下,在DETACH
或DROP PARTITION
之后等待某些不存在的 part。此问题已修复。#15537 (tavplubix)。 - 修复了如果执行了具有相同模式的
LIKE
操作,则ILIKE
运算符会停止区分大小写的 bug。#15536 (alesapin)。 - 修复了当选择数据中不存在的列,但这些列依赖于数据中也不存在的其他列时,出现的
Missing columns
错误。修复了 #15530。#15532 (alesapin)。 - 当仅向 ReplicatedMergeTree 传递单个参数时,抛出错误,而不是忽略它。#15516 (nvartolomei)。
- 修复了 DDLWorker 中事件订阅的 bug,该 bug 偶尔可能导致
ON CLUSTER
中的查询挂起。在 #13450 中引入。#15477 (alesapin)。 - 当
boundingRatio
聚合函数的第二个参数类型错误时,报告正确的错误。#15407 (detailyang)。 - 修复了 #15365:附加带有 MySQL 引擎的数据库时抛出异常(没有查询上下文)。#15384 (Winter Zhang)。
- 修复了 select 查询中多次出现列转换器的情况。#15378 (Amos Bird)。
- 修复了
S3
存储中的压缩问题。#15376 (Vladimir Chebotarev)。 - 修复了类似
SELECT toStartOfDay(today())
的查询因抱怨 time_zone 参数为空而失败的 bug。#15319 (Bharat Nallan)。 - 修复了 MergeTree 表重命名和后台清理期间的竞态条件。#15304 (alesapin)。
- 修复了在启用系统日志时,服务器启动时出现的罕见竞态条件。#15300 (alesapin)。
- 修复了对同一个
MySQL
引擎表进行大量子查询时,查询挂起的问题。以前,如果查询中对同一个MySQL
表的子查询超过 16 个,则会永久挂起。#15299 (Anton Popov)。 - 修复了 QueryLog 中的 MSan 报告。未初始化的内存可能用于字段
memory_usage
。#15258 (alexey-milovidov)。 - 修复了当查询在 Merge 表上进行 JOIN 时,GROUP BY 中出现的 'Unknown identifier' 错误。#15242 (Artem Zuikov)。
- 修复了将
joinGet
与LowCardinality
类型一起使用时发生的实例崩溃。这修复了 #15214。#15220 (Amos Bird)。 - 修复了表引擎
Buffer
中的 bug,该 bug 导致在ALTER
查询之后,无法将新结构的数据插入到Buffer
表中。修复了 #15117。#15192 (alesapin)。 - 调整 MySQL 列定义数据包中的 Decimal 字段大小。#15152 (maqroll)。
- 修复了
join_algorithm='auto'
中的Data compressed with different methods
错误。在join_algorithm='partial_merge'
中,将 LowCardinality 保留为左表的 join key 类型。#15088 (Artem Zuikov)。 - 更新
jemalloc
以修复带有 affinity mask 的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 数据库中 DDL 查询执行时出现的
Cannot rename ... errno: 22, strerror: Invalid argument
错误。#15024 (tavplubix)。 - 修复了当内存限制超出且我们应该将 HashJoin 更改为 MergeJoin 时,
join_algorith='auto'
的 RIGHT 或 FULL JOIN 中的崩溃。#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
函数时,谓词下推无法工作的 bug。修复了 #14847。#14937 (filimonov)。 - 在
system.asynchronous_metrics
中发布每个逻辑核心的 CPU 频率。这修复了 #14923。#14924 (Alexander Kuzmenkov)。 MaterializeMySQL
(实验性功能):修复了.metadata.tmp File exists
错误。#14898 (Winter Zhang)。- 修复了
extractAllGroups
函数的某些调用可能触发 “Memory limit exceeded” 错误的问题。这修复了 #13383。#14889 (alexey-milovidov)。 - 修复了尝试使用文件描述符 INSERT 到 StorageFile 时发生的 SIGSEGV。#14887 (Azat Khuzhin)。
- 修复了
cache
字典中的段错误 #14837。#14879 (Nikita Mikhaylov)。 MaterializeMySQL
(实验性功能):修复了解析 MySQL binlog 事件中的 bug,该 bug 导致MaterializeMySQL
数据库引擎中出现Attempt to read after eof
和Packet payload is not fully read
错误。#14852 (Winter Zhang)。- 修复了
SELECT
查询中的罕见错误,当查询的列具有依赖于另一个也具有DEFAULT
且不在 select 查询中且磁盘上不存在的列的DEFAULT
表达式时,会发生此错误。部分修复了 #14531。#14845 (alesapin)。 - 修复了如果配置文件必须从 ZK 获取(使用
from_zk
include 选项),服务器在启动时与 ZooKeeper 通信时可能会卡住的问题。这修复了 #14814。#14843 (Alexander Kuzmenkov)。 - 修复了有符号类型的缩小
Int -> Int
转换的错误单调性检测。这可能导致不正确的查询结果。此 bug 在 #14513 中被揭示。#14783 (Amos Bird)。 Replace
列转换器应使用克隆的 AST 替换标识符。这修复了 #14695 。#14734 (Amos Bird)。- 修复了执行
ALTER ... MODIFY QUERY
时,物化视图元数据中遗漏的默认数据库名称。#14664 (tavplubix)。 - 修复了当赋值表达式中包含
Nullable
列和常量值(如UPDATE x = 42
)的ALTER UPDATE
mutation 导致列中值不正确或段错误的 bug。修复了 #13634, #14045。#14646 (alesapin)。 - 修复了错误的 Decimal 乘法结果导致结果列的 decimal scale 错误的问题。#14603 (Artem Zuikov)。
- 修复了
has
函数与Nullable
的LowCardinality
类型一起使用的问题。#14591 (Mike)。 - 清理 StorageReplicatedMergeTree 引擎的 CreateQuery 期间,Zookeeper 异常后的数据目录。#14563 (Bharat Nallan)。
- 修复了带有 combinator
-Resample
的函数中的罕见段错误,这可能在具有非常大的参数的溢出结果中出现。#14562 (Anton Popov)。 - 修复了将
Nullable(String)
转换为 Enum 的 bug。由 #12745 引入。这修复了 #14435。#14530 (Amos Bird)。 - 修复了
Nullable
列的不正确排序顺序。这修复了 #14344。#14495 (Nikita Mikhaylov)。 - 修复了
currentDatabase()
函数无法在ON CLUSTER
ddl 查询中使用的问题。#14211 (Winter Zhang)。 MaterializeMySQL
(实验性功能):修复了MaterializeMySQL
数据库引擎中的Packet payload is not fully read
错误。#14696 (BohuTANG)。
改进
- 默认情况下为新创建的数据库启用
Atomic
数据库引擎。#15003 (tavplubix)。 - 为具有子类型的列添加指定专用编解码器(如
Delta
、T64
等)的能力。实现了 #12551,修复了 #11397,修复了 #4609。#15089 (alesapin)。 - 动态重新加载 zookeeper 配置。#14678 (sundyli)。
- 现在允许执行
ALTER ... ON CLUSTER
查询,而与集群配置中的<internal_replication>
设置无关。 #16075 (alesapin)。 - 现在
joinGet
支持多键查找。是 #12418 的延续。#13015 (Amos Bird)。 - 如果为
Atomic
数据库指定了NO DELAY
或SYNC
,则等待DROP/DETACH TABLE
实际完成。#15448 (tavplubix)。 - 现在可以使用
ALTER
查询更改VersionedCollapsingMergeTree
的版本列类型。#15442 (alesapin)。 - 在复制表的创建时,展开
zookeeper_path
中的{database}
、{table}
和{uuid}
宏。如果RENAME TABLE
可能在服务器重启后破坏zookeeper_path
,则不允许执行RENAME TABLE
操作。修复了 #6917。#15348 (tavplubix)。 - 函数
now
允许使用带时区的参数。这关闭了 15264。#15285 (flynn)。 - 在
/docker-entrypoint-initdb.d/
中的所有脚本执行完毕之前,不允许连接到 ClickHouse 服务器。#15244 (Aleksei Kozharin)。 - 为
EXPLAIN PLAN
查询添加了optimize
设置。如果启用,则应用查询计划级别的优化。默认启用。#15201 (Nikolai Kochetov)。 - 为 CAST 的参数数量错误提供了正确的异常消息。这关闭了 #13992。#15029 (alexey-milovidov)。
- 添加了禁用数据 part 插入时 TTL 移动的选项。#15000 (Pavel Kovalenko)。
- 在执行 mutation 时忽略键约束。在没有此 pull request 的情况下,当
force_index_by_date = 1
或force_primary_key = 1
时,无法执行 mutation。#14973 (Amos Bird)。 - 允许删除 Replicated 表,如果之前的删除尝试由于 ZooKeeper 会话过期而失败。这修复了 #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)。 - 将
merge_algorithm
添加到system.merges
表,以改进合并检查。#14705 (Amos Bird)。 - 修复了由 zookeeper exists watch 引起的潜在内存泄漏。#14693 (hustnn)。
- 允许并行执行分布式 DDL。#14684 (Azat Khuzhin)。
- 添加
QueryMemoryLimitExceeded
事件计数器。这关闭了 #14589。#14647 (fastio)。 - 修复了查询格式化中的一些尾随空格。#14595 (Azat Khuzhin)。
- ClickHouse 对分区表达式和键表达式的处理方式不同。分区表达式用于构造包含相关列的 minmax 索引,而主键表达式则存储为表达式。有时,用户可能会在较粗的级别上对表进行分区,例如
partition by i / 1000
。但是,二元运算符不是单调的,此 PR 尝试修复此问题。它也可能使其他用例受益。#14513 (Amos Bird)。 - 添加了一个选项,可以跳过对
DiskS3
的访问检查。s3
磁盘是一项实验性功能。#14497 (Pavel Kovalenko)。 - 如果存在正在进行的 S3 请求,则加快服务器关闭过程。#14496 (Pavel Kovalenko)。
- 如果
SYSTEM RELOAD CONFIG
重新加载失败,现在会抛出异常,并继续使用之前的 users.xml。如果后台定期重新加载失败,也会继续使用之前的 users.xml。#14492 (Vitaly Baranov)。 - 对于在
clickhouse-client
的脚本模式下,VALUES 格式的内联数据 INSERT,除了换行符之外,还支持分号作为数据终止符。关闭了 #12288。#13192 (Alexander Kuzmenkov)。 - 在紧凑部件中支持自定义编解码器。#12183 (Anton Popov)。
性能提升
- 默认情况下为小部件启用紧凑部件。这将使处理频繁插入的效率略微提高(4..100 倍)。#11913 (alexey-milovidov)。
- 提高了
quantileTDigest
的性能。这修复了 #2668。#15542 (Kruglov Pavel)。 - 显著降低了 AggregatingInOrderTransform/optimize_aggregation_in_order 中的内存使用量。#15543 (Azat Khuzhin)。
- 更快的 256 位乘法。#15418 (Artem Zuikov)。
- 通过使用 (u)int64_t 作为宽整数的基本类型,提高了 256 位类型的性能。原始的宽整数使用 8 位类型作为基本类型。#14859 (Artem Zuikov)。
- 显式使用临时磁盘来存储垂直合并临时数据。#15639 (Grigory Pervakov)。
- 在一个 S3 DeleteObjects 请求中代替循环中的多个 DeleteObject。没有任何功能更改,因此已被现有测试(如 integration/test_log_family_s3)覆盖。#15238 (ianton-ru)。
- 修复了
DateTime <op> DateTime
错误地选择缓慢的通用实现的问题。这修复了 #15153。#15178 (Amos Bird)。 - 提高了
FixedString
类型的 GROUP BY key 的性能。#15034 (Amos Bird)。 - 仅在启动 clickhouse-server 时
mlock
代码段。在以前的版本中,所有映射区域都被锁定在内存中,包括调试信息。调试信息通常被拆分到单独的文件,但如果没有拆分,则会导致 +2..3 GiB 的内存使用量。#14929 (alexey-milovidov)。 - 由于链接时优化,ClickHouse 二进制文件变得更小。
构建/测试/打包改进
- 现在我们使用 clang-11 进行生产 ClickHouse 构建。#15239 (alesapin)。
- 现在我们在 CI 中使用 clang-11 构建 ClickHouse。#14846 (alesapin)。
- 将二进制构建(Linux、Darwin、AArch64、FreeDSD)切换到 clang-11。#15622 (Ilya Yatsishin)。
- 现在所有测试镜像都使用
llvm-symbolizer-11
。#15069 (alesapin)。 - 允许使用 llvm-11 进行构建。#15366 (alexey-milovidov)。
- 从
clang-tidy-10
切换到clang-tidy-11
。#14922 (alexey-milovidov)。 - 默认情况下使用 LLVM 的实验性 pass manager。#15608 (Danila Kutenin)。
- 不允许任何 C++ 翻译单元构建超过 10 分钟或使用超过 10 GB 的内存。这修复了 #14925。#15060 (alexey-milovidov)。
- 通过拆分测试运行和 profile 运行,使性能测试更稳定和具有代表性。#15027 (alexey-milovidov)。
- 尝试使性能测试更可靠。这是通过使用
madvise
动态重新映射进程的可执行内存以使用透明大页来完成的 - 它可以降低 iTLB 缺失的数量,这是性能测试中不稳定的主要来源。#14685 (alexey-milovidov)。 - 转换为 python3。此更改关闭了 #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 中的 MSan 报告(在具有 AVX-512 的服务器上)。此修复了 #14006。 #15030 (alexey-milovidov)。
- 重新格式化并清理所有集成测试 *.py 文件中的代码。 #14864 (Bharat Nallan)。
- 修复在 CI 中发现的 MaterializeMySQL 空事务不稳定测试用例。 #14854 (Winter Zhang)。
- 尝试稍微加速构建。 #14808 (alexey-milovidov)。
- 通过删除未使用的头文件稍微加速构建。 #14714 (alexey-milovidov)。
- 修复 OSX 中的构建失败。 #14761 (Winter Zhang)。
- 如果在操作系统中找到 ccache,则默认在 cmake 中启用它。 #14575 (alesapin)。
- 从 ClickHouse 仓库控制 CI 构建配置。 #14547 (alesapin)。
- 在 CMake 文件中:- 将一些选项的描述部分移至上面的注释中。- 在
option
的默认值中替换 0 ->OFF
,1 ->ON
。- 为选项添加了一些描述和文档链接。- 替换了FUZZER
选项(还有另一个选项ENABLE_FUZZING
也启用相同的功能)。- 删除了ENABLE_GTEST_LIBRARY
选项,因为已经有ENABLE_TESTS
。 请参阅 PR 中的完整描述:#14711 (Mike)。 - 使二进制文件稍微小一些(debug 版本约为 50 Mb)。 #14555 (Artem Zuikov)。
- 在 ConfigProcessor 中使用 std::filesystem::path 连接文件路径。 #14558 (Bharat Nallan)。
- 修复当使用负大整数调用
bitShiftLeft()
时的调试断言。 #14697 (Artem Zuikov)。
ClickHouse release 20.9
ClickHouse release v20.9.7.11-stable,2020-12-07
性能改进
- 修复了从大量
MergeTree
表中读取Merge
表的性能问题。修复了 #7748 问题。#16988 (Anton Popov)。
Bug Fix
- 如果
in_memory_parts_enable_wal
被禁用,则不要从 WAL 恢复部件。 #17802 (detailyang)。 - 修复了当插入到
Distributed
表时空间不足时发生的段错误。 #17737 (tavplubix)。 - 修复了 ClickHouse 无法恢复与 MySQL 服务器的连接的问题。 #17681 (Alexander Kazakov)。
- 修复了在 Linux 的 Windows 子系统上运行的 ClickHouse 中,在
Atomic
数据库中执行RENAME
查询时出现的Function not implemented
错误。修复了 #17661。 #17664 (tavplubix)。 - 当在交互模式下将 clickhouse-client 与多行查询一起使用时,单行注释错误地扩展到查询的末尾。这修复了 #13654。 #17565 (alexey-milovidov)。
- 修复了服务器在极少数情况下可能停止接受连接的问题。 #17542 (alexey-milovidov)。
- 修复了当在不同副本上终止相应的 mutation 时,alter 查询挂起的问题。修复了 #16953。 #17499 (alesapin)。
- 修复了 clickhouse 低估标记缓存大小的错误。当存在大量带有标记的小文件时,可能会发生这种情况。 #17496 (alesapin)。
- 修复了启用设置
optimize_redundant_functions_in_order_by
的ORDER BY
。 #17471 (Anton Popov)。 - 修复了由于不正确的优化而导致的
DISTINCT
之后的重复项。修复了 #17294。 #17296 (li chengxiang)。 #17439 (Nikolai Kochetov)。 - 修复了从具有
LowCardinality
类型的JOIN
表读取时发生的崩溃。修复了 #17228。 #17397 (Nikolai Kochetov)。 - 修复了子查询中存在 const 列时设置索引失效的问题。此修复了 #17246 。 #17249 (Amos Bird)。
- 修复了导致崩溃的 ColumnConst 比较。这修复了 #17088 。 #17135 (Amos Bird)。
- 修复了当
some_table
是AS table_function()
创建时,CREATE TABLE ... AS some_table
查询崩溃的问题。修复了 #16944。 #17072 (tavplubix)。 - funciton fuzzBits 的错误修复,相关问题:#16980。 #17051 (hexiaoting)。
- 避免远程查询的不必要的网络错误,这些查询可能在执行期间被取消,例如带有
LIMIT
的查询。 #17006 (Azat Khuzhin)。 - TODO。 #16866 (tavplubix)。
- 通过 MySQL 协议返回 INSERT 查询的影响行数。之前 ClickHouse 总是返回 0,现在已修复。修复了 #16605 问题。#16715 (Winter Zhang)。
构建/测试/打包改进
ClickHouse release v20.9.6.14-stable,2020-11-20
改进
- 使连接到需要 SNI 的
clickhouse-server
安全端点成为可能。当clickhouse-server
托管在 TLS 代理后面时,这是可能的。#16938 (filimonov)。 - 条件聚合函数(例如:
avgIf
、sumIf
、maxIf
)在缺少行且使用可空参数时应返回NULL
。 #13964 (Winter Zhang)。
Bug Fix
- 修复了对于非领导者的 ReplicatedMergeTreeTables,
ON CLUSTER
查询可能永远挂起的错误。 #17089 (alesapin)。 - 在发生错误时重新解析
format_avro_schema_registry_url
的 IP 地址。#16985 (filimonov)。 - 修复了
ALTER TABLE ... MODIFY COLUMN ... NewType
之后可能发生的服务器崩溃,此时SELECT
在 altering 列上具有WHERE
表达式,并且 alter 尚未完成。 #16968 (Amos Bird)。 - 安装脚本应始终在配置文件夹中创建子目录。这仅与使用自定义配置的 Docker 构建相关。#16936 (filimonov)。
- 修复了带有
ORDER BY
的查询可能出现的Illegal type of argument
错误。修复了 #16580。 #16928 (Nikolai Kochetov)。 - 如果未向 WriteBufferFromS3 写入任何数据,则中止分段上传。 #16840 (Pavel Kovalenko)。
- 修复了在不带任何参数的情况下使用
any
时发生的崩溃。这是为了解决 #16803 问题。抄送 @azat。#16826 (Amos Bird)。 - 修复了在启用
transform_null_in
设置的情况下,对多个列和元组使用IN
运算符的问题。修复了 #15310 问题。#16722 (Anton Popov)。 - 这将修复带有 max_threads>0 和 ORDER BY 中表达式的 optimize_read_in_order/optimize_aggregation_in_order。 #16637 (Azat Khuzhin)。
- 修复 #16574 修复 #16231 修复了使用 'if' 后缀聚合函数时远程查询失败的问题。 #16610 (Winter Zhang)。
- 在发生异常的情况下,查询完成得更快。如果发生异常,取消远程副本上的执行。 #15578 (Azat Khuzhin)。
ClickHouse release v20.9.5.5-stable,2020-11-13
Bug Fix
- 修复了当查询分析器开启且 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)。
- 修复了当用于过滤的部分数据的集合未创建时,可能导致部分返回数据被丢弃的不一致行为。 #16308 (Nikita Mikhaylov)。
- 修复了 MySQL 数据库的 bug。当用作数据库引擎的 MySQL 服务器关闭时,某些查询会引发异常,因为它们尝试从禁用的服务器获取表,但这没有必要。例如,查询
SELECT ... FROM system.parts
应该仅适用于 MergeTree 表,而根本不接触 MySQL 数据库。 #16032 (Kruglov Pavel)。
ClickHouse release v20.9.4.76-stable (2020-10-29)
Bug Fix
- 修复了函数
dictGet
中发生异常时的 double free。如果字典加载时出错,则可能会发生这种情况。 #16429 (Nikolai Kochetov)。 - 修复了带有 totals/rollup/cube modifers 和 group by 键上的 min/max 函数的 group by。修复了 #16393。 #16397 (Anton Popov)。
- 修复了异步 Distributed INSERT,其中 prefer_localhost_replica=0 和 internal_replication。 #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 中选择数据时,以及并发删除目标表(对于 Atomic 数据库引擎)时,罕见的段错误。 #15984 (tavplubix)。
- 修复了设置配置文件解析中的歧义:
CREATE USER ... SETTINGS profile readonly
现在被视为使用名为readonly
的配置文件,而不是名为profile
的设置,并带有 readonly 约束。此修复解决了 #15628。 #15982 (Vitaly Baranov)。 - 修复了数据库创建失败时的崩溃。 #15954 (Winter Zhang)。
- 修复了当表并发重命名时(对于 Atomic 数据库引擎)
DROP TABLE IF EXISTS
失败并出现Table ... does not exist
错误的问题。修复了并发执行某些涉及多个表的 DDL 查询(如DROP DATABASE
和RENAME TABLE
)时发生的罕见死锁。修复了并发执行DROP/DETACH TABLE
时DROP/DETACH DATABASE
失败并出现Table ... does not exist
的问题。 #15934 (tavplubix)。 - 修复了如果查询具有
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)。 - 修复了 MaterializeMySQL 的
select count()
不准确的问题。 #15767 (tavplubix)。 - 修复了一些仅选择虚拟列的查询的情况。以前,可能会抛出
Not found column _nothing in block
异常。修复了 #12298。 #15756 (Anton Popov)。 - 修复了
max_replicated_logs_to_keep
设置的默认值过低的问题,这可能导致副本过于频繁地丢失。通过选择最新的副本进行克隆,改进了丢失副本的恢复过程。同时,不要从丢失的副本中删除旧的 part,而是分离它们。#15701 (tavplubix)。 - 修复了从
Buffer
表读取数据时,如果Buffer
表的结构与目标表不同,则发生的Cannot add simple transform to empty Pipe
错误。如果目标表对查询返回空结果,则可能发生这种情况。修复了 #15529。#15662 (Nikolai Kochetov)。 - 修复了 S3 表函数中 glob 的错误,URL 中的 region 未应用于 S3 客户端配置。 #15646 (Vladimir Chebotarev)。
- 在分离只读表时,递减
ReadonlyReplica
指标。此修复了 #15598。 #15592 (sundyli)。 - 当仅向 ReplicatedMergeTree 传递单个参数时,抛出错误,而不是忽略它。#15516 (nvartolomei)。
改进
- 现在允许执行
ALTER ... ON CLUSTER
查询,而与集群配置中的<internal_replication>
设置无关。 #16075 (alesapin)。 - 在表创建时,在
ReplicatedMergeTree
参数中展开{database}
、{table}
和{uuid}
宏。 #16160 (tavplubix)。
ClickHouse release v20.9.3.45-stable (2020-10-09)
Bug Fix
- 修复了在
MATERIALIZED VIEW
的查询包含ARRAY JOIN
时,插入数据到MATERIALIZED VIEW
中可能发生的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)。
- Mutation 可能会在等待
MOVE
或REPLACE PARTITION
之后,或者在极少数情况下,在DETACH
或DROP PARTITION
之后等待某些不存在的 part。此问题已修复。#15537 (tavplubix)。 - 修复了如果执行了具有相同模式的
LIKE
操作,则ILIKE
运算符会停止区分大小写的 bug。#15536 (alesapin)。 - 修复了当选择数据中不存在的列,但这些列依赖于数据中也不存在的其他列时,出现的
Missing columns
错误。修复了 #15530。#15532 (alesapin)。 - 修复了 DDLWorker 中事件订阅的 bug,该 bug 偶尔可能导致
ON CLUSTER
中的查询挂起。在 #13450 中引入。#15477 (alesapin)。 - 当
boundingRatio
聚合函数的第二个参数类型错误时,报告正确的错误。#15407 (detailyang)。 - 修复了类似
SELECT toStartOfDay(today())
的查询因抱怨 time_zone 参数为空而失败的 bug。#15319 (Bharat Nallan)。 - 修复了 MergeTree 表重命名和后台清理期间的竞态条件。#15304 (alesapin)。
- 修复了启用 system.logs 时服务器启动时发生的罕见竞争条件。 #15300 (alesapin)。
- 修复了 QueryLog 中的 MSan 报告。未初始化的内存可能用于字段
memory_usage
。#15258 (alexey-milovidov)。 - 修复了将 joinGet 与 LowCardinality 类型一起使用时发生的实例崩溃。此修复了 #15214。 #15220 (Amos Bird)。
- 修复了表引擎
Buffer
中的 bug,该 bug 导致在ALTER
查询之后,无法将新结构的数据插入到Buffer
表中。修复了 #15117。#15192 (alesapin)。 - 调整 mysql 列定义数据包中的 decimals 字段大小。 #15152 (maqroll)。
- 修复了在 Mac OS 上的 docker 中运行 clickhouse-server 时,在 Atomic 数据库中执行 DDL 查询时出现的
Cannot rename ... errno: 22, strerror: Invalid argument
错误。 #15024 (tavplubix)。 - 修复了当子查询包含 finalizeAggregation 函数时谓词下推不起作用的问题。修复了 #14847。 #14937 (filimonov)。
- 修复了如果配置文件必须从 ZK 获取(使用
from_zk
include 选项),服务器在启动时与 ZooKeeper 通信时可能会卡住的问题。这修复了 #14814。#14843 (Alexander Kuzmenkov)。
改进
ClickHouse release v20.9.2.20,2020-09-22
向后不兼容的变更
- 当从早于 20.5 的版本升级时,如果执行滚动更新并且集群同时包含 20.5 或更高版本和低于 20.5 的版本,如果旧版本的 ClickHouse 节点重新启动并且在存在较新版本的情况下启动了旧版本,则可能导致
Part ... intersects previous part
错误。为了防止此错误,请先在所有集群节点上安装较新的 clickhouse-server 软件包,然后再执行重启(因此,当 clickhouse-server 重新启动时,它将使用新版本启动)。
新功能
- 添加了列转换器
EXCEPT
、REPLACE
、APPLY
,可以将其应用于选定列的列表(在*
或COLUMNS(...)
之后)。例如,您可以编写SELECT * EXCEPT(URL) REPLACE(number + 1 AS number)
。另一个示例:select * apply(length) apply(max) from wide_string_table
以找出所有字符串列的最大长度。 #14233 (Amos Bird)。 - 添加了聚合函数
rankCorr
,用于计算秩相关系数。 #11769 (antikvist) #14411 (Nikita Mikhaylov)。 - 添加了表函数
view
,它将子查询转换为表对象。这有助于传递查询。例如,它可以在 remote/cluster 表函数中使用。 #12567 (Amos Bird)。
Bug Fix
- 修复了在赋值表达式和常量值(如
UPDATE x = 42
)中使用 Nullable 列的ALTER UPDATE
mutation 导致列中值不正确或段错误的错误。修复了 #13634, #14045。 #14646 (alesapin)。 - 修复了错误的 Decimal 乘法结果导致结果列的 decimal scale 错误的问题。#14603 (Artem Zuikov)。
- 修复了
Nullable
列的不正确排序顺序。这修复了 #14344。#14495 (Nikita Mikhaylov)。 - 修复了如果
FixedString
类型的 primary key 与较小尺寸的字符串进行比较,则在索引分析中比较不一致的问题。此修复了 #14908。 #15033 (Amos Bird)。 - 修复了如果表的分区只有一个 part,则导致错误的 merges 分配的错误。 #14444 (alesapin)。
- 如果使用专门构造的参数调用函数
bar
,则可能发生缓冲区溢出。这关闭了 #13926。#15028 (alexey-milovidov)。 - 在
system.asynchronous_metrics
中发布每个逻辑核心的 CPU 频率。这修复了 #14923。#14924 (Alexander Kuzmenkov)。 - 修复了使用
MaterializeMySQL
数据库引擎时出现的.metadata.tmp File exists
错误。 #14898 (Winter Zhang)。 - 修复了
extractAllGroups
函数的某些调用可能触发 “Memory limit exceeded” 错误的问题。这修复了 #13383。#14889 (alexey-milovidov)。 - 修复了尝试 INSERT 到 StorageFile(fd) 时发生的 SIGSEGV。 #14887 (Azat Khuzhin)。
- 修复了
SELECT
查询中的罕见错误,当查询的列具有依赖于另一个也具有DEFAULT
且不在 select 查询中且磁盘上不存在的列的DEFAULT
表达式时,会发生此错误。部分修复了 #14531。#14845 (alesapin)。 - 修复了有符号类型的缩小
Int -> Int
转换的错误单调性检测。这可能导致不正确的查询结果。此 bug 在 #14513 中被揭示。#14783 (Amos Bird)。 - 修复了执行
ALTER ... MODIFY QUERY
时,物化视图元数据中遗漏的默认数据库名称。#14664 (tavplubix)。 - 修复了当涉及 LowCardinality 和 Nullable 类型时,函数
has
可能返回不正确结果的问题。 #14591 (Mike)。 - 清理使用 ReplicatedMergeTree 引擎的表的 CREATE 查询期间 Zookeeper 异常后的数据目录。 #14563 (Bharat Nallan)。
- 修复了带有 combinator
-Resample
的函数中的罕见段错误,这可能在具有非常大的参数的溢出结果中出现。#14562 (Anton Popov)。 - 检查
topK
聚合函数中的数组大小溢出。如果没有此检查,用户可能会发送带有精心设计的参数的查询,这将导致服务器崩溃。此更改关闭了 #14452。 #14467 (alexey-milovidov)。 - 将 SysVinit 的 restart/start/stop/reload 代理到 systemd(如果使用 systemd)。 #14460 (Azat Khuzhin)。
- 如果
PipelineExecutor
本身发生异常,则停止查询执行。这可以防止罕见的可能查询挂起。 #14334 #14402 (Nikolai Kochetov)。 - 修复了为
AS table_function
创建的表执行ALTER
查询期间发生的崩溃。修复了 #14212。 #14326 (alesapin)。 - 修复了带有 REFRESH 命令的 ALTER LIVE VIEW 查询期间发生的异常。LIVE VIEW 是一项实验性功能。 #14320 (Bharat Nallan)。
- 修复了具有嵌套解释器的查询的 QueryPlan 生命周期(对于 EXPLAIN PIPELINE graph=1)。 #14315 (Azat Khuzhin)。
- 更好地检查 SSD 缓存复杂键外部字典中的元组大小。此修复了 #13981。 #14313 (alexey-milovidov)。
- 禁止在
ALIAS
列类型上使用CODEC
。修复了 #13911。 #14263 (Bharat Nallan)。 - 修复了在非全局级别执行 GRANT ALL 语句的问题。 #13987 (Vitaly Baranov)。
- 修复了 lambda 中 arrayJoin() 捕获(抛出逻辑错误消息的异常)。 #13792 (Azat Khuzhin)。
实验性功能
- 添加了
db-generator
工具,用于通过给定的 SELECT 查询随机生成数据库。当用户仅提供不完整的错误报告时,它可以帮助重现问题。 #14442 (Nikita Mikhaylov) #10973 (ZeDRoman)。
改进
- 允许在存储 Distributed 中使用多卷存储配置。 #14839 (Pavel Kovalenko)。
- 禁止在
toStartOf*
类型的函数中使用空 time_zone 参数。 #14509 (Bharat Nallan)。 - MySQL 处理程序为类似
SET @@var = value
的查询返回OK
。此类语句将被忽略。这是必需的,因为某些 MySQL 驱动程序在握手后发送SET @@
查询以进行设置 https://github.com/ClickHouse/ClickHouse/issues/9336#issuecomment-686222422 。 #14469 (BohuTANG)。 - 现在,如果 TTL 之前没有物化,则将在合并期间应用它们。 #14438 (alesapin)。
- 现在
clickhouse-obfuscator
支持 UUID 类型,如 #13163 中提出的那样。 #14409 (dimarub2000)。 - 添加了新设置
system_events_show_zero_values
,如 #11384 中提出的那样。 #14404 (dimarub2000)。 - 在
MaterializeMySQL
中隐式地将 primary key 转换为 not null(与MySQL
相同)。修复了 #14114。 #14397 (Winter Zhang)。 - 用 https://github.com/cerevra/int 中的实现替换了 boost multiprecision 中的宽整数(256 位)。256 位整数是实验性的。 #14229 (Artem Zuikov)。
- 为
system.part_log
中名称为default_compression_codec
的 parts 添加默认压缩编解码器。 #14116 (alesapin)。 - 为
DateTime
类型添加 precision 参数。它允许使用DateTime
名称代替DateTime64
。 #13761 (Winter Zhang)。 - 为
Redis
外部字典添加了 requirepass 授权。 #13688 (Ivan Torgashov)。 RabbitMQ
引擎的改进:添加了连接和通道故障处理、正确的提交、插入失败处理、更好的交换机、队列持久性和队列恢复机会、新的队列设置。修复了测试。 #12761 (Kseniia Sumarokova)。- 在紧凑部件中支持自定义编解码器。#12183 (Anton Popov)。
性能改进
- 优化了带有 GROUP BY sharding_key 的分布式 LIMIT/LIMIT BY/ORDER BY 查询(在
optimize_skip_unused_shards
和optimize_distributed_group_by_sharding_key
下)。 #10373 (Azat Khuzhin)。 - 并行创建多个
JOIN
和IN
的集合。这可能会稍微提高具有多个不同IN subquery
表达式的查询的性能。 #14412 (Nikolai Kochetov)。 - 通过为每个消费者提供独立的线程来提高 Kafka 引擎的性能。为流引擎(如 Kafka)分离线程池。 #13939 (fastio)。
构建/测试/打包改进
- 通过从
Functions
中删除调试信息来降低 debug 构建中的二进制文件大小。这仅对于 Yandex 中使用非常旧的链接器的内部项目是必需的。 #14549 (alexey-milovidov)。 - 准备使用 clang 11 进行构建。 #14455 (alexey-milovidov)。
- 修复了 backport 脚本中的逻辑。在以前的版本中,它会为任何 100% 红色标签触发。这很奇怪。 #14433 (alexey-milovidov)。
- 集成测试使用默认基本配置。所有配置更改都通过实例的 main_configs、user_configs 和 dictionaries 参数显式指定。 #13647 (Ilya Yatsishin)。
ClickHouse release 20.8
ClickHouse release v20.8.12.2-lts,2021-01-16
Bug Fix
- 修复了 *If 组合器与一元函数和 Nullable 类型一起使用的问题。#18806 (Azat Khuzhin)。
- 限制从宽部件到紧凑部件的合并。在垂直合并的情况下,它导致了损坏的结果部件。 #18381 (Anton Popov)。
ClickHouse release v20.8.11.17-lts,2020-12-25
Bug Fix
- 在合并期间禁用使用 AIO 写入,因为它可能导致合并期间主键列的极其罕见的数据损坏。 #18481 (alesapin)。
- 修复了使用
Nullable(String)
类型的参数执行toType(...)
函数 (toDate
,toUInt32
等) 时出现的value is too short
错误。现在,此类函数在解析错误时返回NULL
而不是抛出异常。修复了 #7673。 #18445 (tavplubix)。 - 修复了在使用两级聚合时,带有组合器
Distinct
的聚合函数中可能发生的崩溃。修复了 #17682。 #18365 (Anton Popov)。
ClickHouse release v20.8.10.13-lts,2020-12-24
Bug Fix
- 当使用
logger.size
参数配置服务器日志轮换时,如果数值大于 2^32,则日志无法正确轮换。 #17905 (Alexander Kuzmenkov)。 - 修复了 MergeTreeWriterSettings 中
max_compress_block_size
使用min_compress_block_size
进行错误初始化的错误。 #17833 (flynn)。 - 修复了 ClickHouse 无法恢复与 MySQL 服务器的连接的问题。 #17681 (Alexander Kazakov)。
- 修复了当相应的 mutation 在不同的副本上被杀死时,
ALTER
查询挂起的问题。此修复解决了 #16953。 #17499 (alesapin)。 - 修复了 ClickHouse 低估标记缓存大小的错误。当存在大量带有标记的小文件时,可能会发生这种情况。 #17496 (alesapin)。
- 修复了启用设置
optimize_redundant_functions_in_order_by
时的ORDER BY
。#17471 (Anton Popov)。 - 修复了导致崩溃的
ColumnConst
比较。此修复解决了 #17088 。 #17135 (Amos Bird)。 - 修复了
ON CLUSTER
查询可能永远挂起非 leader ReplicatedMergeTreeTables 的错误。 #17089 (alesapin)。 - 避免远程查询的不必要的网络错误,这些查询可能在执行期间被取消,例如带有
LIMIT
的查询。 #17006 (Azat Khuzhin)。 - 在发生错误时重新解析
format_avro_schema_registry_url
的 IP 地址。#16985 (filimonov)。 - 修复了当
SELECT
在正在被修改的列上使用WHERE
表达式,并且 alter 操作尚未完成时,可能发生的服务器崩溃问题(在ALTER TABLE ... MODIFY COLUMN ... NewType
操作之后)。 #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
Bug Fix
- 修复了当查询分析器开启且 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)。
- 修复了当用于过滤的部分数据的集合未创建时,可能导致部分返回数据被丢弃的不一致行为。 #16308 (Nikita Mikhaylov)。
- 修复了 MySQL 数据库的 bug。当用作数据库引擎的 MySQL 服务器关闭时,某些查询会引发异常,因为它们尝试从禁用的服务器获取表,但这没有必要。例如,查询
SELECT ... FROM system.parts
应该仅适用于 MergeTree 表,而根本不接触 MySQL 数据库。 #16032 (Kruglov Pavel)。
ClickHouse 发布 v20.8.5.45-lts,2020-10-29
Bug Fix
- 修复了函数
dictGet
中发生异常时的 double free。如果字典加载时出错,则可能会发生这种情况。 #16429 (Nikolai Kochetov)。 - 修复了带有 totals/rollup/cube modifers 和 group by 键上的 min/max 函数的 group by。修复了 #16393。 #16397 (Anton Popov)。
- 修复了异步 Distributed INSERT,其中 prefer_localhost_replica=0 和 internal_replication。 #16358 (Azat Khuzhin)。
- 修复了由于
TwoLevelStringHashTable
实现中的错误,在GROUP BY
与字符串键一起使用时可能发生的内存泄漏。 #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 中选择数据时,以及并发删除目标表(对于 Atomic 数据库引擎)时,罕见的段错误。 #15984 (tavplubix)。
- 修复了设置配置文件解析中的歧义:
CREATE USER ... SETTINGS profile readonly
现在被视为使用名为readonly
的配置文件,而不是名为profile
的设置,并带有 readonly 约束。此修复解决了 #15628。 #15982 (Vitaly Baranov)。 - 修复了数据库创建失败时的崩溃。 #15954 (Winter Zhang)。
- 修复了当表并发重命名时(对于 Atomic 数据库引擎)
DROP TABLE IF EXISTS
失败并出现Table ... does not exist
错误的问题。修复了并发执行某些涉及多个表的 DDL 查询(如DROP DATABASE
和RENAME TABLE
)时发生的罕见死锁。修复了并发执行DROP/DETACH TABLE
时DROP/DETACH DATABASE
失败并出现Table ... does not exist
的问题。 #15934 (tavplubix)。 - 修复了如果查询具有
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
的查询包含ARRAY JOIN
时,插入数据到MATERIALIZED VIEW
中可能发生的Cannot find column
错误。#15717 (Nikolai Kochetov)。 - 修复了
max_replicated_logs_to_keep
设置的默认值过低的问题,这可能导致副本过于频繁地丢失。通过选择最新的副本进行克隆,改进了丢失副本的恢复过程。同时,不要从丢失的副本中删除旧的 part,而是分离它们。#15701 (tavplubix)。 - 修复了从
Buffer
表读取数据时,如果Buffer
表的结构与目标表不同,则发生的Cannot add simple transform to empty Pipe
错误。如果目标表对查询返回空结果,则可能发生这种情况。修复了 #15529。#15662 (Nikolai Kochetov)。 - 修复了 S3 表函数中 glob 的错误,URL 中的 region 未应用于 S3 客户端配置。 #15646 (Vladimir Chebotarev)。
- 在分离只读表时,递减
ReadonlyReplica
指标。此修复了 #15598。 #15592 (sundyli)。 - 当仅向 ReplicatedMergeTree 传递单个参数时,抛出错误,而不是忽略它。#15516 (nvartolomei)。
Improvement
- 现在允许执行
ALTER ... ON CLUSTER
查询,而与集群配置中的<internal_replication>
设置无关。 #16075 (alesapin)。 - 展开表创建时
ReplicatedMergeTree
参数中的{database}
、{table}
和{uuid}
宏。 #16159 (tavplubix)。
ClickHouse 发布 v20.8.4.11-lts,2020-10-09
Bug Fix
- 修复了查询计划的
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)。
- Mutation 可能会在等待
MOVE
或REPLACE PARTITION
之后,或者在极少数情况下,在DETACH
或DROP PARTITION
之后等待某些不存在的 part。此问题已修复。#15537 (tavplubix)。 - 修复了如果执行了具有相同模式的
LIKE
操作,则ILIKE
运算符会停止区分大小写的 bug。#15536 (alesapin)。 - 修复了当选择数据中不存在的列,但这些列依赖于数据中也不存在的其他列时,出现的
Missing columns
错误。修复了 #15530。#15532 (alesapin)。 - 修复了 DDLWorker 中事件订阅的 bug,该 bug 偶尔可能导致
ON CLUSTER
中的查询挂起。在 #13450 中引入。#15477 (alesapin)。 - 当
boundingRatio
聚合函数的第二个参数类型错误时,报告正确的错误。#15407 (detailyang)。 - 修复了 MergeTree 表重命名和后台清理期间的竞态条件。#15304 (alesapin)。
- 修复了启用 system.logs 时服务器启动时发生的罕见竞争条件。 #15300 (alesapin)。
- 修复了 QueryLog 中的 MSan 报告。未初始化的内存可能用于字段
memory_usage
。#15258 (alexey-milovidov)。 - 修复了将 joinGet 与 LowCardinality 类型一起使用时发生的实例崩溃。此修复了 #15214。 #15220 (Amos Bird)。
- 修复了表引擎
Buffer
中的 bug,该 bug 导致在ALTER
查询之后,无法将新结构的数据插入到Buffer
表中。修复了 #15117。#15192 (alesapin)。 - 调整 mysql 列定义数据包中的 decimals 字段大小。 #15152 (maqroll)。
- 我们已经在使用 String 和 FixedString 之间进行填充比较 (https://github.com/ClickHouse/ClickHouse/blob/master/src/Functions/FunctionsComparison.h#L333)。此 PR 将相同的逻辑应用于字段比较,从而纠正了将 FixedString 用作主键的用法。这修复了 #14908。#15033 (Amos Bird)。
- 如果使用专门构造的参数调用函数
bar
,则可能发生缓冲区溢出。这关闭了 #13926。#15028 (alexey-milovidov)。 - 修复了在 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_zk
include 选项),服务器在启动时与 ZooKeeper 通信时可能会卡住的问题。这修复了 #14814。#14843 (Alexander Kuzmenkov)。 - 修复了有符号类型的缩小
Int -> Int
转换的错误单调性检测。这可能导致不正确的查询结果。此 bug 在 #14513 中被揭示。#14783 (Amos Bird)。 - 修复了
Nullable
列的不正确排序顺序。这修复了 #14344。#14495 (Nikita Mikhaylov)。
Improvement
ClickHouse 发布 v20.8.3.18-stable,2020-09-18
Bug Fix
- 修复了
extractAllGroups
函数的某些调用可能触发 “Memory limit exceeded” 错误的问题。这修复了 #13383。#14889 (alexey-milovidov)。 - 修复了尝试 INSERT 到 StorageFile(fd) 时发生的 SIGSEGV。 #14887 (Azat Khuzhin)。
- 修复了
SELECT
查询中的罕见错误,当查询的列具有依赖于另一个也具有DEFAULT
且不在 select 查询中且磁盘上不存在的列的DEFAULT
表达式时,会发生此错误。部分修复了 #14531。#14845 (alesapin)。 - 修复了执行
ALTER ... MODIFY QUERY
时,物化视图元数据中遗漏的默认数据库名称。#14664 (tavplubix)。 - 修复了在赋值表达式和常量值(如
UPDATE x = 42
)中使用 Nullable 列的ALTER UPDATE
mutation 导致列中值不正确或段错误的错误。修复了 #13634, #14045。 #14646 (alesapin)。 - 修复了错误的 Decimal 乘法结果导致结果列的 decimal scale 错误的问题。#14603 (Artem Zuikov)。
- 添加了检查器,因为调用
lc->isNullable()
或ls->getDictionaryPtr()->isNullable()
都不会返回正确的结果。 #14591 (myrrc)。 - 清理 StorageReplicatedMergeTree 引擎的 CreateQuery 期间,Zookeeper 异常后的数据目录。#14563 (Bharat Nallan)。
- 修复了带有 -Resample 组合器的函数中罕见的段错误,这可能会在超大参数溢出时出现。 #14562 (Anton Popov)。
Improvement
- 如果存在正在进行的 S3 请求,则加速服务器关闭过程。 #14858 (Pavel Kovalenko)。
- 允许在存储 Distributed 中使用多卷存储配置。 #14839 (Pavel Kovalenko)。
- 如果存在正在进行的 S3 请求,则加快服务器关闭过程。#14496 (Pavel Kovalenko)。
- 在紧凑部件中支持自定义编解码器。#12183 (Anton Popov)。
ClickHouse 发布 v20.8.2.3-stable,2020-09-08
Backward Incompatible Change
- 现在
OPTIMIZE FINAL
查询不会为在创建 TTL 之前添加的分区重新计算 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 重新启动时,它将使用新版本启动)。
New Feature
- 添加了为与
config.xml
中指定的设置相对应的列指定Default
压缩编解码器的能力。实现了: #9074。 #14049 (alesapin)。 - 支持 Kafka 中的 Kerberos 身份验证,使用
krb5
和cyrus-sasl
库。 #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
语句,允许更改表采样子句。 #13280 (Amos Bird)。 - 函数
position
现在支持可选的start_pos
参数。 #13237 (vdimir)。
Bug Fix
- 修复了交互模式下客户端进度条遮盖可见数据的问题。这修复了 #12562 和 #13369 和 #13584 以及修复了 #12964。 #13691 (alexey-milovidov)。
- 修复了当按多个列排序时,
LowCardinality
列排序顺序不正确的问题。这修复了 #13958。 #14223 (Nikita Mikhaylov)。 - 检查
topK
聚合函数中的数组大小溢出。如果没有此检查,用户可能会发送带有精心设计的参数的查询,这将导致服务器崩溃。此更改关闭了 #14452。 #14467 (alexey-milovidov)。 - 修复了如果表的分区只有一个 part,可能导致错误的合并分配的错误。 #14444 (alesapin)。
- 如果
PipelineExecutor
本身发生异常,则停止查询执行。这可以防止罕见的可能发生的查询挂起。 #14334 的延续。 #14402 #14334 (Nikolai Kochetov)。 - 修复了为
AS table_function
创建的表执行ALTER
查询期间发生的崩溃。修复了 #14212。 #14326 (alesapin)。 - 修复了在 ALTER LIVE VIEW 查询中使用 REFRESH 命令期间发生的异常。Live view 是一项实验性功能。 #14320 (Bharat Nallan)。
- 修复了具有嵌套解释器的查询的 QueryPlan 生命周期(对于 EXPLAIN PIPELINE graph=1)。 #14315 (Azat Khuzhin)。
- 修复了从某些外部源获取模式期间,
clickhouse-odbc-bridge
中的段错误。此 PR 修复了 #13861。 #14267 (Vitaly Baranov)。 - 修复了 #12277 中引入的标记包含搜索中的崩溃。 #14225 (Amos Bird)。
- 修复了使用命名元组创建表的问题。这修复了 #13027。 #14143 (alexey-milovidov)。
- 修复了最小负十进制数的格式化。这修复了 #14111。 #14119 (Alexander Kuzmenkov)。
- 修复了
DistributedFilesToInsert
指标(本不应为零时却为零)。 #14095 (Azat Khuzhin)。 - 修复了
pointInPolygon
函数在使用常量 2d 数组作为多边形时的问题。 #14079 (Alexey Ilyukhov)。 - 修复了
Poco::Exception: no space left on device
的额外信息中错误的挂载点。 #14050 (tavplubix)。 - 修复了在非全局级别执行 GRANT ALL 语句的问题。 #13987 (Vitaly Baranov)。
- 修复了解析器,使其拒绝使用引擎创建表函数。 #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)。 - 修复了当与 NULL 进行比较时,从带有 SET 类型 INDEX 的 MergeTree 表读取失败的问题。这修复了 #13686。 #13793 (Amos Bird)。
- 修复了 lambda 中的
arrayJoin
捕获 (LOGICAL_ERROR)。 #13792 (Azat Khuzhin)。 - 在函数
range
中添加步长溢出检查。 #13790 (Azat Khuzhin)。 - 修复了并发执行
DROP DATABASE
和CREATE TABLE
时出现的Directory not empty
错误。 #13756 (alexey-milovidov)。 - 为
h3KRing
函数添加范围检查。这修复了 #13633。 #13752 (alexey-milovidov)。 - 修复了 DETACH 和后台合并之间的竞争条件。分区可能在 detach 后恢复。这是 #8602 的延续,它没有修复该问题,但引入了一个测试,该测试在极少数情况下开始失败,从而证明了该问题。 #13746 (alexey-milovidov)。
- 修复了当 log_queries_min_type > QUERY_START 时,Settings.Names/Values 的日志记录。 #13737 (Azat Khuzhin)。
- 修复了 verbose=1 时
/replicas_status
端点响应状态代码。 #13722 (javi santana)。 - 修复了在检查用户和组时,
clickhouse-server.init
中不正确的消息。 #13711 (ylchou)。 - 在
optimize_move_functions_out_of_any
设置下,不要优化 any(arrayJoin()) -> arrayJoin()。 #13681 (Azat Khuzhin)。 - 修复了在 JOIN 与 StorageMerge 和
set enable_optimize_predicate_expression=1
一起使用时的崩溃。 #13679 (Artem Zuikov)。 - 修复了关于
The value of 'number_of_free_entries_in_pool_to_lower_max_size_of_merge' setting
的错误消息中的错别字。 #13678 (alexey-milovidov)。 - 并发的
ALTER ... REPLACE/MOVE PARTITION ...
查询可能会导致死锁。现已修复。 #13626 (tavplubix)。 - 修复了有时 cache-dictionary 返回默认值而不是源中存在的值的行为。 #13624 (Nikita Mikhaylov)。
- 修复了紧凑 parts 中的二级索引损坏。紧凑 parts 是一项实验性功能。 #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 (sundy-li)。
- 在某些情况下正确区分子查询以进行公共子表达式消除。 #8333。 #8367 (Amos Bird)。
Improvement
- 禁止在
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 表是从大量非常小的块构建的(这种情况不太可能发生),则稍微提高了 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)。 - 如果数组元素的类型为 Float32/Float64,则函数
arrayCompact
将按位比较 NaN。在以前的版本中,如果数组元素的类型为 Float32/Float64,则 NaN 始终不相等;如果类型更复杂,例如 Nullable(Float64),则始终相等。这关闭了 #13857。 #13868 (alexey-milovidov)。 - 修复了
lgamma
函数中的数据竞争。此竞争仅在tsan
中捕获,实际上没有发生任何副作用。 #13842 (Nikolai Kochetov)。 - 避免在将数组作为字段操作时查询过慢。改为抛出异常。 #13753 (alexey-milovidov)。
- 添加了 Redis requirepass 授权(用于 redis 字典源)。 #13688 (Ivan Torgashov)。
- 添加 MergeTree 预写日志 (WAL) 转储工具。WAL 是一项实验性功能。 #13640 (BohuTANG)。
- 在以前的版本中,如果使用专门设计的参数调用
lcm
函数,可能会在调试版本中产生断言冲突。这修复了 #13368。 #13510 (alexey-milovidov)。 - 在更多情况下为
toDate/toDateTime
函数提供单调性。单调性信息用于索引分析(更复杂的查询将能够使用索引)。现在,输入参数更自然地饱和,并提供更好的单调性。 #13497 (Amos Bird)。 - 支持自定义设置的复合标识符。自定义设置是 ClickHouse 代码库与其他代码库的集成点(对 ClickHouse 本身没有好处) #13496 (Vitaly Baranov)。
- 并行地将 parts 从 DiskLocal 移动到 DiskS3。
DiskS3
是一项实验性功能。 #13459 (Pavel Kovalenko)。 - 默认启用混合粒度 parts。 #13449 (alesapin)。
- 在 S3 重定向中进行正确的远程主机检查(与安全性相关的事情)。 #13404 (Vladimir Chebotarev)。
- 将
QueryTimeMicroseconds
、SelectQueryTimeMicroseconds
和InsertQueryTimeMicroseconds
添加到 system.events。 #13336 (ianton-ru)。 - 修复了当 Decimal 具有过大的负指数时的调试断言。修复了 #13188。 #13228 (alexey-milovidov)。
- 为 DiskS3 添加了缓存层(缓存到本地磁盘 mark 和 index 文件)。
DiskS3
是一项实验性功能。 #13076 (Pavel Kovalenko)。 - 修复了 readline,使其现在可以将历史记录转储到文件。 #13600 (Amos Bird)。
- 默认情况下使用
Atomic
引擎创建system
数据库(为默认在所有地方启用Atomic
数据库引擎做准备)。 #13680 (tavplubix)。
Performance Improvement
- 稍微优化了带有
LowCardinality
的非常短的查询。 #14129 (Anton Popov)。 - 当设置
max_insert_threads
时,为表引擎Null
、Memory
、Distributed
和Buffer
启用并行 INSERT。 #14120 (alexey-milovidov)。 - 如果在 parts scan 过程中超出
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)。
实验性功能
- ClickHouse 可以作为 MySQL 副本工作 - 这是通过
MaterializeMySQL
数据库引擎实现的。实现了 #4006。 #10851 (Winter Zhang)。 - 添加了
Int128
、Int256
、UInt256
类型以及相关的函数。使用 Decimal256 (精度高达 76 位数字) 扩展了 Decimals。新类型在设置allow_experimental_bigint_types
下。它的工作速度非常慢且效果不佳。该实现尚不完整。请不要使用此功能。 #13097 (Artem Zuikov)。
构建/测试/打包改进
- 添加了
clickhouse install
脚本,如果您只有一个二进制文件,这将非常有用。 #13528 (alexey-milovidov)。 - 允许在没有配置的情况下运行
clickhouse
二进制文件。 #13515 (alexey-milovidov)。 - 启用
codespell
代码拼写检查。 #13513 #13511 (alexey-milovidov)。 - 在 CI 中启用 Shellcheck 作为 .sh 测试的 linter。这关闭了 #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
以发现更多错误。 #13855 (Nikita Mikhaylov)。 - Testflows LDAP 模块:为 openldap4 添加缺失的证书和 dhparam.pem。 #13780 (vzakaznikov)。
- ZooKeeper 在 CI 基础设施的单元测试中无法可靠地工作。从一开始,将单元测试用于与真实 ZooKeeper 的 ZooKeeper 交互就是一个坏主意(单元测试不应该验证复杂的分布式系统)。我们已经为此目的使用了集成测试,它们更适合。 #13745 (alexey-milovidov)。
- 添加了用于样式检查的 docker 镜像。添加了样式检查,以确保所有 docker 和 docker compose 文件都位于 docker 目录中。 #13724 (Ilya Yatsishin)。
- 修复了 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)。
- 将 Dockerfile 从集成测试移动到
docker/test
目录。 docker_compose 文件在runner
docker 容器中可用。 Docker 镜像在 CI 中构建,而不是在集成测试中构建。 #13448 (Ilya Yatsishin)。
ClickHouse 20.7 版本
ClickHouse v20.7.2.30-stable 版本,2020-08-31
向后不兼容的变更
modulo
函数(运算符%
)至少有一个浮点数作为参数时,将直接在浮点数上计算除法的余数,而无需将两个参数都转换为整数。这使得行为与大多数 DBMS 兼容。这也适用于 Date 和 DateTime 数据类型。添加了别名mod
。这关闭了 #7323。 #12585 (alexey-milovidov)。- 弃用将零 Date/DateTime 值特殊打印为
0000-00-00
和0000-00-00 00:00:00
的方式。 #12442 (alexey-milovidov)。 groupArrayMoving*
函数不适用于分布式查询。它的结果是在不正确的数据类型(没有提升到最大类型)中计算的。groupArrayMovingAvg
函数返回的整数与avg
函数不一致。这修复了 #12568。 #12622 (alexey-milovidov)。- 为 MergeTree 设置添加了健全性检查。如果设置不正确,服务器将拒绝启动或创建表,并向用户打印详细说明。 #13153 (alexey-milovidov)。
- 防止用户将
background_pool_size
设置为低于number_of_free_entries_in_pool_to_execute_mutation
或number_of_free_entries_in_pool_to_lower_max_size_of_merge
的值的情况。在这些情况下,ALTER 将无法工作,或者合并的最大大小将受到过多限制。它将抛出异常,解释该怎么做。这关闭了 #10897。 #12728 (alexey-milovidov)。 - 当从早于 20.5 的版本升级时,如果执行滚动更新并且集群同时包含 20.5 或更高版本和低于 20.5 的版本,如果旧版本的 ClickHouse 节点重新启动并且在存在较新版本的情况下启动了旧版本,则可能导致
Part ... intersects previous part
错误。为了防止此错误,请先在所有集群节点上安装较新的 clickhouse-server 软件包,然后再执行重启(因此,当 clickhouse-server 重新启动时,它将使用新版本启动)。
新功能
- Polygon 字典类型,提供高效的“反向地理编码”查找 - 在包含许多多边形(世界地图)的字典中查找坐标所在的区域。它使用经过精心优化的算法和递归网格来保持低 CPU 和内存使用率。 #9278 (achulkov2)。
- 为预配置用户(“简单绑定”方法)添加了 LDAP 身份验证支持。 #11234 (Denis Glazachev)。
- 引入设置
alter_partition_verbose_result
,它为某些类型的ALTER TABLE ... PARTITION ...
查询(目前为ATTACH
和FREEZE
)输出有关受影响 parts 的信息。关闭了 #8076。 #13017 (alesapin)。 - 为 bayesian-ab-testing 添加了
bayesAB
函数。 #12327 (achimbab)。 - 添加了
system.crash_log
表,其中收集了致命错误的堆栈跟踪信息。此表应为空。 #12316 (alexey-milovidov)。 - 添加了 http 标头
X-ClickHouse-Database
和X-ClickHouse-Format
,它们可用于设置默认数据库和输出格式。 #12981 (hcz)。 - 为
SimpleAggregateFunction
添加了minMap
和maxMap
函数支持。 #12662 (Ildus Kurbangaliev)。 - 添加了设置
allow_non_metadata_alters
,它限制执行修改磁盘数据的ALTER
查询。默认禁用。关闭了 #11547。 #12635 (alesapin)。 - 添加了
formatRow
函数,以支持通过给定的格式将任意表达式转换为字符串。它对于操作 SQL 输出非常有用,并且与columns
函数结合使用时非常通用。 #12574 (Amos Bird)。 - 添加了
FROM_UNIXTIME
函数,以与 MySQL 兼容,与 12149 相关。 #12484 (flynn)。 - 如果启用了
allow_nullable_key
表设置,则允许 Nullable 类型作为 MergeTree 表中的键。关闭了 #5319。 #12433 (Amos Bird)。 - 与 COS 集成。 #12386 (fastio)。
- 添加了
mapAdd
和mapSubtract
函数,用于添加/减去键映射的值。 #11735 (Ildus Kurbangaliev)。
Bug 修复
- 修复了对于必须在单个副本上执行的查询,过早的
ON CLUSTER
超时。修复了 #6704、#7228、#13361、#11884。 #13450 (alesapin)。 - 修复了 #12277 中引入的标记包含搜索中的崩溃。 #14225 (Amos Bird)。
- 修复了外部字典缓存布局中的竞争条件,该条件可能导致服务器崩溃。 #12566 (alesapin)。
- 修复了交互模式下客户端进度条遮盖可见数据的问题。这修复了 #12562 和 #13369 和 #13584 以及修复了 #12964。 #13691 (alexey-milovidov)。
- 修复了使用 ORDER BY 多个列时
LowCardinality
列的不正确排序顺序。这修复了 #13958。 #14223 (Nikita Mikhaylov)。 - 删除了硬编码的超时,该超时错误地否决了 cache-dictionary 的
query_wait_timeout_milliseconds
设置。 #14105 (Nikita Mikhaylov)。 - 修复了
Poco::Exception: no space left on device
的额外信息中错误的挂载点。 #14050 (tavplubix)。 - 修复了在启用
optimize_duplicate_order_by_and_distinct
设置的情况下,子查询也具有DISTINCT
时,使用DISTINCT
关键字的选择查询的错误查询优化。 #13925 (Artem Zuikov)。 - 修复了重命名
Distributed
表时可能发生的死锁。 #13922 (tavplubix)。 - 修复了使用 ORDER BY 多个列时
FixedString
列的不正确排序。修复了 #13182。 #13887 (Nikolai Kochetov)。 - 修复了
topK
/topKWeighted
聚合(使用非默认参数)的潜在较低精度。 #13817 (Azat Khuzhin)。 - 修复了当与 NULL 比较时,从 INDEX 类型为 SET 的 MergeTree 表读取数据失败的问题。这修复了 #13686。 #13793 (Amos Bird)。
- 修复了函数
range()
中的步长溢出。 #13790 (Azat Khuzhin)。 - 修复了并发执行
DROP DATABASE
和CREATE TABLE
时出现的Directory not empty
错误。 #13756 (alexey-milovidov)。 - 为
h3KRing
函数添加范围检查。这修复了 #13633。 #13752 (alexey-milovidov)。 - 修复了 DETACH 和后台合并之间的竞争条件。分区可能在 detach 后恢复。这是 #8602 的延续,它没有修复该问题,但引入了一个测试,该测试在极少数情况下开始失败,从而证明了该问题。 #13746 (alexey-milovidov)。
- 修复了当
log_queries_min_type
大于QUERY_START
时,Settings.Names/Values 的日志记录。 #13737 (Azat Khuzhin)。 - 修复了在检查用户和组时,
clickhouse-server.init
中不正确的消息。 #13711 (ylchou)。 - 在
optimize_move_functions_out_of_any
下,不要将any(arrayJoin())
优化为arrayJoin()
。 #13681 (Azat Khuzhin)。 - 修复了并发
ALTER ... REPLACE/MOVE PARTITION ...
查询中可能发生的死锁。 #13626 (tavplubix)。 - 修复了有时 cache-dictionary 返回默认值而不是源中存在的值的行为。 #13624 (Nikita Mikhaylov)。
- 修复了紧凑 parts 中的二级索引损坏问题(紧凑 parts 是一项实验性功能)。 #13538 (Anton Popov)。
- 修复了函数
netloc
中的错误代码。这修复了 #13335。 #13446 (alexey-milovidov)。 - 修复了当 unix 时间戳作为参数传递时,
parseDateTimeBestEffort
函数中的错误。这修复了 #13362。 #13441 (alexey-milovidov)。 - 修复了元组与
NULL
元素比较时的无效返回类型。修复了 #12461。 #13420 (Nikolai Kochetov)。 - 修复了错误的优化导致
aggregate function any(x) is found inside another aggregate function in query
错误,该错误发生在SET optimize_move_functions_out_of_any = 1
和any()
内的别名的情况下。 #13419 (Artem Zuikov)。 - 修复了
StorageMemory
中可能发生的竞争。 #13416 (Nikolai Kochetov)。 - 修复了查询返回零行时
Arrow
和Parquet
格式的空输出。这是因为空输出对于此格式无效。 #13399 (hcz)。 - 修复了在
ORDER BY
子句中使用常量列和主键前缀的选择查询。 #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*)
(header 被多次写入),修复了clickhouse-local --format CSVWithNames*
(缺少 header,在 #12197 后损坏),修复了零行时的clickhouse-local --format CSVWithNames*
(缺少 header)。 #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
,服务器可能会崩溃。这修复了 #13275。 #13277 (alexey-milovidov)。 - 修复了在 Float 类型上调用
uniqExact
、topK
、sumDistinct
和类似聚合函数时,使用NaN
值的潜在低性能和略微不正确的结果。它还在调试构建中触发了断言。这修复了 #12491。 #13254 (alexey-milovidov)。 - 修复了当主键包含单调函数的表达式,并且查询包含与类型不同的常量的比较时,KeyCondition 中的断言。这修复了 #12465。 #13251 (alexey-milovidov)。
- 在函数 roundUpToPowerOfTwoOrZero() 中为设置了 MSB 的数字返回传递的数字。它可以防止数组大小溢出的潜在错误。 #13234 (Azat Khuzhin)。
- 修复了函数 if,其可空 constexpr 作为条件,但不是字面 NULL。修复了 #12463。 #13226 (alexey-milovidov)。
- 修复了在数组元素为 Nullable 且数组下标也为 Nullable 的情况下,
arrayElement
函数中的断言。这修复了 #12172。 #13224 (alexey-milovidov)。 - 修复了带有常量参数的 DateTime64 转换函数。 #13205 (Azat Khuzhin)。
- 修复了解析 users.xml 中的行策略时,数据库或表的名称包含点号的问题。这修复了 #5779、#12527。 #13199 (Vitaly Baranov)。
- 修复了在连接断开一次后,访问
redis
字典的问题。这可能发生在cache
和direct
字典布局中。 #13082 (Anton Popov)。 - 修复了使用函数时的错误索引分析。当从
MergeTree
表读取数据时,这可能会导致跳过某些数据 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)。 - 修复了对于带有
ORDER BY
元组和小LIMIT
的查询可能发生的崩溃。修复了 #12623。 #13009 (Nikolai Kochetov)。 - 修复了带有
UNION
和JOIN
的查询的Block structure mismatch
错误。修复了 #12602。 #12989 (Nikolai Kochetov)。 - 修正了
merge_with_ttl_timeout
逻辑,当过期影响一个时间间隔内的多个分区时,该逻辑无法很好地工作。(由 @excitoon 编写)。 #12982 (Alexander Kazakov)。 - 修复了从 DDL 查询创建的范围哈希字典的列重复问题。这修复了 #10605。 #12857 (alesapin)。
- 修复了不必要地限制从本地副本选择的线程数。 #12840 (Nikolai Kochetov)。
- 修复了当
ALTER DELETE
和ALTER MODIFY COLUMN
查询作为单个 mutation 同时执行时发生的罕见错误。该错误导致count.txt
中的行数不正确,并因此导致 part 中的数据不正确。此外,还修复了同时进行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 fix bloom filter index with const expression。 #12659 (Winter Zhang)。
- 修复了当 broker 不可用时(不仅仅是这种情况)StorageKafka 中的 SIGSEGV。 #12658 (Azat Khuzhin)。
- 为带有
Array(UUID)
参数的函数if
添加了支持。这修复了 #11066。 #12648 (alexey-milovidov)。 - CREATE USER IF NOT EXISTS 现在,如果用户存在,则不会抛出异常。这修复了 #12507。 #12646 (Vitaly Baranov)。
- 修复了在
ALTER ... UPDATE
语句中意外情况下(例如,从 UInt64 列减去值时)可能抛出There is no supertype...
异常的问题。此修复解决了 #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 时移除 Distributed 表的数据(来自异步 INSERT 的块)。#12556 (Azat Khuzhin)。
- 现在,当文件
checksums.txt
不存在时,ClickHouse 将重新计算 part 的校验和。自 #9827 版本后出现此问题。#12545 (alesapin)。 - 修复了当
enable_mixed_granularity_parts=1
时,ALTER DELETE
查询后导致旧 part 损坏的错误。此修复解决了 #12536 问题。#12543 (alesapin)。 - 修复了 Live View 表中的竞争条件,该条件可能导致数据重复。LIVE VIEW 是一项实验性功能。#12519 (vzakaznikov)。
- 修复了
AggregateFunction(avg, ...)
值的二进制格式的向后兼容性问题。此修复解决了 #12342 问题。#12486 (alexey-milovidov)。 - 修复了在 JOIN 中使用字典,并且我们正在连接字典键的表达式时发生的崩溃:
t JOIN dict ON expr(dict.id) = t.id
。在此情况下禁用字典连接优化。#12458 (Artem Zuikov)。 - 修复了指定非常大的 LIMIT 或 OFFSET 时发生的溢出。此修复解决了 #10470,#11372 问题。#12427 (alexey-milovidov)。
- kafka:修复了当批处理中间存在错误消息时发生的 SIGSEGV。#12302 (Azat Khuzhin)。
改进
- 在 ZooKeeper 中保留更少量的日志。避免在具有许多服务器/表/插入的情况下,离线副本导致 ZooKeeper 节点过度增长。#13100 (alexey-milovidov)。
- 现在,如果在 ALTER 或 mutation 期间发生错误,异常将转发到客户端。关闭了 #11329 问题。#12666 (alesapin)。
- 将
QueryTimeMicroseconds
、SelectQueryTimeMicroseconds
和InsertQueryTimeMicroseconds
添加到system.events
,以及 system.metrics、processes、query_log 等。#13028 (ianton-ru)。 - 将
SelectedRows
和SelectedBytes
添加到system.events
,以及 system.metrics、processes、query_log 等。#12638 (ianton-ru)。 - 将
current_database
信息添加到system.query_log
。#12652 (Amos Bird)。 - 允许
TabSeparatedRaw
作为输入格式。#12009 (hcz)。 - 现在
joinGet
支持多键查找。#12418 (Amos Bird)。 - 允许
*Map
聚合函数处理包含 NULL 值的数组。此修复解决了 #13157 问题。#13225 (alexey-milovidov)。 - 避免解析 DateTime 值时发生溢出,这会导致它们时区中出现负的 Unix 时间戳(例如,莫斯科时区的
1970-01-01 00:00:00
)。将其饱和到零值。此修复解决了 #3470,#4172 问题。#12443 (alexey-milovidov)。 - AvroConfluent:跳过 Kafka tombstone 记录 - 支持跳过损坏的记录 #13203 (Andrew Onyshchuk)。
- 修复了长查询的错误错误。对于正确的查询,可能会收到除
Max query size exceeded
以外的语法错误。 #13928 (Nikolai Kochetov)。 - 修复了
lgamma
函数中的数据竞争。此竞争仅在tsan
中捕获到,实际上没有副作用。#13842 (Nikolai Kochetov)。 - 修复了 ATTACH/ALTER/CREATE QUOTA 语句的 'Week' 间隔格式。#13417 (vladimir-golovchenko)。
- 现在,在紧凑 part 处理中遇到损坏的 part 时也会报告。紧凑 part 是一项实验性功能。#13282 (Amos Bird)。
- 修复了
geohashesInBox
中的断言。此修复解决了 #12554 问题。#13229 (alexey-milovidov)。 - 修复了
parseDateTimeBestEffort
中的断言。此修复解决了 #12649 问题。#13227 (alexey-milovidov)。 - Processors/PipelineExecutor 中的小优化:跳出循环,因为这样做是有意义的。#13058 (Mark Papadakis)。
- 支持不带 TABLE 关键字的 TRUNCATE table 语句。#12653 (Winter Zhang)。
- 修复了默认情况下 explain 查询格式被覆盖的问题。此修复解决了 #12541 问题。#12541 (BohuTANG)。
- 允许以更标准的方式设置 JOIN 类型和种类:
LEFT SEMI JOIN
而不是SEMI LEFT JOIN
。目前两者都是正确的。#12520 (Artem Zuikov)。 - 将
multiple_joins_rewriter_version
的默认值更改为 2。它启用了新的多重连接重写器,该重写器了解列名。#12469 (Artem Zuikov)。 - 为 S3 存储的请求添加了多个指标。#12464 (ianton-ru)。
- 为带有
--secure
参数的 clickhouse-benchmark 使用正确的默认安全端口。此修复解决了 #11044 问题。#12440 (alexey-milovidov)。 - 回滚了
Log
、TinyLog
、StripeLog
引擎中的插入错误。在以前的版本中,插入错误会导致表状态不一致(这与文档描述的一致,并且对于这些表引擎是正常的)。此修复解决了 #12402 问题。#12426 (alexey-milovidov)。 - 为
Atomic
数据库引擎实现了RENAME DATABASE
和RENAME DICTIONARY
功能 - 添加了隐式的{uuid}
宏,该宏可用于ReplicatedMergeTree
的 ZooKeeper 路径。它适用于CREATE ... ON CLUSTER ...
查询。将show_table_uuid_in_table_create_query_if_not_nil
设置为true
以使用它。- 使ReplicatedMergeTree
引擎参数成为可选参数,默认情况下使用/clickhouse/tables/{uuid}/{shard}/
和{replica}
。关闭了 #12135 问题。- 小的修复。- 这些更改破坏了Atomic
数据库引擎的向后兼容性。先前创建的Atomic
数据库必须手动转换为新格式。Atomic 数据库是一项实验性功能。#12343 (tavplubix)。 - 将
AWSAuthV4Signer
分离到不同的 logger,从日志消息中移除了多余的AWSClient: AWSClient
。#12320 (Vladimir Chebotarev)。 - 改进了磁盘访问存储中的异常消息。#12625 (alesapin)。
- 改进了函数
in
参数数量无效时的异常信息。#12529 (Anton Popov)。 - 修复了关于自适应粒度的错误消息。#12624 (alesapin)。
- 修复了 FORMAT 之后 SETTINGS 的解析。#12480 (Azat Khuzhin)。
- 如果 MergeTree 表不包含 ORDER BY 或 PARTITION BY,则可能请求 ALTER 来 CLEAR 所有列,并且 ALTER 将会卡住。已修复 #7941 问题。#12382 (alexey-milovidov)。
- 避免在每次查询后从历史记录文件中重新加载补全(以避免与其他客户端会话的历史记录重叠)。#13086 (Azat Khuzhin)。
性能提升
- 将某些操作的内存使用量降低高达 2 倍。#12424 (alexey-milovidov)。
- 优化匹配精确 PK 范围的查询的 PK 查找。#12277 (Ivan Babrou)。
- 稍微优化了带有
LowCardinality
的非常短的查询。 #14129 (Anton Popov)。 - 略微提高了通过 UInt8/UInt16 键进行聚合的性能。#13091 和 #13055 (alexey-milovidov)。
- 下推查询计划(子查询内部)的
LIMIT
步骤。#13016 (Nikolai Kochetov)。 - 对 part 执行并行主键查找和跳过索引阶段,如 #11564 中所述。#12589 (Ivan Babrou)。
- 如果
set optimize_if_transform_strings_to_enum = 1
,则将函数 "if" 和 "transform" 的 String 类型参数转换为 enum 类型。#12515 (Artem Zuikov)。 - 如果
set optimize_monotonous_functions_in_order_by=1
,则在ORDER BY
中用单调函数的参数替换该函数。#12467 (Artem Zuikov)。 - 如果
set optimize_redundant_functions_in_order_by = 1
,则添加 order by 优化,将ORDER BY x, f(x)
重写为ORDER by x
。#12404 (Artem Zuikov)。 - 允许在子查询包含
WITH
子句时下推谓词。此修复解决了 #12293 问题。#12663 (Winter Zhang)。 - 提高了从紧凑 part 读取数据的性能。紧凑 part 是一项实验性功能。#12492 (Anton Popov)。
- 尝试在
DiskS3
中实现流式优化。DiskS3 是一项实验性功能。#12434 (Vladimir Chebotarev)。
构建/测试/打包改进
- 使用
shellcheck
进行 sh 测试 linting。#13200 #13207 (alexey-milovidov)。 - 添加了用于在 GitHub hook 中为 pull request 设置标签的脚本。#13183 (alesapin)。
- 移除了一些递归子模块。请参阅 #13378。#13379 (alexey-milovidov)。
- 确保所有子模块都来自正确的 URL。继续 #13379 的工作。此修复解决了 #13378 问题。#13397 (alexey-milovidov)。
- 添加了对用户声明的设置的支持,这些设置可以从查询内部访问。当 ClickHouse 引擎用作另一个系统的组件时,这是必需的。#13013 (Vitaly Baranov)。
- 在 TestFlows 中添加了对 INSERT 权限的 RBAC 功能的测试。扩展了正在测试 SELECT 的表。添加了 Requirements 以匹配新的表引擎测试。#13340 (MyroTk)。
- 修复了压力测试中服务器重启期间的超时错误。#13321 (alesapin)。
- 现在,快速测试将重试等待服务器。#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)。
- 现在,我们检查服务器是否能够在压力测试运行后启动。此修复解决了 #12473 问题。#12496 (alesapin)。
- 将 fmtlib 更新到 master (7.0.1)。#12446 (alexey-milovidov)。
- 为快速测试添加 docker 镜像。#12294 (alesapin)。
- 重新设计集成测试的配置路径。#12285 (Ilya Yatsishin)。
- 添加编译器选项以控制堆栈帧不要太大。这将有助于在小堆栈大小的光纤中运行代码。#11524 (alexey-milovidov)。
- 更新 gitignore 文件。#13447 (vladimir-golovchenko)。
ClickHouse 20.6 版本
ClickHouse v20.6.3.28-stable 版本发布
向后不兼容的变更
- 当从早于 20.5 的版本升级时,如果执行滚动更新并且集群同时包含 20.5 或更高版本和低于 20.5 的版本,如果旧版本的 ClickHouse 节点重新启动并且在存在较新版本的情况下启动了旧版本,则可能导致
Part ... intersects previous part
错误。为了防止此错误,请先在所有集群节点上安装较新的 clickhouse-server 软件包,然后再执行重启(因此,当 clickhouse-server 重新启动时,它将使用新版本启动)。
新功能
- 添加了
EXPLAIN
查询的初始实现。语法:EXPLAIN SELECT ...
。此修复解决了 #1118 问题。#11873 (Nikolai Kochetov)。 - 添加了存储引擎
RabbitMQ
。#11069 (Kseniia Sumarokova)。 - 为 #11710 实现了类似 PostgreSQL 的
ILIKE
运算符。#12125 (Mike)。 - 支持使用
SET join_algorithm = 'partial_merge'
的 RIGHT 和 FULL JOIN。仅允许 ALL 严格性(不允许 ANY、SEMI、ANTI、ASOF)。#12118 (Artem Zuikov)。 - 添加了函数
initializeAggregation
以基于单个值初始化聚合。#12109 (Guillaume Tassery)。 - 支持
ALTER TABLE ... [ADD|MODIFY] COLUMN ... FIRST
#4006。#12073 (Winter Zhang)。 - 添加了函数
parseDateTimeBestEffortUS
。#12028 (flynn)。 - 支持
ORC
格式的输出(之前仅支持输入)。#11662 (Kruglov Pavel)。
Bug 修复
- 修复了
SET optimize_move_functions_out_of_any = 1
并且any()
内部存在别名时,aggregate function any(x) is found inside another aggregate function in query
错误。#13419 (Artem Zuikov)。 - 修复了 clickhouse-local 的
PrettyCompactMonoBlock
。修复了带有PrettyCompactMonoBlock
的 extremes/totals。此修复解决了 #7746 问题。#13394 (Azat Khuzhin)。 - 修复了来自延迟副本的查询可能出现的
Totals having transform was already added to pipeline
错误。#13290 (Nikolai Kochetov)。 - 如果用户将专门构造的参数传递给函数
h3ToChildren
,服务器可能会崩溃。这修复了 #13275。 #13277 (alexey-milovidov)。 - 修复了对 Float 类型且包含 NaN 值的
uniqExact
、topK
、sumDistinct
和类似聚合函数调用的潜在低性能和略微不正确的结果。它还在 debug 构建中触发了断言。此修复解决了 #12491 问题。#13254 (alexey-milovidov)。 - 修复了以非字面 NULL 的 nullable constexpr 作为 cond 的 if 函数。修复了 #12463 问题。#13226 (alexey-milovidov)。
- 修复了在数组元素为 Nullable 且数组下标也为 Nullable 的情况下,
arrayElement
函数中的断言。此修复解决了 #12172 问题。#13224 (alexey-milovidov)。 - 修复了带有常量参数的
DateTime64
转换函数。#13205 (Azat Khuzhin)。 - 修复了使用函数的错误索引分析。这可能导致在从
MergeTree
表读取数据时剪枝错误的 part。修复了 #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)。
- 修复了当
ALTER DELETE
和ALTER MODIFY COLUMN
查询作为单个 mutation 同时执行时发生的罕见错误。此错误导致count.txt
中的行数不正确,并因此导致 part 中的数据不正确。此外,修复了同时执行ALTER RENAME COLUMN
和ALTER ADD COLUMN
的一个小错误。#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 索引。此修复了 #10572。 #12659 (Winter Zhang)。
- 修复了当 broker 不可用时(不仅限于此)
StorageKafka
中的SIGSEGV
错误。 #12658 (Azat Khuzhin)。 - 添加了对带有
Array(UUID)
参数的函数if
的支持。此修复了 #11066。 #12648 (alexey-milovidov)。 CREATE USER IF NOT EXISTS
现在在用户已存在时不会抛出异常。此修复了 #12507。 #12646 (Vitaly Baranov)。- 改进了磁盘访问存储中的异常消息。#12625 (alesapin)。
groupArrayMoving*
函数不适用于分布式查询。它的结果是在不正确的数据类型(没有提升到最大类型)中计算的。groupArrayMovingAvg
函数返回的整数与avg
函数不一致。这修复了 #12568。 #12622 (alexey-milovidov)。- 修复了函数
any
缺少别名的问题。 #12593 (Anton Popov)。 - 修复了外部字典中使用缓存布局时可能导致服务器崩溃的竞争条件。 #12566 (alesapin)。
- 在 DROP TABLE 时移除 Distributed 表的数据(来自异步 INSERT 的块)。#12556 (Azat Khuzhin)。
- 修复了当
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)。 - 修复了 FORMAT 之后 SETTINGS 的解析问题。 #12480 (Azat Khuzhin)。
- 修复了启用
text_log
时的死锁。 #12452 (alexey-milovidov)。 - 修复了指定非常大的
LIMIT
或OFFSET
时的溢出。此修复了 #10470。此修复了 #11372。 #12427 (alexey-milovidov)。 - 修复了
StorageMerge
中可能发生的段错误。此修复了 #12054。 #12401 (tavplubix)。 - 回滚了在 #11079 中引入的更改,以解决 #12098。 #12397 (Mike)。
- 为 bloom filter 索引添加了额外的参数检查。此修复了 #11408。 #12388 (alexey-milovidov)。
- 避免在索引表的 WHERE 条件中使用负数或浮点常量时抛出异常。此修复了 #11905。 #12384 (alexey-milovidov)。
- 允许
CLEAR
列,即使存在依赖的DEFAULT
表达式。此修复了 #12333。 #12378 (alexey-milovidov)。 - 修复了带有
-State
和Nullable
参数的聚合函数的TOTALS/ROLLUP/CUBE
问题。此修复了 #12163。 #12376 (alexey-milovidov)。 - 修复了当
RENAME
不允许时,ALTER RENAME COLUMN
查询的错误消息和退出代码。修复了 #12301 和 #12303。 #12335 (alesapin)。 - 修复了
ReplicatedMergeTreeQueue
中非常罕见的竞争条件。 #12315 (alexey-milovidov)。 - 当使用 codec
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
Engine 的批处理消息中间出现错误消息时的 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
中进行多次顺序插入期间,某些特殊类型的 header 被写入多次的行为。此修复了 #6155。 #12197 (Nikita Mikhaylov)。 - 修复了当
UInt8
值不等于 0 或 1 时的逻辑函数问题。 #12196 (Alexander Kazakov)。 - 将 max_memory_usage* 限制限制为进程常驻内存。 #12182 (Azat Khuzhin)。
- 修复了在
GROUP BY
injective 函数消除期间对 dictGet 参数的检查。 #12179 (Azat Khuzhin)。 - 修复了
SummingMergeTree
引擎对分区键中的列进行求和时的行为。在显式定义要 SUM 的列与分区键列相交的情况下,添加了一个异常。此修复了 #7867。 #12173 (Nikita Mikhaylov)。 - 如果 ODBC 连接不支持 schema,则不要将字典源的表名拆分为 schema 和表名本身。 #12165 (Vitaly Baranov)。
- 修复了
ALTER DELETE
中的错误逻辑,该逻辑导致在条件评估为 NULL 时删除记录。此修复了 #9088。此关闭了 #12106。 #12153 (alexey-milovidov)。 - 修复了在存在别名的情况下,将查询转换为发送到外部 DBMS(例如 MySQL、ODBC)的问题。此修复了 #12032。 #12151 (alexey-milovidov)。
- 修复了冗余 ORDER BY 优化中的错误代码。该错误在 #10067 中引入。 #12148 (alexey-milovidov)。
- 修复了整数除法中潜在的溢出。此修复了 #12119。 #12140 (alexey-milovidov)。
- 修复了
greatCircleDistance
,geoDistance
中潜在的无限循环。此修复了 #12117。 #12137 (alexey-milovidov)。 - 规范化了 “pid” 文件处理。在以前的版本中,如果服务器在没有正确关闭的情况下被终止,并且存在另一个进程具有与先前运行的服务器相同的 pid,则服务器可能拒绝启动。此外,即使有另一个服务器正在运行,pid 文件也可能在服务器启动失败时被删除。此修复了 #3501。 #12133 (alexey-milovidov)。
- 修复了导致 ReplicatedVersionedCollapsingMergeTree 表在 ZooKeepeer 中 table metadata 不正确的错误。修复了 #12093。 #12121 (alesapin)。
- 避免了对于附加到系统日志(system.query_log、metric_log 等)或 engine=Buffer 底层表的带有 join 或子查询的物化视图出现 “There is no query” 异常。 #12120 (filimonov)。
- 修复了具有 ENGINE=Dictionary 的表对字典的依赖关系的处理。此修复了 #10994。此修复了 #10397。 #12116 (Vitaly Baranov)。
- Format
Parquet
现在可以正确地与LowCardinality
和LowCardinality(Nullable)
类型一起工作。修复了 #12086, #8406。 #12108 (Nikolai Kochetov)。 - 修复了由线程总数限制错误导致的带有
UNION
的 selects 性能问题。修复了 #12030。 #12103 (Nikolai Kochetov)。 - 修复了
-StateResample
组合器的段错误。 #12092 (Anton Popov)。 - 修复了 selects 的
system.quey_log
中空的result_rows
和result_bytes
指标。修复了 #11595。 #12089 (Nikolai Kochetov)。 - 修复了从
VIEW
进行 selects 时不必要的线程数限制。修复了 #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)。
改进
- 允许以更标准的方式设置
JOIN
类型和种类:LEFT SEMI JOIN
而不是SEMI LEFT JOIN
。目前两者都是正确的。 #12520 (Artem Zuikov)。 - Buffer 引擎的 lifetime_rows/lifetime_bytes。 #12421 (Azat Khuzhin)。
- 将详细的异常消息写入客户端,而不是 'MySQL server has gone away'。 #12383 (BohuTANG)。
- 允许更改用于打印网格边框的字符集。可用的字符集如下:UTF-8、ASCII。设置
output_format_pretty_grid_charset
启用此功能。 #12372 (Sabyanin Maxim)。 - 支持 MySQL 'SELECT DATABASE()' #9336 2. 添加 MySQL 替换查询集成测试。 #12314 (BohuTANG)。
- 为 MySQL 客户端/驱动程序添加了
KILL QUERY [connection_id]
以取消长时间运行的查询,问题 #12038。 #12152 (BohuTANG)。 - 在
formatDateTime
函数中添加了对%g
(两位数 ISO 年) 和%G
(四位数 ISO 年) 替换的支持。 #12136 (vivarum)。 - 在 system.disks 中添加了 'type' 列。 #12115 (ianton-ru)。
- 改进了
REVOKE
命令:现在它只需要撤销访问权限的 grant/admin option。例如,要执行REVOKE ALL ON *.* FROM user1
,现在不需要拥有授予 grant option 的完全访问权限。添加了命令REVOKE ALL FROM user1
- 它撤销了用户user1
的所有已授权角色。 #12083 (Vitaly Baranov)。 - 为 load_balancing 添加了 replica priority(用于手动设置负载均衡的优先级)。 #11995 (Azat Khuzhin)。
- 将 S3 metadata 中的路径切换为相对路径,这使得更轻松地处理 S3 blobs。 #11892 (Vladimir Chebotarev)。
性能改进
- 通过排序键的前缀改进了 'ORDER BY' 和 'GROUP BY' 的性能(通过
optimize_aggregation_in_order
设置启用,默认禁用)。 #11696 (Anton Popov)。 - 如果
set optimize_injective_functions_inside_uniq=1
,则移除uniq*()
内部的 injective 函数。 #12337 (Ruslan Kamalov)。 - 索引未用于带有字面量的 IN 运算符,性能回归是在 v19.3 左右引入的。此修复了 #10574。 #12062 (nvartolomei)。
- 为 DiskS3 实现了单 part 上传(实验性功能)。 #12026 (Vladimir Chebotarev)。
实验性功能
- 在
MergeTree
系列表中添加了新的 in-memory parts 格式,该格式将数据存储在内存中。Parts 在首次 merge 时写入磁盘。如果 part 的行数或字节数低于阈值min_rows_for_compact_part
和min_bytes_for_compact_part
,则将以 in-memory 格式创建 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 消息。这将防止在 thread sanitizer 下可能发生的死锁。 #12313 (alexey-milovidov)。
- 现在,功能测试和压力测试将能够使用旧版本的
clickhouse-test
脚本运行。 #12287 (alesapin)。 - 移除了在
orc
构建期间创建的奇怪文件。 #12258 (Nikita Mikhaylov)。 - 将通用的 docker compose 文件放置到集成 docker 容器中。 #12168 (Ilya Yatsishin)。
- 修复了 CodeQL 的警告。
CodeQL
是另一个静态分析器,我们将与我们已经使用的clang-tidy
和PVS-Studio
一起使用。 #12138 (alexey-milovidov)。 - 对 UNBUNDLED 构建进行了小的 CMake 修复。 #12131 (Matwey V. Kornilov)。
- 添加了不使用任何 Linux 发行版的最小 Docker 镜像的展示。 #12126 (alexey-milovidov)。
- 在
clickhouse-server
docker 镜像中执行系统软件包的升级。 #12124 (Ivan Blinkov)。 - 向
system.build_options
表添加UNBUNDLED
标志。将clickhouse-test
的 skip lists 移动到 clickhouse repo。 #12107 (alesapin)。 - 通过 Anchore Container Analysis 安全分析工具定期检查,该工具查找
clickhouse-server
Docker 镜像中的 CVE。还确认Dockerfile
是可构建的。每天在master
和 pull-requests toDockerfile
上运行。 #12102 (Ivan Blinkov)。 - 通过 GitHub CodeQL 安全分析工具每日检查,该工具查找 CWE。 #12101 (Ivan Blinkov)。
- 在 Dockerfile 中第一次
apt-get update
之前安装ca-certificates
。 #12095 (Ivan Blinkov)。
ClickHouse 20.5 版本
ClickHouse v20.5.4.40-stable 版本,发布于 2020-08-10
Bug 修复
- 修复了使用函数的错误索引分析。这可能导致在从
MergeTree
表读取数据时剪枝错误的 part。修复了 #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)。
- 修复了带有常量表达式的 bloom filter 索引。此修复了 #10572。 #12659 (Winter Zhang)。
- 修复了当 broker 不可用时(不仅限于此)
StorageKafka
中的SIGSEGV
错误。 #12658 (Azat Khuzhin)。 - 添加了对带有
Array(UUID)
参数的函数if
的支持。此修复了 #11066。 #12648 (alexey-milovidov)。 - 修复了函数
any
缺少别名的问题。 #12593 (Anton Popov)。 - 修复了外部字典中使用缓存布局时可能导致服务器崩溃的竞争条件。 #12566 (alesapin)。
- 在 DROP TABLE 时移除 Distributed 表的数据(来自异步 INSERT 的块)。#12556 (Azat Khuzhin)。
- 修复了当
enable_mixed_granularity_parts=1
时,ALTER DELETE
查询后导致旧 parts 损坏的错误。修复了 #12536。 #12543 (alesapin)。 - 改进了函数
in
参数数量无效时的异常信息。#12529 (Anton Popov)。 - 修复了实时视图表中的竞争条件,该条件可能导致数据重复。#12519 (vzakaznikov)。
- 修复了从 compact parts 读取时的性能问题。 #12492 (Anton Popov)。
- 修复了
AggregateFunction(avg, ...)
值的二进制格式中的向后兼容性问题。此修复了 #12342。 #12486 (alexey-milovidov)。 - 修复了启用
text_log
时的死锁。 #12452 (alexey-milovidov)。 - 修复了指定非常大的 LIMIT 或 OFFSET 时发生的溢出。此修复了 #10470。此修复了 #11372。#12427 (alexey-milovidov)。
- 修复了 StorageMerge 可能发生的段错误。关闭了 #12054。#12401 (tavplubix)。
- 回滚了在 #11079 中引入的更改,以解决 #12098。#12397 (Mike)。
- 避免在索引表的 WHERE 条件中使用负数或浮点常量时抛出异常。此修复了 #11905。 #12384 (alexey-milovidov)。
- 允许即使存在依赖的 DEFAULT 表达式也 CLEAR 列。此修复了 #12333。#12378 (alexey-milovidov)。
- 修复了带有
-State
和Nullable
参数的聚合函数的 TOTALS/ROLLUP/CUBE 问题。此修复了 #12163。#12376 (alexey-milovidov)。 - 修复了如果
Kafka
Engine 的批处理消息中间出现错误消息时的 SIGSEGV。 #12302 (Azat Khuzhin)。 - 修复了
SummingMergeTree
引擎对分区键中的列进行求和时的行为。在显式定义要 SUM 的列与分区键列相交的情况下,添加了一个异常。此修复了 #7867。 #12173 (Nikita Mikhaylov)。 - 修复了在存在别名的情况下,将查询转换为发送到外部 DBMS(例如 MySQL、ODBC)的问题。此修复了 #12032。 #12151 (alexey-milovidov)。
- 修复了导致 ReplicatedVersionedCollapsingMergeTree 表在 ZooKeepeer 中 table metadata 不正确的错误。修复了 #12093。 #12121 (alesapin)。
- 修复了从
VIEW
进行 selects 时不必要的线程数限制。修复了 #11937。 #12085 (Nikolai Kochetov)。 - 修复了使用
join_algorithm=partial_merge
的 LowCardinality 类型 JOIN 中的崩溃。#12035 (Artem Zuikov)。 - 修复了条件中带有 NULL 的
if()
函数的错误结果。#11807 (Artem Zuikov)。
性能提升
- 索引未用于带有字面量的 IN 运算符,性能回归是在 v19.3 左右引入的。此修复了 #10574。 #12062 (nvartolomei)。
构建/测试/打包改进
- 在 Dockerfile 中第一次
apt-get update
之前安装ca-certificates
。 #12095 (Ivan Blinkov)。
ClickHouse 发布 v20.5.2.7-stable 2020-07-02
向后不兼容的变更
- 从 COUNT(DISTINCT) 和
uniq
聚合函数族返回非 Nullable 结果。如果所有传递的值均为 NULL,则返回零。这提高了 SQL 兼容性。#11661 (alexey-milovidov)。 - 添加了对用户级设置在错误位置指定情况的检查。用户级设置应在
users.xml
中的特定用户配置文件的<profile>
部分(或默认设置的<default>
中)指定。服务器将不会启动,并在日志中显示异常消息。此修复了 #9051。如果要跳过检查,可以将设置移动到适当的位置,或者在 config.xml 中添加<skip_check_for_incorrect_settings>1</skip_check_for_incorrect_settings>
。#11449 (alexey-milovidov)。 - 默认启用设置
input_format_with_names_use_header
。它将影响输入格式-WithNames
和-WithNamesAndTypes
的解析。#10937 (alexey-milovidov)。 - 移除
experimental_use_processors
设置。默认情况下已启用。#10924 (Nikolai Kochetov)。 - 将
zstd
更新至 1.4.4。它在性能和压缩率方面有一些小的改进。如果您运行的副本使用不同版本的 ClickHouse,您可能会看到合理的错误消息Data after merge is not byte-identical to data on another replicas.
并带有解释。这些消息是正常的,您不必担心。此更改是向后兼容的,但我们在此变更日志中列出它,以防您对这些消息感到疑惑。#10663 (alexey-milovidov)。 - 添加了对无意义编解码器的检查以及控制此检查的设置
allow_suspicious_codecs
。此关闭了 #4966。#10645 (alexey-milovidov)。 - 几个 Kafka 设置更改了它们的默认值。请参阅 #11388。
- 当从早于 20.5 的版本升级时,如果执行滚动更新并且集群同时包含 20.5 或更高版本和低于 20.5 的版本,如果旧版本的 ClickHouse 节点重新启动并且在存在较新版本的情况下启动了旧版本,则可能导致
Part ... intersects previous part
错误。为了防止此错误,请先在所有集群节点上安装较新的 clickhouse-server 软件包,然后再执行重启(因此,当 clickhouse-server 重新启动时,它将使用新版本启动)。
新功能
- 用于表中自动数据粗化和汇总的
TTL DELETE WHERE
和TTL GROUP BY
。#10537 (expl0si0nn)。 - PostgreSQL wire protocol 的实现。#10242 (Movses)。
- 为用户、角色、授权、设置配置文件、配额、行策略添加了系统表;添加了命令 SHOW USER、SHOW [CURRENT|ENABLED] ROLES、SHOW SETTINGS PROFILES。#10387 (Vitaly Baranov)。
- 支持在 ODBC Table 函数中写入 #10554 (ageraab)。 #10901 (tavplubix)。
- 添加了基于 Linux
perf_events
的查询性能指标(这些指标使用硬件 CPU 计数器和操作系统计数器计算)。它是可选的,并且需要在 clickhouse 二进制文件上设置CAP_SYS_ADMIN
。#9545 Andrey Skobtsov。 #11226 (Alexander Kuzmenkov)。 - 现在支持在
CREATE
查询中为数据类型添加NULL
和NOT NULL
修饰符。#11057 (Павел Потемкин)。 - 添加了
ArrowStream
输入和输出格式。#11088 (hcz)。 - 支持 Cassandra 作为外部字典源。#4978 (favstovol)。
- 添加了一种新的布局
direct
,该布局直接从源加载所有数据以进行每个查询,而无需存储或缓存数据。#10622 (Artem Streltsov)。 - 为字典添加了新的
complex_key_direct
布局,该布局在查询执行期间不本地存储任何内容。#10850 (Artem Streltsov)。 - 添加了对 MySQL 样式全局变量语法的支持(存根)。这是 MySQL 协议兼容性所必需的。#11832 (alexey-milovidov)。
- 使用
replxx
为clickhouse-client
添加了语法高亮。#11422 (Tagir Kuskarov)。 - 添加了
minMap
和maxMap
函数。#11603 (Ildus Kurbangaliev)。 - 添加了
system.asynchronous_metric_log
表,该表记录来自system.asynchronous_metrics
的历史指标。#11588 (Alexander Kuzmenkov)。 - 添加了函数
extractAllGroupsHorizontal(haystack, re)
和extractAllGroupsVertical(haystack, re)
。#11554 (Vasily Nemkov)。 - 添加 SHOW CLUSTER(S) 查询。#11467 (hexiaoting)。
- 添加了
netloc
函数,用于提取网络位置,类似于 python 中的urlparse(url)
,netloc
。#11356 (Guillaume Tassery)。 - 为 engine=Kafka 添加了 2 个虚拟列,以访问消息头。#11283 (filimonov)。
- 为 Kafka 引擎添加了
_timestamp_ms
虚拟列(类型为Nullable(DateTime64(3))
)。#11260 (filimonov)。 - 添加了函数
randomFixedString
。#10866 (Andrei Nekrashevich)。 - 添加了函数
fuzzBits
,该函数以给定的概率随机翻转字符串中的位。#11237 (Andrei Nekrashevich)。 - 允许在比较运算符、IN 和 VALUES 部分中将数字与常量字符串进行比较。#11647 (alexey-milovidov)。
- 添加了
round_robin
负载均衡模式。#11645 (Azat Khuzhin)。 - 添加了
cast_keep_nullable
设置。如果设置了CAST(something_nullable AS Type)
,则返回Nullable(Type)
。#11733 (Artem Zuikov)。 - 向
system.columns
表添加了列position
,并向system.parts_columns
表添加了column_position
。它包含表中列的序号位置,从 1 开始。此关闭了 #7744。#11655 (alexey-milovidov)。 - SYSTEM
{FLUSH DISTRIBUTED,STOP/START DISTRIBUTED SEND}
的 ON CLUSTER 支持。#11415 (Azat Khuzhin)。 - 添加了 system.distribution_queue 表。#11394 (Azat Khuzhin)。
- 支持 Kafka 中的所有格式设置,在表级别公开一些设置,调整默认值以获得更好的性能。#11388 (filimonov)。
- 添加了
port
函数(从 URL 中提取端口)。#11120 (Azat Khuzhin)。 - 现在
dictGet*
函数接受表名。#11050 (Vitaly Baranov)。 - 当使用
-n
参数时,clickhouse-format
工具现在能够格式化多个查询。#10852 (Darío)。 - 可以为 DiskS3 配置代理解析器。#10744 (Pavel Kovalenko)。
- 使
pointInPolygon
能够处理非恒定多边形。PointInPolygon 现在可以将 Array(Array(Tuple(..., ...))) 作为第二个参数,即多边形和孔洞的数组。#10623 (Alexey Ilyukhov) #11421 (Alexey Ilyukhov)。 - 向
system.parts
添加了move_ttl_info
,以便提供移动 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 更精细的粒度步骤分析内存。添加了采样内存分析器以捕获随机分配/释放。#10598 (alexey-milovidov)。
SimpleAggregateFunction
现在也支持sumMap
。#10000 (Ildus Kurbangaliev)。- 支持分布式表引擎的
ALTER RENAME COLUMN
。 #10727 的延续。修复了 #10747。#10887 (alesapin)。
错误修复
- 修复了 Decimal 解析中的 UBSan 报告。此修复了 #7540。#10512 (alexey-milovidov)。
- 修复了解析 DateTime64 时潜在的浮点异常。此修复了 #11374。#11875 (alexey-milovidov)。
- 修复了在 prewhere 条件中使用
Nullable
列导致的罕见崩溃。#11895 #11608 #11869 (Nikolai Kochetov)。 - 不允许在更高阶函数内部使用 arrayJoin。这会导致协议同步中断。此关闭了 #3933。#11846 (alexey-milovidov)。
- 修复了 FixedString 与常量 String 比较的错误结果。此修复了 #11393。此错误出现在版本 20.4 中。#11828 (alexey-milovidov)。
- 修复了条件中带有 NULL 的
if
函数的错误结果。#11807 (Artem Zuikov)。 - 修复了查询使用过多线程的问题。#11788 (Nikolai Kochetov)。
- 修复了在
SELECT ... FROM merge_tree_table ...
中使用WITH <scalar subquery> ...
时出现的Scalar does not exist
异常。#11621。#11767 (Amos Bird)。 - 修复了类似
SELECT *, xyz.*
查询的意外行为,这些查询本应报错却成功执行。#11753 (hexiaoting)。 - 现在,在元数据更改期间将取消复制的获取。#11744 (alesapin)。
- 在检查是否相等之前,先解析存储在 zookeeper 中的元数据。#11739 (Azat Khuzhin)。
- 修复了 Values 输入格式中复杂字面量类型推导错误导致的 LOGICAL_ERROR。#11732 (tavplubix)。
- 修复了 const 列上的
ORDER BY ... WITH FILL
。#11697 (Anton Popov)。 - 修复了 SYSTEM SYNC REPLICA 中非常罕见的竞争条件。如果复制表已创建,并且同时从单独的连接中,另一个客户端在该表上发出
SYSTEM SYNC REPLICA
命令(这不太可能,因为另一个客户端应该知道该表已创建),则可能会发生空指针解引用。#11691 (alexey-milovidov)。 - 传递与 XDBC 桥通信时的正确超时。最近,在检查桥的活动状态和接收元信息时,超时未被遵守。#11690 (alexey-milovidov)。
- 修复了
LIMIT n WITH TIES
与包含别名的ORDER BY
语句一起使用的问题。#11689 (Anton Popov)。 - 修复了并行
FINAL
选择可能出现的Pipeline stuck
问题。修复了 #11636。#11682 (Nikolai Kochetov)。 - 修复了导致
system.mutations
状态不正确的错误。它可能显示整个 mutation 已经完成,但服务器仍然在复制队列中有MUTATE_PART
任务,并尝试执行它们。此修复了 #11611。#11681 (alesapin)。 - 修复了 CREATE USER 查询中的语法高亮。#11664 (alexey-milovidov)。
- 添加了对带有不区分大小写标志的正则表达式的支持。此修复了 #11101 和 #11506。#11649 (alexey-milovidov)。
- 如果设置了行级安全性,则删除微不足道的计数查询优化。在以前的版本中,用户会获得表中记录的总数,而不是过滤后的计数。此修复了 #11352。#11644 (alexey-milovidov)。
- 修复了 String 的 bloom 过滤器(数据跳过索引)。#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)。
- 修复了服务器启动时关于“标记缓存大小已降低”的日志消息中的微不足道的错误。此关闭了 #11399。#11589 (alexey-milovidov)。
- 修复了带有
PREWHERE column in (subquery)
和ARRAY JOIN
的查询的Size of offsets does not match size of column
错误。#11580 (Nikolai Kochetov)。 - 修复了
SHOW CREATE TABLE
中罕见的段错误。修复了 #11490。#11579 (tavplubix)。 - HTTP 会话中的所有查询都具有相同的 query_id。已修复。#11578 (tavplubix)。
- 现在,clickhouse-server docker 容器将优先使用 IPv6 检查服务器活动状态。#11550 (Ivan Starkov)。
- 修复了如果启用
min_bytes_to_use_direct_io
并且 PREWHERE 处于活动状态并使用 SAMPLE 或大量线程时可能发生的Data compressed with different methods
错误。此修复了 #11539。#11540 (alexey-milovidov)。 - 修复了
<node>
的 shard_num/replica_num(破坏了 use_compact_format_in_distributed_parts_names)。#11528 (Azat Khuzhin)。 - 修复了 prefer_localhost_replica=0 且没有 internal_replication 的 Distributed 表的异步 INSERT。#11527 (Azat Khuzhin)。
- 修复了在使用
-State
函数进行聚合期间抛出异常时的内存泄漏。此修复了 #8995。#11496 (alexey-milovidov)。 - 修复了
INSERT SELECT FINAL
的Pipeline stuck
异常,其中SELECT
(max_threads
>1) 具有多个流,但INSERT
只有一个流 (max_insert_threads
==0)。#11455 (Azat Khuzhin)。 - 修复了类似
select count() from t, u
的查询的错误结果。#11454 (Artem Zuikov)。 - 修复了编解码器的返回压缩大小。#11448 (Nikolai Kochetov)。
- 修复了当列具有带有非字面量参数的压缩编解码器时服务器崩溃的问题。修复了 #11365。#11431 (alesapin)。
- 修复了如果表未成功创建,MergeTree 关闭时可能发生的未初始化内存读取问题。 #11420 (alexey-milovidov)。
- 修复了在
LowCardinality(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)直接选择时发生的崩溃以及错误的 nullability 问题。 #11340 (Artem Zuikov)。 - 修复了
quantilesExactWeightedArray
函数中的崩溃。 #11337 (Nikolai Kochetov)。 - 现在合并操作会在
ALTER
查询中更改元数据之前停止。 #11335 (alesapin)。 - 使使用设置
parallel_view_processing = 1
向MATERIALIZED VIEW
写入操作再次并行。修复了 #10241。 #11330 (Nikolai Kochetov)。 - 修复了当提取的 JSON 包含带有不平衡的 { 或 [ 的字符串时,
visitParamExtractRaw
函数的问题。 #11318 (Ewout)。 - 修复了 ThreadPool 中非常罕见的竞争条件。 #11314 (alexey-milovidov)。
- 修复了
clickhouse-copier
中不重要的数据竞争。由集成测试发现。 #11313 (alexey-milovidov)。 - 修复了转换中可能发生的未初始化内存问题。例如:
SELECT toIntervalSecond(now64())
。 #11311 (alexey-milovidov)。 - 修复了当表的主键中包含 Array 列,并且查询使用
empty
或notEmpty
函数按此列进行过滤时,索引分析无法工作的问题。修复了 #11286。 #11303 (alexey-milovidov)。 - 修复了当查询速度估计可能不正确,并且当查询受到
max_network_bandwidth
、max_execution_speed
或priority
设置限制时,min_execution_speed
的限制可能不起作用或工作不正确的问题。将timeout_before_checking_execution_speed
的默认值更改为非零值,因为否则min_execution_speed
和max_execution_speed
设置将不起作用。修复了 #11297。修复了 #5732。修复了 #6228。可用性改进:避免在clickhouse-client
中将异常消息与进度条连接。 #11296 (alexey-milovidov)。 - 修复了使用错误参数调用
SET DEFAULT ROLE
时发生的崩溃。修复了 #10586。 #11278 (Vitaly Baranov)。 - 修复了在
Protobuf
格式中读取格式错误的数据时发生的崩溃。修复了 #5957,修复了 #11203。 #11258 (Vitaly Baranov)。 - 修复了一个错误,当
cache
字典可能返回默认值而不是正常值(当只有过期的键时)。这仅影响字符串字段。 #11233 (Nikita Mikhaylov)。 - 修复了从内部查询中带有常量的
VIEW
读取数据时出现的QueryPipeline 中的 Block 结构不匹配
错误。修复了 #11181。 #11205 (Nikolai Kochetov)。 - 修复了可能出现的异常
关联输出的无效状态
。 #11200 (Nikolai Kochetov)。 - 现在,如果
primary.idx
在CREATE
查询中定义,则会对其进行检查。 #11199 (alesapin)。 - 修复了对于带有
Array(Array(LowCardinality))
捕获参数的高阶函数,可能出现的错误无法捕获列
。 #11185 (Nikolai Kochetov)。 - 修复了
S3
globbing,在超过 1000 个键和某些后端的情况下可能会失败。 #11179 (Vladimir Chebotarev)。 - 如果数据跳过索引依赖于将在后台合并期间修改的列(对于 SummingMergeTree、AggregatingMergeTree 以及 TTL GROUP BY),则其计算不正确。此问题已通过将索引计算移动到合并之后来修复,以便索引在合并的数据上计算。 #11162 (Azat Khuzhin)。
- 修复了在 DROP 表引擎=Kafka 时(或在服务器重启期间)有时发生的挂起问题。 #11145 (filimonov)。
- 修复了为简单查询过度预留线程的问题(优化了减少线程数,这在 pipeline 更改后部分失效)。 #11114 (Azat Khuzhin)。
- 如果 mutation 最终化任务没有最终化任何内容,则移除日志记录。 #11109 (alesapin)。
- 修复了在更新系统日志表结构时服务器启动后发生的死锁。 #11106 (alesapin)。
- 修复了 registerDiskS3 中的内存泄漏。 #11074 (Pavel Kovalenko)。
- 修复了当 JOIN 出现在 PREWHERE 中,或者
optimize_move_to_prewhere
从 WHERE 创建 PREWHERE 时,出现的错误Block::erase() 中没有这样的名称
。 #11051 (Artem Zuikov)。 - 修复了 Kafka 引擎表终止期间可能丢失数据的问题。 #11048 (filimonov)。
- 修复了 parseDateTime64BestEffort 参数解析错误。 #10925. #11038 (Vasily Nemkov)。
- 现在可以在单个
ALTER
查询中ADD/DROP
和RENAME
同一列。同时MODIFY
和RENAME
的异常消息变得更清晰。部分修复了 #10669。 #11037 (alesapin)。 - 修复了 S3 URL 的解析。 #11036 (Vladimir Chebotarev)。
- 修复了当存在
LIMIT
时,两级GROUP BY
的内存跟踪问题。 #11022 (Azat Khuzhin)。 - 修复了如果表未成功创建,MergeTree 中非常罕见的潜在 use-after-free 错误。 #10986 (alexey-milovidov)。
- 修复了 Atomic 数据库的元数据(重命名的相对路径)和数据(符号链接的相对路径)处理。 #10980 (Azat Khuzhin)。
- 修复了 Atomic 数据库引擎在并发
ALTER
和DROP DATABASE
查询时服务器崩溃的问题。 #10968 (tavplubix)。 - 修复了
getRawData()
方法中不正确的原始数据大小。 #10964 (Igr)。 - 修复了 20.1 及更早版本之间两级聚合的不兼容性。当在发起节点和远程节点上使用不同版本的 ClickHouse,并且 GROUP BY 结果的大小很大,并且聚合由单个 String 字段执行时,会发生这种不兼容性。这会导致结果中单个键的多个未合并行。 #10952 (alexey-milovidov)。
- 避免通过 DistributedBlockOutputStream 发送部分写入的文件。 #10940 (Azat Khuzhin)。
- 修复了
SELECT count(notNullIn(NULL, []))
中的崩溃。 #10920 (Nikolai Kochetov)。 - 修复了在 DROP 表引擎=Kafka 时(或在服务器重启期间)有时发生的挂起问题。 #10910 (filimonov)。
- 现在可以执行多个
ALTER RENAME
,如a TO b, c TO a
。 #10895 (alesapin)。 - 修复了当您从多个线程获取同一列的聚合函数状态结果时可能发生的竞争。我发现唯一可能发生这种情况的方式是当您从 Memory 引擎的表中读取数据时使用
finalizeAggregation
函数,该引擎存储quanite*
函数的AggregateFunction
状态。 #10890 (Nikolai Kochetov)。 - 修复了 Distributed 表中元组的向后兼容性问题。 #10889 (Anton Popov)。
- 修复了 StringHashTable 中的 SIGSEGV(如果该键不存在)。 #10870 (Azat Khuzhin)。
- 修复了从 Atomic 引擎的数据库中删除
LiveView
表后,WATCH
挂起的问题。 #10859 (tavplubix)。 - 修复了
ReplicatedMergeTree
中的一个错误,该错误可能导致在OPTIMIZE
查询上的某些ALTER
操作在等待某些副本变为非活动状态后挂起。 #10849 (tavplubix)。 - 现在,如果参与
CONSTRAINT
表达式的列被重命名,则约束会更新。修复了 #10844。 #10847 (alesapin)。 - 修复了缓存字典中可能读取未初始化内存的问题。 #10834 (alexey-milovidov)。
- 修复了 Block::sortColumns() 后的列顺序(还添加了一个测试,表明它影响了一些实际用例 - Buffer 引擎)。 #10826 (Azat Khuzhin)。
- 修复了在未请求标识符引用时 ODBC bridge 的问题。修复了 #7984。 #10821 (alexey-milovidov)。
- 修复了 DateLUT 中的 UBSan 和 MSan 报告。 #10798 (alexey-milovidov)。
- 使用
src_type
在键条件中进行正确的类型转换。修复了 #6287。 #10791 (Andrew Onyshchuk)。 - 摆脱了旧的 libunwind 补丁。 https://github.com/ClickHouse-Extras/libunwind/commit/500aa227911bd185a94bfc071d68f4d3b03cb3b1#r39048012 这允许在
clang
构建中禁用-fno-omit-frame-pointer
,从而平均提高至少 1% 的性能。 #10761 (Amos Bird)。 - 修复了在多个分片上使用浮点权重时 avgWeighted 函数的问题。 #10758 (Baudouin Giard)。
- 修复了
parallel_view_processing
行为。现在,如果发生异常,则应完成所有无异常的插入到MATERIALIZED VIEW
的操作。修复了 #10241。 #10757 (Nikolai Kochetov)。 - 修复了与 -State 组合使用时的组合器 -OrNull 和 -OrDefault。 #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 插入的原子性问题。修复了 #9666。 #10687 (Andrew Onyshchuk)。
- 修复了在一个查询中多次使用带有相同集合的
IN
运算符的问题。 #10686 (Anton Popov)。 - 修复了当
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)。 - 修复了当表格有很多 parts 时,锁定并发 alters 的错误。 #10659 (alesapin)。
- 修复了如果服务器在表启动之前关闭,StorageBuffer 中 nullptr 解引用的问题。 #10641 (alexey-milovidov)。
- 修复了分布式查询的谓词优化(
enable_optimize_predicate_expression=1
)对于带有HAVING
部分的查询(即当需要在服务器发起者上进行过滤时)的问题,通过保留表达式的顺序(这足以修复),并强制聚合器使用列名而不是索引。修复了:#10613, #11413。 #10621 (Azat Khuzhin)。 - 修复了带有 LowCardinality 的 optimize_skip_unused_shards 问题。 #10611 (Azat Khuzhin)。
- 修复了服务器启动时发生异常时 StorageBuffer 中出现段错误的问题。修复了 #10550。 #10609 (tavplubix)。
- 在
SYSTEM DROP DNS CACHE
查询中,也删除了用于检查用户是否允许从某些 IP 地址连接的缓存。 #10608 (tavplubix)。 - 修复了在
MATERIALIZED VIEW
的内部查询中,如果此查询包含依赖表,则标量结果不正确的问题。 #10603 (Nikolai Kochetov)。 - 修复了同步 mutations 的条件变量处理。在某些情况下,可能会丢失向该条件变量发送的信号。 #10588 (Vladimir Chebotarev)。
- 修复了可能发生的崩溃问题:在
loadStoredObject()
完成之前调用了createDictionary()
。 #10587 (Vitaly Baranov)。 - 修复了错误
BloomFilter 误报必须是 0 到 1 之间的双精度数
#10551。 #10569 (Winter Zhang)。 - 修复了 SELECT 列 ALIAS,其默认表达式类型与列类型不同的问题。 #10563 (Azat Khuzhin)。
- 实现了 DateTime64 和 String 值之间的比较(就像 DateTime 一样)。 #10560 (Vasily Nemkov)。
- 修复了索引损坏问题,在某些情况下,将 compact parts 合并到另一个 compact part 后可能会发生索引损坏。 #10531 (Anton Popov)。
- 默认禁用 GROUP BY sharding_key 优化(由于 sharding_key 分析的技巧性,
optimize_distributed_group_by_sharding_key
已被引入并默认关闭,简单的例子是在 sharding key 中使用if
),并修复了 WITH ROLLUP/CUBE/TOTALS 的问题。 #10516 (Azat Khuzhin)。 - 修复了:#10263(在该 PR 之后,通过 INSERT 发送 dist 在每次 INSERT 时都被推迟)修复了:#8756(该 PR 在满足以下所有条件时破坏了分布式发送(我现在猜测不太可能设置):
internal_replication == false
,多个本地分片(激活硬链接代码)和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 风格反斜杠转义时(这是 ClickHouse 和 MySQL 特有的 SQL 标准扩展),如果找到未知的转义序列(例如
\%
或\w
),则保留反斜杠,这将使LIKE
和match
正则表达式的使用更加方便(只需编写name LIKE 'used\_cars'
而不是name LIKE 'used\\_cars'
),同时也更兼容。修复了 #10922。 #11208 (alexey-milovidov)。 - 读取 Decimal 值时,剪切小数点后的额外数字。此行为更兼容 MySQL 和 PostgreSQL。修复了 #10202。 #11831 (alexey-milovidov)。
- 允许在 ZooKeeper 中的元数据已被删除且不存在的情况下 DROP 复制表(这也是使用 TestKeeper 进行测试且服务器已重启的情况)。即使在与 ZooKeeper 通信时出现错误,也允许 RENAME 复制表。修复了 #10720。 #11652 (alexey-milovidov)。
- 稍微改进了从字符串读取 decimal 的诊断信息。关闭了 #10202。 #11829 (alexey-milovidov)。
- 修复了信号处理程序中的 sleep 调用。它的睡眠时间少于预期。 #11825 (alexey-milovidov)。
- (仅限 Linux)即使没有
CAP_NET_ADMIN
功能,与操作系统相关的性能指标(针对 CPU 和 I/O)也能正常工作。 #10544 (Alexander Kazakov)。 - 添加了
hostname
作为函数hostName
的别名。此功能由 Yandex.Metrica 的 Victor Tarnavskiy 提出。 #11821 (alexey-milovidov)。 - 添加了对跨复制集群的分布式
DDL
(更新/删除/删除分区)的支持。 #11703 (Nikita Mikhaylov)。 - 如果无法监听某个监听地址(例如,Docker 内部 IPv6 不可用),则在服务器启动时,服务器日志中发出警告而不是错误。请注意,如果服务器无法监听所有列出的地址,它将像以前一样拒绝启动。此修复了 #4406。 #11687 (alexey-milovidov)。
- 在 docker 镜像启动时创建默认用户和数据库。 #10637 (Paramtamtam)。
- 当多行查询打印到服务器日志时,这些行会被连接起来。使其在多行字符串文字、标识符和单行注释的情况下也能正确工作。此修复了 #3853。 #11686 (alexey-milovidov)。
- 现在命令中允许使用多个名称:CREATE USER、CREATE ROLE、ALTER USER、SHOW CREATE USER、SHOW GRANTS 等等。 #11670 (Vitaly Baranov)。
- 在跨复制集群上添加对分布式 DDL (
UPDATE/DELETE/DROP PARTITION
) 的支持。 #11508 (frank lee)。 - 如果用户使用显式值指定了密码,则在
clickhouse-client
和clickhouse-benchmark
中从命令行清除密码。这可以防止密码通过ps
和类似工具泄露。 #11665 (alexey-milovidov)。 - 如果 ELF 文件中的调试信息与正在运行的二进制文件不符,则不要使用它。这是为了避免在堆栈跟踪中打印错误的函数名称和源位置。此修复了 #7514。 #11657 (alexey-milovidov)。
- 当值未在 parseDateTimeBestEffortOrNull/Zero 函数中完全解析时,返回 NULL/零。此修复了 #7876。 #11653 (alexey-milovidov)。
- 跳过请求的 URL 中的空参数。当您写入
https://127.0.0.1:8123/?&a=b
或https://127.0.0.1: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
大于主题中的分区数时的性能问题。 #11599 (filimonov)。 - 改进
multiple_joins_rewriter_version=2
逻辑。修复了 lambda 别名的未知列错误。 #11587 (Artem Zuikov)。 - 当无法解析列声明列表时,提供更好的异常消息。这关闭了 #10403。 #11537 (alexey-milovidov)。
- 改进 VIEW 的
enable_optimize_predicate_expression=1
逻辑。 #11513 (Artem Zuikov)。 - 在 Live View 表中添加对 PREWHERE 的支持。 #11495 (vzakaznikov)。
- 自动更新 DNS 缓存,用于检查是否允许用户从某个地址连接。 #11487 (tavplubix)。
- 即使正在执行并发合并,OPTIMIZE FINAL 也会强制合并。这关闭了 #11309 和关闭了 #11322。 #11346 (alexey-milovidov)。
- 在 clickhouse-client 中禁止输出已取消的查询。在以前的版本中,即使您按下 Ctrl+C 取消查询后,结果也可能继续在终端中打印。这关闭了 #9473。 #11342 (alexey-milovidov)。
- 现在,历史记录文件在每次查询后都会更新,并且如果多个客户端使用同一个历史记录文件,则不会出现竞争条件。此修复了 #9897。 #11453 (Tagir Kuskarov)。
- 在重新加载配置时,提供更好的日志消息。 #11341 (alexey-milovidov)。
- 在某些情况下,从
clickhouse-client
或clickhouse-format
中格式化的查询中删除尾随空格。 #11325 (alexey-milovidov)。 - 添加设置 "output_format_pretty_max_value_width"。如果值太长,将被截断,以避免在终端中输出过大的值。这关闭了 #11140。 #11324 (alexey-milovidov)。
- 在内存映射不足的情况下,提供更好的异常消息。这关闭了 #11027。 #11316 (alexey-milovidov)。
- 在 ASOF JOIN 中支持 (U)Int8、(U)Int16、Date。 #11301 (Artem Zuikov)。
- 为 Kafka 表支持 kafka_client_id 参数。它还更改了 ClickHouse 与 Kafka 通信时使用的默认
client.id
,使其更详细且更可用。 #11252 (filimonov)。 - 在发生异常时,保留
DistributedFilesToInsert
指标的值。在以前的版本中,该值在我们即将发送一些文件时设置,但如果发生异常并且某些文件仍在挂起,则该值为零。现在它对应于文件系统中挂起文件的数量。 #11220 (alexey-milovidov)。 - 添加对多词数据类型名称(例如
DOUBLE PRECISION
和CHAR VARYING
)的支持,以获得更好的 SQL 兼容性。 #11214 (Павел Потемкин)。 - 为某些数据类型提供同义词。 #10856 (Павел Потемкин)。
- 查询日志现在默认启用。 #11184 (Ivan Blinkov)。
- 在表 system.users 中以及执行 SHOW CREATE USER 查询时显示身份验证类型。 #11080 (Vitaly Baranov)。
- 在显式
DROP DATABASE
时删除Memory
数据库引擎的数据。修复了 #10557。 #11021 (tavplubix)。 - 为 rdkafka 库的内部线程设置线程名称。使来自 rdkafka 的日志在服务器日志中可用。 #10983 (Azat Khuzhin)。
- 支持查询中的 Unicode 空白字符。这有助于从 Word 或网页复制粘贴查询。此修复了 #10896。 #10903 (alexey-milovidov)。
- 允许将大型 UInt 类型用作函数
tupleElement
中的索引。 #10874 (hcz)。 - 在 INSERT INTO Distributed 上尊重 prefer_localhost_replica/load_balancing。 #10867 (Azat Khuzhin)。
- 引入
min_insert_block_size_rows_for_materialized_views
、min_insert_block_size_bytes_for_materialized_views
设置。这些设置类似于min_insert_block_size_rows
和min_insert_block_size_bytes
,但仅适用于插入到MATERIALIZED VIEW
中的块。它有助于控制推送到 MV 时的块压缩并避免过度内存使用。 #10858 (Azat Khuzhin)。 - 在服务器关闭期间消除来自复制队列的异常。修复了 #10819。 #10841 (alesapin)。
- 确保
varSamp
、varPop
不会由于数值错误而返回负数结果,并且stddevSamp
、stddevPop
无法从负方差计算。此修复了 #10532。 #10829 (alexey-milovidov)。 - 更好的 DNS 异常消息。此修复了 #10813。 #10828 (alexey-milovidov)。
- 在某些解析错误的情况下,将 HTTP 响应代码更改为 400 Bad Request。此修复了 #10636。 #10640 (alexey-milovidov)。
- 如果 clickhouse-client 比 clickhouse-server 新,则打印一条消息。 #10627 (alexey-milovidov)。
- 添加对
INSERT INTO [db.]table WATCH
查询的支持。 #10498 (vzakaznikov)。 - 允许在 clickhouse-client 中传递 quota_key。这关闭了 #10227。 #10270 (alexey-milovidov)。
性能提升
- 允许多个副本并发地分配合并、mutation、分区删除、移动和替换。这关闭了 #10367。 #11639 (alexey-milovidov) #11795 (alexey-milovidov)。
- 关于表排序键的 GROUP BY 优化,通过
optimize_aggregation_in_order
设置启用。 #9113 (dimarub2000)。 - 带 final 的 Selects 并行执行。添加了设置
max_final_threads
以限制使用的线程数。 #10463 (Nikolai Kochetov)。 - 改进通过
INSERT SELECT
或使用 clickhouse-client 进行 INSERT 查询的性能,当生成小块时(并行解析的典型情况)。此修复了 #11275。修复了 CONSTRAINTs 不适用于 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 格式时,
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)。 - 通过删除一些冗余的数据移动来改进基数排序(在带有简单键的
ORDER BY
中使用)。 #10981 (Arslan Gumerov)。 - 在 MergeJoin 中排序左表的更大部分。在内存中缓冲左块。添加
partial_merge_join_left_table_buffer_bytes
设置来管理左块缓冲区大小。 #10601 (Artem Zuikov)。 - 从子查询中删除重复的 ORDER BY 和 DISTINCT,此优化通过
optimize_duplicate_order_by_and_distinct
启用 #10067 (Mikhail Malafeev)。 - 此功能消除了 GROUP BY 部分中其他键的函数,通过
optimize_group_by_function_keys
启用 #10051 (xPoSx)。 - 新的优化,将算术运算从聚合函数中移出,通过
optimize_arithmetic_operations_in_aggregate_functions
启用 #10047 (Ruslan)。 - 使用基于 Poco 而不是 curl 的 HTTP 客户端用于 S3。这将提高 s3 存储和表函数的性能并降低内存使用率。 #11230 (Pavel Kovalenko)。
- 修复了与基于始终应用的限制的重新调度相关的 Kafka 性能问题。 #11149 (filimonov)。
- 启用 percpu_arena:percpu用于 jemalloc(这将减少由于线程池引起的内存碎片)。 #11084 (Azat Khuzhin)。
- 优化从 S3 HTTP 客户端读取响应时的内存使用率。 #11561 (Pavel Kovalenko)。
- 调整默认 Kafka 设置以获得更好的性能。 #11388 (filimonov)。
实验性功能
- 添加数据类型
Point
(Tuple(Float64, Float64)) 和Polygon
(Array(Array(Tuple(Float64, Float64)))。 #10678 (Alexey Ilyukhov)。 - 添加了一个
hasSubstr
函数,允许查找数组中的子序列。注意:此函数可能会在不另行通知的情况下重命名。 #11071 (Ryad Zenine)。 - 添加了 OpenCL 支持和 bitonic 排序算法,该算法可用于对单列中的整数类型数据进行排序。需要使用标志
-DENABLE_OPENCL=1
构建。为了使用 bitonic 排序算法代替其他算法,您需要为 Setting 的选项special_sort
设置bitonic_sort
,并确保 OpenCL 可用。此功能不会提高性能或任何其他方面,仅作为示例和演示目的提供。如果在此方向上没有进一步的开发,则很可能会在不久的将来删除。 #10232 (Ri)。
构建/测试/打包改进
- 为程序和实用程序启用 clang-tidy。 #10991 (alexey-milovidov)。
- 删除对
tzdata
的依赖:如果/usr/share/zoneinfo
目录不存在,则不会失败。请注意,即使系统中未安装 tzdata,所有时区在 ClickHouse 中也能正常工作。 #11827 (alexey-milovidov)。 - 添加了 MSan 和 UBSan 压力测试。请注意,我们已经为功能测试提供了 MSan、UBSan,而“压力”测试是另一种测试。 #10871 (alexey-milovidov)。
- 在崩溃消息中打印编译器构建 ID。这将使我们更加确定哪个二进制文件崩溃了。添加了新函数
buildId
。 #11824 (alexey-milovidov)。 - 添加了一个测试,以确保在 FREEZE 查询后 mutation 继续工作。 #11820 (alexey-milovidov)。
- 不允许在名称中使用 "fail" 子字符串的测试,因为当您键入 Ctrl+F 并搜索 "fail" 时,这会使在浏览器中查看测试结果不太方便。 #11817 (alexey-milovidov)。
- 从 HTTPHandlerFactory 中删除未使用的导入。 #11660 (Bharat Nallan)。
- 添加了执行复制器实例的随机抽样。这是为了避免
Too many simultaneous queries
错误。还增加了超时时间并降低了故障概率。 #11573 (Nikita Mikhaylov)。 - 修复了遗漏的 include。 #11525 (Matwey V. Kornilov)。
- 通过删除旧的示例程序来加速构建。还找到了一些孤立的功能测试。 #11486 (alexey-milovidov)。
- 增加 CI 构建的 ccache 大小。 #11450 (alesapin)。
- 在 deb 构建中仅保留 unit_tests_dbms。 #11429 (Ilya Yatsishin)。
- 将 librdkafka 更新到版本 1.4.2。 #11256 (filimonov)。
- 重构 CMake 构建文件。 #11390 (Ivan)。
- 修复了几个不稳定的集成测试。 #11355 (alesapin)。
- 添加对使用 UBSan 运行单元测试的支持。 #11345 (alexey-milovidov)。
- 从集成测试
test_insertion_sync_fails_with_timeout
中删除冗余的超时。 #11343 (alesapin)。 - 在 clickhouse-test 中更好地检查挂起的查询。 #11321 (alexey-milovidov)。
- 如果服务器在调试模式或使用 sanitizers 构建,则发出警告。 #11304 (alexey-milovidov)。
- 现在 clickhouse-test 在测试运行之前检查服务器的活动状态。 #11285 (alesapin)。
- 修复了潜在的不稳定测试
00731_long_merge_tree_select_opened_files.sh
。它不会经常失败,但我们在使用 ThreadFuzzer 进行实验时发现了此测试中潜在的竞争条件:#9814 请参阅 link 以获取示例。 #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 存储桶。 #11142 (Pavel Kovalenko)。
- 为非常量多边形添加性能测试。 #11141 (alexey-milovidov)。
- 修复
00979_live_view_watch_continuous_aggregates
测试。 #11024 (vzakaznikov)。 - 添加在集成测试中通过 tmpfs 运行 zookeeper 的能力。 #11002 (alesapin)。
- 使用指数退避等待 odbc-bridge。之前 200 毫秒的等待时间在我们的 CI 环境中不足够。 #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 library 添加 MSan 抑制。 #10800 (alexey-milovidov)。
- GRPC make 找不到 protobuf 文件,通过添加正确的链接更改了 make 文件。 #10794 (mnkonkova)。
- 为 base、utils、programs 启用额外的警告 (
-Weverything
)。请注意,我们已经为大部分代码启用了它。 #10779 (alexey-milovidov)。 - 来自库的警告抑制在 #10396 中被错误地声明为 public。 #10776 (alexey-milovidov)。
- 恢复在 #10396 中意外删除的补丁。 #10774 (alexey-milovidov)。
- 修复性能测试错误,第 2 部分。 #10773 (alexey-milovidov)。
- 修复性能测试错误。 #10766 (alexey-milovidov)。
- 更新交叉构建以使用 clang-10 编译器。 #10724 (Ivan)。
- 更新安装 RPM 包的说明。这是由 Denis (TG 登录名 @ldviolet) 提出的,并由 Arkady Shejn 实现。 #10707 (alexey-milovidov)。
- 尝试修复
tests/queries/0_stateless/01246_insert_into_watch_live_view.py
测试。 #10670 (vzakaznikov)。 - 修复并重新启用 00979_live_view_watch_continuous_aggregates.py 测试。 #10658 (vzakaznikov)。
- 修复 ASan 压力测试中的 OOM。 #10646 (alexey-milovidov)。
- 修复在迁移到 clang-10 后出现在 HashTable 中的 UBSan 报告(向 nullptr 添加零)。#10638 (alexey-milovidov)。
- 移除编译时 tzdata 处理期间对
ld
(bfd) 链接器的外部调用。#10634 (alesapin)。 - 允许使用
lld
链接 blobs(资源)。#10632 (alexey-milovidov)。 - 修复
LZ4
库中的 UBSan 报告。#10631 (alexey-milovidov)。另请参阅 https://github.com/lz4/lz4/issues/857 - 将 LZ4 更新到最新的 dev 分支。#10630 (alexey-milovidov)。
- 添加了自动生成的机器可读文件,其中包含稳定版本列表。#10628 (alexey-milovidov)。
- 修复
capnp::UnalignedFlatArrayMessageReader
的capnproto
版本检查。#10618 (Matwey V. Kornilov)。 - 降低测试中的内存使用量。#10617 (alexey-milovidov)。
- 修复新的 live view 测试中硬编码的超时。#10604 (vzakaznikov)。
- 增加在 tests/queries/0_stateless/helpers/client.py 中打开客户端时的超时时间。#10599 (vzakaznikov)。
- 为 clang 构建启用 ThinLTO,是 #10435 的延续。#10585 (Amos Bird)。
- 添加模糊测试器并为 oss-fuzz 集成做准备。#10546 (kyprizel)。
- 修复 FreeBSD 构建。#10150 (Ivan)。
- 添加使用 pytest 框架进行查询测试的新构建。#10039 (Ivan)。
ClickHouse 发布 v20.4
ClickHouse 发布 v20.4.8.99-stable 2020-08-10
Bug 修复
- 修复了将 unix 时间戳作为参数传递时
parseDateTimeBestEffort
函数中的错误。 这修复了 #13362。 #13441 (alexey-milovidov)。 - 修复了对 Float 类型且包含 NaN 值的
uniqExact
、topK
、sumDistinct
和类似聚合函数调用的潜在低性能和略微不正确的结果。它还在 debug 构建中触发了断言。此修复解决了 #12491 问题。#13254 (alexey-milovidov)。 - 修复了以非字面 NULL 的 nullable constexpr 作为 cond 的 if 函数。修复了 #12463 问题。#13226 (alexey-milovidov)。
- 修复了在数组元素为 Nullable 且数组下标也为 Nullable 的情况下,
arrayElement
函数中的断言。此修复解决了 #12172 问题。#13224 (alexey-milovidov)。 - 修复了使用函数的错误索引分析。这可能导致在从
MergeTree
表读取数据时剪枝错误的 part。修复了 #13060,#12406 问题。#13081 (Anton Popov)。 - 修复了不必要地限制从本地副本进行选择的线程数。#12840 (Nikolai Kochetov)。
- 修复了在
WITH TOTALS
查询中可能出现的额外溢出数据行。#12747 (Nikolai Kochetov)。 - 修复了大型元组的性能问题,这些元组在
IN
部分被解释为函数。此问题出现在用户出于某种隐晦的原因编写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 fix bloom filter index with const expression。 #12659 (Winter Zhang)。
- 修复了当 broker 不可用时(不仅限于此)
StorageKafka
中的SIGSEGV
错误。 #12658 (Azat Khuzhin)。 - 添加了对带有
Array(UUID)
参数的函数if
的支持。此修复了 #11066。 #12648 (alexey-milovidov)。 - 修复了外部字典中使用缓存布局时可能导致服务器崩溃的竞争条件。 #12566 (alesapin)。
- 在 DROP TABLE 时删除 Distributed 表的数据(来自异步 INSERT 的块)。#12556 (Azat Khuzhin)。
- 修复了当
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
。 在这种情况下禁用字典连接优化。#12458 (Artem Zuikov)。 - 修复了 StorageMerge 可能发生的段错误。关闭了 #12054。#12401 (tavplubix)。
- 修复了
WITH FILL
修饰符中列的顺序。之前,ORDER BY
语句的列顺序未被遵守。 #12306 (Anton Popov)。 - 避免了当存在通过虚拟列(例如
Merge
表中的_table
)或系统表中的“索引”列(例如从system.tables
查询时通过数据库名称进行过滤)过滤数据的表达式,并且此表达式返回Nullable
类型时,出现 “bad cast” 异常。此修复了 #12166。 #12305 (alexey-milovidov)。 - 在 TrieDictionary 加载失败后显示错误。#12290 (Vitaly Baranov)。
- 函数
arrayFill
对于空数组工作不正确,可能导致崩溃。此修复了 #12263。 #12279 (alexey-milovidov)。 - 实现了
LowCardinality
类型的通用类型转换。 这允许执行具有 LowCardinality 列和其他列的表的 UNION ALL。 这修复了 #8212。 这修复了 #4342。 #12275 (alexey-milovidov)。 - 修复了在
StorageFile
中进行多次顺序插入期间,某些特殊类型的 header 被写入多次的行为。此修复了 #6155。 #12197 (Nikita Mikhaylov)。 - 修复了当
UInt8
值不等于 0 或 1 时的逻辑函数问题。 #12196 (Alexander Kazakov)。 - 将 max_memory_usage* 限制限制为进程常驻内存。 #12182 (Azat Khuzhin)。
- 修复了在 GROUP BY 单射函数消除期间
dictGet
参数检查。#12179 (Azat Khuzhin)。 - 如果 ODBC 连接不支持 schema,则不要将字典源的表名拆分为 schema 和表名本身。 #12165 (Vitaly Baranov)。
- 修复了
ALTER DELETE
中的错误逻辑,该逻辑导致在条件评估为 NULL 时删除记录。此修复了 #9088。此关闭了 #12106。 #12153 (alexey-milovidov)。 - 修复了在存在别名的情况下,将查询转换为发送到外部 DBMS(例如 MySQL、ODBC)的问题。此修复了 #12032。 #12151 (alexey-milovidov)。
- 修复了整数除法中潜在的溢出。此修复了 #12119。 #12140 (alexey-milovidov)。
- 修复了
greatCircleDistance
,geoDistance
中潜在的无限循环。此修复了 #12117。 #12137 (alexey-milovidov)。 - 规范化了 “pid” 文件处理。在以前的版本中,如果服务器在没有正确关闭的情况下被终止,并且存在另一个进程具有与先前运行的服务器相同的 pid,则服务器可能拒绝启动。此外,即使有另一个服务器正在运行,pid 文件也可能在服务器启动失败时被删除。此修复了 #3501。 #12133 (alexey-milovidov)。
- 修复了具有 ENGINE=Dictionary 的表对字典的依赖关系的处理。此修复了 #10994。此修复了 #10397。 #12116 (Vitaly Baranov)。
- 修复了由线程总数限制错误导致的带有
UNION
的 selects 性能问题。修复了 #12030。 #12103 (Nikolai Kochetov)。 - 修复了
-StateResample
组合器的段错误。 #12092 (Anton Popov)。 - 修复了 selects 的
system.quey_log
中空的result_rows
和result_bytes
指标。修复了 #11595。 #12089 (Nikolai Kochetov)。 - 修复了从
VIEW
进行 selects 时不必要的线程数限制。修复了 #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。#12043 (alexey-milovidov)。 - 修复了约束为常量表达式时的约束检查。此修复了 #11360。 #12042 (alexey-milovidov)。
- 修复了带有
Nullable
列的元组的错误比较。 修复了 #11985。 #12039 (Nikolai Kochetov)。 - 修复了当 allow_introspection_functions=0 时访问权限的计算。#12031 (Vitaly Baranov)。
- 修复了当使用类型为
FixedString
且大小不同的参数调用函数if
时,出现的错误结果和潜在崩溃。此修复了 #11362。 #12021 (alexey-milovidov)。 - 如果函数
neighbor
作为唯一返回的表达式,并且该函数使用偏移量-9223372036854775808
调用,则查询可能会返回空结果。 这修复了 #11367。 #12019 (alexey-milovidov)。 - 修复了当 allow_ddl=0 时访问权限的计算。#12015 (Vitaly Baranov)。
- 修复了 generateRandom 中潜在的数组大小溢出,这可能导致崩溃。 这修复了 #11371。 #12013 (alexey-milovidov)。
- 修复了潜在的浮点异常。 这关闭了 #11378。 #12005 (alexey-milovidov)。
- 修复了服务器启动时日志消息中错误的设置名称。#11997 (alexey-milovidov)。
- 修复了
Values
格式中的Query parameter was not set
错误。 修复了 #11918。 #11936 (tavplubix)。 - 保留查询中替换的别名(参数化查询)。 这修复了 #11914。 #11916 (alexey-milovidov)。
- 修复了从默认存储策略更改存储策略时没有移动的错误。#11893 (Vladimir Chebotarev)。
- 修复了解析
DateTime64
时潜在的浮点异常。 这修复了 #11374。 #11875 (alexey-milovidov)。 - 修复了通过 HTTP 接口的内存记帐(在
wait_end_of_query=1
时可能很重要)。#11840 (Azat Khuzhin)。 - 在检查是否相等之前,先解析存储在 zookeeper 中的元数据。#11739 (Azat Khuzhin)。
性能提升
- 索引未用于带有字面量的 IN 运算符,性能回归是在 v19.3 左右引入的。此修复了 #10574。 #12062 (nvartolomei)。
构建/测试/打包改进
- 在 Dockerfile 中第一次
apt-get update
之前安装ca-certificates
。 #12095 (Ivan Blinkov)。
ClickHouse 发布 v20.4.6.53-stable 2020-06-25
Bug 修复
- 修复了在 prewhere 条件中使用
Nullable
列导致的罕见崩溃。 是 #11608 的延续。#11869 (Nikolai Kochetov)。 - 不允许在更高阶函数内部使用 arrayJoin。这会导致协议同步中断。此关闭了 #3933。#11846 (alexey-milovidov)。
- 修复了 FixedString 与常量 String 比较的错误结果。此修复了 #11393。此错误出现在版本 20.4 中。#11828 (alexey-milovidov)。
- 修复了
if()
函数在条件中使用 NULL 时结果错误的问题。#11807 (Artem Zuikov)。 - 修复了查询使用过多线程的问题。#11788 (Nikolai Kochetov)。
- 修复了类似
SELECT *, xyz.*
查询的意外行为,这些查询本应报错却成功执行。#11753 (hexiaoting)。 - 现在,在元数据更改期间将取消复制的获取。#11744 (alesapin)。
- 修复了 Values 输入格式中复杂字面量类型推导错误导致的 LOGICAL_ERROR。#11732 (tavplubix)。
- 修复了 const 列上的
ORDER BY ... WITH FILL
。#11697 (Anton Popov)。 - 传递与 XDBC 桥通信时的正确超时。最近,在检查桥的活动状态和接收元信息时,超时未被遵守。#11690 (alexey-milovidov)。
- 修复了
LIMIT n WITH TIES
与包含别名的ORDER BY
语句一起使用的问题。#11689 (Anton Popov)。 - 修复了导致
system.mutations
状态不正确的错误。它可能显示整个 mutation 已经完成,但服务器仍然在复制队列中有MUTATE_PART
任务,并尝试执行它们。此修复了 #11611。#11681 (alesapin)。 - 添加了对带有不区分大小写标志的正则表达式的支持。此修复了 #11101 和 #11506。#11649 (alexey-milovidov)。
- 如果设置了行级安全性,则删除微不足道的计数查询优化。在以前的版本中,用户会获得表中记录的总数,而不是过滤后的计数。此修复了 #11352。#11644 (alexey-milovidov)。
- 修复了 String 的 bloom 过滤器(数据跳过索引)。#11638 (Azat Khuzhin)。
- 修复了在 prewhere 条件中使用
Nullable
列导致的罕见崩溃。(可能与 #11572 有关)。#11608 (Nikolai Kochetov)。 - 修复了从
Buffer
表进行采样读取的查询的Block structure mismatch
错误。#11602 (Nikolai Kochetov)。 - 修复了当 exception.code() % 256 = 0 时 clickhouse-client 的错误退出代码。#11601 (filimonov)。
- 修复了服务器启动时关于“标记缓存大小已降低”的日志消息中的微不足道的错误。此关闭了 #11399。#11589 (alexey-milovidov)。
- 修复了带有
PREWHERE column in (subquery)
和ARRAY JOIN
的查询的Size of offsets does not match size of column
错误。#11580 (Nikolai Kochetov)。 - 修复了
SHOW CREATE TABLE
中罕见的段错误。修复了 #11490。#11579 (tavplubix)。 - HTTP 会话中的所有查询都具有相同的 query_id。已修复。#11578 (tavplubix)。
- 现在,clickhouse-server docker 容器将优先使用 IPv6 检查服务器活动状态。#11550 (Ivan Starkov)。
- 修复了
<node>
的 shard_num/replica_num(破坏了 use_compact_format_in_distributed_parts_names)。#11528 (Azat Khuzhin)。 - 修复了在表删除期间可能导致异常的竞争条件。 这有点棘手,但完全无害。 如果您想要解释,请在 telegram 上通知我。#11523 (alesapin)。
- 修复了在使用 -State 函数进行聚合过程中抛出异常时的内存泄漏。 这修复了 #8995。 #11496 (alexey-milovidov)。
- 如果数据跳过索引依赖于将在后台合并期间修改的列(对于 SummingMergeTree、AggregatingMergeTree 以及 TTL GROUP BY),则其计算不正确。此问题已通过将索引计算移动到合并之后来修复,以便索引在合并的数据上计算。 #11162 (Azat Khuzhin)。
- 摆脱了旧的 libunwind 补丁。 https://github.com/ClickHouse-Extras/libunwind/commit/500aa227911bd185a94bfc071d68f4d3b03cb3b1#r39048012 这允许在
clang
构建中禁用-fno-omit-frame-pointer
,从而平均提高至少 1% 的性能。 #10761 (Amos Bird)。 - 修复了将包装在带有 'FINAL' 修饰符和 'ORDER BY' 优化的函数中的主键的使用问题。 #10715 (Anton Popov)。
构建/测试/打包改进
- 修复了单元测试中的几个不重要的错误。 #11262 (alesapin)。
- 修复 MergeTreeIndexFullText 中的(错误)MSan 报告。该问题首先出现在 #9968。 #10801 (alexey-milovidov)。
ClickHouse 发布 v20.4.5.36-stable 2020-06-10
Bug 修复
- 修复了如果启用
min_bytes_to_use_direct_io
并且 PREWHERE 处于活动状态并使用 SAMPLE 或大量线程时可能发生的Data compressed with different methods
错误。此修复了 #11539。#11540 (alexey-milovidov)。 - 修复了编解码器的返回压缩大小。#11448 (Nikolai Kochetov)。
- 修复了当列具有带有非字面量参数的压缩编解码器时服务器崩溃的问题。修复了 #11365。#11431 (alesapin)。
- 修复了以 nan 作为点的 pointInPolygon 函数。 修复了 #11375。 #11421 (Alexey Ilyukhov)。
- 修复了如果表未成功创建,MergeTree 关闭时可能发生的未初始化内存读取问题。 #11420 (alexey-milovidov)。
- 修复了 geohashesInBox 函数参数超出纬度/经度范围的问题。#11403 (Vasily Nemkov)。
- 修复了带有外部排序和 limit 的查询可能出现的
Pipeline stuck
错误。修复了 #11359。 #11366 (Nikolai Kochetov)。 - 移除了在 ReplicatedMergeTree 中发送 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)。 - 修复了当提取的 JSON 具有包含不平衡的 { 或 [ 的字符串时 visitParamExtractRaw 函数的问题。#11318 (Ewout)。
- 修复了 ThreadPool 中非常罕见的竞争条件。 #11314 (alexey-milovidov)。
- 修复了 clickhouse-copier 中不重要的数据竞争。 由集成测试发现。#11313 (alexey-milovidov)。
- 修复了转换中可能发生的未初始化内存问题。例如:
SELECT toIntervalSecond(now64())
。 #11311 (alexey-milovidov)。 - 修复了当表的主键中包含 Array 列,并且查询使用
empty
或notEmpty
函数按此列进行过滤时,索引分析无法工作的问题。修复了 #11286。 #11303 (alexey-milovidov)。 - 修复了当查询速度估计可能不正确,并且当查询受到
max_network_bandwidth
、max_execution_speed
或priority
设置限制时,min_execution_speed
的限制可能不起作用或工作不正确的问题。将timeout_before_checking_execution_speed
的默认值更改为非零值,因为否则min_execution_speed
和max_execution_speed
设置将不起作用。修复了 #11297。修复了 #5732。修复了 #6228。可用性改进:避免在clickhouse-client
中将异常消息与进度条连接。 #11296 (alexey-milovidov)。 - 修复了使用错误参数调用 SET DEFAULT ROLE 时发生的崩溃。 这修复了 #10586。 #11278 (Vitaly Baranov)。
- 修复了在 Protobuf 格式中读取格式错误的数据时发生的崩溃。 这修复了 #5957,修复了 #11203。 #11258 (Vitaly Baranov)。
- 修复了一个错误,即当缓存字典仅包含过期键时,可能会返回默认值而不是正常值。 这仅影响字符串字段。#11233 (Nikita Mikhaylov)。
- 修复了从内部查询中带有常量的
VIEW
读取数据时出现的QueryPipeline 中的 Block 结构不匹配
错误。修复了 #11181。 #11205 (Nikolai Kochetov)。 - 修复了可能出现的异常
关联输出的无效状态
。 #11200 (Nikolai Kochetov)。 - 修复了对于带有
Array(Array(LowCardinality))
捕获参数的高阶函数,可能出现的错误无法捕获列
。 #11185 (Nikolai Kochetov)。 - 修复了在超过 1000 个键和某些后端的情况下可能失败的 S3 globbing。#11179 (Vladimir Chebotarev)。
- 如果数据跳过索引依赖于将在后台合并期间修改的列(对于 SummingMergeTree、AggregatingMergeTree 以及 TTL GROUP BY),则其计算不正确。此问题已通过将索引计算移动到合并之后来修复,以便索引在合并的数据上计算。 #11162 (Azat Khuzhin)。
- 修复了与基于始终应用的限制的重新调度相关的 Kafka 性能问题。 #11149 (filimonov)。
- 修复了在 DROP 表引擎=Kafka 时(或在服务器重启期间)有时发生的挂起问题。 #11145 (filimonov)。
- 修复了为简单查询过度预留线程的问题(优化了减少线程数,这在 pipeline 更改后部分失效)。 #11114 (Azat Khuzhin)。
- 修复了分布式查询的谓词优化(
enable_optimize_predicate_expression=1
)对于带有HAVING
部分的查询(即当需要在服务器发起者上进行过滤时)的问题,通过保留表达式的顺序(这足以修复),并强制聚合器使用列名而不是索引。修复了:#10613, #11413。 #10621 (Azat Khuzhin)。
构建/测试/打包改进
ClickHouse 发布 v20.4.4.18-stable 2020-05-26
与 v20.4.3.16-stable 相比没有变化。
ClickHouse 发布 v20.4.3.16-stable 2020-05-23
Bug 修复
- 如果 mutation finalization 任务没有最终确定任何内容,则删除日志记录。#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)。 - 修复了有时在
DROP
Kafka
表引擎期间(或在服务器重启期间)发生的挂起。#10910 (filimonov)。 - 修复了无法执行多个
ALTER RENAME
,例如a TO b, c TO a
。#10895 (alesapin)。 - 修复了当您从同一列的多个线程获取聚合函数状态的结果时可能发生的潜在竞争。 唯一可能发生这种情况的情况是,当您使用
finalizeAggregation
函数从存储AggregateFunction
状态用于quantile*
函数的Memory
引擎的表中读取数据时。#10890 (Nikolai Kochetov)。 - 修复了与 Distributed 表中的元组的向后兼容性。#10889 (Anton Popov)。
- 修复了如果
StringHashTable
中不存在此类键,则SIGSEGV
错误。#10870 (Azat Khuzhin)。 - 修复了从 Atomic 引擎的数据库中删除
LiveView
表后,WATCH
挂起的问题。 #10859 (tavplubix)。 - 修复了
ReplicatedMergeTree
中的一个错误,该错误可能导致在OPTIMIZE
查询上的某些ALTER
操作在等待某些副本变为非活动状态后挂起。 #10849 (tavplubix)。 - 现在,如果参与
CONSTRAINT
表达式的列被重命名,则约束会更新。修复了 #10844。 #10847 (alesapin)。 - 修复了缓存字典中潜在的未初始化内存读取。#10834 (alexey-milovidov)。
- 修复了
Block::sortColumns()
之后的列顺序。#10826 (Azat Khuzhin)。 - 修复了当请求不引用标识符时
ODBC
桥的问题。 修复了 #7984。 #10821 (alexey-milovidov)。 - 修复了
DateLUT
中的UBSan
和MSan
报告。#10798 (alexey-milovidov)。 - 修复了键条件中不正确的类型转换。 修复了 #6287。 #10791 (Andrew Onyshchuk)。
- 修复了
parallel_view_processing
行为。 现在,如果发生异常,则应完成所有无异常插入到MATERIALIZED VIEW
的操作。 修复了 #10241。 #10757 (Nikolai Kochetov)。 - 修复了与
-State
组合使用时的组合器-OrNull
和-OrDefault
。#10741 (hcz)。 - 修复了函数
h3EdgeAngle
中可能的缓冲区溢出。#10711 (alexey-milovidov)。 - 修复了当表有很多 part 时锁定并发 alter 的错误。#10659 (alesapin)。
- 修复了如果服务器在表启动之前关闭,
StorageBuffer
中的nullptr
解引用。#10641 (alexey-milovidov)。 - 修复了带有
LowCardinality
的optimize_skip_unused_shards
。#10611 (Azat Khuzhin)。 - 修复了同步 mutations 的条件变量处理。在某些情况下,可能会丢失向该条件变量发送的信号。 #10588 (Vladimir Chebotarev)。
- 修复了在
loadStoredObject()
完成之前调用createDictionary()
时可能发生的崩溃。#10587 (Vitaly Baranov)。 - 修复了
ALIAS
列的SELECT
,其默认表达式类型与列类型不同。#10563 (Azat Khuzhin)。 - 实现了 DateTime64 和 String 值之间的比较。#10560 (Vasily Nemkov)。
- 默认禁用
GROUP BY
sharding_key 优化(由于 sharding_key 分析的技巧性,optimize_distributed_group_by_sharding_key
已被引入并默认关闭,简单的例子是 sharding key 中的if
),并修复了WITH ROLLUP/CUBE/TOTALS
的问题。#10516 (Azat Khuzhin)。 - 修复了 #10263。#10486 (Azat Khuzhin)。
- 添加了关于
max_rows_to_sort
设置的测试。#10268 (alexey-milovidov)。 - 为创建 bloom filter 索引添加了向后兼容性。#10551。 #10569 (Winter Zhang)。
ClickHouse 发布 v20.4.2.9, 2020-05-12
向后不兼容的变更
- 系统表(例如 system.query_log、system.trace_log、system.metric_log)对于小于 10 MiB 的 part 使用紧凑数据 part 格式。 紧凑数据 part 格式自 20.3 版本起受支持。 如果您要降级到低于 20.3 的版本,则应手动删除
/var/lib/clickhouse/data/system/
中系统日志的表数据。 - 当字符串比较涉及 FixedString 并且比较的参数大小不同时,执行比较时,就好像较小的字符串被填充到较大字符串的长度一样。 如果我们认为 FixedString 数据类型对应于 SQL CHAR,则这是为了 SQL 兼容性。 这关闭了 #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
,该设置限制副本自行合并 part,并且始终优先从其他副本下载。#10379 (alesapin) - 添加了函数
JSONExtractKeysAndValuesRaw
,该函数从 JSON 对象中提取原始数据。#10378 (hcz) - 将来自 OS 的内存使用量添加到
system.asynchronous_metrics
。#10361 (alexey-milovidov) - 为函数
least
和greatest
添加了通用变体。 现在它们可以处理任意数量的任意类型的参数。 这修复了 #4767 #10318 (alexey-milovidov) - 现在 ClickHouse 在其端控制字典源的超时。 为缓存字典配置添加了两个新设置:
strict_max_lifetime_seconds
(默认为max_lifetime
)和query_wait_timeout_milliseconds
(默认为一分钟)。 第一个设置也适用于allow_read_expired_keys
设置(禁止读取非常过期的键)。#10337 (Nikita Mikhaylov) - 添加 log_queries_min_type 以过滤哪些条目将写入 query_log。#10053 (Azat Khuzhin)
- 添加了函数
isConstant
。 此函数检查其参数是否为常量表达式,并返回 1 或 0。 它旨在用于开发、调试和演示目的。#10198 (alexey-milovidov) - 添加 joinGetOrNull 以在键丢失时返回 NULL,而不是返回默认值。#10094 (Amos Bird)
- 如果设置了选项
transform_null_in
,则在IN
运算符中将NULL
视为等于NULL
。#10085 (achimbab) - 为 MergeTree 表引擎系列添加
ALTER TABLE ... RENAME COLUMN
。#9948 (alesapin) - 支持并行分布式 INSERT SELECT。#9759 (vxider)
- 添加了查询 Distributed over 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
和TIMESTAMP
SQL 运算符,例如SELECT date '2001-01-01'
#9691 (Artem Zuikov)
实验性功能
- 添加了实验性数据库引擎 Atomic。它支持非阻塞的
DROP
和RENAME TABLE
查询,以及原子性的EXCHANGE TABLES t1 AND t2
查询 #7512 (tavplubix) - 初始支持 ReplicatedMergeTree over S3 (以非最佳方式工作) #10126 (Pavel Kovalenko)
Bug 修复
- 修复了当
MATERIALIZED VIEW
的内部查询包含依赖表时,内部查询中不正确的标量结果 #10603 (Nikolai Kochetov) - 修复了当
readonly=2
和cancel_http_readonly_queries_on_client_close=1
时,HTTP 请求在客户端关闭连接时卡住的错误。 #10684 (tavplubix) - 修复了服务器启动时抛出异常时 StorageBuffer 中的段错误。修复了 #10550 #10609 (tavplubix)
- 查询
SYSTEM DROP DNS CACHE
现在也删除用于检查是否允许用户从某些 IP 地址连接的缓存 #10608 (tavplubix) - 修复了在单个查询中使用多个具有相同集合的
IN
运算符的问题。修复了 #10539 #10686 (Anton Popov) - 修复了嵌套类型中
generateRandom
的崩溃问题。修复了 #10583。 #10734 (Nikolai Kochetov) - 修复了合并后可能发生在
SummingMergeTree
中LowCardinality(FixedString)
键列的数据损坏问题。修复了 #10489。 #10721 (Nikolai Kochetov) - 修复了 aggregation_memory_efficient_merge_threads 设置的逻辑。 #10667 (palasonic1)
- 修复了消失的 totals。如果查询具有带有外部
WHERE
条件的JOIN
或子查询,则 totals 可能会被过滤。修复了 #10674 #10698 (Nikolai Kochetov) - 修复了启用
distributed_aggregation_memory_efficient
时远程查询缺乏并行执行的问题。修复了 #10655 #10664 (Nikolai Kochetov) - 修复了带有
LIMIT
的查询可能返回不正确行数的问题。修复了 #10566, #10709 #10660 (Nikolai Kochetov) - 修复了索引损坏,这可能在某些情况下发生在将紧凑部件合并到另一个紧凑部件之后。 #10531 (Anton Popov)
- 修复了 mutation 完成所有部件,但卡在
is_done=0
的情况。 #10526 (alesapin) - 修复了与 UTC 存在小数偏移的时区在 unix 纪元开始时的溢出问题。修复了 #9335。 #10513 (alexey-milovidov)
- 改进了输入格式的诊断。修复了 #10204 #10418 (tavplubix)
- 修复了
simpleLinearRegression()
在处理大型整数时的数值溢出问题 #10474 (hcz) - 修复了 Distributed 关闭时的 use-after-free 问题,避免等待发送所有批次 #10491 (Azat Khuzhin)
- 向 clickhouse-server docker 镜像添加 CA 证书 #10476 (filimonov)
- 修复了当使用
addressToLine
函数或 AggregateFunctionState 列时可能发生的罕见无限循环。 #10466 (Alexander Kuzmenkov) - 处理分布式查询期间的 zookeeper "no node error" 错误 #10050 (Daniel Chen)
- 修复了在列的默认值被更改后,服务器无法附加表的问题。 #10441 (alesapin)
- 为 ALIAS 列隐式地将默认表达式类型转换为列类型 #10563 (Azat Khuzhin)
- 如果
ATTACH DATABASE
失败,则不要删除元数据目录 #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)datetime 函数的错误行为。修复了 #7202 #10369 (alexey-milovidov)
- 避免
dictIsIn
函数中的无限循环。修复了 #515 #10365 (alexey-milovidov) - 默认禁用 GROUP BY sharding_key 优化,并修复了 WITH ROLLUP/CUBE/TOTALS 的问题 #10516 (Azat Khuzhin)
- 检查部件时检查错误代码,如果错误类似于 "not enough memory",则不要将部件标记为损坏。修复了 #6269 #10364 (alexey-milovidov)
- 在系统表中显示有关未加载字典的信息。 #10234 (Vitaly Baranov)
- 修复了如果服务器在表启动之前关闭,StorageBuffer 中的空指针解引用问题。 #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) - 修复了某些情况下解析器中限制最大递归深度的问题。此修复解决了 #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) - 修复了当用户尝试在 ENGINE = Replicated* 的表上运行 ALTER UPDATE/DELETE 时,ClickHouse 会抛出 "Unknown function lambda." 错误消息的 bug。现在,检查不确定性函数可以正确处理 lambda 表达式。 #10237 (Alexander Kazakov)
- 修复了在具有 Lazy 引擎的数据库上运行 SELECT ... FROM system.tables 时,StorageSystemTables 中发生的相当罕见的段错误。 #10209 (Alexander Kazakov)
- 修复了当查询实际上应该在 LIMIT 处停止时,从无限源(如
system.numbers
或system.zeros
)读取数据时可能发生的无限查询执行问题。 #10206 (Nikolai Kochetov) - 修复了 Date 类型的 "generateRandom" 函数。这修复了 #9973。修复了将年份为 2106 的日期插入到具有旧式分区的 MergeTree 表中,但分区以年份 1970 命名时的边缘情况。 #10218 (alexey-milovidov)
- 如果 View 的表定义与 SELECT 查询不符,则转换类型。这修复了 #10180 和 #10022 #10217 (alexey-milovidov)
- 修复了 RFC-2822 格式的字符串中,当星期几为 Tuesday 或 Thursday 时
parseDateTimeBestEffort
的问题。这修复了 #10082 #10214 (alexey-milovidov) - 修复了 JOIN 内部常量列名可能与 JOIN 外部常量列名冲突的问题。 #10207 (alexey-milovidov)
- 修复了在存在 arrayJoin 函数时(在某些情况下)move-to-prewhere 优化的问题。这修复了 #10092 #10195 (alexey-milovidov)
- 修复了 native mysql-connector-java (JDBC) 的 SCRAMBLE 中出现分隔符的问题 #10140 (BohuTANG)
- 修复了在未指定数据库时,使用当前数据库进行访问检查的问题。 #10192 (Vitaly Baranov)
- 修复了具有紧凑部件的表的 ALTER 操作。 #10130 (Anton Popov)
- 添加了使用
allow_nondeterministic_mutations
设置来放宽 mutation 中对非确定性函数使用的限制的功能。 #10186 (filimonov) - 修复了为字典调用
DROP TABLE
的问题 #10165 (Azat Khuzhin) - 当
INSERT
到 Distributed 表时,如果结构不匹配,则转换块 #10135 (Azat Khuzhin) - 当插入的块按分区键分割成多个部件时,行数记录不正确(记录为所有部件的总和)。 #10138 (alexey-milovidov)
- 为 MySQL Database Engine 添加了一些参数检查并支持标识符参数 #10077 (Winter Zhang)
- 修复了创建新副本时
index_granularity_bytes
检查不正确的问题。修复了 #10098。 #10121 (alesapin) - 修复了当表包含跳过索引时
CHECK TABLE
查询中的 bug。 #10068 (alesapin) - 修复了嵌套表中的 Distributed-over-Distributed 只有一个 shard 的问题 #9997 (Azat Khuzhin)
- 修复了带有
JOIN
和UNION ALL
的查询可能丢失行的问题。修复了 #9826, #10113。 ... #10099 (Nikolai Kochetov) - 修复了当本地 clickhouse 服务器用作字典源时字典中的 bug。如果字典和源中的类型不兼容,则可能导致内存损坏。 #10071 (alesapin)
- 修复了从旧的 ClickHouse 版本更新时,
/table/replicas/replica_name/metadata
节点不存在时,复制表的启动问题。修复了 #10037。 #10095 (alesapin) - 修复了错误
Cannot clone block with columns because block has 0 columns ... While executing GroupingAggregatedTransform
。当启用设置distributed_aggregation_memory_efficient
,并且分布式查询从不同的 shard 读取具有混合单级和双级聚合的聚合数据时,会发生此错误。 #10063 (Nikolai Kochetov) - 修复了物化视图数据库在启动时附加失败时的死锁问题 #10054 (Azat Khuzhin)
- 修复了在 GROUP BY 包含尾随零字节的字符串键时可能发生的段错误 (#8636, #8925)。 ... #10025 (Alexander Kuzmenkov)
- 修复了当别名可以覆盖限定列名时,分布式查询的错误结果。修复了 #9672 #9714 #9972 (Artem Zuikov)
- 修复了
SYSTEM RESTART REPLICAS
中可能发生的死锁 #9955 (tavplubix) - 修复了用于远程查询执行的线程数(性能回退,自 20.3 起)。当来自
Distributed
表的查询同时在本地和远程 shard 上执行时,会发生这种情况。修复了 #9965 #9971 (Nikolai Kochetov) - 修复了
ATTACH PART
中的DeleteOnDestroy
逻辑,这可能导致自动删除附加的部件,并添加了一些测试 #9410 (Vladimir Chebotarev) - 修复了
ON CLUSTER
DDL 查询在服务器启动时冻结的 bug。 #9927 (Gagan Arneja) - 修复了在查询某些数据库的处理阶段,未检索到必要表的一个 bug。修复了 #9699。 #9949 (achulkov2)
- 修复了当
JOIN
与TOTALS
一起出现时出现的 'Not found column in block' 错误。修复了 #9839 #9939 (Artem Zuikov) - 修复了解析 CREATE USER 命令中设置的多个主机的问题 #9924 (Vitaly Baranov)
- 修复了 Join 表引擎的
TRUNCATE
问题 (#9917)。 #9920 (Amos Bird) - 修复了
ReplicatedMergeTree
中 drop 和 optimize 之间的竞争条件。 #9901 (alesapin) - 修复了当设置
optimize_skip_unused_shards
时 Distributed 的DISTINCT
问题。 #9808 (Azat Khuzhin) - 修复了 ALTER 中 “scalar does not exist” 错误 (#9878)。 ... #9904 (Amos Bird)
- 修复了
distributed_product_mode='local'
中限定名称的错误。修复了 #4756 #9891 (Artem Zuikov) - 对于 INSERT 查询,shard 现在会将其约束从发起者 clamp 到其约束,而不是抛出异常。此修复允许将 INSERT 查询发送到具有其他约束的 shard。此更改改进了修复 #9447。 #9852 (Vitaly Baranov)
- 当提交偏移量到 Kafka broker 时,添加了一些重试,因为如果在
offsets.commit.timeout.ms
期间,__consumer_offsets
主题没有足够的副本可用,则可能会拒绝提交。 #9884 (filimonov) - 修复了当底层表的虚拟列在
WHERE
中使用时,Distributed 引擎的行为 #9847 (Azat Khuzhin) - 修复了一些函数参数的时区未正确使用的情况。 #9574 (Vasily Nemkov)
- 修复了当查询在分布式表上同时具有 PREWHERE 和 WHERE,并且
SET distributed_product_mode = 'local'
时,出现的 'Different expressions with the same alias' 错误。 #9871 (Artem Zuikov) - 修复了具有复合主键的表的 mutation 过多的内存消耗。这修复了 #9850。 #9860 (alesapin)
- 修复了从设置
allow_introspection_functions
计算内省函数的授权。 #9840 (Vitaly Baranov) - 修复了 max_distributed_connections (有和没有 Processors) #9673 (Azat Khuzhin)
- 修复了客户端上可能出现的异常
Got 0 in totals chunk, expected 1
。对于右连接表具有零行的 JOIN 查询,会发生这种情况。示例:select * from system.one t1 join system.one t2 on t1.dummy = t2.dummy limit 0 FORMAT TabSeparated;
。修复了 #9777。 ... #9823 (Nikolai Kochetov) - 修复了表列表之外(即在 WHERE 中)带有 COMMA JOIN 的子查询中的 'COMMA to CROSS JOIN rewriter is not enabled or cannot rewrite query' 错误。修复了 #9782 #9830 (Artem Zuikov)
- 修复了当设置
optimize_skip_unused_shards
且键的表达式无法转换为其字段类型时,服务器崩溃的问题 #9804 (Azat Khuzhin) - 修复了
splitByString
中的空字符串处理。 #9767 (hcz) - 修复了紧凑部件的损坏的
ALTER TABLE DELETE COLUMN
查询。 #9779 (alesapin) - 修复了通过 http(带有处理器管道)的查询缺少
rows_before_limit_at_least
的问题。修复了 #9730 #9757 (Nikolai Kochetov) - 修复了
ALTER
查询(mutation)中过多的内存消耗。这修复了 #9533 和 #9670。 #9754 (alesapin) - 修复了可能永久出现的 “Cannot schedule a task” 错误。 #9154 (Azat Khuzhin)
- 修复了外部字典 DDL 中反引号的 bug。修复了 #9619。 #9734 (alesapin)
- 修复了
text_log
中的数据竞争问题。它并不对应任何实际的错误。#9726 (alexey-milovidov) - 修复了当用户在前一个版本上执行了 mutations 操作时,复制功能无法工作的错误。此修复解决了 #9645 问题。#9652 (alesapin)
- 修复了
sumKahan
和sumWithOverflow
的不正确的内部函数名称。这会导致在远程查询中使用这些函数时出现异常。#9636 (Azat Khuzhin) - 添加了设置
use_compact_format_in_distributed_parts_names
,允许以更紧凑的格式为INSERT
查询写入Distributed
表的文件。此修复解决了 #9647 问题。#9653 (alesapin) - 修复了在 JOIN 键中使用 LowCardinality 的 RIGHT 和 FULL JOIN。#9610 (Artem Zuikov)
- 修复了
MergeTreeRangeReader
中可能出现的异常Size of filter does not match size of column
和Invalid number of rows in Chunk
。它们可能在某些情况下执行PREWHERE
时出现。#9612 (Anton Popov) - 允许对具有内部复制的 Distributed 表执行
ALTER ON CLUSTER
操作。此修复解决了 #3268 问题。#9617 (shinoi2) - 修复了如果您编写像
time + 1
这样的简单算术表达式(与像time + INTERVAL 1 SECOND
这样的表达式相反)时,时区未被保留的问题。此修复解决了 #5743 问题。#9323 (alexey-milovidov)
改进
- 在将 DateTime 与字符串字面量进行比较时使用时区。此修复解决了 #5206 问题。#10515 (alexey-milovidov)
- 如果无法从文本输入格式解析 Decimal 值,则打印详细的诊断信息。#10205 (alexey-milovidov)
- 为分布式/buffer 计划池添加任务/内存指标。#10449 (Azat Khuzhin)
- 在 clickhouse-local 和 HTTP 接口中,一旦准备就绪,立即显示 SELECT DISTINCT 查询的结果。此修复解决了 #8951 问题。#9559 (alexey-milovidov)
- 允许使用
SAMPLE OFFSET
查询而不是cityHash64(PRIMARY KEY) % N == n
来在clickhouse-copier
中进行拆分。要使用此功能,请传递--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) - 优化了针对 distributed 表且带有 GROUP BY sharding_key 的 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)
- 使用后台线程池进行后台 buffer 刷新。#10315 (Azat Khuzhin)
- 支持一种特殊的删除未完全写入 part 的情况。此修复解决了 #9940 问题。#10221 (alexey-milovidov)
- 对于 GROUP BY 优化,使用 isInjective() 而不是手动列出此类函数。#10342 (Azat Khuzhin)
- 如果客户端在连接时立即发送 RST 数据包,则避免在日志中打印错误消息。这是带有 keepalived 和 VRRP 的 IPVS 负载均衡器的典型行为。此修复解决了 #1851 问题。#10274 (alexey-milovidov)
- 允许解析浮点类型的
+inf
。此更改关闭了 #1839 问题。#10272 (alexey-milovidov) - 为 Nested 类型实现了
generateRandom
表函数。此更改关闭了 #9903 问题。#10219 (alexey-milovidov) - 在 MySQL 兼容性接口中提供
max_allowed_packed
,这将帮助某些客户端通过 MySQL 协议与 ClickHouse 通信。#10199 (BohuTANG) - 允许 GLOBAL IN 的字面量 (例如
SELECT * FROM remote('localhost', system.one) WHERE dummy global in (0)
)。#10196 (Azat Khuzhin) - 修复了 clickhouse-client 交互模式下的各种小问题。#10194 (alexey-milovidov)
- 避免加载多余的字典 (system.tables, DROP/SHOW CREATE TABLE)。#10164 (Azat Khuzhin)
- 更新到 RWLock: 为 getLock() 添加超时参数 + 重构实现以实现阶段公平。#10073 (Alexander Kazakov)
- 增强了与原生 mysql-connector-java(JDBC) 的兼容性。#10021 (BohuTANG)
- 函数
toString
被认为是单调函数,即使在 String 或 LowCardinality(String) 参数的同义反复情况下也可以用于索引分析。#10110 (Amos Bird) - 为命令
{CREATE|DROP} USER/ROLE/ROW POLICY/SETTINGS PROFILE/QUOTA
,GRANT
添加ON CLUSTER
子句支持。#9811 (Vitaly Baranov) - 为 S3 URI 提供虚拟托管式支持。#9998 (Pavel Kovalenko)
- 现在,在字典 DDL 查询中,对于没有参数的字典,布局类型可以在不使用圆括号的情况下指定。修复了 #10057 问题。#10064 (alesapin)
- 添加了在文件路径中使用前导零的数字范围的功能。#9989 (Olga Khvostikova)
- 改进了 CROSS JOIN 中的内存使用。#10029 (Artem Zuikov)
- 当获取远程表的结构且设置了 skip_unavailable_shards 时,尝试连接到集群中的所有分片。#7278 (nvartolomei)
- 将
total_rows
/total_bytes
添加到system.tables
表中。#9919 (Azat Khuzhin) - 系统日志表现在默认使用多态 part。#9905 (Anton Popov)
- 将 type 列添加到 system.settings/merge_tree_settings。#9909 (Azat Khuzhin)
- 在服务器启动时尽早检查可用的 CPU 指令。#9888 (alexey-milovidov)
- 从 mutations 中移除
ORDER BY
阶段,因为我们从单个线程中的单个有序 part 读取数据。还添加了检查,以确保 mutation 中的行按排序键排序,并且此顺序未被违反。#9886 (alesapin) - 为左侧的 FixedString 实现 LIKE 运算符。这是为了更好地支持 TPC-DS 查询。#9890 (alexey-milovidov)
- 添加
force_optimize_skip_unused_shards_no_nested
,这将禁用嵌套 Distributed 表的force_optimize_skip_unused_shards
。#9812 (Azat Khuzhin) - 现在,MergeTree 数据 part 的列大小仅计算一次。#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
列。它包含跟踪事件的高精度时间戳,并允许构建线程配置文件的时间线(“火焰图”)。#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。允许使用 JOIN 重写
dictGet()
函数。它本身不是向后不兼容的,但可能会在某些安装上暴露 #8400 问题。#10133 (Artem Zuikov) - 当物化视图的目标表支持时,启用并行插入物化视图。#10052 (vxider)
- 提高了使用单调函数的索引分析性能。#9607#10026 (Anton Popov)
- 使用 SSE2 或 SSE4.2 SIMD 内在函数加速 bloom 过滤器中的分词。#9968 (Vasily Nemkov)
- 提高了在
IN
运算符右侧显式定义的集合的查询性能。此修复解决了 20.3 版本中的性能回归问题。#9740 (Anton Popov) - 现在,clickhouse-copier 将每个分区拆分为多个片段并独立复制它们。#9075 (Nikita Mikhaylov)
- 添加了更多聚合方法。例如,TPC-H 查询 1 现在将选择
FixedHashMap<UInt16, AggregateDataPtr>
并获得 25% 的性能提升。#9829 (Amos Bird) - 在 pre-limit 转换中使用单个行计数器用于多个流。这有助于避免在带有
limit
但没有order by
的查询中联合管道流(例如select f(x) from (select x from t limit 1000000000)
),并使用多个线程进行进一步处理。#9602 (Nikolai Kochetov)
构建/测试/打包改进
- 使用来自 ClickHouse-Extras 的 AWS SDK 库的分支。#10527 (Pavel Kovalenko)
- 为新的 ALTER RENAME COLUMN 查询添加集成测试。#10654 (vzakaznikov)
- 修复了使用错误的参数调用函数
now64
时可能发生的有符号整数溢出。此修复解决了 #8973 问题。#10511 (alexey-milovidov) - 拆分 fuzzer 和 sanitizer 配置,使构建配置与 Oss-fuzz 兼容。#10494 (kyprizel)
- 修复了 clang-10 上的 clang-tidy 问题。#10420 (alexey-milovidov)
- 在错误消息中显示绝对路径。否则,KDevelop 无法导航到正确的文件,而是打开一个新文件。#10434 (alexey-milovidov)
- 添加了
ASAN_OPTIONS
环境变量,用于调查 CI 压力测试中使用 Address sanitizer 时的错误。#10440 (Nikita Mikhaylov) - 为 clang 构建启用 ThinLTO(实验性)。#10435 (alexey-milovidov)
- 移除可能在系统安装了 Z3 求解器时意外引入的对 Z3 的依赖。#10426 (alexey-milovidov)
- 将集成测试 docker 文件移动到 docker/ 目录。#10335 (Ilya Yatsishin)
- 允许在 CI 中使用
clang-10
。这确保了 #10238 问题已修复。#10384 (alexey-milovidov) - 将 OpenSSL 更新到上游 master 分支。修复了 TLS 连接可能失败并显示消息
OpenSSL SSL_read: error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error
和SSL Exception: error:2400006E:random number generator::error retrieving entropy
的问题。该问题存在于 20.1 版本中。#8956 (alexey-milovidov) - 修复 clang-10 构建。#10238 #10370 (Amos Bird)
- 为 物化视图的并行 INSERT 添加性能测试。#10345 (vxider)
- 修复了不稳定的测试
test_settings_constraints_distributed.test_insert_clamps_settings
。#10346 (Vitaly Baranov) - 添加 util 以在 CI ClickHouse 中测试结果上传。#10330 (Ilya Yatsishin)
- 在 junit_to_html 工具中将测试结果转换为 JSONEachRow 格式。#10323 (Ilya Yatsishin)
- 更新 cctz。#10215 (alexey-milovidov)
- 允许从最纯粹的 JUnit XML 报告创建 HTML 报告。#10247 (Ilya Yatsishin)
- 更新了最小编译器版本的检查。修复了问题 #10250 的根本原因。#10256 (alexey-milovidov)
- 初始支持分布式上的 live view 表。#10179 (vzakaznikov)
- 修复了 MergeTreeIndexFullText 中的 (false) MSan 报告。该问题首次出现在 #9968 中。#10801 (alexey-milovidov)
- clickhouse-docker-util #10151 (filimonov)
- 将 pdqsort 更新到最新版本。#10171 (Ivan)
- 将 libdivide 更新到 v3.0。#10169 (Ivan)
- 添加启用多态 part 的检查。#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)
- 移除旧的
performance-test
工具,该工具已不再在 CI 中使用。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)。
ClickHouse 发布 v20.3.20.6-lts, 2020-10-09
错误修复
- Mutation 可能会在
MOVE
或REPLACE PARTITION
之后,或者在极少数情况下,在DETACH
或DROP PARTITION
之后,挂起等待某些不存在的 part。此问题已修复。 #15724, #15537 (tavplubix)。 - 修复了对同一个
MySQL
引擎表进行大量子查询时,查询挂起的问题。以前,如果查询中对同一个MySQL
表的子查询超过 16 个,则会永久挂起。#15299 (Anton Popov)。 - 修复了当查询在 Merge 表上进行 JOIN 时,GROUP BY 中出现的 'Unknown identifier' 错误。#15242 (Artem Zuikov)。
- 修复了当子查询包含 finalizeAggregation 函数时谓词下推不起作用的问题。修复了 #14847。 #14937 (filimonov)。
- 并发的
ALTER ... REPLACE/MOVE PARTITION ...
查询可能会导致死锁。现已修复。 #13626 (tavplubix)。
ClickHouse 发布 v20.3.19.4-lts, 2020-09-18
错误修复
- 修复了
SELECT
查询中的罕见错误,当查询的列具有依赖于另一个也具有DEFAULT
且不在 select 查询中且磁盘上不存在的列的DEFAULT
表达式时,会发生此错误。部分修复了 #14531。#14845 (alesapin)。 - 修复了在赋值表达式和常量值(如
UPDATE x = 42
)中使用 Nullable 列的ALTER UPDATE
mutation 导致列中值不正确或段错误的错误。修复了 #13634, #14045。 #14646 (alesapin)。 - 修复了错误的 Decimal 乘法结果导致结果列的 decimal scale 错误的问题。#14603 (Artem Zuikov)。
改进
- 在紧凑部件中支持自定义编解码器。#12183 (Anton Popov)。
ClickHouse 发布 v20.3.18.10-lts, 2020-09-08
错误修复
- 如果
PipelineExecutor
本身发生异常,则停止查询执行。这可以防止罕见的可能查询挂起的情况。 #14334 的延续。 #14402 (Nikolai Kochetov)。 - 修复了有时 cache-dictionary 返回默认值而不是源中存在的值的行为。 #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/零。此修复了 #7876。 #11653 (alexey-milovidov)。
性能改进
- 稍微优化了带有 LowCardinality 的非常短的查询。 #14129 (Anton Popov)。
构建/测试/打包改进
- 修复在迁移到 clang-10 后出现在 HashTable 中的 UBSan 报告(向 nullptr 添加零)。#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)。 - 修复了在 Float 类型上调用
uniqExact
,topK
,sumDistinct
和类似的聚合函数时,对于NaN
值可能存在的低性能和略微不正确的结果。它还在 debug 构建中触发了断言。这修复了 #12491。 #13254 (alexey-milovidov)。 - 修复了以非字面 NULL 的 nullable constexpr 作为 cond 的 if 函数。修复了 #12463 问题。#13226 (alexey-milovidov)。
- 修复了在数组元素为 Nullable 且数组下标也为 Nullable 的情况下,
arrayElement
函数中的断言。此修复解决了 #12172 问题。#13224 (alexey-milovidov)。 - 修复了不必要地限制从本地副本进行选择的线程数。#12840 (Nikolai Kochetov)。
- 修复了在
WITH TOTALS
查询中可能出现的额外溢出数据行。#12747 (Nikolai Kochetov)。 - 修复了大型元组的性能问题,这些元组在
IN
部分被解释为函数。此问题出现在用户出于某种隐晦的原因编写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 fix bloom filter index with const expression。 #12659 (Winter Zhang)。
- 修复了当 broker 不可用(且不仅限于此)时 StorageKafka 中的 SIGSEGV。 #12658 (Azat Khuzhin)。
- 修复了外部字典中使用缓存布局时可能导致服务器崩溃的竞争条件。 #12566 (alesapin)。
- 修复了当
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
)或系统表中的“索引”列(例如从system.tables
查询时通过数据库名称进行过滤)过滤数据的表达式,并且此表达式返回Nullable
类型时,出现 “bad cast” 异常。此修复了 #12166。 #12305 (alexey-milovidov)。 - 在
TrieDictionary
加载失败后显示错误。 #12290 (Vitaly Baranov)。 - 函数
arrayFill
对于空数组工作不正确,可能导致崩溃。此修复了 #12263。 #12279 (alexey-milovidov)。 - 实现了
LowCardinality
类型的通用类型转换。这允许执行具有 LowCardinality 列和其他列的表的 UNION ALL 操作。此修复了 #8212。此修复了 #4342。 #12275 (alexey-milovidov)。 - 修复了在
StorageFile
中进行多次顺序插入期间,某些特殊类型的 header 被写入多次的行为。此修复了 #6155。 #12197 (Nikita Mikhaylov)。 - 修复了当
UInt8
值不等于 0 或 1 时的逻辑函数问题。 #12196 (Alexander Kazakov)。 - 修复了在 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 底层表的带有 join 或子查询的物化视图出现
There is no query
异常。 #12120 (filimonov)。 - 修复了由线程总数限制错误导致的带有
UNION
的 selects 性能问题。修复了 #12030。 #12103 (Nikolai Kochetov)。 - 修复了
-StateResample
组合器的段错误。 #12092 (Anton Popov)。 - 修复了从
VIEW
进行 selects 时不必要的线程数限制。修复了 #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。#12043 (alexey-milovidov)。 - 修复了约束为常量表达式时的约束检查。此修复了 #11360。 #12042 (alexey-milovidov)。
- 修复了带有
Nullable
列的元组的错误比较。 修复了 #11985。 #12039 (Nikolai Kochetov)。 - 修复了当使用类型为
FixedString
且大小不同的参数调用函数if
时,出现的错误结果和潜在崩溃。此修复了 #11362。 #12021 (alexey-milovidov)。 - 如果函数
neighbor
作为唯一返回的表达式,并且该函数使用偏移量-9223372036854775808
调用,则查询可能会返回空结果。 这修复了 #11367。 #12019 (alexey-milovidov)。 - 修复了 generateRandom 中潜在的数组大小溢出,这可能导致崩溃。 这修复了 #11371。 #12013 (alexey-milovidov)。
- 修复了潜在的浮点异常。 这关闭了 #11378。 #12005 (alexey-milovidov)。
- 修复了服务器启动时日志消息中错误的设置名称。#11997 (alexey-milovidov)。
- 修复了
Values
格式中的Query parameter was not set
错误。 修复了 #11918。 #11936 (tavplubix)。 - 保留查询中替换的别名(参数化查询)。 这修复了 #11914。 #11916 (alexey-milovidov)。
- 修复了解析 DateTime64 时潜在的浮点异常。这修复了 #11374。 #11875 (alexey-milovidov)。
- 修复了通过
HTTP
接口的内存记帐(对于wait_end_of_query=1
可能会很显著)。 #11840 (Azat Khuzhin)。 - 修复了条件中带有 NULL 的
if()
函数的错误结果。#11807 (Artem Zuikov)。 - 在检查是否相等之前,先解析存储在 zookeeper 中的元数据。#11739 (Azat Khuzhin)。
- 修复了
LIMIT n WITH TIES
与包含别名的ORDER BY
语句一起使用的问题。 #11689 (Anton Popov)。 - 修复了缓存字典中可能读取未初始化内存的问题。 #10834 (alexey-milovidov)。
性能改进
- 索引未用于带有字面量的 IN 运算符,性能回归是在 v19.3 左右引入的。此修复了 #10574。 #12062 (nvartolomei)。
ClickHouse 发布 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)。
- 修复了 const 列上的
ORDER BY ... WITH FILL
。#11697 (Anton Popov)。 - 传递与 XDBC 桥通信时的正确超时。最近,在检查桥的活动状态和接收元信息时,超时未被遵守。#11690 (alexey-milovidov)。
- 修复了导致
system.mutations
状态不正确的错误。它可能显示整个 mutation 已经完成,但服务器仍然在复制队列中有MUTATE_PART
任务,并尝试执行它们。此修复了 #11611。#11681 (alesapin)。 - 添加了对带有不区分大小写标志的正则表达式的支持。此修复了 #11101 和 #11506。#11649 (alexey-milovidov)。
- 如果设置了行级安全性,则删除微不足道的计数查询优化。在以前的版本中,用户会获得表中记录的总数,而不是过滤后的计数。此修复了 #11352。#11644 (alexey-milovidov)。
- 修复了 String 的 bloom 过滤器(数据跳过索引)。#11638 (Azat Khuzhin)。
- 修复了在 prewhere 条件中使用
Nullable
列导致的罕见崩溃。(可能与 #11572 有关)。#11608 (Nikolai Kochetov)。 - 修复了从
Buffer
表进行采样读取的查询的Block structure mismatch
错误。#11602 (Nikolai Kochetov)。 - 修复了当 exception.code() % 256 = 0 时 clickhouse-client 的错误退出代码。#11601 (filimonov)。
- 修复了服务器启动时关于“标记缓存大小已降低”的日志消息中的微不足道的错误。此关闭了 #11399。#11589 (alexey-milovidov)。
- 修复了带有
PREWHERE column in (subquery)
和ARRAY JOIN
的查询的Size of offsets does not match size of column
错误。#11580 (Nikolai Kochetov)。 - HTTP 会话中的所有查询都具有相同的 query_id。已修复。#11578 (tavplubix)。
- 现在,clickhouse-server docker 容器将优先使用 IPv6 检查服务器活动状态。#11550 (Ivan Starkov)。
- 修复了
<node>
的 shard_num/replica_num(破坏了 use_compact_format_in_distributed_parts_names)。#11528 (Azat Khuzhin)。 - 修复了在使用 -State 函数进行聚合过程中抛出异常时的内存泄漏。 这修复了 #8995。 #11496 (alexey-milovidov)。
- 修复了当别名可能覆盖限定列名时,分布式查询的错误结果。 修复了 #9672 #9714。 #9972 (Artem Zuikov)。
ClickHouse 发布 v20.3.11.97-lts 2020-06-10
新功能
- 现在 ClickHouse 在其端控制字典源的超时。缓存字典配置中添加了两个新设置:
strict_max_lifetime_seconds
,默认为max_lifetime
,以及query_wait_timeout_milliseconds
,默认为一分钟。第一个设置也适用于allow_read_expired_keys
设置(以禁止读取非常过期的键)。 #10337 (Nikita Mikhaylov)。
错误修复
- 修复了如果启用
min_bytes_to_use_direct_io
并且 PREWHERE 处于活动状态并使用 SAMPLE 或大量线程时可能发生的Data compressed with different methods
错误。此修复了 #11539。#11540 (alexey-milovidov)。 - 修复了编解码器的返回压缩大小。#11448 (Nikolai Kochetov)。
- 修复了当列具有带有非字面量参数的压缩编解码器时服务器崩溃的问题。修复了 #11365。#11431 (alesapin)。
- 修复了以 nan 作为点的 pointInPolygon 函数。 修复了 #11375。 #11421 (Alexey Ilyukhov)。
- 修复了在 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)。 - 修复了从 StorageJoin 直接选择(不带 JOIN)时的崩溃和错误的 nullability。 #11340 (Artem Zuikov)。
- 修复了
quantilesExactWeightedArray
函数中的崩溃。 #11337 (Nikolai Kochetov)。 - 现在合并操作会在
ALTER
查询中更改元数据之前停止。 #11335 (alesapin)。 - 使使用设置
parallel_view_processing = 1
向MATERIALIZED VIEW
写入操作再次并行。修复了 #10241。 #11330 (Nikolai Kochetov)。 - 修复了当提取的 JSON 具有包含不平衡的 { 或 [ 的字符串时 visitParamExtractRaw 函数的问题。#11318 (Ewout)。
- 修复了 ThreadPool 中非常罕见的竞争条件。 #11314 (alexey-milovidov)。
- 修复了转换中可能发生的未初始化内存问题。例如:
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)。
- 修复了一个错误,即当缓存字典仅包含过期键时,可能会返回默认值而不是正常值。 这仅影响字符串字段。#11233 (Nikita Mikhaylov)。
- 修复了从内部查询中带有常量的
VIEW
读取数据时出现的QueryPipeline 中的 Block 结构不匹配
错误。修复了 #11181。 #11205 (Nikolai Kochetov)。 - 修复了可能出现的异常
关联输出的无效状态
。 #11200 (Nikolai Kochetov)。 - 修复了对于带有
Array(Array(LowCardinality))
捕获参数的高阶函数,可能出现的错误无法捕获列
。 #11185 (Nikolai Kochetov)。 - 修复了在超过 1000 个键和某些后端的情况下可能失败的 S3 globbing。#11179 (Vladimir Chebotarev)。
- 如果数据跳过索引依赖于将在后台合并期间修改的列(对于 SummingMergeTree、AggregatingMergeTree 以及 TTL GROUP BY),则其计算不正确。此问题已通过将索引计算移动到合并之后来修复,以便索引在合并的数据上计算。 #11162 (Azat Khuzhin)。
- 修复了为简单查询过度预留线程的问题(优化了减少线程数,这在 pipeline 更改后部分失效)。 #11114 (Azat Khuzhin)。
- 修复了分布式查询的谓词优化(
enable_optimize_predicate_expression=1
)对于带有HAVING
部分的查询(即当需要在服务器发起者上进行过滤时)的问题,通过保留表达式的顺序(这足以修复),并强制聚合器使用列名而不是索引。修复了:#10613, #11413。 #10621 (Azat Khuzhin)。 - 引入了提交重试逻辑,以减少在偏移提交失败的罕见情况下从 Kafka 获取重复项的可能性。 #9884 (filimonov)。
性能改进
- 对于每次调用任何读取外部字典的函数,仅获取一次字典并检查访问权限。 #10928 (Vitaly Baranov)。
构建/测试/打包改进
ClickHouse 发布 v20.3.10.75-lts 2020-05-23
错误修复
- 如果 mutation finalization 任务没有最终确定任何内容,则删除日志记录。#11109 (alesapin)。
- 修复了
parseDateTime64BestEffort
参数解析错误。#11038 (Vasily Nemkov)。 - 修复了
getRawData()
方法中不正确的原始数据大小。 #10964 (Igr)。 - 修复了 20.1 及更早版本之间两级聚合的不兼容性。当在 initiator 节点和远程节点上使用不同版本的 ClickHouse,并且
GROUP BY
结果的大小很大,并且聚合由单个String
字段执行时,会发生此不兼容性。这会导致结果中单个键的多行未合并。 #10952 (alexey-milovidov)。 - 修复了
Distributed
表中元组的向后兼容性。 #10889 (Anton Popov)。 - 修复了如果
StringHashTable
中不存在此类键,则SIGSEGV
错误。#10870 (Azat Khuzhin)。 - 修复了
ReplicatedMergeTree
中的一个错误,该错误可能导致在OPTIMIZE
查询上的某些ALTER
操作在等待某些副本变为非活动状态后挂起。 #10849 (tavplubix)。 - 修复了
Block::sortColumns()
之后的列顺序。#10826 (Azat Khuzhin)。 - 修复了当请求不引用标识符时
ODBC
桥的问题。 修复了 #7984。 #10821 (alexey-milovidov)。 - 修复了
DateLUT
中的UBSan
和MSan
报告。#10798 (alexey-milovidov)。 - 修复了键条件中不正确的类型转换。 修复了 #6287。 #10791 (Andrew Onyshchuk)
- 修复了
parallel_view_processing
行为。 现在,如果发生异常,则应完成所有无异常插入到MATERIALIZED VIEW
的操作。 修复了 #10241。 #10757 (Nikolai Kochetov)。 - 修复了与
-State
组合时,组合器 -OrNull
和-OrDefault
的问题。 #10741 (hcz)。 - 修复了带有嵌套类型的
generateRandom
中的崩溃。 修复了 #10583。 #10734 (Nikolai Kochetov)。 - 修复了
SummingMergeTree
中LowCardinality(FixedString)
键列的数据损坏问题,该问题可能在合并后发生。 修复了 #10489。 #10721 (Nikolai Kochetov)。 - 修复了函数
h3EdgeAngle
中可能的缓冲区溢出。#10711 (alexey-milovidov)。 - 修复了消失的 totals。如果查询具有带有外部 where 条件的 join 或子查询,则 totals 可能已被过滤。 修复了 #10674。 #10698 (Nikolai Kochetov)。
- 修复了一个查询中具有相同集合的
IN
运算符的多次使用。 #10686 (Anton Popov)。 - 修复了当
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)。 - 修复了当表有很多 parts 时锁定并发 alter 的错误。 #10659 (alesapin)。
- 修复了在
SYSTEM DROP DNS CACHE
查询中也删除用于检查是否允许用户从某些 IP 地址连接的缓存的错误。 #10608 (tavplubix)。 - 修复了在
MATERIALIZED VIEW
的内部查询中,如果此查询包含依赖表,则标量结果不正确的问题。 #10603 (Nikolai Kochetov)。 - 修复了
ALIAS
列的SELECT
,其默认表达式类型与列类型不同。#10563 (Azat Khuzhin)。 - 实现了 DateTime64 和 String 值之间的比较。#10560 (Vasily Nemkov)。
- 修复了索引损坏问题,该问题可能在将 compact parts 合并到另一个 compact part 后在某些情况下发生。 #10531 (Anton Popov)。
- 修复了 mutation 完成所有 parts,但在
is_done=0
中挂起的情况。 #10526 (alesapin)。 - 修复了 unix epoch 开始时,对于具有与
UTC
的小数偏移的时区发生的溢出。 这修复了 #9335。 #10513 (alexey-milovidov)。 - 修复了
Distributed
存储的不正确关闭。 #10491 (Azat Khuzhin)。 - 修复了大型整数上的
simpleLinearRegression
中的数字溢出。 #10474 (hcz)。
构建/测试/打包改进
- 修复了 LZ4 库中的 UBSan 报告。 #10631 (alexey-milovidov)。
- 修复了 clang-10 构建。 #10238。 #10370 (Amos Bird)。
- 添加了关于
max_rows_to_sort
设置的失败测试。 #10268 (alexey-milovidov)。 - 在输入格式中添加了一些改进,以打印诊断信息。 修复了 #10204。 #10418 (tavplubix)。
- 向 clickhouse-server docker 镜像添加了 CA 证书。 #10476 (filimonov)。
错误修复
- 修复了错误
BloomFilter 误报必须是 0 到 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
时可能发生的 segfault(在 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)
- 在加载表之前附加数据库失败时,不要删除元数据目录。 #10442 (Winter Zhang)
- 修复了当某些数据以 quorum 插入,然后以某种方式删除(DROP PARTITION, TTL),这导致 INSERT 卡住或 SELECT 中出现误报异常的几个错误。 这修复了 #9946 #10188 (Nikita Mikhaylov)
- 修复了在远程查询中可能发生的
ConcatProcessor
中Pipeline stuck
错误。 #10381 (Nikolai Kochetov) - 修复了 HashTable 中的错误行为,该行为在尝试从缓冲区读取 HashMap 时导致编译错误。 #10386 (palasonic1)
- 允许将
count(*)
与多个 JOIN 一起使用。修复了 #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
运算符右侧显式定义的集合以及左侧的元组的查询的性能。 这修复了 20.3 版本中的性能回归。 #9740, #10385 (Anton Popov)
ClickHouse 发布 v20.3.7.46, 2020-04-17
错误修复
- 修复了混合逗号和命名 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
设置来放宽对 mutations 中非确定性函数使用的限制的能力。 #10186 (filimonov)。
ClickHouse 发布 v20.3.6.40, 2020-04-16
新功能
- 添加了函数
isConstant
。此函数检查其参数是否为常量表达式,并返回 1 或 0。它旨在用于开发、调试和演示目的。 #10198 (alexey-milovidov)。
Bug Fix
- 修复了当
max_rows_to_group_by
和group_by_overflow_mode = 'break'
时出现的Pipeline stuck
错误。 #10279 (Nikolai Kochetov)。 - 修复了罕见的可能出现的异常
Cannot drain connections: cancel first
。 #10239 (Nikolai Kochetov)。 - 修复了当用户尝试对
ENGINE = Replicated*
的表运行 ALTER UPDATE/DELETE 时,ClickHouse 抛出 “Unknown function lambda.” 错误消息的 bug。现在,对非确定性函数的检查可以正确处理 lambda 表达式。 #10237 (Alexander Kazakov)。 - 修复了 Date 类型的 “generateRandom” 函数。此修复解决了 #9973 问题。修复了将年份为 2106 的日期插入到使用旧式分区但分区以年份 1970 命名的 MergeTree 表中的边缘情况。 #10218 (alexey-milovidov)。
- 如果 View 的表定义与 SELECT 查询不符,则转换类型。此修复解决了 #10180 和 #10022 问题。 #10217 (alexey-milovidov)。
- 修复了当星期几为星期二或星期四时,RFC-2822 格式字符串的
parseDateTimeBestEffort
函数。此修复解决了 #10082 问题。 #10214 (alexey-milovidov)。 - 修复了 JOIN 内部常量列名可能与 JOIN 外部常量列名冲突的问题。 #10207 (alexey-milovidov)。
- 修复了当查询应该在 LIMIT 处停止时,从无限源(如
system.numbers
或system.zeros
)读取数据时可能发生的无限查询执行。 #10206 (Nikolai Kochetov)。 - 修复了当未指定数据库时,使用当前数据库进行访问检查的问题。 #10192 (Vitaly Baranov)。
- 如果 INSERT 到 Distributed() 表中的结构不匹配,则转换数据块。 #10135 (Azat Khuzhin)。
- 修复了处理器管道中极值可能出现的不正确结果。 #10131 (Nikolai Kochetov)。
- 修复了一些紧凑部件的 ALTER 操作。 #10130 (Anton Popov)。
- 修复了创建新副本时
index_granularity_bytes
检查不正确的问题。修复了 #10098 问题。 #10121 (alesapin)。 - 修复了当 Distributed 表的结构与底层表不同时,INSERT 操作可能导致的 SIGSEGV 错误。 #10105 (Azat Khuzhin)。
- 修复了带有
JOIN
和UNION ALL
的查询可能丢失行的问题。修复了 #9826, #10113 问题。 #10099 (Nikolai Kochetov)。 - 修复了从旧版本 ClickHouse 更新时,复制表启动时
/table/replicas/replica_name/metadata
节点不存在的问题。修复了 #10037 问题。 #10095 (alesapin)。 - 为 MySQL Database Engine 添加了一些参数检查和标识符参数支持。 #10077 (Winter Zhang)。
- 修复了来自 localhost clickhouse 服务器的 clickhouse 字典源中的 bug。如果字典和源中的类型不兼容,则此 bug 可能导致内存损坏。 #10071 (alesapin)。
- 修复了当表包含跳数索引时,
CHECK TABLE
查询中的 bug。 #10068 (alesapin)。 - 修复了错误
Cannot clone block with columns because block has 0 columns ... While executing GroupingAggregatedTransform
。当启用distributed_aggregation_memory_efficient
设置,并且分布式查询从不同的分片读取具有不同级别的聚合数据(混合单级和双级聚合)时,会发生此错误。 #10063 (Nikolai Kochetov)。 - 修复了在对包含尾随零字节的字符串键进行 GROUP BY 操作时可能发生的段错误 (#8636, #8925)。 #10025 (Alexander Kuzmenkov)。
- 修复了用于远程查询执行的线程数(自 20.3 版本以来的性能回归)。当从
Distributed
表的查询同时在本地和远程分片上执行时,会发生这种情况。修复了 #9965 问题。 #9971 (Nikolai Kochetov)。 - 修复了在查询某些数据库的某些处理阶段未检索到必要表的问题。修复了 #9699 问题。 #9949 (achulkov2)。
- 修复了当
JOIN
与TOTALS
一起出现时,出现 “Not found column in block” 错误的问题。修复了 #9839 问题。 #9939 (Artem Zuikov)。 - 修复了
ON CLUSTER
DDL 查询在服务器启动时冻结的 bug。 #9927 (Gagan Arneja)。 - 修复了解析 CREATE USER 命令中设置的多个主机的问题,例如
CREATE USER user6 HOST NAME REGEXP 'lo.?*host', NAME REGEXP 'lo*host'
。 #9924 (Vitaly Baranov)。 - 修复了 Join 表引擎的
TRUNCATE
操作 (#9917)。 #9920 (Amos Bird)。 - 修复了 ALTER 操作中 “scalar does not exist” 错误 (#9878)。 #9904 (Amos Bird)。
- 修复了
ReplicatedMergeTree
中 drop 和 optimize 之间的竞争条件。 #9901 (alesapin)。 - 修复了
distributed_product_mode='local'
中限定名称的错误。修复了 #4756 问题。 #9891 (Artem Zuikov)。 - 修复了从设置 'allow_introspection_functions' 计算内省函数的授权。 #9840 (Vitaly Baranov)。
Build/Testing/Packaging Improvement
- 修复了集成测试
test_settings_constraints
。 #9962 (Vitaly Baranov)。 - 移除了对
clock_getres
的依赖。 #9833 (alexey-milovidov)。
ClickHouse 发布 v20.3.5.21, 2020-03-27
Bug Fix
- 修复了当查询在分布式表上同时具有 PREWHERE 和 WHERE,并且
SET distributed_product_mode = 'local'
时,出现的 'Different expressions with the same alias' 错误。 #9871 (Artem Zuikov)。 - 修复了具有复合主键的表的 mutations 操作过度消耗内存的问题。此修复解决了 #9850 问题。 #9860 (alesapin)。
- 对于 INSERT 查询,分片现在会将从发起者处获得的设置限制在分片的约束范围内,而不是抛出异常。此修复允许将 INSERT 查询发送到具有不同约束的分片。此更改改进了 #9447 问题的修复。 #9852 (Vitaly Baranov)。
- 修复了在表列表之外(即在 WHERE 子句中)使用逗号 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)。
- 修复了紧凑部件的
ALTER TABLE DELETE COLUMN
查询损坏的问题。 #9779 (alesapin)。 - 修复了 max_distributed_connections (包括使用和不使用 Processors 的情况)。 #9673 (Azat Khuzhin)。
- 修复了一些函数参数的时区未正确使用的情况。 #9574 (Vasily Nemkov)。
Improvement
- 从 mutations 操作中移除 order by 阶段,因为我们从单个排序部件中以单线程方式读取数据。还添加了检查,以确保 mutation 操作中的行顺序与排序键顺序一致,并且此顺序未被破坏。 #9886 (alesapin)。
ClickHouse 发布 v20.3.4.10, 2020-03-20
Bug Fix
- 此版本还包含 20.1.8.41 版本中的所有 bug 修复。
- 修复了通过 http (使用处理器管道) 查询时,缺少
rows_before_limit_at_least
的问题。此修复解决了 #9730 问题。 #9757 (Nikolai Kochetov)
ClickHouse 发布 v20.3.3.6, 2020-03-17
Bug Fix
- 此版本还包含 20.1.7.38 版本中的所有 bug 修复。
- 修复了如果用户在前一个版本上执行了 mutations 操作,则复制功能无法工作的 bug。此修复解决了 #9645 问题。 #9652 (alesapin)。它使 20.3 版本再次向后兼容。
- 添加了设置
use_compact_format_in_distributed_parts_names
,该设置允许以更紧凑的格式为INSERT
查询写入Distributed
表的文件。此修复解决了 #9647 问题。 #9653 (alesapin)。它使 20.3 版本再次向后兼容。
ClickHouse 发布 v20.3.2.1, 2020-03-12
Backward Incompatible Change
- 修复了当为大量副本发送
Distributed
表的数据时,出现的file name too long
问题。修复了副本凭据在服务器日志中暴露的问题。磁盘上的目录名称格式已更改为[shard{shard_index}[_replica{replica_index}]]
。 #8911 (Mikhail Korotov) 升级到新版本后,您将无法在没有手动干预的情况下降级,因为旧服务器版本无法识别新的目录格式。如果要降级,则必须手动将相应的目录重命名为旧格式。此更改仅在您对Distributed
表使用了异步INSERT
时才相关。在 20.3.3 版本中,我们将引入一个设置,允许您逐步启用新格式。 - 更改了 mutation 命令的复制日志条目的格式。您必须等待旧的 mutations 操作处理完毕后才能安装新版本。
- 实现了一个简单的内存分析器,该分析器每当超过软分配限制 N 字节时,就将堆栈跟踪转储到
system.trace_log
中 #8765 (Ivan) #9472 (alexey-milovidov)system.trace_log
的列已从timer_type
重命名为trace_type
。这将需要在第三方性能分析和火焰图处理工具中进行更改。 - 在所有地方使用操作系统线程 ID 而不是内部线程号。此修复解决了 #7477 问题。当启用设置
send_logs_level
时,旧的clickhouse-client
无法接收从服务器发送的日志,因为结构化日志消息的名称和类型已更改。另一方面,不同的服务器版本可以相互发送具有不同类型的日志。当您不使用send_logs_level
设置时,您无需担心。 #8954 (alexey-milovidov) - 移除
indexHint
函数 #9542 (alexey-milovidov) - 移除
findClusterIndex
,findClusterValue
函数。此修复解决了 #8641 问题。如果您正在使用这些函数,请发送电子邮件至[email protected]
#9543 (alexey-milovidov) - 现在不允许使用
SELECT
子查询作为默认表达式来创建列或添加列。 #9481 (alesapin) - 要求在 JOIN 中为子查询指定别名。 #9274 (Artem Zuikov)
- 改进了
ALTER MODIFY/ADD
查询逻辑。现在您不能在不指定类型的情况下ADD
列,MODIFY
默认表达式不会更改列的类型,MODIFY
类型也不会丢失默认表达式值。修复了 #8669 问题。 #9227 (alesapin) - 需要重启服务器才能应用日志配置中的更改。这是一个临时的解决方法,以避免服务器记录到已删除的日志文件中的 bug(请参阅 #8696)。 #8707 (Alexander Kuzmenkov)
- 默认启用设置
experimental_use_processors
。此设置启用新查询管道的使用。这是一个内部重构,我们预计不会有明显的变化。如果发现任何问题,请将其设置回零。 #8768 (alexey-milovidov)
New Feature
- 添加
Avro
和AvroConfluent
输入/输出格式 #8571 (Andrew Onyshchuk) #8957 (Andrew Onyshchuk) #8717 (alexey-milovidov) - 多线程和非阻塞更新
cache
字典中过期的键(可以选择读取旧键)。 #8303 (Nikita Mikhaylov) - 添加查询
ALTER ... MATERIALIZE TTL
。它运行 mutation 操作,强制删除 TTL 过期的数据,并重新计算所有部件中关于 TTL 的元信息。 #8775 (Anton Popov) - 在需要时从 HashJoin 切换到 MergeJoin (在磁盘上) #9082 (Artem Zuikov)
- 为
ALTER TABLE
添加了MOVE PARTITION
命令 #4729 #6168 (Guillaume Tassery) - 动态从配置文件重新加载存储配置。 #8594 (Vladimir Chebotarev)
- 允许将
storage_policy
更改为不低于当前策略的策略。 #8107 (Vladimir Chebotarev) - 为 S3 存储和表函数添加了对 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) - 允许在 CSV 输出格式中使用 CRLF 作为行分隔符,当设置
output_format_csv_crlf_end_of_line
设置为 1 时 #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-Code
HTTP 标头,如果在发送数据之前抛出异常,则会设置此标头。此实现实现了 #4971 问题。 #8786 (Mikhail Korotov) - 添加了函数
ifNotFinite
。它只是一个语法糖:ifNotFinite(x, y) = isFinite(x) ? x : y
。 #8710 (alexey-milovidov) - 在
system.dictionaries
表中添加了last_successful_update_time
列 #9394 (Nikita Mikhaylov) - 添加了
blockSerializedSize
函数(磁盘上的大小,不带压缩) #8952 (Azat Khuzhin) - 添加函数
moduloOrZero
#9358 (hcz) - 添加了系统表
system.zeros
和system.zeros_mt
以及表函数zeros()
和zeros_mt()
。表(和表函数)包含一个名为zero
的单列,类型为UInt8
。此列包含零。它用于测试目的,作为生成多行的最快方法。此修复解决了 #6604 #9593 (Nikolai Kochetov)
Experimental Feature
- 在
MergeTree
系列表中添加了新的紧凑部件格式,其中所有列都存储在一个文件中。这有助于提高小型和频繁插入的性能。旧格式(每列一个文件)现在称为宽格式。数据存储格式由设置min_bytes_for_wide_part
和min_rows_for_wide_part
控制。 #8290 (Anton Popov) - 支持
Log
、TinyLog
和StripeLog
表的 S3 存储。 #8862 (Pavel Kovalenko)
Bug Fix
- 修复了日志消息中不一致的空格。 #9322 (alexey-milovidov)
- 修复了在表创建时,未命名元组数组被展平为 Nested 结构的问题。 #8866 (achulkov2)
- 修复了当
File
表或file
表函数中有太多文件匹配 glob 模式时,可能发生 “Too many open files” 错误的问题。现在文件是延迟打开的。此修复解决了 #8857 #8861 (alexey-milovidov) - DROP TEMPORARY TABLE 现在仅删除临时表。 #8907 (Vitaly Baranov)
- 在服务器关闭或 DETACH/ATTACH 表时,删除过时的分区。 #8602 (Guillaume Tassery)
- 关于默认磁盘如何从
data
子目录计算可用空间。修复了当data
目录挂载到单独的设备时(罕见情况),可用空间量计算不正确的问题。此修复解决了 #7441 #9257 (Mikhail Korotov) - 允许在 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) - 修复了在多个参数(超过 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
设置(默认 100 毫秒),它类似于connect_timeout_with_failover_ms
,但用于安全连接(因为 SSL 握手比普通 TCP 连接慢)。 #9026 (tavplubix) - 修复了 mutation 最终化中的一个错误,当 mutation 可能挂起在
parts_to_do=0
和is_done=0
状态时。 #9022 (alesapin) - 使用新的 ANY JOIN 逻辑和
partial_merge_join
设置。现在可以使用partial_merge_join=1
进行ANY|ALL|SEMI LEFT
和ALL INNER
连接。 #8932 (Artem Zuikov) - Shard 现在将从 initiator 获取的设置限制在 shard 的约束范围内,而不是抛出异常。此修复允许将查询发送到具有其他约束的 shard。 #9447 (Vitaly Baranov)
- 修复了
MergeTreeReadPool
中的内存管理问题。 #8791 (Vladimir Chebotarev) - 修复了使用字符串
e
调用toDecimal*OrNull()
函数族时的问题。修复了 #8312 问题。 #8764 (Artem Zuikov) - 确保
FORMAT Null
不向客户端发送任何数据。 #8767 (Alexander Kuzmenkov) - 修复了
LiveViewBlockInputStream
中的时间戳不会更新的错误。LIVE VIEW
是一个实验性功能。 #8644 (vxider) #8625 (vxider) - 修复了
ALTER MODIFY TTL
的错误行为,该行为不允许删除旧的 TTL 表达式。 #8422 (Vladimir Chebotarev) - 修复了 MergeTreeIndexSet 中的 UBSan 报告。修复了 #9250 问题。 #9365 (alexey-milovidov)
- 修复了当 haystack 具有零字节时,
match
和extract
函数的行为。当 haystack 是常量时,行为是错误的。修复了 #9160 问题。 #9163 (alexey-milovidov) #9345 (alexey-milovidov) - 避免从 Apache Avro 第三方库的析构函数中抛出异常。 #9066 (Andrew Onyshchuk)
- 不要部分提交从
Kafka
轮询的批次,因为它可能导致数据空洞。 #8876 (filimonov) - 修复了具有可空返回类型的
joinGet
。 #8919 #9014 (Amos Bird) - 修复了使用
T64
编解码器压缩时的数据不兼容性问题。 #9016 (Artem Zuikov) 修复了T64
压缩编解码器中的数据类型 ID,该 ID 会导致受影响版本中错误的(解)压缩。 #9033 (Artem Zuikov) - 添加了设置
enable_early_constant_folding
并在某些会导致错误的情况下禁用它。 #9010 (Artem Zuikov) - 修复了带有 VIEW 的下推谓词优化器并启用了测试。 #9011 (Winter Zhang)
- 修复了
Merge
表中的段错误,该错误可能在从File
存储读取时发生。 #9387 (tavplubix) - 在
ATTACH PARTITION FROM
、REPLACE PARTITION
、MOVE TO TABLE
中添加了对存储策略的检查。否则,可能会使重启后 part 的数据无法访问,并阻止 ClickHouse 启动。 #9383 (Vladimir Chebotarev) - 修复了为表设置 TTL 时的 alters。 #8800 (Anton Popov)
- 修复了当执行
SYSTEM RELOAD ALL DICTIONARIES
时,在某些字典正在被修改/添加/删除时可能发生的竞争条件。 #8801 (Vitaly Baranov) - 在以前的版本中,
Memory
数据库引擎使用空数据路径,因此表是在path
目录(例如/var/lib/clickhouse/
)中创建的,而不是在数据库的数据目录(例如/var/lib/clickhouse/db_name
)中创建的。 #8753 (tavplubix) - 修复了关于缺少默认磁盘或策略的错误日志消息。 #9530 (Vladimir Chebotarev)
- 修复了数组类型的 bloom_filter 索引的 not(has())。 #9407 (achimbab)
- 允许
Log
引擎表的第一个(或多个)列为别名。 #9231 (Ivan) - 修复了单线程从
MergeTree
表读取时 ranges 的顺序。它可能导致来自MergeTreeRangeReader
的异常或错误的查询结果。 #9050 (Anton Popov) - 使
reinterpretAsFixedString
返回FixedString
而不是String
。 #9052 (Andrew Onyshchuk) - 避免用户在极少数情况下获得错误的错误消息(
Success
而不是详细的错误描述)。 #9457 (alexey-milovidov) - 在使用带有空行模板的
Template
格式时,不要崩溃。 #8785 (Alexander Kuzmenkov) - 系统表的元数据文件可能在错误的位置创建。 #8653 (tavplubix) 修复了 #8581 问题。
- 修复了缓存字典中 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
mutations 中的一个错误,该错误导致索引损坏。修复了 #9019 和 #8982 问题。此外,还修复了ReplicatedMergeTree
ALTER
查询中极少发生的竞争条件。 #9048 (alesapin) - 当启用设置
compile_expressions
时,当使用Nullable
类型时,可能会在LLVMExecutableFunction
中收到unexpected column
错误。 #8910 (Guillaume Tassery) Kafka
引擎的多个修复:1) 修复了在消费者组重新平衡期间出现的重复项。2) 修复了当从多个分区轮询数据并部分提交时出现的罕见“空洞”(现在我们始终处理/提交整个轮询的消息块)。3) 修复了按块大小刷新(在此之前,只有按超时刷新才能正常工作)。4) 更好的订阅程序(带有分配反馈)。5) 使测试工作更快(使用默认间隔和超时)。由于之前数据没有按块大小刷新(正如文档中应该的那样),该 PR 可能会导致默认设置下的性能下降(由于更频繁和更小的刷新,效率较低)。如果在更改后遇到性能问题 - 请在表中将kafka_max_block_size
增加到更大的值(例如CREATE TABLE ...Engine=Kafka ... SETTINGS ... kafka_max_block_size=524288
)。修复了 #7259 问题。 #8917 (filimonov)- 修复了 PREWHERE 优化后某些查询中的
Parameter out of bound
异常。 #8914 (Baudouin Giard) - 修复了函数
arrayZip
参数的混合常量性情况。 #8705 (alexey-milovidov) - 在执行
CREATE
查询时,折叠存储引擎参数中的常量表达式。将空数据库名称替换为当前数据库。修复了 #6508 和 #3492 问题。 #9262 (tavplubix) - 现在不可能创建或添加具有简单循环别名的列,例如
a DEFAULT b, b DEFAULT a
。 #9603 (alesapin) - 修复了可能损坏原始 part 的双重移动的错误。如果您使用
ALTER TABLE MOVE
,则此修复相关。 #8680 (Vladimir Chebotarev) - 允许
interval
标识符在没有反引号的情况下正确解析。修复了即使interval
标识符用反引号或双引号括起来,也无法执行查询的问题。修复了 #9124 问题。 #9142 (alexey-milovidov) - 修复了模糊测试和
bitTestAll
/bitTestAny
函数的不正确行为。 #9143 (alexey-milovidov) - 修复了当存在大量等于第 n 行的行时,
LIMIT n WITH TIES
中可能发生的崩溃/错误行数问题。 #9464 (tavplubix) - 修复了启用
insert_quorum
时写入的 parts 的 mutations。 #9463 (alesapin) - 修复了
Poco::HTTPServer
销毁时的数据竞争。当服务器启动并立即关闭时,可能会发生这种情况。 #9468 (Anton Popov) - 修复了当运行
SHOW CREATE TABLE a_table_that_does_not_exist
时显示误导性错误消息的错误。 #8899 (achulkov2) - 修复了在某些罕见情况下,当
SELECT
子句中有一个常量,并且我们有ORDER BY
和LIMIT
子句时,Parameters are out of bound
异常。 #8892 (Guillaume Tassery) - 修复了 mutations 最终化,当已完成的 mutation 可能具有状态
is_done=0
时。 #9217 (alesapin) - 防止为具有旧语法的 MergeTree 表执行
ALTER ADD INDEX
,因为它不起作用。 #8822 (Mikhail Korotov) - 在服务器启动期间,不要访问
LIVE VIEW
所依赖的表,以便服务器能够启动。在分离LIVE VIEW
时,也删除LIVE VIEW
依赖项。LIVE VIEW
是一个实验性功能。 #8824 (tavplubix) - 修复了在执行
PREWHERE
时,MergeTreeRangeReader
中可能发生的段错误。 #9106 (Anton Popov) - 修复了可能与列 TTL 不匹配的校验和。 #9451 (Anton Popov)
- 修复了当只有一个 volume 时,part 未被 TTL 规则在后台移动的错误。 #8672 (Vladimir Chebotarev)
- 修复了问题
Method createColumn() is not implemented for data type Set
。修复了 #7799 问题。 #8674 (alexey-milovidov) - 现在我们将更频繁地尝试最终化 mutations。 #9427 (alesapin)
- 修复了
intDiv
除以负一常量的问题。 #9351 (hcz) - 修复了
BlockIO
中可能发生的竞争条件。 #9356 (Nikolai Kochetov) - 修复了当尝试使用/删除使用错误参数创建的
Kafka
表时导致服务器终止的错误。 #9513 (filimonov) - 添加了当操作系统为
timer_create
函数返回错误结果时的解决方法。 #8837 (alexey-milovidov) - 修复了
min_marks_for_seek
参数的使用错误。修复了当 Distributed 表中没有 sharding key 且我们尝试跳过未使用的 shards 时出现的错误消息。 #8908 (Azat Khuzhin)
改进
- 为
ReplicatedMergeTree*
引擎族实现基于 mutations 的ALTER MODIFY/DROP
查询。现在ALTERS
仅在元数据更新阶段阻止,之后不再阻止。 #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 maps 中支持字符串键。 #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 值的行。该表非常小(通常在兆字节数量级),默认收集此数据是合理的。 #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 规则将下载的 part 放入磁盘/卷。 #8598 (Vladimir Chebotarev)
- 对于外部 MySQL 字典,允许共享 MySQL 连接池,以便在字典之间“共享”它们。此选项显着减少了与 MySQL 服务器的连接数。 #9409 (Clément Rodriguez)
- 在
clickhouse-benchmark
输出中显示分位数的最近查询执行时间,而不是插值。最好显示与某些查询的执行时间相对应的值。 #8712 (alexey-milovidov) - 在将数据插入 Kafka 时,可以为消息添加 key 和时间戳。修复了 #7198 问题。 #8969 (filimonov)
- 如果服务器从终端运行,则用颜色突出显示线程号、查询 ID 和日志优先级。这是为了提高开发人员相关日志消息的可读性。 #8961 (alexey-milovidov)
- 为
Ordinary
数据库加载表时,提供更好的异常消息。 #9527 (alexey-milovidov) - 为具有聚合函数状态的数组实现
arraySlice
。修复了 #9388 问题。 #9391 (alexey-milovidov) - 允许在 IN 运算符的右侧使用常量函数和常量数组。 #8813 (Anton Popov)
- 如果 system.replicas 获取数据时发生 zookeeper 异常,则在单独的列中显示它。实现了 #9137 问题。 #9138 (alexey-milovidov)
- 在销毁时原子性地删除 MergeTree 数据 parts。 #8402 (Vladimir Chebotarev)
- 为 Distributed 表支持行级安全性。 #8926 (Ivan)
- 现在我们识别设置值中的后缀(例如 KB、KiB...)。 #8072 (Mikhail Korotov)
- 防止在构造大型 JOIN 的结果时内存不足。 #8637 (Artem Zuikov)
- 在
clickhouse-client
的交互模式中,为建议添加了集群名称。 #8709 (alexey-milovidov) - 为组中所有线程初始化查询分析器,例如,它允许完整分析插入查询 #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)
- 逻辑函数中更简单、更高效的代码 + 代码清理。 作为 #8718 的后续 #8728 (Alexander Kazakov)
- 通过使用 C++20 功能确保更严格的别名使用,整体性能得到提升(对于受影响的查询,提升范围为 5%..200%)。 #9304 (Amos Bird)
- 比较函数的内部循环中更严格的别名使用。 #9327 (alexey-milovidov)
- 算术函数的内部循环中更严格的别名使用。 #9325 (alexey-milovidov)
ColumnVector::replicate()
的实现速度提高了约 3 倍,ColumnConst::convertToFullColumn()
通过它实现。 在物化常量时,在测试中也很有用。 #9293 (Alexander Kazakov)- 对
ColumnVector::replicate()
的另一项小的性能改进(这加速了materialize
函数和高阶函数),对 #9293 的进一步改进 #9442 (Alexander Kazakov) - 改进了
stochasticLinearRegression
聚合函数的性能。 此补丁由 Intel 贡献。 #8652 (alexey-milovidov) - 改进了
reinterpretAsFixedString
函数的性能。 #9342 (alexey-milovidov) - 在处理器管道中,对于
Null
格式,不向客户端发送数据块。 #8797 (Nikolai Kochetov) #8767 (Alexander Kuzmenkov)
构建/测试/打包改进
- 异常处理现在在 Windows Subsystem for Linux 上正常工作。 参见 https://github.com/ClickHouse-Extras/libunwind/pull/3 这修复了 #6480 #9564 (sobolevsv)
- 在
clickhouse-client
中,用replxx
替换readline
以进行交互式行编辑 #8416 (Ivan) - FunctionsComparison 中更好的构建时间和更少的模板实例化。 #9324 (alexey-milovidov)
- 在 CI 中添加了与
clang-tidy
的集成。 另请参阅 #6044 #9566 (alexey-milovidov) - 现在我们在 CI 中使用
lld
链接 ClickHouse,即使对于gcc
也是如此。 #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
中的竞争条件。 此测试依赖于睡眠。 #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 (已删除用户)
- 规范化性能测试中某些查询的运行时间。 这是为了在比较模式下运行所有性能测试而完成的准备工作。 #9565 (alexey-milovidov)
- 修复了一些测试以支持使用查询测试的 pytest #9062 (Ivan)
- 在 MSan 构建中启用 SSL,这样服务器在运行无状态测试时不会在启动时失败 #9531 (tavplubix)
- 修复了测试结果中的数据库替换 #9384 (Ilya Yatsishin)
- 针对各种平台的构建修复 #9381 (proller) #8755 (proller) #8631 (proller)
- 向 stateless-with-coverage 测试 docker 镜像添加了 disks 部分 #9213 (Pavel Kovalenko)
- 在使用 GRPC 构建时,摆脱 in-source-tree 文件 #9588 (Amos Bird)
- 通过从 Context 中删除 SessionCleaner,略微加快了构建时间。 使 SessionCleaner 的代码更简单。 #9232 (alexey-milovidov)
- 更新了 clickhouse-test 脚本中对挂起查询的检查 #8858 (Alexander Kazakov)
- 从存储库中删除了某些无用的文件。 #8843 (alexey-milovidov)
- 将数学性能测试的类型从
once
更改为loop
。 #8783 (Nikolai Kochetov) - 添加 docker 镜像,该镜像允许为我们的代码库构建交互式代码浏览器 HTML 报告。 #8781 (alesapin) 参见 Woboq 代码浏览器
- 抑制 MSan 下的一些测试失败。 #8780 (Alexander Kuzmenkov)
- 加速 "exception while 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-odbc
驱动程序添加到测试镜像中。 这允许测试 ClickHouse 通过其自身的 ODBC 驱动程序与 ClickHouse 的交互。 #9348 (filimonov) - 修复了单元测试中的几个错误。 #9047 (alesapin)
- 启用
-Wmissing-include-dirs
GCC 警告,以消除所有不存在的包含 - 主要原因是 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) - 更新服务器的 Dockerfile #8893 (Ilya Mazaev)
- build-gcc-from-sources 脚本中的次要修复 #8774 (Michael Nacharov)
- 在未使用
number
列的性能测试中,将numbers
替换为zeros
。 这将产生更清晰的测试结果。 #9600 (Nikolai Kochetov) - 修复了在 Column 构造函数中使用 initializer_list 时出现的堆栈溢出问题。 #9367 (已删除用户)
- 将 librdkafka 升级到 v1.3.0。 在 Mac OS X 上启用捆绑的
rdkafka
和gsasl
库。 #9000 (Andrew Onyshchuk) - 在 GCC 9.2.0 上的构建修复 #9306 (vxider)
ClickHouse release v20.1
ClickHouse release v20.1.16.120-stable 2020-60-26
Bug Fix
- 修复了在 prewhere 条件中使用
Nullable
列导致的罕见崩溃。 是 #11608 的延续。#11869 (Nikolai Kochetov)。 - 不允许在更高阶函数内部使用 arrayJoin。这会导致协议同步中断。此关闭了 #3933。#11846 (alexey-milovidov)。
- 修复了类似
SELECT *, xyz.*
查询的意外行为,这些查询本应报错却成功执行。#11753 (hexiaoting)。 - 修复了 Values 输入格式中复杂字面量类型推导错误导致的 LOGICAL_ERROR。#11732 (tavplubix)。
- 修复了 const 列上的
ORDER BY ... WITH FILL
。#11697 (Anton Popov)。 - 传递与 XDBC 桥通信时的正确超时。最近,在检查桥的活动状态和接收元信息时,超时未被遵守。#11690 (alexey-milovidov)。
- 添加了对带有不区分大小写标志的正则表达式的支持。此修复了 #11101 和 #11506。#11649 (alexey-milovidov)。
- 修复了 String 的 bloom 过滤器(数据跳过索引)。#11638 (Azat Khuzhin)。
- 修复了在 prewhere 条件中使用
Nullable
列导致的罕见崩溃。(可能与 #11572 有关)。#11608 (Nikolai Kochetov)。 - 修复了当 exception.code() % 256 = 0 时 clickhouse-client 的错误退出代码。#11601 (filimonov)。
- 修复了服务器启动时关于“标记缓存大小已降低”的日志消息中的微不足道的错误。此关闭了 #11399。#11589 (alexey-milovidov)。
- 现在,clickhouse-server docker 容器将优先使用 IPv6 检查服务器活动状态。#11550 (Ivan Starkov)。
- 修复了在使用 -State 函数进行聚合过程中抛出异常时的内存泄漏。 这修复了 #8995。 #11496 (alexey-milovidov)。
- 修复了将包装在带有 'FINAL' 修饰符和 'ORDER BY' 优化的函数中的主键的使用问题。 #10715 (Anton Popov)。
ClickHouse release v20.1.15.109-stable 2020-06-19
Bug Fix
ClickHouse release v20.1.14.107-stable 2020-06-11
Bug Fix
- 修复了带有
PREWHERE column in (subquery)
和ARRAY JOIN
的查询的Size of offsets does not match size of column
错误。#11580 (Nikolai Kochetov)。
ClickHouse release v20.1.13.105-stable 2020-06-10
Bug Fix
- 修复了如果启用
min_bytes_to_use_direct_io
并且 PREWHERE 处于活动状态并使用 SAMPLE 或大量线程时可能发生的Data compressed with different methods
错误。此修复了 #11539。#11540 (alexey-milovidov)。 - 修复了编解码器的返回压缩大小。#11448 (Nikolai Kochetov)。
- 修复了当列具有带有非字面量参数的压缩编解码器时服务器崩溃的问题。修复了 #11365。#11431 (alesapin)。
- 修复了以 nan 作为点的 pointInPolygon 函数。 修复了 #11375。 #11421 (Alexey Ilyukhov)。
- 修复了 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)。 - 修复了当提取的 JSON 具有包含不平衡的 { 或 [ 的字符串时 visitParamExtractRaw 函数的问题。#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))
捕获参数的高阶函数,可能出现的错误无法捕获列
。 #11185 (Nikolai Kochetov)。 - 如果数据跳过索引依赖于将在后台合并期间修改的列(对于 SummingMergeTree、AggregatingMergeTree 以及 TTL GROUP BY),则其计算不正确。此问题已通过将索引计算移动到合并之后来修复,以便索引在合并的数据上计算。 #11162 (Azat Khuzhin)。
- 如果 mutation 最终化任务没有最终化任何内容,则移除日志记录。 #11109 (alesapin)。
- 修复了 parseDateTime64BestEffort 参数解析错误。 #10925. #11038 (Vasily Nemkov)。
- 修复了
getRawData()
方法中不正确的原始数据大小。 #10964 (Igr)。 - 修复了 Distributed 表中元组的向后兼容性问题。 #10889 (Anton Popov)。
- 修复了 StringHashTable 中的 SIGSEGV(如果该键不存在)。 #10870 (Azat Khuzhin)。
- 修复了
ReplicatedMergeTree
中的一个错误,该错误可能导致在OPTIMIZE
查询上的某些ALTER
操作在等待某些副本变为非活动状态后挂起。 #10849 (tavplubix)。 - 修复了 Block::sortColumns() 后的列顺序(还添加了一个测试,表明它影响了一些实际用例 - Buffer 引擎)。 #10826 (Azat Khuzhin)。
- 修复了在未请求标识符引用时 ODBC bridge 的问题。修复了 #7984。 #10821 (alexey-milovidov)。
- 修复了 DateLUT 中的 UBSan 和 MSan 报告。 #10798 (alexey-milovidov)。
-
- 使用
src_type
在键条件中进行正确的类型转换。修复了 #6287。 #10791 (Andrew Onyshchuk)。
- 使用
- 修复了
parallel_view_processing
行为。现在,如果发生异常,则应完成所有无异常的插入到MATERIALIZED VIEW
的操作。修复了 #10241。 #10757 (Nikolai Kochetov)。 - 修复了与 -State 组合使用时的组合器 -OrNull 和 -OrDefault。 #10741 (hcz)。
- 修复了消失的总计问题。如果查询具有带有外部 where 条件的 join 或子查询,则总计可能已被过滤。修复了 #10674。 #10698 (Nikolai Kochetov)。
- 修复了在一个查询中多次使用带有相同集合的
IN
运算符的问题。 #10686 (Anton Popov)。 - 修复了 AggregateTransform 构造函数中参数的顺序。 #10667 (palasonic1)。
- 修复了在启用
distributed_aggregation_memory_efficient
时,远程查询缺乏并行执行的问题。修复了 #10655。 #10664 (Nikolai Kochetov)。 - 修复了分布式查询的谓词优化(
enable_optimize_predicate_expression=1
)对于带有HAVING
部分的查询(即当需要在服务器发起者上进行过滤时)的问题,通过保留表达式的顺序(这足以修复),并强制聚合器使用列名而不是索引。修复了:#10613, #11413。 #10621 (Azat Khuzhin)。 - 修复了错误
BloomFilter 误报必须是 0 到 1 之间的双精度数
#10551。 #10569 (Winter Zhang)。 - 修复了 SELECT 列 ALIAS,其默认表达式类型与列类型不同的问题。 #10563 (Azat Khuzhin)。
-
- 实现了 DateTime64 和 String 值之间的比较(就像 DateTime 一样)。 #10560 (Vasily Nemkov)。
ClickHouse release v20.1.12.86, 2020-05-26
Bug Fix
- 修复了 20.1 及更早版本之间两级聚合的不兼容性。 当在发起节点和远程节点上使用不同版本的 ClickHouse,并且 GROUP BY 结果的大小很大,并且聚合由单个 String 字段执行时,会发生此不兼容性。 这会导致结果中单个键的多个未合并行。#10952 (alexey-milovidov)。
- 修复了
SummingMergeTree
中LowCardinality(FixedString)
键列的数据损坏问题,该问题可能在合并后发生。 修复了 #10489。 #10721 (Nikolai Kochetov)。 - 修复了当
readonly=2
和cancel_http_readonly_queries_on_client_close=1
时,http 请求在客户端关闭时卡住的错误。修复了 #7939, #7019, #7736, #7091。 #10684 (tavplubix)。 - 修复了在
SYSTEM DROP DNS CACHE
查询中也删除用于检查是否允许用户从某些 IP 地址连接的缓存的错误。 #10608 (tavplubix)。 - 修复了在
MATERIALIZED VIEW
的内部查询中,如果此查询包含依赖表,则标量结果不正确的问题。 #10603 (Nikolai Kochetov)。 - 修复了 mutation 完成所有 parts,但在
is_done=0
中挂起的情况。 #10526 (alesapin)。 - 修复了 unix epoch 开始时,对于与 UTC 有小数偏移的时区的溢出问题。 这修复了 #9335。 #10513 (alexey-milovidov)。
- 修复了 Distributed 存储的不当关闭。 #10491 (Azat Khuzhin)。
- 修复了大型整数上的
simpleLinearRegression
中的数字溢出。 #10474 (hcz)。 - 修复了 attach database 失败时删除元数据目录的问题。 #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)。 - 修复了几个 bug,当某些数据通过 quorum 插入,然后以某种方式删除(DROP PARTITION、TTL),这会导致 INSERT 挂起或 SELECT 中出现误报异常。 这修复了 #9946。 #10188 (Nikita Mikhaylov)。
- 修复了当远程服务器上使用 18.12.17 之前的版本,而发起服务器上使用较新版本,并且 GROUP BY 固定键和非固定键,以及当两级 group by 方法被激活时的不兼容性。 #3254 (alexey-milovidov)。
构建/测试/打包改进
ClickHouse release v20.1.10.70, 2020-04-17
Bug Fix
- 修复了罕见的可能出现的异常
Cannot drain connections: cancel first
。 #10239 (Nikolai Kochetov)。 - 修复了当用户尝试在
ENGINE = Replicated*
的表上运行ALTER UPDATE/DELETE
时,ClickHouse 会抛出'Unknown function lambda.'
错误消息的 bug。 现在,对非确定性函数的检查可以正确处理 lambda 表达式。 #10237 (Alexander Kazakov)。 - 修复了当星期几为星期二或星期四时,RFC-2822 格式字符串的
parseDateTimeBestEffort
函数。此修复解决了 #10082 问题。 #10214 (alexey-milovidov)。 - 修复了
JOIN
内部常量列名可能与JOIN
外部常量列名冲突的问题。 #10207 (alexey-milovidov)。 - 修复了当查询应该在 LIMIT 处停止时,从无限源(如
system.numbers
或system.zeros
)读取数据时可能发生的无限查询执行。 #10206 (Nikolai Kochetov)。 - 修复了存在
arrayJoin
函数时(在某些情况下)的 move-to-prewhere 优化。 这修复了 #10092。 #10195 (alexey-milovidov)。 - 添加了使用
allow_nondeterministic_mutations
设置来放宽对 mutations 中非确定性函数使用的限制的能力。 #10186 (filimonov)。 - 如果结构与
Distributed
引擎的表不匹配,则转换数据块以用于INSERT
。 #10135 (Azat Khuzhin)。 - 修复了当
Distributed
表的结构与底层表不同时,INSERT
到Distributed
表的SIGSEGV
错误。 #10105 (Azat Khuzhin)。 - 修复了带有
JOIN
和UNION ALL
的查询可能丢失行的问题。修复了 #9826, #10113 问题。 #10099 (Nikolai Kochetov)。 - 为 MySQL Database Engine 添加了参数检查和对标识符参数的支持。 #10077 (Winter Zhang)。
- 修复了来自 localhost clickhouse 服务器的 clickhouse 字典源中的 bug。如果字典和源中的类型不兼容,则此 bug 可能导致内存损坏。 #10071 (alesapin)。
- 修复了错误
Cannot clone block with columns because block has 0 columns ... While executing GroupingAggregatedTransform
。当启用distributed_aggregation_memory_efficient
设置,并且分布式查询从不同的分片读取具有不同级别的聚合数据(混合单级和双级聚合)时,会发生此错误。 #10063 (Nikolai Kochetov)。 - 修复了在字符串键包含尾随零字节的情况下,
GROUP BY
可能发生的段错误 (#8636, #8925)。 #10025 (Alexander Kuzmenkov)。 - 修复了在查询某些数据库的某些处理阶段未检索到必要表的问题。修复了 #9699 问题。 #9949 (achulkov2)。
- 修复了当
JOIN
与TOTALS
一起出现时,出现的'Not found column in block'
错误。 修复了 #9839。 #9939 (Artem Zuikov)。 - 修复了
ON CLUSTER
DDL 查询在服务器启动时冻结的 bug。 #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
逻辑,该逻辑可能导致自动删除附加的 part,并添加了一些测试。 #9410 (Vladimir Chebotarev)。
构建/测试/打包改进
ClickHouse release v20.1.9.54, 2020-03-28
Bug Fix
- 修复了当查询在分布式表上同时具有
PREWHERE
和WHERE
,且SET distributed_product_mode = 'local'
时,出现的'Different expressions with the same alias'
错误。 #9871 (Artem Zuikov)。 - 修复了具有复合主键的表的 mutations 操作过度消耗内存的问题。此修复解决了 #9850 问题。 #9860 (alesapin)。
- 对于 INSERT 查询,shard 现在会将从 initiator 获取的设置限制在 shard 的约束范围内,而不是抛出异常。 此修复允许将
INSERT
查询发送到具有其他约束的 shard。 此更改改进了修复 #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)。
改进
- 从 mutations 中删除
ORDER BY
阶段,因为我们从单个有序 part 中以单线程读取。 此外,添加了检查以确保 mutation 中的行顺序在排序键顺序中是有序的,并且此顺序未被违反。 #9886 (alesapin)。
构建/测试/打包改进
ClickHouse release v20.1.8.41, 2020-03-20
Bug Fix
- 修复了可能永久出现的
Cannot schedule a task
错误(由于ParallelAggregatingBlockInputStream::Handler::onFinish/onFinishThread
中的未处理异常)。 这修复了 #6833。 #9154 (Azat Khuzhin) - 修复了
ALTER
查询(mutation)中过多的内存消耗。这修复了 #9533 和 #9670。 #9754 (alesapin) - 修复了外部字典 DDL 中反引号的 bug。 这修复了 #9619。 #9734 (alesapin)
ClickHouse release v20.1.7.38, 2020-03-18
Bug Fix
- 修复了
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) - 现在我们将更频繁地尝试最终化 mutations。 #9427 (alesapin)
- 修复了 #8598 中引入的复制协议不兼容性问题。 #9412 (alesapin)
- 修复了数组类型的 bloom_filter 索引的 not(has())。 #9407 (achimbab)
- 修复了当 haystack 具有零字节时,
match
和extract
函数的行为。当 haystack 是常量时,行为是错误的。修复了 #9160 问题。 #9163 (alexey-milovidov) #9345 (alexey-milovidov)
构建/测试/打包改进
- 异常处理现在在 Windows Subsystem for Linux 上正常工作。 参见 https://github.com/ClickHouse-Extras/libunwind/pull/3 这修复了 #6480 #9564 (sobolevsv)
ClickHouse release v20.1.6.30, 2020-03-05
Bug Fix
- 修复了使用
T64
编解码器压缩时的数据不兼容问题。 #9039 (abyss7) - 修复了在单线程中从 MergeTree 表读取时,范围的顺序。 修复了 #8964。 #9050 (CurtizJ)
- 修复了在执行
PREWHERE
时,MergeTreeRangeReader
中可能发生的段错误。 修复了 #9064。 #9106 (CurtizJ) - 修复了
reinterpretAsFixedString
以返回FixedString
而不是String
。 #9052 (oandrew) - 修复了具有可空返回类型的
joinGet
。 修复了 #8919 #9014 (amosbird) - 修复了 fuzz 测试以及 bitTestAll/bitTestAny 函数的不正确行为。 #9143 (alexey-milovidov)
- 修复当 haystack 具有零字节时,match 和 extract 函数的行为。当 haystack 是常量时,行为是错误的。修复了 #9160 #9163 (alexey-milovidov)
- 修复了当使用非严格单调函数索引时,反向谓词的执行问题。修复了 #9034 #9223 (Akazz)
- 允许在
WHERE
部分存在[NOT] LIKE
运算符时,将CROSS
重写为INNER JOIN
。修复了 #9191 #9229 (4ertus2) - 允许 Log 引擎表的第一个(或多个)列为别名。#9231 (abyss7)
- 允许在逗号连接中使用
IN()
。修复了 #7314。#9251 (4ertus2) - 改进了
ALTER MODIFY/ADD
查询的逻辑。现在您不能在不指定类型的情况下ADD
列,MODIFY
默认表达式不会更改列的类型,并且MODIFY
类型不会丢失默认表达式的值。修复了 #8669。#9227 (alesapin) - 修复了 mutation 的最终化,当已完成的 mutation 可能具有 status 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) - 修复了当数据目录挂载到单独设备时,可用空间量计算不正确的issue。对于默认磁盘,从数据子目录计算可用空间。此修复解决了 #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) - 防止在极少数情况下,当在读取后缀之后但在提交之前发生异常时,
Kafka
中丢失数据。修复了 #9378。相关 issue:#7175 #9507 (filimonov) - 修复了当尝试使用/删除使用错误参数创建的
Kafka
表时导致服务器终止的 bug。修复了 #9494。合并了 #9507。#9513 (filimonov)
新功能
- 添加了
deduplicate_blocks_in_dependent_materialized_views
选项,以控制对带有物化视图的表执行幂等插入的行为。此新功能是应 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
逻辑。要在不更改行为的情况下升级,您需要将SETTINGS any_join_distinct_right_table_keys = 1
添加到 Engine Join 表元数据,或在升级后重新创建这些表。#8400 (Artem Zuikov) - 需要重启服务器才能应用日志配置中的更改。这是一个临时的解决方法,以避免服务器记录到已删除的日志文件中的 bug(请参阅 #8696)。 #8707 (Alexander Kuzmenkov)
新功能
- 向
system.merges
添加了关于 part 路径的信息。#8043 (Vladimir Chebotarev) - 添加了在
ON CLUSTER
模式下执行SYSTEM RELOAD DICTIONARY
查询的能力。#8288 (Guillaume Tassery) - 添加了在
ON CLUSTER
模式下执行CREATE DICTIONARY
查询的能力。#8163 (alesapin) - 现在
users.xml
中的用户配置文件可以继承多个配置文件。#8343 (Mikhail f. Shiryaev) - 添加了
system.stack_trace
表,该表允许查看所有服务器线程的堆栈跟踪。这对于开发人员内省服务器状态很有用。此修复解决了 #7576。#8344 (alexey-milovidov) - 添加了具有可配置亚秒级精度的
DateTime64
数据类型。#7170 (Vasily Nemkov) - 添加了表函数
clusterAllReplicas
,该函数允许查询集群中的所有节点。#8493 (kiran sunkari) - 添加了聚合函数
categoricalInformationValue
,该函数计算离散特征的信息值。#8117 (hcz) - 通过并行处理加速
CSV
,TSV
和JSONEachRow
格式的数据文件解析。#7780 (Alexander Kuzmenkov) - 添加了执行银行家舍入的函数
bankerRound
。#8112 (hcz) - 在嵌入式字典中支持更多区域名称语言:'ru', 'en', 'ua', 'uk', 'by', 'kz', 'tr', 'de', 'uz', 'lv', 'lt', 'et', 'pt', 'he', 'vi'。#8189 (alexey-milovidov)
- 改进了
ANY JOIN
逻辑的一致性。现在t1 ANY LEFT JOIN t2
等于t2 ANY RIGHT JOIN t1
。#7665 (Artem Zuikov) - 添加了设置
any_join_distinct_right_table_keys
,该设置启用了ANY INNER JOIN
的旧行为。#7665 (Artem Zuikov) - 添加了新的
SEMI
和ANTI JOIN
。旧的ANY INNER JOIN
行为现在作为SEMI LEFT JOIN
可用。#7665 (Artem Zuikov) - 为
File
引擎和file
表函数添加了Distributed
格式,该格式允许从异步插入到Distributed
表生成的.bin
文件中读取数据。#8535 (Nikolai Kochetov) - 为
runningAccumulate
添加了可选的 reset column 参数,该参数允许为每个新的键值重置聚合结果。#8326 (Sergey Kononenko) - 添加了使用 ClickHouse 作为 Prometheus 端点的能力。#7900 (vdimir)
- 在
config.xml
中添加了<remote_url_allow_hosts>
节,该节限制了远程表引擎和表函数URL
,S3
,HDFS
允许的主机。#7154 (Mikhail Korotov) - 添加了函数
greatCircleAngle
,该函数计算球体上的角度距离(以度为单位)。#8105 (alexey-milovidov) - 更改了地球半径,使其与 H3 库一致。#8105 (alexey-milovidov)
- 为输入和输出添加了
JSONCompactEachRow
和JSONCompactEachRowWithNamesAndTypes
格式。#7841 (Mikhail Korotov) - 为文件相关的表引擎和表函数(
File
,S3
,URL
,HDFS
)添加了功能,该功能允许基于附加引擎参数或文件扩展名读取和写入gzip
文件。#7840 (Andrey Bodrov) - 添加了
randomASCII(length)
函数,该函数生成一个包含随机 ASCII 可打印字符集的字符串。#8401 (BayoNet) - 添加了函数
JSONExtractArrayRaw
,该函数从JSON
字符串返回未解析的 json 数组元素的数组。#8081 (Oleg Matrokhin) - 添加了
arrayZip
函数,该函数允许将多个等长数组组合成一个元组数组。#8149 (Winter Zhang) - 为
*MergeTree
表引擎系列添加了根据配置的TTL
表达式在磁盘之间移动数据的能力。#8140 (Vladimir Chebotarev) - 添加了新的聚合函数
avgWeighted
,该函数允许计算加权平均值。#7898 (Andrey Bodrov) - 现在,对于
TSV
,TSKV
,CSV
和JSONEachRow
格式,默认启用并行解析。#7894 (Nikita Mikhaylov) - 从
H3
库添加了几个地理函数:h3GetResolution
,h3EdgeAngle
,h3EdgeLength
,h3IsValid
和h3kRing
。#8034 (Konstantin Malanchev) - 在文件相关的存储和表函数中添加了对 brotli (
br
) 压缩的支持。此修复解决了 #8156。#8526 (alexey-milovidov) - 为
SimpleAggregationFunction
类型添加了groupBit*
函数。#8485 (Guillaume Tassery)
Bug Fix
- 修复了重命名带有
Distributed
引擎的表。修复了 issue #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
引擎系列检查功能中的 bug。现在,当最后一个 granule 和最后一个 mark(非 final)中的行数相等时,它不会失败。#8047 (alesapin) - 修复了在
ALTER
查询之后插入Enum*
列的问题,当底层数字类型与表指定的类型相同时。此修复解决了 #7836。#7908 (Anton Popov) - 允许为函数
substring
使用非恒定的负数 "size" 参数。以前由于错误而不允许这样做。此修复解决了 #4832。#7703 (alexey-milovidov) - 修复了解析 bug,当传递给
(O|J)DBC
表引擎的参数数量错误时。#7709 (alesapin) - 在将日志发送到 syslog 时,使用正在运行的 clickhouse 进程的命令名称。在以前的版本中,使用空字符串代替命令名称。#8460 (Michael Nacharov)
- 修复了对
localhost
允许主机的检查。此 PR 修复了 #8241 中提供的解决方案。#8342 (Vitaly Baranov) - 修复了
argMin
和argMax
函数在长字符串参数情况下,当结果在runningAccumulate
函数中使用时,可能发生的罕见崩溃。此修复解决了 #8325 #8341 (dinosaur) - 修复了带有
Buffer
引擎的表的内存过度提交。#8345 (Azat Khuzhin) - 修复了可能存在的 bug,该 bug 存在于可以将
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) - 修复了当服务器无法发送或写入
String
数据类型(需要UTF-8
验证)的值的JSON
或XML
格式数据,或者当使用 Brotli 算法压缩结果数据时,或在其他一些罕见情况下可能发生的服务器崩溃 (std::terminate
)。此修复解决了 #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) - 为
Nullable
参数情况下,函数rand
和randConstant
修正了返回类型。现在函数总是返回UInt32
类型,而不会返回Nullable(UInt32)
类型。#8204 (Nikolai Kochetov) - 禁用了
WITH FILL
表达式的谓词下推。修复了 #7784 问题。#7789 (Winter Zhang) - 修复了当使用
FINAL
section 时,SummingMergeTree
引擎的count()
结果不正确的问题。#3280 #7786 (Nikita Mikhaylov) - 修复了从远程服务器获取常量函数可能返回不正确结果的问题。这发生在查询中使用类似
version()
,uptime()
等函数时,这些函数对于不同的服务器返回不同的常量值。修复了 #7666 问题。#7689 (Nikolai Kochetov) - 修复了下推谓词优化中一个复杂的 bug,该 bug 导致错误的结果。此修复解决了下推谓词优化中的许多问题。#8503 (Winter Zhang)
- 修复了
CREATE TABLE .. AS dictionary
查询中的崩溃问题。#8508 (Azat Khuzhin) - 改进了
.g4
文件中 ClickHouse 语法的几处。#8294 (taiyang-li) - 修复了在
JOIN
中使用Join
引擎的表时导致崩溃的 bug。修复了 #7556 #8254 #7915 #8100 问题。#8298 (Artem Zuikov) - 修复了在
CREATE DATABASE
时冗余的字典重载。#7916 (Azat Khuzhin) - 限制了从
StorageFile
和StorageHDFS
读取的最大流数。修复了 #7650 问题。#7981 (alesapin) - 修复了
ALTER ... MODIFY ... CODEC
查询中的 bug,当用户同时指定默认表达式和编解码器时会触发。8593 问题。#8614 (alesapin) - 修复了
SimpleAggregateFunction(LowCardinality)
类型列的后台合并错误。#8613 (Nikolai Kochetov) - 修复了函数
toDateTime64
中的类型检查。#8375 (Vasily Nemkov) - 现在,在
LEFT
或FULL JOIN
中,如果使用了 Join 引擎和不支持的join_use_nulls
设置,服务器不会崩溃。#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
中并发 worker 之间的冗余争用。#7816 (Ding Xiang Fei) - 现在,即使附加 part 的 mutation 版本大于当前的 mutation 版本,mutation 也不会跳过这些附加 part。#7812 (Zhichang Yu) #8250 (alesapin)
- 忽略了移动到另一个磁盘并在服务器重启后,
*MergeTree
数据 part 的冗余副本。#7810 (Vladimir Chebotarev) - 修复了在
FULL JOIN
中,当JOIN
键包含LowCardinality
类型时发生的崩溃。#8252 (Artem Zuikov) - 禁止在 insert 查询中多次使用相同的列名,例如
INSERT INTO tbl (x, y, x)
。修复了 #5465, #7681 问题。#7685 (alesapin) - 为未知 CPU 添加了检测物理 CPU 核心数的后备方案 (使用逻辑 CPU 核心数)。修复了 #5239 问题。#7726 (alexey-milovidov)
- 修复了物化列和别名列的
There's no column
错误。#8210 (Artem Zuikov) - 修复了当
EXISTS
查询在没有TABLE
或DICTIONARY
限定符的情况下使用时,例如EXISTS t
,服务器崩溃的问题。修复了 #8172 问题。此 bug 在 19.17 版本中引入。#8213 (alexey-milovidov) - 修复了使用
SimpleAggregateFunction
列时可能出现的罕见 bug"Sizes of columns does not match"
。#7790 (Boris Granveaud) - 修复了具有空
allow_databases
设置的用户可以访问所有数据库(以及allow_dictionaries
设置的字典)的 bug。#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) - 修复了带有负数 size 的
substr
函数的结果子字符串的大小。#8589 (Nikolai Kochetov) - 现在,如果后台线程池中没有足够的空闲线程,服务器不会在
MergeTree
中执行 part mutation。#8588 (tavplubix) - 修复了
UNION ALL
AST 格式化中的一个小的拼写错误。#7999 (litao91) - 修复了 bloom filter 对负数结果不正确的问题。修复了 #8317 问题。#8566 (Winter Zhang)
- 修复了解压缩中潜在的缓冲区溢出。恶意用户可以传递伪造的压缩数据,导致缓冲区后读取。此问题由 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
函数的错误。#8082 (Yue Huang) - 根据 ZooKeeper 程序员指南改进了
ZXid
的定义,修复了clickhouse-cluster-copier
中的 bug。#8088 (Ding Xiang Fei) odbc
表函数现在遵循external_table_functions_use_nulls
设置。#7506 (Vasily Nemkov)- 修复了一个罕见的数据竞争 bug。#8143 (Alexander Kazakov)
- 现在,
SYSTEM RELOAD DICTIONARY
会完全重新加载字典,忽略update_field
。修复了 #7440 问题。#8037 (Vitaly Baranov) - 添加了在 create query 中检查字典是否存在的功能。#8032 (alesapin)
- 修复了
Values
格式中Float*
类型的解析。#7817 问题。#7870 (tavplubix) - 修复了当我们在
*MergeTree
表引擎族的某些后台操作中无法预留空间时发生的崩溃。#7873 (Vladimir Chebotarev) - 修复了当表包含
SimpleAggregateFunction(LowCardinality)
列时,合并操作崩溃的问题。修复了 #8515 问题。#8522 (Azat Khuzhin) - 恢复了对所有 ICU locale 的支持,并添加了为常量表达式应用排序规则的功能。还在
system.collations
表中添加了语言名称。#8051 (alesapin) - 修复了最小生命周期为零 (
LIFETIME(MIN 0 MAX N)
,LIFETIME(N)
) 的外部字典在后台不更新的 bug。#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 的 bug。#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) - 简化了发送到分布式查询 shard 的数据 header 的格式。#8044 (Vitaly Baranov)
Live View
表引擎重构。#8519 (vzakaznikov)- 为从 DDL 查询创建的外部字典添加了额外的检查。#8127 (alesapin)
- 修复了当
FINAL
和SAMPLE
一起使用时,例如select count() from table final sample 1/2
,出现的Column ... already exists
错误。修复了 #5186 问题。#7907 (Nikolai Kochetov) - 现在
joinGet
函数的第一个参数可以是表标识符。#7707 (Amos Bird) - 允许将
MaterializedView
与Kafka
表之上的子查询一起使用。#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)
- 在编译 ClickHouse 时不使用 SSL 的情况下,启用了 MySQL 兼容性服务器。#7852 (Yuriy Baranov)
- 现在服务器校验分布式批次的 checksum,这在批次数据损坏的情况下会给出更详细的错误信息。#7914 (Azat Khuzhin)
- 为
MySQL
数据库引擎添加了DROP DATABASE
,DETACH TABLE
,DROP TABLE
和ATTACH TABLE
支持。#8202 (Winter Zhang) - 在 S3 表函数和表引擎中添加了身份验证。#7623 (Vladimir Chebotarev)
- 为了防止在未定义的磁盘上丢失数据 part,添加了对不同磁盘上
MergeTree
的额外 part 的检查。#8118 (Vladimir Chebotarev) - 为 Mac 客户端和服务器启用了 SSL 支持。#8297 (Ivan)
- 现在 ClickHouse 可以作为 MySQL federated server 工作 (参见 https://dev.mysqlserver.cn/doc/refman/5.7/en/federated-create-server.html)。#7717 (Maxim Fedotov)
- 现在,只有当 multiquery 开启且 multiline 关闭时,
clickhouse-client
才会启用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
表引擎的不同磁盘上现有 part 的检查。解决了 #7660 问题。#8440 (Vladimir Chebotarev) - 集成了
AWS SDK
用于S3
交互,允许开箱即用地使用所有 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
auth plugin 的 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
表引擎的损坏的 insert 批次。#7933 (Azat Khuzhin) - 向
system.mutations
表添加了包含 mutation 将来必须处理的 part 名称数组的列。#8179 (alesapin) - 处理器并行归并排序优化。#8552 (Nikolai Kochetov)
- 设置
mark_cache_min_lifetime
现在已过时,不起任何作用。在以前的版本中,mark cache 在内存中的增长可能超过mark_cache_size
以容纳mark_cache_min_lifetime
秒内的数据。这导致了混淆和高于预期的内存使用量,这在内存受限的系统上尤其糟糕。如果在安装此版本后看到性能下降,则应增加mark_cache_size
。#8484 (alexey-milovidov) - 准备在所有地方使用
tid
。这是 #7477 所需的。#8276 (alexey-milovidov)
性能改进
- 处理器 pipeline 中的性能优化。#7988 (Nikolai Kochetov)
- 缓存字典中过期 key 的非阻塞更新 (允许读取旧的 key)。#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) - 优化了单列 key 的
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) - 更快的
min
和max
聚合函数,用于Decimal
数据类型。#8144 (Artem Zuikov) - 向量化处理
arrayReduce
。#7608 (Amos Bird) if
链现在被优化为multiIf
。#8355 (kamalov-ruslan)- 修复了 19.15 版本中引入的
Kafka
表引擎的性能回归。修复了 #7261 问题。#7935 (filimonov) - 移除了 Debian 软件包中的
gcc
偶尔默认引入的 "pie" 代码生成。#8483 (alexey-milovidov) - 并行解析数据格式 #6553 (Nikita Mikhaylov)
- 默认启用优化后的带表达式的
Values
解析器 (input_format_values_deduce_templates_of_expressions=1
)。#8231 (tavplubix)
构建/测试/打包改进
- 修复了
ARM
和最小模式下的构建问题。#8304 (proller) - 为
clickhouse-server
添加了 coverage 文件刷新功能,当 std::atexit 未被调用时也会刷新。同时略微改进了带有 coverage 的无状态测试的日志记录。#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.cn/) 的支持,以实现更好的集成测试。#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
以修复内存清理器问题。#7182 #8206 (Alexander Kuzmenkov) - 在非 Linux 系统上启用了内部 MySQL 库,因为使用操作系统软件包非常脆弱,通常根本无法工作。修复了 #5765 问题。#8426 (alexey-milovidov)
- 修复了启用
libc++
后在某些系统上的构建问题。这取代了 #8374。#8380 (alexey-milovidov) - 使
Field
方法更加类型安全,以发现更多错误。#7386 #8209 (Alexander Kuzmenkov) - 将缺失的文件添加到
libc-headers
子模块中。#8507 (alexey-milovidov) - 修复了性能测试输出中错误的
JSON
引号。#8497 (Nikolai Kochetov) - 现在,堆栈跟踪会为
std::exception
和Poco::Exception
显示。在之前的版本中,这仅适用于DB::Exception
。这改进了诊断。#8501 (alexey-milovidov) - 为新的 glibc 版本移植了
clock_gettime
和clock_nanosleep
。#8054 (Amos Bird) - 在开发人员的示例配置中启用了
part_log
。#8609 (alexey-milovidov) - 修复了
01036_no_superfluous_dict_reload_on_create_database*
中重新加载的异步特性。#8111 (Azat Khuzhin) - 修复了编解码器性能测试。#8615 (Vasily Nemkov)
- 为
.tgz
构建添加了安装脚本,并为其添加了文档。#8612 #8591 (alesapin) - 移除了旧的
ZSTD
测试(它创建于 2016 年,用于重现 pre 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)
- 避免 MemorySanitizer 报告来自
libunwind
的数据。#8539 (alexey-milovidov) - 将
libc++
更新到最新版本。#8324 (alexey-milovidov) - 从源代码构建 ICU 库。修复了 #6460 问题。#8219 (alexey-milovidov)
- 从
libressl
切换到openssl
。此更改后,ClickHouse 应支持 TLS 1.3 和 SNI。修复了 #8171 问题。#8218 (alexey-milovidov) - 修复了从 SSL 使用
chacha20_poly1305
时的 UBSan 报告(在连接到 https://yandex.ru/ 时发生)。#8214 (alexey-milovidov) - 修复了
.deb
linux 发行版的默认密码文件的模式。#8075 (proller) - 改进了在
clickhouse-test
中获取clickhouse-server
PID 的表达式。#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) - Release gcc 构建现在使用
libc++
而不是libstdc++
。最近libc++
仅与 clang 一起使用。这将提高构建配置和可移植性的一致性。#8311 (alexey-milovidov) - 为使用 MemorySanitizer 的构建启用 ICU 库。#8222 (alexey-milovidov)
- 抑制了
CapNProto
库的警告。#8224 (alexey-milovidov) - 移除了
tcmalloc
的特殊代码情况,因为它不再受支持。#8225 (alexey-milovidov) - 在 CI coverage 任务中,正常终止服务器,以允许其保存 coverage 报告。这修复了我们最近看到的 coverage 报告不完整的问题。#8142 (alesapin)
- 针对
Float64
和UInt64
值的各种编解码器的性能测试。#8349 (Vasily Nemkov) termcap
已被严重弃用,并导致各种问题(例如,缺少 "up" cap 和回显^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)
- 不要为某些 fat libraries 生成调试信息。#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 服务器,而不仅仅是客户端。#8534 (Vladimir Chebotarev)
- 修复了带有处理器的测试。微小的性能修复。#7672 (Nikolai Kochetov)
- 更新 contrib/protobuf。#8256 (Matwey V. Kornilov)
- 为了准备在新的一年庆祝时切换到 c++20。“愿 C++ 的力量与 ClickHouse 同在。” #8447 (Amos Bird)
实验性功能
- 添加了实验性设置
min_bytes_to_use_mmap_io
。它允许读取大文件,而无需将数据从内核复制到用户空间。默认情况下禁用此设置。建议的阈值约为 64 MB,因为 mmap/munmap 速度较慢。#8520 (alexey-milovidov) - 作为访问控制系统的一部分,重做了配额。添加了新表
system.quotas
、新函数currentQuota
、currentQuotaKey
、新的 SQL 语法CREATE QUOTA
、ALTER QUOTA
、DROP QUOTA
、SHOW QUOTA
。#7257 (Vitaly Baranov) - 允许跳过未知设置并发出警告,而不是抛出异常。#7653 (Vitaly Baranov)
- 作为访问控制系统的一部分,重做了行策略。添加了新表
system.row_policies
、新函数currentRowPolicies()
、新的 SQL 语法CREATE POLICY
、ALTER POLICY
、DROP POLICY
、SHOW CREATE POLICY
、SHOW POLICIES
。#7808 (Vitaly Baranov)
安全修复
- 修复了在使用
File
表引擎的表中读取目录结构的可能性。修复了 #8536 问题。#8537 (alexey-milovidov)