2019 更新日志
ClickHouse 版本 19.17
ClickHouse 版本 19.17.6.36,2019-12-27
缺陷修复
- 修复了
decompress中潜在的缓冲区溢出问题。恶意用户可能传入伪造的压缩数据,从而导致对缓冲区的越界读取。该问题由 Yandex 信息安全团队的 Eldar Zaitov 发现。#8404 (alexey-milovidov) - 修复了在以下情况下可能发生的服务器崩溃(
std::terminate)问题:当服务器无法以 JSON 或 XML 格式发送或写入包含String类型(需要进行 UTF-8 校验)值的数据时,或在使用 Brotli 算法压缩结果数据时,或在其他一些罕见情况下。 #8384 (alexey-milovidov) - 修复了以 ClickHouse 中的
VIEW作为源的固定字典,现在读取此类字典时不会再触发There is no query错误。#8351 (Nikolai Kochetov) - 修复了根据 users.xml 中指定的 host_regexp 判断客户端主机是否被允许的逻辑。#8241, #8342 (Vitaly Baranov)
- 现在,对分布式表执行
RENAME TABLE时,会在将数据发送到分片之前,先重命名包含已插入数据的目录。这样修复了连续重命名tableA->tableB、tableC->tableA时出现的问题。 #8306 (tavplubix) - 通过 DDL 查询创建的
range_hashed外部字典现在允许使用任意数值类型的区间。#8275 (alesapin) - 修复了
INSERT INTO table SELECT ... FROM mysql(...)表函数。#8234(tavplubix) - 修复了在向不存在的文件中执行
INSERT INTO TABLE FUNCTION file()时出现的段错误。现在在这种情况下会先创建该文件,然后再处理插入操作。#8177 (Olga Khvostikova) - 修复了在聚合 bitmap 与标量 bitmap 求交时出现的 bitmapAnd 错误。 #8082 (Yue Huang)
- 修复了当
EXISTS查询未带TABLE或DICTIONARY限定符(如EXISTS t)时导致的段错误。 #8213 (alexey-milovidov) - 在参数可为空的情况下,修正了函数
rand和randConstant的返回类型。现在这些函数始终返回UInt32,而不会返回Nullable(UInt32)。 #8204 (Nikolai Kochetov) - 修复了
DROP DICTIONARY IF EXISTS db.dict,现在即使db不存在也不会抛出异常。 #8185 (Vitaly Baranov) - 如果由于服务器崩溃导致表未完全删除,服务器将尝试恢复并加载该表 #8176 (tavplubix)
- 修复了在分布式表上执行简单的 count 查询时,当存在两个以上分片本地表时的问题。 #8164 (小路)
- 修复了
DB::BlockStreamProfileInfo::calculateRowsBeforeLimit()中导致数据竞争的问题 #8143 (Alexander Kazakov) - 修复了在合并指定分片后立即执行的
ALTER table MOVE part,该问题可能会导致移动指定分片被合并到的目标分片。现在它会正确地只移动指定的分片。 #8104 (Vladimir Chebotarev) - 现在可以将字典的表达式指定为字符串。对于在从非 ClickHouse 数据源提取数据时计算属性的场景,这非常有用,因为它允许为这些表达式使用非 ClickHouse 语法。#8098 (alesapin)
- 修复了
clickhouse-copier中由于 ZXid 溢出而导致的一个极其罕见的竞争条件。 #8088 (Ding Xiang Fei) - 修复了一个错误:在查询失败之后(例如由于 "Too many simultaneous queries"),不会读取外部表信息;随后下一个请求会将这些信息解释为下一条查询的开头,从而引发类似
Unknown packet from client的错误。 #8084 (Azat Khuzhin) - 避免在出现 "Unknown packet X from server" 错误时发生空指针解引用 #8071 (Azat Khuzhin)
- 恢复对所有 ICU 区域设置的支持,新增对常量表达式应用排序规则的支持,并在 system.collations 表中添加语言名称。 #8051 (alesapin)
- 现在对从
StorageFile和StorageHDFS读取时的读取流数量进行了限制,以避免内存超限。#7981 (alesapin) - 修复了在无主键的
*MergeTree表上执行的CHECK TABLE查询。 #7979 (alesapin) - 在没有 mutations 的情况下,从 part 名称中移除了 mutation 编号。此更改提升了与旧版本的兼容性。#8250 (alesapin)
- 修复了一个 bug:由于某些已附加 part 的
data_version大于表的 mutation 版本,导致这些 part 的变更被跳过。 #7812 (Zhichang Yu) - 允许在将数据分片移动到其他设备后,即使存在冗余副本也能启动服务器。 #7810 (Vladimir Chebotarev)
- 修复了在使用聚合函数列时可能出现的错误 “Sizes of columns does not match”。 #7790 (Boris Granveaud)
- 现在,如果将 WITH TIES 与 LIMIT BY 一起使用,将会抛出异常。现在也可以将 TOP 与 LIMIT BY 一起使用。#7637 (Nikita Mikhaylov)
- 修复在字典配置了
invalidate_query时的重载问题,该问题会导致更新停止,并在之前的更新尝试中抛出异常。 #8029 (alesapin)
ClickHouse 版本 19.17.4.11,2019-11-22
向后不兼容的变更
- 为了获得更好的性能,使用列而不是 AST 来存储标量子查询结果。在 19.17 中新增了设置
enable_scalar_subquery_optimization,且默认开启。这会在从早期版本升级到 19.17.2 或 19.17.3 时导致类似这里的错误。此设置在 19.17.4 中默认改为禁用,以便可以从 19.16 及更早版本无错误地升级。 #7392 (Amos Bird)
新功能
- 支持使用 DDL 查询创建字典。#7360 (alesapin)
- 使
bloom_filter类型索引支持LowCardinality和Nullable。#7363 #7561 (Nikolai Kochetov) - 添加函数
isValidJSON,用于检查传入字符串是否为有效的 JSON。#5910 #7293 (Vdimir) - 实现
arrayCompact函数。#7328 (Memo) - 新增用于 Decimal 数字的函数
hex。其行为类似于hex(reinterpretAsString()),但不会删除末尾的零字节。#7355 (Mikhail Korotov) - 添加
arrayFill和arrayReverseFill函数,它们会将数组中的元素替换为其前/后面的其他元素。#7380 (hcz) - 添加对
CRC32IEEE()/CRC64()的支持。#7480 (Azat Khuzhin) - 实现与 MySQL 中类似的
char函数。#7486 (sundyli) - 添加
bitmapTransform函数。它将 bitmap 中的一组值转换为另一组值,结果为一个新的 bitmap。#7598 (Zhichang Yu) - 实现
javaHashUTF16LE()函数。#7651 (achimbab) - 为 Distributed 引擎添加
_shard_num虚拟列。#7624 (Azat Khuzhin)
实验性功能
- 在
MergeTree中支持处理器(新的查询执行管道)。 #7181 (Nikolai Kochetov)
Bug 修复
- 修复
Values中的浮点数解析错误 #7817 #7870 (tavplubix) - 修复在启用
trace_log时可能发生的罕见死锁。#7838 (filimonov) - 在向存在任意从其读取的物化视图(MV)的 Kafka 表写入数据时,防止消息重复 #7265 (Ivan)
- 在
IN中添加对Array(LowCardinality(Nullable(String)))的支持。解决 #7364 #7366(achimbab) - 在 ODBC Bridge 中新增对
SQL_TINYINT和SQL_BIGINT的处理,并修复对SQL_FLOAT数据源类型的处理。#7491 (Denis Glazachev) - 修复对空 decimal 列进行聚合(
avg和分位数)时的问题 #7431(Andrey Konyaev) - 修复对包含
MATERIALIZED列的 Distributed 表执行INSERT时的问题 #7377 (Azat Khuzhin) - 当分区的部分数据已在目标磁盘或卷上时,使
MOVE PARTITION也能正常工作 #7434 (Vladimir Chebotarev) - 修复了在多磁盘配置中,
ReplicatedMergeTree在执行 mutation 过程中创建硬链接失败的问题。 #7558 (Vladimir Chebotarev) - 修复了在 MergeTree 上执行 mutation 时,如果整个 part 保持不变且在另一块磁盘上寻找最佳存储位置时出现的 bug #7602 (Vladimir Chebotarev)
- 修复了未能从磁盘配置中读取
keep_free_space_ratio的问题 #7645 (Vladimir Chebotarev) - 修复当表只包含
Tuple列或具有复杂路径的列时出现的 bug。修复了 7541。#7545(alesapin) - 不要在
max_memory_usage限制中将 Buffer 引擎的内存计入统计 #7552 (Azat Khuzhin) - 修复按
tuple()排序的MergeTree表中最终标记的使用方式。在极少数情况下,这可能会在执行查询时导致Can't adjust last granule错误。 #7639 (Anton Popov) - 修复在带有谓词且该谓词包含需要上下文的操作(例如 JSON 函数)的 mutation 中的错误,该错误可能导致崩溃或奇怪的异常。 #7664 (alesapin)
- 修复
data/和shadow/目录中数据库和表名转义规则不一致的问题 #7575 (Alexander Burmak) - 在 RIGHT|FULL JOIN 中支持重复键,例如
ON t.x = u.x AND t.x = u.y。修复此情况下的崩溃问题。#7586 (Artem Zuikov) - 修复在使用 RIGHT 或 FULL JOIN 按表达式进行 JOIN 时出现的
Not found column <expression> in block问题。#7641 (Artem Zuikov) - 再次尝试修复
PrettySpace格式中的死循环 #7591 (Olga Khvostikova) - 修复
concat函数在所有参数都是相同大小的FixedString类型时的错误。 #7635 (alesapin) - 修复了在使用单个参数定义 S3、URL 和 HDFS 存储时出现的异常。#7618 (Vladimir Chebotarev)
- 修复带查询视图的 InterpreterSelectQuery 作用域问题 #7601 (Azat Khuzhin)
改进
- 通过 ODBC-bridge 正确识别
Nullable列并正确处理 NULL 值 #7402 (Vasily Nemkov) - 以原子方式写入当前批次数据用于分布式发送 #7600 (Azat Khuzhin)
- 如果无法在查询中根据列名检测到对应的表,则抛出异常。#7358 (Artem Zuikov)
- 在
MergeTreeSettings中添加merge_max_block_size设置 #7412 (Artem Zuikov) - 带有
HAVING但没有GROUP BY的查询会假定按常量分组。因此,现在SELECT 1 HAVING 1会返回结果。#7496 (Amos Bird) - 支持像 python 一样将
(X,)解析为元组。#7501, #7562 (Amos Bird) - 使
range函数的行为尽可能接近 python 风格。#7518 (sundyli) - 为表
system.settings添加constraints列 #7553 (Vitaly Baranov) - 改进 tcp handler 的 Null 格式,因此可以通过 clickhouse-client 使用
select ignore(<expression>) from table format Null来进行性能测量 #7606 (Amos Bird) - 类似
CREATE TABLE ... AS (SELECT (1, 2))的查询现在可以被正确解析 #7542 (hcz)
性能改进
- 提升了针对短字符串键的聚合性能。#6243 (Alexander Kuzmenkov, Amos Bird)
- 再执行一轮语法/表达式分析,以便在常量谓词折叠之后发现潜在的优化机会。#7497 (Amos Bird)
- 使用存储元信息来评估简单的
SELECT count() FROM table;#7510 (Amos Bird, alexey-milovidov) - 向量化处理
arrayReduce,方式类似于 Aggregator 的addBatch。#7608 (Amos Bird) - 对
Kafka消费性能进行若干小幅改进 #7475 (Ivan)
构建/测试/打包改进
- 增加对交叉编译为 AARCH64 CPU 架构的支持。重构打包脚本。#7370 #7539 (Ivan)
- 在构建包时,将 darwin-x86_64 和 linux-aarch64 工具链解压到挂载的 Docker 卷中 #7534 (Ivan)
- 更新二进制打包器(Binary Packager)的 Docker 镜像 #7474 (Ivan)
- 修复在 macOS Catalina 上的编译错误 #7585 (Ernest Poletaev)
- 对查询分析逻辑进行部分重构:将复杂类拆分为多个简单类。#7454 (Artem Zuikov)
- 修复在不包含子模块时的构建问题 #7295 (proller)
- 改进 CMake 文件中的
add_globs#7418 (Amos Bird) - 删除
unwind目标中硬编码的路径 #7460 (Konstantin Podshumok) - 允许在不使用 SSL 的情况下使用 MySQL 格式 #7524 (proller)
其他
- 为 ClickHouse SQL 方言新增 ANTLR4 语法规则 #7595 #7596 (alexey-milovidov)
ClickHouse Release 19.16
ClickHouse Release 19.16.14.65, 2020-03-25
- 修复了在对多参数(三元)逻辑运算符(参数数量大于 10)进行批量计算时的一个错误。#8718(Alexander Kazakov)该错误修复根据 Altinity 的特别请求回溯移植到了 19.16 版本。
ClickHouse Release 19.16.14.65, 2020-03-05
- 修复了分布式子查询与旧版 CH 不兼容的问题。修复 #7851 (tabplubix)
- 在执行
CREATE查询时,对存储引擎参数中的常量表达式进行折叠。将空的数据库名替换为当前数据库。修复 #6508、#3492。同时修复了在ClickHouseDictionarySource中检查本地地址的问题。 #9262 (tabplubix) - 现在,
*MergeTree表引擎族中的后台合并操作,能够更精确地保持存储策略各卷的顺序。 #8549(Vladimir Chebotarev) - 防止在极少数情况下,在读取后缀之后但在提交之前抛出异常时导致
Kafka中数据丢失。修复 #9378。相关问题:#7175 #9507 (filimonov) - 修复了当尝试使用/删除使用错误参数创建的
Kafka表时,会导致服务器终止的错误。修复 #9494。合并了 #9507。 #9513 (filimonov) - 允许在
Kafka表之上的子查询中使用MaterializedView。 #8197(filimonov)
新功能
- 新增
deduplicate_blocks_in_dependent_materialized_views选项,用于控制向带有物化视图的表进行幂等插入时的行为。该新特性根据 Altinity 的特别请求被加入到了此错误修复版本中。 #9070 (urykhy)
ClickHouse Release 19.16.2.2, 2019-10-30
向后不兼容变更
- 为 count/counIf 补充缺失的参数个数(arity)校验。 #7095 #7298(Vdimir)
- 移除已废弃的
asterisk_left_columns_only设置(默认已禁用)。 #7335(Artem Zuikov) - Template 数据格式所使用的格式字符串现在需在文件中进行指定。 #7118 (tavplubix)
新功能
- 引入
uniqCombined64(),用于计算大于UINT_MAX的基数。 #7213, #7222 (Azat Khuzhin) - 支持在
Array列上使用 Bloom 过滤器索引。 #6984 (achimbab) - 新增函数
getMacro(name),返回服务器配置中对应<macros>的值,类型为String。 #7240 (alexey-milovidov) - 为基于 HTTP 源的字典设置两个配置项:
credentials和http-headers。 #7092 (Guillaume Tassery) - 新增
ProfileEventMerge,用于统计启动的后台合并次数。 #7093 (Mikhail Korotov) - 新增
fullHostName函数,返回完全限定域名(FQDN)。 #7263 #7291 (sundyli) - 新增函数
arraySplit和arrayReverseSplit,用于按照“切断”条件拆分数组。 它们在处理时间序列时非常有用。 #7294 (hcz) - 新增函数,用于在
multiMatch系列函数中返回所有匹配索引组成的Array。 #7299 (Danila Kutenin) - 新增数据库引擎
Lazy,针对存储大量小型Log引擎表进行了优化。 #7171 (Nikita Vasilev) - 为 bitmap 列新增聚合函数
groupBitmapAnd、groupBitmapOr、groupBitmapXor。 #7109 (Zhichang Yu) - 新增聚合函数组合子
-OrNull和-OrDefault,在没有可聚合数据时返回null或默认值。 #7331 (hcz) - 引入
CustomSeparated数据格式,支持自定义转义和 分隔符规则。 #7118 (tavplubix) - 支持使用 Redis 作为外部字典的数据源。 #4361 #6962 (comunodi, Anton Popov)
Bug 修复
- 修复在查询包含
WHERE IN (SELECT ...)子句且使用optimize_read_in_order时得到错误查询结果的问题。#7371(Anton Popov) - 禁用依赖于项目外部文件的 MariaDB 身份验证插件。 #7140(Yuriy Baranov)
- 修复在使用函数
now(),today(),yesterday(),randConstant()时,极少数情况下可能出现的异常:Cannot convert column ... because it is constant but values of constants are different in source and result。 #7156(Nikolai Kochetov) - 修复使用 HTTP keep alive 超时时间而非 TCP keep alive 超时时间的问题。 #7351(Vasily Nemkov)
- 修复在 groupBitmapOr 中的段错误(问题 #7109)。 #7289(Zhichang Yu)
- 对于物化视图,在所有数据写入完成后才对 Kafka 执行提交操作。 #7175(Ivan)
- 修复
system.part_log表中错误的duration_ms值。原来的值偏差了十倍。 #7172(Vladimir Chebotarev) - 快速修复 LIVE VIEW 表中的崩溃问题,并重新启用所有 LIVE VIEW 测试。 #7201 (vzakaznikov)
- 在 MergeTree 数据片段的 min/max 索引中正确序列化 NULL 值。 #7234(Alexander Kuzmenkov)
- 当通过
CREATE TABLE AS创建表时,不再将虚拟列写入 .sql 元数据。 #7183(Ivan) - 修复在执行
ATTACH PART查询时发生的段错误。 #7185 (alesapin) - 修复由于对空 IN 子查询和空 INNER/RIGHT JOIN 的优化导致某些查询返回错误结果的问题。 #7284(Nikolai Kochetov)
- 修复 LIVE VIEW 的 getHeader() 方法中的 AddressSanitizer 错误。 #7271 (vzakaznikov)
改进
- 在发生
queue_wait_max_ms等待时添加一条消息。 #7390 (Azat Khuzhin) - 将
s3_min_upload_part_size设置改为表级别。 #7059 (Vladimir Chebotarev) - 在 StorageFactory 中检查 TTL。 #7304 (sundyli)
- 在部分合并连接(partial merge join)中合并左侧数据块(优化)。 #7122 (Artem Zuikov)
- 不允许在 Replicated 表引擎的 mutation 中使用非确定性函数,因为这可能会在副本之间引入不一致。 #7247 (Alexander Kazakov)
- 在将异常堆栈跟踪转换为字符串时禁用内存追踪器。这样可以防止服务端类型为
Memory limit exceeded的错误消息丢失,否则可能会在客户端引发Attempt to read after eof异常。 #7264 (Nikolai Kochetov) - 各种格式改进。解决了 #6033, #2633, #6611, #6742 #7215 (tavplubix)
- ClickHouse 会忽略 IN 运算符右侧中无法转换为左侧类型的值。现在这一行为已对复合类型(
Array和Tuple)也能正确生效。 #7283 (Alexander Kuzmenkov) - 为 ASOF JOIN 支持缺失的不等式。现在可以在 ON 语法中,对 ASOF 列使用“小于等于”变体以及严格“大于”和“小于”变体来进行连接。 #7282 (Artem Zuikov)
- 优化 partial merge join。 #7070 (Artem Zuikov)
- 在
uniqCombined函数中不使用超过 98K 的内存。 #7236, #7270 (Azat Khuzhin) - 在 PartialMergeJoin 中将右侧连接表的部分数据刷写到磁盘(如果内存不足),并在需要时再将数据加载回来。 #7186 (Artem Zuikov)
性能改进
- 通过避免数据复制,加速带常量参数的
joinGet。 #7359 (Amos Bird) - 如果子查询为空则提前返回。 #7007 (小路)
- 优化
Values中 SQL 表达式的解析。 #6781 (tavplubix)
构建/测试/打包改进
- 在针对 Mac OS 的交叉编译中禁用部分 contrib 组件。 #7101 (Ivan)
- 为 clickhouse_common_io 补充缺失的 PocoXML 链接。 #7200 (Azat Khuzhin)
- 在 clickhouse-test 中支持多个测试过滤参数。 #7226 (Alexander Kuzmenkov)
- 在 ARM 平台上启用 musl 和 jemalloc。#7300 (Amos Bird)
- 为
clickhouse-test新增--client-option参数,以便向客户端传递额外参数。 #7277 (Nikolai Kochetov) - 升级 RPM 软件包时保留现有配置。 #7103 (filimonov)
- 修复由 PVS 检测到的错误。 #7153 (Artem Zuikov)
- 修复 Darwin 平台上的构建。 #7149 (Ivan)
- glibc 2.29 兼容性。 #7142 (Amos Bird)
- 确保
dh_clean不会清理潜在的源文件。 #7205 (Amos Bird) - 尝试在从 Altinity RPM 更新时避免冲突——其配置文件被单独打包在 clickhouse-server-common 中。#7073 (filimonov)
- 优化部分头文件以缩短重建时间。 #7212, #7231 (Alexander Kuzmenkov)
- 为 Date 和 DateTime 添加性能测试。 #7332 (Vasily Nemkov)
- 修复了一些包含非确定性变更操作的测试。 #7132 (Alexander Kazakov)
- 在 CI 中添加启用 MemorySanitizer 的构建。#7066 (Alexander Kuzmenkov)
- 避免在 MetricsTransmitter 中使用未初始化的值。 #7158 (Azat Khuzhin)
- 修复了 MemorySanitizer 在 Fields 中发现的若干问题。 #7135, #7179 (Alexander Kuzmenkov), #7376 (Amos Bird)
- 修复 MurmurHash32 中的未定义行为。 #7388 (Amos Bird)
- 修复 StoragesInfoStream 中的未定义行为。 #7384 (tavplubix)
- 修复了外部数据库引擎(MySQL、ODBC、JDBC)的常量表达式折叠问题。在之前的版本中,对多个常量表达式的折叠不起作用,并且对 Date、DateTime 和 UUID 完全无效。本次修复对应 #7245 #7252 (alexey-milovidov)
- 修复在 LIVE VIEW 中访问 no_users_thread 变量时出现的 ThreadSanitizer 数据竞争错误。 #7353 (vzakaznikov)
- 在 libcommon 中移除 malloc 符号 #7134, #7065 (Amos Bird)
- 添加全局标志位 ENABLE_LIBRARIES,用于禁用所有库。 #7063 (proller)
代码清理
- 将配置仓库通用化,为 Dictionaries 的 DDL 做准备。#7155 (alesapin)
- 为 Dictionaries 的 DDL 实现一个不带任何语义的解析器。 #7209 (alesapin)
- 将 ParserCreateQuery 拆分为多个更小的解析器。 #7253 (alesapin)
- 在与 external dictionaries 相关的代码附近进行了一些小的重构和重命名。 #7111 (alesapin)
- 重构部分代码,为基于角色的访问控制做准备。#7235 (Vitaly Baranov)
- 对 DatabaseOrdinary 代码进行了一些改进。 #7086 (Nikita Vasilev)
- 在哈希表的 find() 和 emplace() 方法中不再使用迭代器。 #7026 (Alexander Kuzmenkov)
- 修复在参数 root 非空情况下 getMultipleValuesFromConfig 的行为。#7374 (Mikhail Korotov)
- 移除一些重复代码(TemporaryFile 和 TemporaryFileStream)。 #7166 (Artem Zuikov)
- 略微提升代码可读性(
MergeTreeData::getActiveContainingPart)。 #7361 (Vladimir Chebotarev) - 当
ThreadPool::schedule(...)抛出异常时,等待所有已调度且使用本地对象的任务完成。将ThreadPool::schedule(...)重命名为ThreadPool::scheduleOrThrowOnError(...),并修正注释以明确其可能抛出异常。 #7350 (tavplubix)
ClickHouse 发行版 19.15
ClickHouse 发行版 19.15.4.10,2019-10-31
Bug 修复
- 在 ODBC Bridge 中新增对 SQL_TINYINT 和 SQL_BIGINT 的处理,并修复了对 SQL_FLOAT 数据源类型的处理。 #7491 (Denis Glazachev)
- 允许在执行 MOVE PARTITION 时,部分数据部分位于目标磁盘或卷上。 #7434 (Vladimir Chebotarev)
- 修复了通过 ODBC bridge 在可为 NULL 的列中处理 NULL 值的问题。 #7402 (Vasily Nemkov)
- 修复了向非本地节点上的 Distributed 表插入包含 MATERIALIZED 列的数据时的问题。 #7377 (Azat Khuzhin)
- 修复了函数 getMultipleValuesFromConfig。 #7374 (Mikhail Korotov)
- 修复了使用 HTTP keep alive 超时时间而不是 TCP keep alive 超时时间的问题。 #7351 (Vasily Nemkov)
- 在发生异常时等待所有任务完成(修复罕见的段错误)。 #7350 (tavplubix)
- 向 Kafka 表插入数据时不再推送到物化视图(MVs)。 #7265 (Ivan)
- 为异常栈禁用内存跟踪器。 #7264 (Nikolai Kochetov)
- 修复了为外部数据库转换查询时的不正确代码。 #7252 (alexey-milovidov)
- 避免在 MetricsTransmitter 中使用未初始化的值。 #7158 (Azat Khuzhin)
- 添加了带宏的测试用示例配置。 (alexey-milovidov)
ClickHouse 发行版 19.15.3.6,2019-10-09
Bug 修复
- 修复了哈希字典中的 bad_variant。 (alesapin)
- 修复了 ATTACH PART 查询中导致段错误的 bug。 (alesapin)
- 修复了
MergeTreeData中的时间计算。 (Vladimir Chebotarev) - 在写入完成后显式提交到 Kafka。 #7175 (Ivan)
- 在 MergeTree 数据部分的 min/max 索引中正确序列化 NULL 值。 #7234 (Alexander Kuzmenkov)
ClickHouse 发行版 19.15.2.2,2019-10-01
新特性
- 分层存储:支持为使用 MergeTree 引擎的表配置多个存储卷。可以将最新数据存储在 SSD 上,并自动将旧数据迁移到 HDD。(示例)。#4918 (Igr) #6489 (alesapin)
- 添加表函数
input,用于在INSERT SELECT查询中读取输入数据。 #5450 (palasonic1) #6832 (Anton Popov) - 新增
sparse_hashed字典布局,该布局在功能上等同于hashed布局,但更节省内存。在取值速度变慢的代价下,内存占用约为后者的一半。 #6894 (Azat Khuzhin) - 实现可为字典配置访问用户列表的功能。仅对当前连接的数据库生效。 #6907 (Guillaume Tassery)
- 为
SHOW查询添加LIMIT选项。 #6944 (Philipp Malkovsky) - 添加
bitmapSubsetLimit(bitmap, range_start, limit)函数,该函数返回集合中不小于range_start的、按值从小到大排列的最小limit个值的子集。 #6957 (Zhichang Yu) - 添加
bitmapMin和bitmapMax函数。 #6970 (Zhichang Yu) - 添加与 issue-6648 相关的函数
repeat。 #6999 (flynn)
实验特性
- 实现一种不会改变当前流水线的(内存中)Merge Join 变体。结果按合并键部分排序。将
partial_merge_join设为1以使用此特性。Merge Join 仍在开发中。 #6940 (Artem Zuikov) - 新增
S3引擎和表函数。该功能仍在开发中(尚不支持身份验证)。 #5596 (Vladimir Chebotarev)
改进
- 从 Kafka 读取的每条消息都会以原子方式插入。这解决了几乎所有已知的 Kafka engine 问题。#6950 (Ivan)
- 改进 Distributed 查询的故障切换。缩短恢复时间,同时现在可以进行配置,并且可在
system.clusters中查看。#6399 (Vasily Nemkov) - 在
IN子句中直接支持 Enums 的数值形式。#6766 #6941 (dimarub2000) - 为 URL 存储新增(可选的,默认禁用)重定向支持。#6914 (maqroll)
- 当使用较旧版本的客户端连接到服务器时,添加提示信息。#6893 (Philipp Malkovsky)
- 移除在 Distributed 表中发送数据时的最大退避等待时间限制。#6895 (Azat Khuzhin)
- 支持向 Graphite 发送带有累积值的 profile events(计数器)。可以在服务器
config.xml中的<events_cumulative>下启用。#6969 (Azat Khuzhin) - 在通过 HTTP 以 Native 格式向
LowCardinality(T)类型的列插入数据时,自动将类型T转换为LowCardinality(T)。#6891 (Nikolai Kochetov) - 在对
Float32、Float64使用函数hex时,无需再使用reinterpretAsString。#7024 (Mikhail Korotov)
构建/测试/打包改进
- 为带有调试信息的 ClickHouse 可执行文件添加 gdb-index,这将加快
gdb的启动时间。#6947 (alesapin) - 使用打过补丁并使用
pigz的 dpkg-deb 来加速 deb 打包。#6960 (alesapin) - 设置
enable_fuzzing = 1,以启用对整个项目代码的 libfuzzer 插桩。#7042 (kyprizel) - 在 CI 中新增拆分构建的冒烟测试。#7061 (alesapin)
- 在 CI 中新增使用 MemorySanitizer 的构建。#7066 (Alexander Kuzmenkov)
- 将
libsparsehash替换为sparsehash-c11。#6965 (Azat Khuzhin)
Bug 修复
- 修复了在大表上对复杂键进行索引分析时的性能下降问题。这修复了 #6924。#7075 (alexey-milovidov)
- 修复了在从空的 Kafka 主题进行查询时导致段错误的逻辑错误。#6909 (Ivan)
- 修复了在
MySQLBlockInputStream.cpp中过早关闭 MySQL 连接的问题。#6882 (Clément Rodriguez) - 恢复了对非常旧的 Linux 内核的支持(修复 #6841)。#6853 (alexey-milovidov)
- 修复了在输入流中存在空块时,
insert select查询可能导致数据丢失的问题。#6834 #6862 #6911 (Nikolai Kochetov) - 修复了函数
АrrayEnumerateUniqRanked在参数包含空数组时的问题。#6928 (proller) - 修复了包含 ARRAY JOIN 和全局子查询的复杂查询的问题。#6934 (Ivan)
- 修复了在包含多个 JOIN 的 ORDER BY 和 GROUP BY 中出现的
Unknown identifier错误。#7022 (Artem Zuikov) - 修复了在执行带有
LowCardinality参数的函数时出现的MSan警告。#7062 (Nikolai Kochetov)
向后不兼容的变更
- 修改了 bitmap* 聚合函数状态的序列化格式以提升性能。先前版本中序列化得到的 bitmap* 状态将无法读取。#6908 (Zhichang Yu)
ClickHouse 版本 19.14
ClickHouse 版本 19.14.7.15,2019-10-02
Bug 修复
- 此版本还包含来自 19.11.12.69 的所有 bug 修复。
- 修复了 19.14 与更早版本之间分布式查询的兼容性。修复了 #7068。#7069(alexey-milovidov)
ClickHouse 版本 19.14.6.12,2019-09-19
Bug 修复
- 修复了函数
АrrayEnumerateUniqRanked在参数为空数组时的问题。#6928(proller) - 修复了在带有
ARRAY JOIN和带别名的GLOBAL IN subquery的查询中子查询名称的问题。如果指定了子查询别名,则将其用作外部表名。#6934(Ivan)
构建/测试/打包 改进
- 通过将测试改写为 shell 脚本,修复了不稳定(flapping)的测试
00715_fetch_merged_or_mutated_part_zookeeper,因为它需要等待变更(mutation)生效。#6977(Alexander Kazakov) - 修复了函数
groupUniqArray在空数组参数情况下的 UBSan 和 MemSan 失败。问题是由于将空的PaddedPODArray放入哈希表的第 0 个单元格,而该单元格值的构造函数未被调用所导致。#6937(Amos Bird)
ClickHouse 版本 19.14.3.3,2019-09-10
新功能
ORDER BY的WITH FILL修饰符。(#5069 的后续)#6610(Anton Popov)- 为
LIMIT增加WITH TIES修饰符。(#5069 的延续) #6610 (Anton Popov) - 在设置
format_csv_unquoted_null_literal_as_null=1时,将未加引号的NULL字面量解析为 NULL。若该字段的数据类型不可为空(非 Nullable 类型),在设置input_format_null_as_default=1时,将 NULL 字段初始化为默认值。 #5990 #6055 (tavplubix) - 在表函数
file和hdfs的路径中支持使用通配符。如果路径包含通配符,则该表将为只读。用法示例:select * from hdfs('hdfs://hdfs1:9000/some_dir/another_dir/*/file{0..9}{0..9}')和select * from file('some_dir/{some_file,another_file,yet_another}.tsv', 'TSV', 'value UInt32')。 #6092 (Olga Khvostikova) - 新的
system.metric_log表,用于以指定的时间间隔存储system.events和system.metrics的值。 #6363 #6467 (Nikita Mikhaylov) #6530 (alexey-milovidov) - 支持将 ClickHouse 文本日志写入
system.text_log表。 #6037 #6103 (Nikita Mikhaylov) #6164 (alexey-milovidov) - 在堆栈跟踪中显示私有符号(通过解析 ELF 文件的符号表实现)。如果存在调试信息,在堆栈跟踪中增加文件名和行号信息。通过为程序中存在的符号建立索引来加速符号名称查找。新增用于自省的 SQL 函数:
demangle和addressToLine。为保持一致性,将函数symbolizeAddress重命名为addressToSymbol。出于性能原因,函数addressToSymbol将返回 mangled 符号名,用户需要自行调用demangle。新增设置allow_introspection_functions,默认关闭。 #6201 (alexey-milovidov) - 表函数
values(函数名不区分大小写)。它支持从在 #5984 中提出的VALUES列表中读取数据。示例:SELECT * FROM VALUES('a UInt64, s String', (1, 'one'), (2, 'two'), (3, 'three'))。#6217。#6209(dimarub2000) - 现在可以修改存储设置。语法:
ALTER TABLE <table> MODIFY SETTING <setting> = <value>。#6366 #6669 #6685 (alesapin) - 支持删除已分离的 part。语法:
ALTER TABLE <table_name> DROP DETACHED PART '<part_id>'。#6158 (tavplubix) - 表约束。允许在表定义中添加约束条件,并在插入数据时进行检查。#5273 (Gleb Novikov) #6652 (alexey-milovidov)
- 支持级联物化视图. #6324 (Amos Bird)
- 默认启用查询性能分析器,使其每秒对每个查询执行线程采样一次。 #6283 (alexey-milovidov)
- 输入格式为
ORC。 #6454 #6703 (akonyaev90) - 添加了两个新函数:
sigmoid和tanh(对机器学习应用很有用)。#6254 (alexey-milovidov) - 函数
hasToken(haystack, token)、hasTokenCaseInsensitive(haystack, token)用于检查给定的 token 是否存在于 haystack 中。Token 是指位于两个非字母数字的 ASCII 字符(或 haystack 边界)之间、长度尽可能长的子字符串。Token 必须是常量字符串。支持 tokenbf_v1 索引特化。#6596、#6662(Vasily Nemkov) - 新函数
neighbor(value, offset[, default_value])。用于在一个数据块中访问同一列中的前/后相邻值。 #5925 (Alex Krash) 6685365ab8c5b74f9650492c88a012596eb1b0c6 341e2e4587a18065c2da1ca888c73389f48ce36c Alexey Milovidov - 创建了函数
currentUser(),用于返回当前已认证用户的登录名。为兼容 MySQL,添加了别名user()。 #6470 (Alex Krash) - 新增了聚合函数
quantilesExactInclusive和quantilesExactExclusive,这些函数最初在 #5885 中被提出。#6477 (dimarub2000) - 函数
bitmapRange(bitmap, range_begin, range_end)返回一个在指定范围内的新集合(不包含range_end)。#6314 (Zhichang Yu) - 函数
geohashesInBox(longitude_min, latitude_min, longitude_max, latitude_max, precision)会创建一个由长度为precision的 geohash 网格框字符串组成的数组,用于覆盖指定区域。 #6127 (Vasily Nemkov) - 为
Kafka表实现对 INSERT 查询的支持。 #6012 (Ivan) - 为 Kafka 引擎新增对
_partition和_timestamp虚拟列的支持。 #6400 (Ivan) - 支持使用基于正则表达式的规则,从
query_log、服务器日志和进程列表中移除敏感数据。 #5710 (filimonov)
实验性功能
Template输入和输出数据格式。它允许为输入和输出指定自定义格式字符串。#4354 #6727 (tavplubix)- 实现
LIVE VIEW表,该功能最初在 #2898 中提出,在 #3925 中进行了准备,并在 #5541 中更新。详细说明请参见 #5541。#5541 (vzakaznikov) #6425 (Nikolai Kochetov) #6656 (vzakaznikov) 请注意,LIVE VIEW功能可能会在后续版本中移除。
Bug 修复
- 本次发布还包含 19.13 和 19.11 中的所有错误修复。
- 修复当表包含跳过索引且发生垂直合并时出现的段错误问题。 #6723 (alesapin)
- 修复在存在复杂列默认值时的按列 TTL 行为。此前,在使用带有
OPTIMIZE ... FINAL的查询强制执行 TTL 合并时,过期的值会被类型默认值替换,而不是用户指定的列默认值。#6796(Anton Popov) - 在服务器正常重启时修复 Kafka 消息重复的问题。 #6597 (Ivan)
- 修复读取 Kafka 消息时出现的无限循环问题。在订阅时完全不要对 consumer 执行暂停/恢复操作——否则在某些场景下它可能会被无限期暂停。#6354 (Ivan)
- 修复
bitmapContains函数中出现的Key expression contains comparison between inconvertible types异常。#6136 #6146 #6156 (dimarub2000) - 修复在启用
optimize_skip_unused_shards且缺少分片键时出现的段错误。 #6384 (Anton Popov) - 修复了 mutation 中可能导致内存损坏的错误代码。修复了由于并发执行
DROP TABLE和从system.parts或system.parts_columns中执行SELECT而可能发生的读取地址0x14c0的段错误(segfault)。修复了在准备 mutation 查询时出现的竞争条件(race condition)。修复了由于对 Replicated 表执行OPTIMIZE与 ALTER 等并发修改操作导致的死锁(deadlock)。 #6514 (alexey-milovidov) - 移除 MySQL 接口中过于冗长的日志输出 #6389 (alexey-milovidov)
- 恢复在配置文件中将 'true' 和 'false' 解析为布尔设置的功能。 #6278 (alesapin)
- 修复在
Nullable(Decimal128)上使用quantile和median函数时出现的崩溃问题。 #6378 (Artem Zuikov) - 修复了在主键上带有
WHERE条件且对其进行了 Float 类型转换的SELECT查询可能返回不完整结果的问题。该问题是由于toFloat函数中对单调性的检查不正确所致。 #6248 #6374 (dimarub2000) - 检查用于 mutation 操作的
max_expanded_ast_elements设置。在执行TRUNCATE TABLE后清理 mutation。 #6205 (Winter Zhang) - 修复在使用
join_use_nulls时键列 JOIN 结果的问题,将列默认值改为填充为 NULL。#6249 (Artem Zuikov) - 修复了在垂直合并和 ALTER 操作中使用 skip 索引时的问题。修复了
Bad size of marks file异常。#6594 #6713 (alesapin) - 修复在
ALTER MODIFY COLUMN和垂直合并中,当参与合并/修改的某个数据分片为空(0 行)时会发生的罕见崩溃 #6746 #6780 (alesapin) - 修复了
AggregateFunctionFactory中LowCardinality类型转换的 Bug,从而解决了 #6257。#6281(Nikolai Kochetov) - 修复
topK和topKWeighted聚合函数中的错误行为以及潜在的段错误。 #6404 (Anton Popov) - 修复了与
getIdentifier函数相关的不安全代码。#6401 #6409 (alexey-milovidov) - 修复了 MySQL wire 协议中的缺陷(用于通过 MySQL 客户端连接到 ClickHouse)。该缺陷由
PacketPayloadWriteBuffer中的堆缓冲溢出导致。#6212 (Yuriy Baranov) - 修复
bitmapSubsetInRange函数中的内存泄漏问题。 #6819 (Zhichang Yu) - 修复在粒度变更后执行 mutation 时出现的罕见 bug。 #6816 (alesapin)
- 默认允许 protobuf 消息包含所有字段。 #6132 (Vitaly Baranov)
- 修复当第二个参数为
NULL时nullIf函数中的一个 bug。#6446 (Guillaume Tassery) - 修复复杂键缓存字典在包含字符串字段时,错误的内存分配/释放导致的一个罕见问题,该问题会导致内存被无限占用(表现类似内存泄漏)。当字符串长度为从 8 开始的 2 的幂(8、16、32 等)时会复现此 Bug。 #6447 (alesapin)
- 修复了对短序列进行 Gorilla 编码时的问题,该问题会抛出异常
Cannot write after end of buffer。 #6398 #6444 (Vasily Nemkov) - 在启用
join_use_nulls时,允许在 JOIN 中使用非 Nullable 类型。 #6705 (Artem Zuikov) - 在
clickhouse-client中禁用查询中的Poco::AbstractConfiguration替换功能。 #6706 (alexey-milovidov) - 避免在
REPLACE PARTITION中发生死锁。 #6677 (alexey-milovidov) - 对常量参数调用
arrayReduce可能导致段错误。#6242 #6326 (alexey-milovidov) - 修复当副本在执行
DROP PARTITION之后恢复时可能出现的不一致数据分片。#6522 #6523 (tavplubix) - 修复了
JSONExtractRaw函数中的挂起问题。#6195 #6198 (alexey-milovidov) - 修复了在自适应粒度下 skip indices 序列化和聚合不正确的问题。#6594。#6748 (alesapin)
- 修复在两级聚合中使用
GROUP BY时WITH ROLLUP和WITH CUBE修饰符的问题。 #6225 (Anton Popov) - 修复在使用自适应粒度时写入二级索引标记的缺陷。 #6126 (alesapin)
- 在服务器启动阶段修正初始化顺序。由于
StorageMergeTree::background_task_handle在startup()中才会初始化,MergeTreeBlockOutputStream::write()可能会在其初始化之前尝试使用它。因此,只需在使用前检查该句柄是否已初始化即可。#6080 (Ivan) - 清空上一次因错误结束的读取操作留下的数据缓冲区。#6026 (Nikolay)
- 修复了在为 Replicated*MergeTree 表创建新副本时启用自适应粒度的问题。 #6394 #6452 (alesapin)
- 修复了在服务器启动期间可能发生的一种崩溃:当访问未初始化的
ThreadStatus结构体抛出异常时,如果在处理该异常的过程中libunwind再次抛出异常,可能会导致崩溃。 #6456 (Nikita Mikhaylov) - 修复
yandexConsistentHash函数中的崩溃问题。通过模糊测试发现。#6304 #6305 (alexey-milovidov) - 修复了在服务器过载且全局线程池接近耗尽时查询可能挂起的问题。在具有大量分片(数百个)的集群上更有可能出现此问题,因为分布式查询会为到每个分片的连接分配一个线程。例如,如果一个具有 330 个分片的集群正在处理 30 个并发分布式查询,就可能复现该问题。此问题影响从 19.2 开始的所有版本。#6301 (alexey-milovidov)
- 修复了
arrayEnumerateUniqRanked函数的逻辑。#6423 (alexey-milovidov) - 修复在解码符号表时出现的段错误。 #6603 (Amos Bird)
- 修复了在将
LowCardinality(Nullable)转换为非 Nullable 列时,如果列中不包含 Null 值(例如在SELECT CAST(CAST('Hello' AS LowCardinality(Nullable(String))) AS String)这样的查询中),会抛出的无关异常。 #6094 #6119 (Nikolai Kochetov) - 移除了
system.settings表中对description字段的多余引号。#6696 #6699 (alexey-milovidov) - 避免在复制表的
TRUNCATE操作中可能出现的死锁。#6695 (alexey-milovidov) - 修复按排序键顺序读取的问题。 #6189 (Anton Popov)
- 修复在
enable_mixed_granularity_parts=1表上执行ALTER TABLE ... UPDATE查询时的问题。 #6543 (alesapin) - 修复由 #4405(自 19.4.0 起)引入的 bug。该问题会在对基于 MergeTree 表的 Distributed 表执行查询且未查询任何列时(如
SELECT 1)复现。#6236(alesapin) - 修复了带符号类型与无符号类型进行整数除法时的溢出问题。此前行为与 C 或 C++ 语言完全相同(遵循整数提升规则),这可能会让人感到意外。请注意,当将较大的带符号整数与较大的无符号整数相互进行除法运算时,仍然有可能发生溢出(但这种情况不太常见)。该问题存在于所有服务器版本中。 #6214 #6233 (alexey-milovidov)
- 在设置了
max_execution_speed或max_execution_speed_bytes时,限制用于限流的最大休眠时间。修复了诸如Estimated query execution time (inf seconds) is too long之类的误报错误。 #5547 #6232 (alexey-milovidov) - 修复了在
MaterializedView中使用MATERIALIZED列和别名时存在的问题。#448 #3484 #3450 #2878 #2285 #3796 (Amos Bird) #6316 (alexey-milovidov) - 修复
FormatFactory对未实现为 processor 的输入流的处理行为。 #6495 (Nikolai Kochetov) - 修复拼写错误。 #6631 (Alex Ryndin)
- 错误信息中的笔误(is -> are)。#6839(Denis Zhuravlev)
- 修复了从字符串解析列列表时的错误:如果类型中包含逗号就会触发该错误(该问题会影响
File、URL、HDFS存储)#6217。#6209(dimarub2000)
安全修复
- 此版本还包含 19.13 和 19.11 中的所有安全漏洞修复。
- 修复了伪造查询可能导致 SQL 解析器栈溢出并使服务器崩溃的问题。修复了在 Merge 和 Distributed 表、物化视图,以及包含子查询的行级安全策略条件中可能出现栈溢出的问题。 #6433 (alexey-milovidov)
改进
- 正确实现
AND/OR的三值逻辑。 #6048 (Alexander Kazakov) - 现在,具有已过期 TTL 的值和行会在对旧的、没有 TTL 信息或 TTL 信息已过期的部分执行
OPTIMIZE ... FINAL查询后被移除,例如在执行ALTER ... MODIFY TTL查询之后。新增了SYSTEM STOP/START TTL MERGES查询,用于禁止/允许分配带有 TTL 的合并任务,并在所有合并中过滤已过期的值。 #6274 (Anton Popov) - 支持通过
CLICKHOUSE_HISTORY_FILE环境变量更改 ClickHouse 客户端历史文件的位置。#6840 (filimonov) - 从
InterpreterSelectQuery中移除dry_run标志位。... #6375 (Nikolai Kochetov) - 支持在
ON子句中使用ASOF JOIN。#6211 (Artem Zuikov) - 改进了针对变更(mutations)和复制(replication)操作的跳过索引(skip indexes)支持。支持
MATERIALIZE/CLEAR INDEX ... IN PARTITION查询。UPDATE x = x会重新计算所有使用列x的索引。 #5053 (Nikita Vasilev) - 允许在不受
allow_experimental_live_view设置限制的情况下(例如在服务器启动时)对 live view 执行ATTACH操作。 #6754 (alexey-milovidov) - 在查询分析器收集的堆栈跟踪中,不包括由查询分析器自身生成的堆栈帧。#6250 (alexey-milovidov)
- 现在表函数
values、file、url、hdfs已支持 ALIAS 列。#6255 (alexey-milovidov) - 如果
config.d文件未使用与配置文件相同的根元素,则抛出异常。#6123 (dimarub2000) - 在出现
no space left on device错误时,在异常消息中输出更多信息。#6182, #6252 #6352 (tavplubix) - 在确定读查询需要覆盖
Distributed表的哪些分片时(当optimize_skip_unused_shards= 1 时),ClickHouse 现在会同时检查 select 语句中prewhere和where子句中的条件。#6521 (Alexander Kazakov) - 在不支持 AVX2、但支持 SSE 4.2 和 PCLMUL 指令集的机器上启用
SIMDJSON。 #6285 #6320 (alexey-milovidov) - ClickHouse 可以在不支持
O_DIRECT的文件系统(例如 ZFS 和 BtrFS)上运行,而无需额外调优。 #4449 #6730 (alexey-milovidov) - 支持在
FINAL子查询中进行谓词下推。#6120 (TCeason) #6162 (alexey-milovidov) - 改进
JOIN ON键的提取 #6131 (Artem Zuikov) - 更新了
SIMDJSON。#6285。#6306 (alexey-milovidov) - 对
SELECT count()查询进行了优化,优先选择最小列。#6344 (Amos Bird) - 在
windowFunnel()中新增了strict参数。设置strict后,windowFunnel()仅对唯一值应用条件。#6548 (achimbab) - 更安全的
mysqlxx::Pool接口。 #6150 (avasiliev) - 使用
--help选项执行时,帮助输出中的选项行长度现在会根据终端大小自动调整。#6590 (dimarub2000) - 在无键聚合中禁用 "read in order" 优化。#6599 (Anton Popov)
INCORRECT_DATA和TYPE_MISMATCH错误码对应的 HTTP 状态码已从默认的500 Internal Server Error修改为400 Bad Request。 #6271 (Alexander Rodin)- 将
Join对象从ExpressionAction移动到AnalyzedJoin中。ExpressionAnalyzer和ExpressionAction不再直接依赖Join类,其逻辑由AnalyzedJoin接口进行封装和隐藏。 #6801 (Artem Zuikov) - 修复在某个分片为 localhost 且查询通过网络连接发送时,分布式查询可能发生死锁的问题。 #6759 (alexey-milovidov)
- 更改了多张表
RENAME操作的语义,以避免可能发生的死锁。#6757。#6756 (alexey-milovidov) - 重写了 MySQL 兼容服务器,以避免在内存中加载完整的数据包负载。将每个连接的内存占用降低至大约
2 * DBMS_DEFAULT_BUFFER_SIZE(读/写缓冲区)。 #5811 (Yuriy Baranov) - 将 AST 别名解析逻辑从解析器中移出,因为解析器无需了解任何查询语义。 #6108 (Artem Zuikov)
- 使
NamesAndTypesList的解析稍微更加安全。#6408。#6410 (alexey-milovidov) clickhouse-copier:允许在检查分区是否存在的查询中使用配置中的where_condition,并在查询中使用partition_key别名(之前它仅用于读取数据的查询)。 #6577 (proller)- 在
throwIf中新增了可选的 message 参数。(#5772) #6329 (Vdimir) - 在发送插入数据时收到的服务器端异常现在也会在客户端进行处理。#5891 #6711 (dimarub2000)
- 新增指标
DistributedFilesToInsert,用于显示由 Distributed 表选中、准备发送到远程服务器的文件系统中文件的总数。该数量会在所有分片上进行求和。 #6600 (alexey-milovidov) - 将大部分 JOIN 的预处理逻辑从
ExpressionAction/ExpressionAnalyzer移动到AnalyzedJoin。 #6785 (Artem Zuikov) - 修复 TSan 关于“锁顺序反转”(lock-order-inversion)的告警。#6740 (Vasily Nemkov)
- 改进了在缺少 Linux capabilities 时的信息提示。以 "fatal" 级别记录致命错误,便于在
system.text_log中定位。 #6441 (alexey-milovidov) - 在启用在执行
GROUP BY、ORDER BY时将临时数据转储到磁盘以限制内存使用的功能时,之前不会检查可用磁盘空间。此修复新增了一个设置项min_free_disk_space,当可用磁盘空间小于该阈值时,查询会停止并抛出ErrorCodes::NOT_ENOUGH_SPACE。 #6678 (Weiqing Xu) #6691 (alexey-milovidov) - 移除了基于线程的递归读写锁。这样做没有意义,因为线程会在查询之间被重用。
SELECT查询可能会在一个线程中获取锁、在另一个线程中持有锁,并在第一个线程中退出。与此同时,第一个线程可能会被DROP查询重用。这会导致出现错误的“Attempt to acquire exclusive lock recursively”消息。#6771 (alexey-milovidov) - 拆分
ExpressionAnalyzer.appendJoin()。在ExpressionAnalyzer中为MergeJoin预留位置。#6524 (Artem Zuikov) - 为 MySQL 兼容性服务器添加了
mysql_native_password身份验证插件。#6194 (Yuriy Baranov) - 减少对
clock_gettime的调用次数;修复了Allocator在调试版/发布版之间的 ABI 兼容性问题(影响较小)。 #6197 (alexey-milovidov) - 将
collectUsedColumns从ExpressionAnalyzer移动到SyntaxAnalyzer。SyntaxAnalyzer现在会自行构造required_source_columns。#6416 (Artem Zuikov) - 新增设置
joined_subquery_requires_alias,用于在FROM子句中当存在多个表(即包含 JOIN 的查询)时,强制要求子查询和表函数必须使用别名。 #6733 (Artem Zuikov) - 从
ExpressionAnalyzer中提取GetAggregatesVisitor类。 #6458 (Artem Zuikov) system.query_log:将type列的数据类型修改为Enum。 #6265 (Nikita Mikhaylov)- 对
sha256_password认证插件进行静态链接。 #6512 (Yuriy Baranov) - 避免为了让
compile设置生效而引入额外的依赖项。在之前的版本中,用户可能会遇到诸如cannot open crti.o、unable to find library -lc等错误。#6309 (alexey-milovidov) - 进一步加强对可能来自恶意副本的输入的验证。#6303 (alexey-milovidov)
- 现在
clickhouse-obfuscator文件随clickhouse-client软件包一同提供。 在之前的版本中,它名为clickhouse obfuscator(中间带空格)。#5816 #6609 (dimarub2000) - 修复了以下情况下可能出现的死锁:当存在至少两个查询以不同顺序读取至少两个表,且另有一个查询在其中一个表上执行 DDL 操作时。还修复了另一个极其罕见的死锁。#6764 (alexey-milovidov)
- 为
system.processes和system.query_log添加了os_thread_ids列,以便更好地进行调试。 #6763 (alexey-milovidov) - 针对在将
sha256_password用作默认身份验证插件时会出现的 PHP mysqlnd 扩展缺陷的变通解决方案(详见 #6031)。#6113(Yuriy Baranov) - 移除在更改列可空性时不必要的步骤。 #6693 (Artem Zuikov)
- 将
queue_max_wait_ms的默认值设置为零,因为当前的值(五秒)几乎没有意义。只有在极少数情况下该设置才会被用到。为避免歧义,新增了设置项replace_running_query_max_wait_ms、kafka_max_wait_ms和connection_pool_max_wait_ms。 #6692 (alexey-milovidov) - 从
ExpressionAnalyzer中抽取出SelectQueryExpressionAnalyzer。保留后者用于非 SELECT 查询。#6499 (Artem Zuikov) - 去除了重复的输入和输出格式。 #6239 (Nikolai Kochetov)
- 允许用户在建立连接时自定义
poll_interval和idle_connection_timeout设置。 #6230 (alexey-milovidov) MergeTree现在新增了一个选项ttl_only_drop_parts(默认禁用),用于避免对数据分片进行部分裁剪,从而在某个分片中的所有行都过期时,直接将该分片整体删除。#6191 (Sergi Vladykin)- 为 set index 函数添加类型检查。如果函数收到错误类型则抛出异常。修复了使用 UBSan 的模糊测试问题。#6511 (Nikita Vasilev)
性能改进
- 使用
ORDER BY expressions子句优化查询,其中expressions的前缀与MergeTree表的排序键前缀一致。该优化由optimize_read_in_order设置控制。#6054 #6629 (Anton Popov) - 允许在数据片段加载和删除期间使用多个线程。#6372 #6074 #6438 (alexey-milovidov)
- 实现了批量更新聚合函数状态的方式,这可能带来性能收益。#6435 (alexey-milovidov)
- 在
exp、log、sigmoid、tanh函数中使用FastOps库。FastOps 是由 Michael Parakhin(Yandex CTO)编写的高速向量数学库。exp和log函数的性能提升超过 6 倍。对Float32参数的exp和log函数现在将返回Float32(在之前版本中它们始终返回Float64)。现在exp(nan)可能返回inf。exp和log函数的结果可能不是与真实结果最近的机器可表示数值。#6254 (alexey-milovidov) 使用 Danila Kutenin 的方案来使 FastOps 正常工作 #6317 (alexey-milovidov) - 禁用对
UInt8/16的连续键优化。#6298 #6701 (akuzm) - 通过去除
ParsedJson::Iterator中的动态分配,提高了simdjson库的性能。#6479 (Vitaly Baranov) - 在使用
mmap()分配内存时预先触碰内存页。#6667 (akuzm) - 修复了
Decimal比较中的性能问题。#6380 (Artem Zuikov)
构建/测试/打包改进
- 移除 Compiler(运行时模板实例化),因为当前实现的性能已经优于它。#6646 (alexey-milovidov)
- 添加了性能测试,以更隔离的方式展示 gcc-9 中的性能退化。 #6302 (alexey-milovidov)
- 新增表函数
numbers_mt,这是numbers的多线程版本。更新了使用哈希函数的性能测试。#6554 (Nikolai Kochetov) clickhouse-benchmark比较模式 #6220 #6343 (dimarub2000)- 采用尽力而为的方式打印堆栈跟踪。同时添加了
SIGPROF作为调试信号,用于打印正在运行线程的堆栈跟踪。#6529 (alexey-milovidov) - 将每个函数放在单独的文件中,第 10 部分。 #6321 (alexey-milovidov)
- 移除重复定义的常量
TABLE_IS_READ_ONLY。 #6566 (filimonov) - 针对
StringHashMapPR #5417 的格式更改。#6700 (akuzm) - 在
ExpressionAnalyzer中改进了用于创建 join 的子查询。#6824 (Artem Zuikov) - 删除一个冗余条件(由 PVS Studio 发现)。#6775 (akuzm)
- 将
ReverseIndex的哈希表接口拆分出来。 #6672 (akuzm) - 设置重构。#6689 (alesapin)
- 为
set索引函数添加注释。 #6319 (Nikita Vasilev) - 在 Linux 调试版本中提高 OOM 分数。 #6152 (akuzm)
- HDFS HA 现在在 debug 构建中也能正常工作。 #6650 (Weiqing Xu)
- 为
transform_query_for_external_database添加了一个测试用例。#6388 (alexey-milovidov) - 为 Kafka 表添加多个物化视图的测试。#6509 (Ivan)
- 优化构建方案。 #6500 (Ivan)
- 修复了在非 root 用户下运行时的
test_external_dictionaries集成测试。#6507 (Nikolai Kochetov) - 当写入的数据包总大小超过
DBMS_DEFAULT_BUFFER_SIZE时,该 bug 会复现。 #6204 (Yuriy Baranov) - 为
RENAME表操作的竞态条件添加了测试 #6752 (alexey-milovidov) - 避免在
KILL QUERY中对 Settings 发生数据竞争。 #6753 (alexey-milovidov) - 为缓存字典的错误处理添加集成测试。 #6755 (Vitaly Baranov)
- 在 Mac OS 上禁用 ELF 目标文件的解析,因为这样做没有意义。#6578 (alexey-milovidov)
- 尝试改进变更日志生成器。#6327 (alexey-milovidov)
- 为 GCC 添加
-Wshadow开关。 #6325 (kreuzerkrieg) - 移除了用于
mimalloc支持的过时代码。#6715 (alexey-milovidov) zlib-ng会检测 x86 的特性,并将此信息保存到全局变量中。此操作在 defalteInit 调用时执行,而该调用可能会被不同线程同时触发。为避免多线程并发写入,应在库启动时完成此操作。 #6141 (akuzm)- 针对曾在
JOIN中出现、并已在 #5192 中修复的 bug 的回归测试。#6147 (Bakhtiyor Ruziev) - 修复了 MSan 报告。#6144 (alexey-milovidov)
- 修复不稳定的 TTL 测试。#6782 (Anton Popov)
- 修复
MergeTreeDataPart::is_frozen字段中的虚假数据竞争。 #6583 (alexey-milovidov) - 修复了模糊测试中的超时问题。在此前的版本中,它会错误地将查询
SELECT * FROM numbers_mt(gccMurmurHash(''))判定为挂起。#6582 (alexey-milovidov) - 在对列执行
static_cast时添加了调试检查。#6581 (alexey-milovidov) - 在官方 RPM 软件包中增加对 Oracle Linux 的支持。#6356 #6585 (alexey-milovidov)
- 将 JSON perftests 的类型从
once更改为loop类型。 #6536 (Nikolai Kochetov) odbc-bridge.cpp定义了main(),因此不应包含在clickhouse-lib中。 #6538 (Orivej Desh)- 用于测试在右表键包含 NULL 值时
FULL|RIGHT JOIN崩溃的问题。 #6362 (Artem Zuikov) - 为别名展开的限制添加了一个测试,以防万一。#6442 (alexey-milovidov)
- 在适当的地方将
boost::filesystem替换为std::filesystem。 #6253 #6385 (alexey-milovidov) - 已在网站上添加 RPM 软件包。 #6251 (alexey-milovidov)
- 为已修复的
IN子句中的Unknown identifier异常添加测试。#6708 (Artem Zuikov) - 简化
shared_ptr_helper,因为许多人表示难以理解它。 #6675 (alexey-milovidov) - 已为修复后的 Gorilla 和 DoubleDelta 编解码器添加性能测试。#6179 (Vasily Nemkov)
- 将集成测试
test_dictionaries拆分为 4 个独立的测试用例。#6776 (Vitaly Baranov) - 修复
PipelineExecutor中的 PVS-Studio 警告。#6777 (Nikolai Kochetov) - 允许在启用 ASan 时使用
library字典源。#6482 (alexey-milovidov) - 新增了从 PR 列表生成变更日志的选项。 #6350 (alexey-milovidov)
- 读取时锁定
TinyLog存储。#6226 (akuzm) - 在 CI 中检查失效的符号链接。 #6634 (alexey-milovidov)
- 增加“stack overflow”测试的超时时间,因为在调试构建中它可能会花费很长时间。#6637 (alexey-milovidov)
- 新增了对双空格的检查。#6643 (alexey-milovidov)
- 在使用 sanitizer 编译时修复
new/delete内存跟踪。当前跟踪逻辑并不清晰,目前仅能在测试中避免触发内存限制异常。#6450 (Artem Zuikov) - 重新启用在链接阶段对未定义符号的检查。 #6453 (Ivan)
- 避免每天都重新构建
hyperscan。 #6307 (alexey-milovidov) - 修复了
ProtobufWriter中由 UBSan 报告的问题。#6163 (alexey-milovidov) - 不允许在启用 sanitizer 时使用查询分析器,因为二者不兼容。 #6769 (alexey-milovidov)
- 添加测试,用于在失败后由计时器触发重新加载字典。#6114 (Vitaly Baranov)
- 修复
PipelineExecutor::prepareProcessor参数类型不一致的问题。 #6494 (Nikolai Kochetov) - 为无效的 URI 添加了测试。#6493 (alexey-milovidov)
- 为
CAST函数增加了更多检查,以便在模糊测试中获取更多关于段错误的信息。 #6346 (Nikolai Kochetov) - 为在本地构建镜像的
docker/builder容器添加了对gcc-9的支持。#6333 (Gleb Novikov) - 针对
LowCardinality(String)主键的测试。#5044 #6219 (dimarub2000) - 修复了由于堆栈跟踪打印缓慢而受影响的测试。#6315 (alexey-milovidov)
- 为
groupUniqArray中已在 #6029 中修复的崩溃问题添加一个测试用例。#4402 #6129 (akuzm) - 修复索引变更测试。#6645 (Nikita Vasilev)
- 在性能测试中,不要从查询日志中读取我们未执行的查询。 #6427 (akuzm)
- 现在可以使用任意低基数类型创建物化视图,而不受关于「可疑低基数类型」设置的限制。 #6428 (Olga Khvostikova)
- 更新了
send_logs_level设置的测试。#6207(Nikolai Kochetov) - 修复在 gcc-8.2 下的构建问题。#6196 (Max Akhmedov)
- 修复使用内部 libc++ 时的构建问题。 #6724 (Ivan)
- 修复基于
rdkafka库的共享库构建 #6101 (Ivan) - 针对 Mac OS 的构建修复(不完整)。#6390 (alexey-milovidov) #6429 (alex-zaitsev)
- 修复“splitted”构建版本。#6618 (alexey-milovidov)
- 其他构建修复项:#6186 (Amos Bird) #6486 #6348 (vxider) #6744 (Ivan) #6016 #6421 #6491 (proller)
向后不兼容的变更
- 移除了很少使用的表函数
catBoostPool和存储引擎CatBoostPool。如果你曾使用过该表函数,请发送邮件到[email protected]。注意,CatBoost 集成功能仍然保留并会继续得到支持。#6279 (alexey-milovidov) - 默认禁用
ANY RIGHT JOIN和ANY FULL JOIN。请通过设置any_join_distinct_right_table_keys参数来启用它们。#5126 #6351 (Artem Zuikov)
ClickHouse Release 19.13
ClickHouse Release 19.13.6.51, 2019-10-02
Bug Fix
- 此版本还包含 19.11.12.69 中的所有错误修复。
ClickHouse Release 19.13.5.44, 2019-09-20
Bug Fix
- 此版本还包含 19.14.6.12 中的所有错误修复。
- 修复了在 ZooKeeper 不可访问时,对副本表执行
DROP查询可能导致表处于不一致状态的问题。 #6045 #6413 (Nikita Mikhaylov) - 修复了 StorageMerge 中的数据竞争问题。 #6717 (alexey-milovidov)
- 修复了在查询分析器中引入的错误,该错误会导致从套接字无限次接收数据。 #6386 (alesapin)
- 修复了在布尔值上执行
JSONExtractRaw函数时过高的 CPU 使用率。 #6208 (Vitaly Baranov) - 修复了向物化视图写入数据时的回归问题。 #6415 (Ivan)
- 表函数
url存在一个漏洞,允许攻击者在请求中注入任意 HTTP 头部。该问题由 Nikita Tikhomirov 发现。 #6466 (alexey-milovidov) - 修复了 Set 索引中无用的
AST检查。 #6510 #6651 (Nikita Vasilev) - 修复了解析嵌入在查询中的
AggregateFunction值时的问题。 #6575 #6773 (Zhichang Yu) - 修复了
trim函数族的不正确行为。 #6647 (alexey-milovidov)
ClickHouse Release 19.13.4.32, 2019-09-10
Bug Fix
- 此版本还包含 19.11.9.52 和 19.11.10.54 中的所有安全漏洞修复。
- 修复了在
system.parts表和ALTER查询中的数据竞争问题。#6245 #6513 (alexey-milovidov) - 修复了在从带有 sample 和 prewhere 的空分布式表读取时发生的数据流头部不匹配问题。#6167 (Lixiang Qian) #6823 (Nikolai Kochetov)
- 修复了在使用带有元组子查询的
IN子句时发生的崩溃。#6125 #6550 (tavplubix) - 修复了在
GLOBAL JOIN ON子句中存在相同列名时的问题。#6181 (Artem Zuikov) - 修复了在将不支持转换为
Decimal的类型进行转换时的崩溃,现在改为抛出异常。#6297 (Artem Zuikov) - 修复了
extractAll()函数中的崩溃。#6644 (Artem Zuikov) - 现在
MySQL、ODBC、JDBC表函数的查询改写已能正确处理包含多个AND表达式的SELECT WHERE查询。#6381 #6676 (dimarub2000) - 为 MySQL 8 集成增加了对重复声明的检查。#6569 (Rafael David Tinoco)
安全修复
- 修复了解压阶段中编解码器的两个漏洞(恶意用户可以伪造压缩数据,从而在解压过程中导致缓冲区溢出)。#6670 (Artem Zuikov)
ClickHouse Release 19.13.3.26,2019-08-22
错误修复
- 修复在
enable_mixed_granularity_parts=1的表上执行ALTER TABLE ... UPDATE查询的问题。#6543 (alesapin) - 修复在 IN 子句中使用带元组的子查询时出现的 NPE(空指针异常)。#6125 #6550 (tavplubix)
- 修复一个问题:如果落后的副本恢复为可用状态,它可能仍然包含已被 DROP PARTITION 删除的数据分片。#6522 #6523 (tavplubix)
- 修复解析 CSV 的问题。#6426 #6559 (tavplubix)
- 修复
system.parts表和 ALTER 查询中的数据竞争问题。这修复了 #6245。#6513 (alexey-milovidov) - 修复了变更(mutation)代码中的错误,该错误可能导致内存损坏。修复了读取地址
0x14c0时产生的段错误(segfault),该问题可能由于并发执行DROP TABLE与从system.parts或system.parts_columns进行SELECT导致。修复了在准备变更查询时出现的竞争条件。修复了由复制表(Replicated 表)的OPTIMIZE与 ALTER 等并发修改操作引起的死锁。#6514 (alexey-milovidov) - 修复了在带有跳过索引(skipping index)的表上执行
ALTER DELETE查询后可能导致数据丢失的问题。#6224 #6282 (Nikita Vasilev)
安全修复
- 如果攻击者对 ZooKeeper 拥有写权限,并且能够在 ClickHouse 所在网络中运行自定义服务器,则可以创建一个特制的恶意服务器,使其作为 ClickHouse 副本运行并在 ZooKeeper 中注册。当其他副本从该恶意副本拉取数据分片时,它可以强制 clickhouse-server 向文件系统上的任意路径写入数据。该问题由 Yandex 信息安全团队的 Eldar Zaitov 发现。#6247 (alexey-milovidov)
ClickHouse Release 19.13.2.19,2019-08-14
新特性
- 查询级别的采样分析器。 示例。 #4247 (laplab) #6124 (alexey-milovidov) #6250 #6283 #6386
- 允许使用
COLUMNS('regexp')表达式指定列列表,该表达式的行为类似于更高级版本的*通配符。 #5951 (mfridental), (alexey-milovidov) - 现在支持
CREATE TABLE AS table_function()。 #6057 (dimarub2000) - 在
stochasticLinearRegression()和stochasticLogisticRegression()聚合函数中,默认使用随机梯度下降的 Adam 优化器,因为它在几乎无需调参的情况下就能提供良好的效果。 #6000 (Quid37) - 新增用于处理自定义周序号的函数。 #5212 (Andy Yang)
- 现在
RENAME查询可用于所有存储引擎。 #5953 (Ivan) - 现在客户端可以通过设置
send_logs_level,在不考虑服务端配置的日志级别的情况下,从服务端接收任意所需级别的日志。 #5964 (Nikita Mikhaylov)
向后不兼容的更改
- 设置
input_format_defaults_for_omitted_fields默认启用。对 Distributed 表执行插入操作时,需要在整个集群中保持该设置一致(需要在滚动升级前设置好)。该设置会在JSONEachRow和CSV*格式中,为被省略字段计算复杂的默认表达式。这应该是预期行为,但可能带来可以忽略不计的性能差异。 #6043 (Artem Zuikov), #5625 (akuzm)
实验特性
- 新的查询处理流水线。使用
experimental_use_processors=1选项启用。请自行承担使用风险。 #4914 (Nikolai Kochetov)
Bug 修复
- 本版本修复了 Kafka 集成。
- 修复了在
DoubleDelta值较大时Int64的DoubleDelta编码,并改进了Int32在随机数据上的DoubleDelta编码。 #5998 (Vasily Nemkov) - 修复了当
merge_tree_uniform_read_distribution设置为 0 时,对max_rows_to_read的高估问题。 #6019 (alexey-milovidov)
改进
- 当
config.d文件不包含与主配置文件对应的根元素时抛出异常。 #6123 (dimarub2000)
性能改进
构建/测试/打包改进
ClickHouse 发行版 19.11
ClickHouse 发行版 19.11.13.74,2019-11-01
Bug Fix
- 修复了在执行
ALTER MODIFY COLUMN和垂直合并时,当被合并/被修改的某个数据部分为空(0 行)时出现的罕见崩溃问题。 #6780 (alesapin) - 手动更新
SIMDJSON。修复了可能向 stderr 输出文件大量写入虚假的 JSON 诊断消息的问题。 #7548 (Alexander Kazakov) - 修复了与变更操作中
mrk文件扩展名相关的错误。 #7548 (alesapin)
ClickHouse 发行版 19.11.12.69,2019-10-02
Bug Fix
- 修复了在大表上针对复杂键进行索引分析时的性能下降问题。修复了 #6924。 #7075 (alexey-milovidov)
- 避免在向使用 Distributed 引擎的表发送数据时出现罕见的 SIGSEGV(
Failed to send batch: file with index XXXXX is absent)。 #7032 (Azat Khuzhin) - 修复了多表 join 时出现的
Unknown identifier错误。修复了 #5254。 #7022 (Artem Zuikov)
ClickHouse 发行版 19.11.11.57,2019-09-13
- 修复了在从空的 Kafka 主题中进行查询时导致段错误的逻辑错误。 #6902 #6909 (Ivan)
- 修复了函数
АrrayEnumerateUniqRanked在参数包含空数组时的问题。 #6928 (proller)
ClickHouse 发行版 19.11.10.54,2019-09-10
Bug Fix
ClickHouse 发行版 19.11.9.52,2019-09-6
- 改进缓存字典中的错误处理。 #6737 (Vitaly Baranov)
- 修复函数
arrayEnumerateUniqRanked中的错误。 #6779 (proller) - 修复从 JSON 中提取
Tuple时JSONExtract函数的问题。 #6718 (Vitaly Baranov) - 修复在带有 skipping 索引的表上执行
ALTER DELETE查询后可能发生的数据丢失问题。 #6224 #6282 (Nikita Vasilev) - 修复性能测试。 #6392 (alexey-milovidov)
- Parquet:修复读取 boolean 列的问题。 #6579 (alexey-milovidov)
- 修复
nullIf函数在常量参数下的错误行为。 #6518 (Guillaume Tassery) #6580 (alexey-milovidov) - 修复在正常服务器重启时 Kafka 消息重复的问题。 #6597 (Ivan)
- 修复一个问题:长时间运行的
ALTER UPDATE或ALTER DELETE可能会阻止常规合并执行。如果没有足够空闲线程可用,则阻止执行变更操作(mutation)。 #6502 #6617 (tavplubix) - 修复在服务器配置文件中处理 "timezone" 时的错误。 #6709 (alexey-milovidov)
- 修复 Kafka 测试。 #6805 (Ivan)
安全修复
- 如果攻击者对 ZooKeeper 拥有写入权限,并且能够在 ClickHouse 所在网络中运行自定义服务器,则它可以创建一个特制的恶意服务器,使其作为 ClickHouse 副本并注册到 ZooKeeper 中。当另一副本从该恶意副本拉取数据分片时,可以强制 clickhouse-server 向文件系统上的任意路径写入。该问题由 Yandex 信息安全团队的 Eldar Zaitov 发现。 #6247 (alexey-milovidov)
ClickHouse Release 19.11.8.46,2019-08-22
Bug 修复
- 修复在
enable_mixed_granularity_parts=1的表上执行ALTER TABLE ... UPDATE查询的问题。#6543 (alesapin) - 修复在
IN子句中使用带有元组的子查询时出现的空指针异常(NPE)。#6125 #6550 (tavplubix) - 修复这样一个问题:如果一个过期副本重新变为活跃状态,它可能仍然包含已被
DROP PARTITION删除的数据分片。#6522 #6523 (tavplubix) - 修复解析 CSV 时的问题。#6426 #6559 (tavplubix)
- 修复
system.parts表与ALTER查询中的数据竞争问题。此修复解决了 #6245。#6513 (alexey-milovidov) - 修复变更(mutation)代码中的错误,该错误可能导致内存损坏。修复因并发执行
DROP TABLE与从system.parts或system.parts_columns中执行SELECT读取而可能发生的读取地址0x14c0的段错误(segfault)。修复在准备变更查询时的竞争条件。修复由对 Replicated 表执行OPTIMIZE与并发ALTER等修改操作导致的死锁。#6514 (alexey-milovidov)
ClickHouse Release 19.11.7.40, 2019-08-14
Bug Fix
- 本版本已修复 Kafka 集成。
- 修复了对常量参数使用
arrayReduce时的段错误(segfault)。 #6326 (alexey-milovidov) - 修复了
toFloat()的单调性问题。 #6374 (dimarub2000) - 修复在启用
optimize_skip_unused_shards且缺失分片键时出现的段错误(segfault)。 #6384 (CurtizJ) - 修正了
arrayEnumerateUniqRanked函数的逻辑。 #6423 (alexey-milovidov) - 从 MySQL 处理器中移除了多余的详细日志输出。 #6389 (alexey-milovidov)
- 修复了
topK和topKWeighted聚合函数中的错误行为及可能发生的段错误(segfault)。 #6404 (CurtizJ) - 不再在
system.columns表中暴露虚拟列。此更改是为了保持向后兼容性。 #6406 (alexey-milovidov) - 修复了复合键缓存字典中字符串字段内存分配的错误。 #6447 (alesapin)
- 修复在为
Replicated*MergeTree表创建新副本时启用自适应粒度(adaptive granularity)功能的错误。 #6452 (alesapin) - 修复了读取 Kafka 消息时出现的无限循环问题。 #6354 (abyss7)
- 修复了构造查询可能导致 SQL 解析器栈溢出并引发服务器崩溃的问题,以及在
Merge和Distributed表中可能出现的栈溢出问题。 #6433 (alexey-milovidov) - 修复了在短序列上进行 Gorilla 编码时的错误。 #6444 (Enmk)
改进
- 允许用户在连接时重写
poll_interval和idle_connection_timeout设置。 #6230 (alexey-milovidov)
ClickHouse Release 19.11.5.28, 2019-08-05
Bug 修复
- 修复了在服务器过载时查询可能挂起的问题。#6301 (alexey-milovidov)
- 修复了
yandexConsistentHash函数中的浮点运算异常(FPE)。此修复对应 #6304。#6126 (alexey-milovidov) - 修复了在
AggregateFunctionFactory中转换LowCardinality类型时的错误。此修复对应 #6257。#6281 (Nikolai Kochetov) - 修复了从配置文件中的字符串
true和false解析bool设置时的问题。#6278 (alesapin) - 修复了在对基于
MergeTree表的Distributed表执行查询时,当WHERE的一部分被下推到PREWHERE时,可能出现的数据流头部不兼容的罕见错误。#6236 (alesapin) - 修复了有符号类型除以无符号类型时整数除法溢出的问题。此修复对应 #6214。#6233 (alexey-milovidov)
向后不兼容的变更
Kafka仍然不可用。
ClickHouse Release 19.11.4.24, 2019-08-01
Bug 修复
- 修复了在自适应粒度下写入二级索引标记时的 bug。#6126 (alesapin)
- 修复了在两级聚合下
GROUP BY的WITH ROLLUP和WITH CUBE修饰符的问题。#6225 (Anton Popov) - 修复了
JSONExtractRaw函数中的挂起问题。修复了 #6195 #6198 (alexey-milovidov) - 修复了 ExternalLoader::reloadOutdated() 中的段错误。#6082 (Vitaly Baranov)
- 修复了服务器可能关闭监听套接字但自身不关闭、并继续处理剩余查询的情况。最终可能会出现两个正在运行的 clickhouse-server 进程。有时,服务器可能会对剩余查询返回
bad_function_call错误。#6231 (alexey-milovidov) - 修复了通过 ODBC、MySQL、ClickHouse 和 HTTP 初始加载外部字典时,对更新字段进行无用且不正确条件判断的问题。此更改修复了 #6069 #6083 (alexey-milovidov)
- 修复了在将
LowCardinality(Nullable)转换为非 Nullable 列、且该列不包含 Null 的情况下(例如在类似SELECT CAST(CAST('Hello' AS LowCardinality(Nullable(String))) AS String)的查询中)抛出的无关异常。#6094 #6119 (Nikolai Kochetov) - 修复了在极其罕见情况下 "uniq" 聚合函数结果非确定性的问题。该 bug 存在于所有 ClickHouse 版本中。#6058 (alexey-milovidov)
- 修复了在对函数
IPv6CIDRToRange设置略高的 CIDR 时产生的段错误。#6068 (Guillaume Tassery) - 修复了当服务器在许多不同上下文中抛出大量异常时发生的小内存泄漏。#6144 (alexey-milovidov)
- 修复了 consumer 在订阅之前被暂停且之后未恢复的情况。#6075 (Ivan) 请注意,Kafka 在该版本中是不可用的。
- 清理了上一次以错误结束的读取操作留下的 Kafka 数据缓冲区。#6026 (Nikolay) 请注意,Kafka 在该版本中是不可用的。
- 由于
StorageMergeTree::background_task_handle在startup()中初始化,MergeTreeBlockOutputStream::write()可能会在其初始化之前尝试使用它。因此仅在使用前检查它是否已初始化。#6080 (Ivan)
构建/测试/打包改进
- 添加了官方的
rpm软件包。#5740 (proller) (alesapin) - 新增支持使用
packager脚本构建.rpm和.tgz软件包。#5769 (alesapin) - 修复了与 "Arcadia" 构建系统相关的问题。#6223 (proller)
不向后兼容的变更
- 本版本中
Kafka不可用。
ClickHouse Release 19.11.3.11, 2019-07-18
新特性
- 增加了对预处理语句(prepared statements)的支持。#5331 (Alexander) #5630 (alexey-milovidov)
- 新增
DoubleDelta和Gorilla列编解码器。#5600 (Vasily Nemkov) - 新增
os_thread_priority设置项,用于控制查询处理线程的 "nice" 值,操作系统会根据该值调整动态调度优先级。要正常工作需要CAP_SYS_NICE权限。实现了 #5858 #5909 (alexey-milovidov) - 为 Kafka 引擎实现
_topic、_offset、_key列。#5382 (Ivan) 请注意,本版本中 Kafka 不可用。 - 新增聚合函数组合子
-Resample。#5590 (hcz) - 新增聚合函数
groupArrayMovingSum(win_size)(x)和groupArrayMovingAvg(win_size)(x),用于计算带或不带窗口大小限制的滑动求和/平均值。#5595 (inv2004) - 新增同义函数
arrayFlatten<->flatten。#5764 (hcz) - 集成了来自 Uber 的 H3 函数
geoToH3。#4724 (Remen Ivan) #5805 (alexey-milovidov)
Bug 修复
- 实现异步更新的 DNS 缓存机制。独立线程会定期解析所有主机并更新 DNS 缓存(周期由设置
dns_cache_update_period控制)。当主机 IP 频繁变更时,这将很有帮助。 #5857 (Anton Popov) - 修复
Delta编解码器中的段错误,该错误会影响包含小于 32 位值的列。此缺陷会导致内存随机损坏。#5786 (alesapin) - 修复在对包含非物理列的块执行 TTL 合并时发生的段错误。 #5819 (Anton Popov)
- 修复在检查包含
LowCardinality列的数据分片时的一个罕见错误。此前,对于包含LowCardinality列的数据分片,checkDataPart总是会失败。#5832 (alesapin) - 当服务器线程池已满时,避免连接被挂起。对于来自
remote表函数的连接,或在连接超时时间较长且目标分片没有副本的情况下发起的连接,这一点尤为重要。此更改修复了 #5878 #5881(alexey-milovidov) - 为
evalMLModel函数增加对常量参数的支持。修复了 #5817 和 #5820(alexey-milovidov) - 修复了 ClickHouse 将默认时区识别为
UCT而不是UTC的问题。此修复解决了 #5804。#5828(alexey-milovidov) - 修复了
visitParamExtractRaw中的缓冲区下溢问题。此更改修复了 #5901 和 #5902(alexey-milovidov) - 现在,分布式的
DROP/ALTER/TRUNCATE/OPTIMIZE ON CLUSTER查询将直接在主副本上执行。 #5757 (alesapin) - 修复
coalesce在ColumnConst与ColumnNullable组合下的问题及相关更改。 #5755 (Artem Zuikov) - 修复
ReadBufferFromKafkaConsumer,使其在调用commit()之后能够继续读取新消息,即使此前曾发生阻塞 #5852 (Ivan) - 在右表使用
Nullable键进行关联时,修复FULL和RIGHTJOIN 的结果。#5859 (Artem Zuikov) - 可能修复了低优先级查询无限期休眠的问题。 #5842 (alexey-milovidov)
- 修复竞态条件,该问题会导致在执行
SYSTEM FLUSH LOGS查询后,一些查询可能不会出现在 query_log 中。#5456 #5685 (Anton Popov) - 修复了 ClusterCopier 中的
heap-use-after-freeASan 警告,该警告是由于 watch 尝试使用已移除的 copier 对象而触发的。 #5871 (Nikolai Kochetov) - 修复了一些
IColumn::deserializeAndInsertFromArena实现返回错误的StringRef指针的问题。此缺陷仅影响单元测试。#5973 (Nikolai Kochetov) - 避免源列和中间 ARRAY JOIN 列覆盖同名列。 #5941 (Artem Zuikov)
- 修复向 MySQL 引擎执行 INSERT 和 SELECT 查询时对 MySQL 风格标识符引用的处理。 #5704 (Winter Zhang)
- 现在
CHECK TABLE查询可以用于 MergeTree 引擎系列。它会为每个数据部分(对于更简单的引擎则为每个文件)返回检查状态以及(如果有的话)消息。同时修复了在拉取损坏数据部分时的一个错误。#5865 (alesapin) - 修复 SPLIT_SHARED_LIBRARIES 运行时错误 #5793 (Danila Kutenin)
- 修复了在
/etc/localtime为类似../usr/share/zoneinfo/Asia/Istanbul的相对符号链接时的时区初始化问题 #5922 (alexey-milovidov) - clickhouse-copier:修复关闭时的 use-after-free 问题 #5752 (proller)
- 已更新
simdjson。修复了某些包含零字节的无效 JSON 仍被成功解析的问题。#5938 (alexey-milovidov) - 修复 SystemLogs 的关闭逻辑 #5802 (Anton Popov)
- 修复当
invalidate_query中的条件依赖于字典时导致的挂起问题。#6011 (Vitaly Baranov)
改进
- 允许在集群配置中使用无法解析的地址。它们将被视为不可用,并在每次连接尝试时重新解析。这对 Kubernetes 尤其有用。此更改修复了 #5714 #5924(alexey-milovidov)
- 关闭空闲的 TCP 连接(默认超时时间为一小时)。这对大型集群尤为重要,尤其是在每台服务器上都有多张分布式表的情况下,因为每台服务器都可能对其他每台服务器维护一个连接池,在峰值查询并发结束后,这些连接会长时间处于空闲状态。此更改修复了 #5879 #5880(alexey-milovidov)。
- 提升了
topK函数的结果质量。更改了 SavingSpace 集合的行为:当新元素的权重大于最后一个元素时,将移除最后一个元素。 #5833 #5850 (Guillaume Tassery) - 用于处理域名的 URL 函数现在也可以处理缺少 scheme 的不完整 URL #5725 (alesapin)
- 已向
system.parts_columns表添加校验和。 #5874 (Nikita Mikhaylov) - 添加了
Enum数据类型,作为Enum8或Enum16的别名。 #5886 (dimarub2000) - 针对
T64编解码器的完全比特转置版本。与zstd搭配使用时可以获得更好的压缩效果。#5742 (Artem Zuikov) - 现在
startsWith函数中的条件可以使用主键。这修复了 #5310、#5882 和 #5919(dimarub2000)。 - 通过允许数据库名为空,使
clickhouse-copier可用于跨复制集群拓扑。 #5745 (nvartolomei) - 在未安装
tzdata的系统上(例如纯 Docker 容器)使用UTC作为默认时区。在此补丁之前,会打印错误信息Could not determine local time zone,并且服务器或客户端会拒绝启动。 #5827 (alexey-milovidov) - 为向后兼容,恢复了函数
quantileTiming对浮点参数的支持。 #5911 (alexey-milovidov) - 在错误信息中显示缺少列的是哪个表。#5768 (Ivan)
- 禁止不同用户使用相同 query_id 运行查询 #5430 (proller)
- 用于向 Graphite 发送指标的代码更加健壮。即使在长时间执行多次
RENAME TABLE操作期间,它也能正常工作。#5875 (alexey-milovidov) - 当 ThreadPool 无法调度任务执行时,将显示更详细的错误信息。此更改修复了 #5305 #5801(alexey-milovidov)
- 反转 ngramSearch 以使其更直观 #5807 (Danila Kutenin)
- 在 HDFS 引擎构建器中添加用户解析功能 #5946 (akonyaev90)
- 更新
max_ast_elements参数的默认值 #5933 (Artem Konovalov) - 新增了“已弃用设置”的概念。已弃用设置
allow_experimental_low_cardinality_type仍可使用,但不会产生任何效果。0f15c01c6802f7ce1a1494c12c846be8c98944cd Alexey Milovidov
性能改进
- 增加用于从 Merge 表执行 SELECT 的流数量,以实现线程更均匀的分布。新增设置
max_streams_multiplier_for_merge_tables。修复了 #5797 #5915 (alexey-milovidov)
构建/测试/打包改进
- 为不同 ClickHouse 版本间的客户端-服务器交互添加向后兼容性测试。 #5868 (alesapin)
- 在每次提交和拉取请求中提供测试覆盖率信息。#5896 (alesapin)
- 与 AddressSanitizer 配合使用,以支持我们的自定义分配器(
Arena和ArenaWithFreeLists),从而更好地调试“释放后使用”(use-after-free)错误。#5728 (akuzm) - 切换为使用 LLVM libunwind 实现,用于 C++ 异常处理以及打印栈回溯信息 #4828(Nikita Lapkov)
- 从
-Weverything再添加两个警告 #5923 (alexey-milovidov) - 支持使用 Memory Sanitizer 构建 ClickHouse。 #3949 (alexey-milovidov)
- 修复了 fuzz 测试中针对
bitTest函数的 UBSan 报告。#5943 (alexey-milovidov) - Docker:新增可初始化需要认证的 ClickHouse 实例的功能。#5727 (Korviakov Andrey)
- 将 librdkafka 更新至 1.1.0 版本 #5872 (Ivan)
- 为集成测试添加全局超时,并在测试代码中禁用部分测试用例。 #5741 (alesapin)
- 修复了一些 ThreadSanitizer 报错。 #5854 (akuzm)
--no-undefined选项会强制链接器在链接时检查所有外部符号是否存在。在拆分构建模式下,对于追踪库之间的实际依赖关系非常有用。#5855 (Ivan)- 针对 #5797 和 #5914 添加了性能测试(alexey-milovidov)
- 修复了与 gcc-7 的兼容性。#5840 (alexey-milovidov)
- 新增对 gcc-9 的支持,从而修复了 #5717 #5774 (alexey-milovidov)
- 修复了由于
libunwind可能被错误链接而导致的错误。#5948 (alexey-milovidov) - 修复了一些由 PVS-Studio 检测到的警告。#5921(alexey-milovidov)
- 添加了对
clang-tidy静态分析器的初步支持。 #5806 (alexey-milovidov) - 将 BSD/Linux 的字节序宏('be64toh' 和 'htobe64')替换为 Mac OS X 中的等价宏 #5785 (Fu Chen)
- 改进了集成测试指南。#5796 (Vladimir Chebotarev)
- 修复在 macOS + gcc9 环境下的构建 #5822 (filimonov)
- 修复一个不易发现的拼写错误:aggreAGte -> aggregate。#5753 (akuzm)
- 修复 FreeBSD 下的构建 #5760 (proller)
- 在网站中添加指向实验性 YouTube 频道的链接 #5845 (Ivan Blinkov)
- CMake:为覆盖率标志添加选项:WITH_COVERAGE #5776 (proller)
- 修复某些内联 PODArray 的初始大小。 #5787 (akuzm)
- clickhouse-server.postinst:修复在 CentOS 6 上的操作系统检测 #5788 (proller)
- 增加了对 Arch Linux 软件包构建的支持。#5719 (Vladimir Chebotarev)
- 按库(dbms)对 Common/config.h 进行拆分 #5715 (proller)
- 针对 "Arcadia" 构建平台的修复 #5795 (proller)
- 非常规构建(gcc9、无子模块)相关修复 #5792 (proller)
- 在
unalignedStore中要求显式指定类型,因为此前已证明这种方式容易出错 #5791 (akuzm) - 修复 macOS 平台上的构建问题 #5830 (filimonov)
- 根据此处的请求,对新 JIT 功能在更大数据集上的性能进行测试 #5263 #5887(Guillaume Tassery)
- 在压力测试中运行有状态测试 12693e568722f11e19859742f56428455501fd2a (alesapin)
向后不兼容的变更
- 此版本中的
Kafka表引擎不可用。 - 对新的
MergeTree表默认启用adaptive_index_granularity= 10MB。如果你在 19.11+ 版本上创建了新的 MergeTree 表,则无法降级到 19.6 之前的版本。 #5628 (alesapin) - 移除了供 Yandex.Metrica 使用的、已过时且未公开文档的内置字典。函数
OSIn、SEIn、OSToRoot、SEToRoot、OSHierarchy、SEHierarchy将不再可用。如果你在使用这些函数,请发送邮件至 [email protected]。注意:在最后一刻我们决定暂时保留这些函数。 #5780 (alexey-milovidov)
ClickHouse 版本 19.10
ClickHouse 版本 19.10.1.5,2019-07-12
新特性
- 新增列编解码器:
T64。适用于 (U)IntX/EnumX/Data(Time)/DecimalX 列。对于取值恒定或取值范围很小的列效果较好。该编解码器本身允许在无需重新压缩的情况下扩大或缩小数据类型。#5557 (Artem Zuikov) - 新增数据库引擎
MySQL,允许查看远程 MySQL 服务器中的所有表。#5599 (Winter Zhang) - 实现
bitmapContains。当第二个 bitmap 只包含一个元素时,其速度是bitmapHasAny的两倍。#5535 (Zhichang Yu) - 支持
crc32函数(其行为与 MySQL 或 PHP 中完全一致)。如果你需要的是哈希函数,请不要使用它。#5661 (Remen Ivan) - 实现了
SYSTEM START/STOP DISTRIBUTED SENDS查询,用于控制对Distributed表的异步插入。#4935 (Winter Zhang)
Bug 修复
- 在执行 mutation 时,忽略查询执行限制以及用于合并操作的最大 part 大小限制。#5659 (Anton Popov)
- 修复可能导致正常数据块被去重(极其罕见)以及插入重复数据块(较常见)的 bug。#5549 (alesapin)
- 修复函数
arrayEnumerateUniqRanked在参数为空数组时的行为问题。#5559 (proller) - 如果没有拉取任何消息的意图,则不要订阅 Kafka 主题。#5698 (Ivan)
- 让设置项
join_use_nulls对不能出现在 Nullable 中的类型不产生任何效果。#5700 (Olga Khvostikova) - 修复
Incorrect size of index granularity错误。#5720 (coraxster) - 修复 Float 转 Decimal 时的溢出问题。#5607 (coraxster)
- 在调用
WriteBufferFromHDFS析构函数时刷新缓冲区,从而修复向HDFS写入的问题。#5684 (Xindong Peng)
改进
- 启用
input_format_defaults_for_omitted_fields设置后,将CSV中的空单元格视为默认值。#5625 (akuzm) - 对外部字典进行非阻塞加载。#5567 (Vitaly Baranov)
- 已建立连接的网络超时时间可以根据设置动态更改。#4558 (Konstantin Podshumok)
- 在函数
firstSignificantSubdomain、cutToFirstSignificantSubdomain中使用 "public_suffix_list"。它使用由gperf生成的完美哈希表,该哈希表基于以下文件生成的列表:https://publicsuffix.org/list/public_suffix_list.dat。(例如,现在我们能将域名后缀ac.uk识别为非重要部分。)#5030 (Guillaume Tassery) - 在 system 表中采用
IPv6数据类型;统一了system.processes和system.query_log中的客户端信息列。#5640 (alexey-milovidov) - 对使用 MySQL 兼容协议的连接启用会话机制。#5476 #5646 (Yuriy Baranov)
- 支持在集群上执行更多
ALTER查询(ON CLUSTER)。#5593 #5613 (sundyli) - 在
clickhouse-local配置文件中支持<logger>部分。#5540 (proller) - 允许在
clickhouse-local中使用remote表函数运行查询。#5627 (proller)
性能改进
- 新增在 MergeTree 列末尾写入最终标记的功能。这可以避免对超出表数据范围的键进行无用读取。仅在使用自适应索引粒度时启用。#5624 (alesapin)
- 通过减少
stat系统调用次数,提高了在非常慢的文件系统上 MergeTree 表的性能。#5648 (alexey-milovidov) - 修复了在 19.6 版本中引入的,从 MergeTree 表读取时的性能下降问题。修复 #5631。#5633 (alexey-milovidov)
构建/测试/打包改进
- 实现了一个用于测试的 ZooKeeper 接口实现
TestKeeper#5643 (alexey-milovidov) (levushkin aleksej) - 从现在开始,
.sql测试可以按服务器隔离、并行运行,并使用随机数据库。这样可以更快地运行测试,添加具有自定义服务器配置的新测试,并确保不同测试之间不会互相影响。#5554 (Ivan) - 从性能测试中移除了
<name>和<metrics>#5672 (Olga Khvostikova) - 修复了
Pretty格式的 "select_format" 性能测试 #5642 (alexey-milovidov)
ClickHouse Release 19.9
ClickHouse Release 19.9.3.31, 2019-07-05
Bug Fix
- 修复 Delta 编解码器中的段错误,该错误会影响值长度小于 32 位的列。此缺陷会导致随机内存损坏。 #5786 (alesapin)
- 修复在检查包含 LowCardinality 列的 part 时出现的罕见错误。 #5832 (alesapin)
- 修复在对包含非物理列的 block 进行 TTL merge 时的段错误。 #5819 (Anton Popov)
- 修复低优先级查询可能无限休眠的潜在问题。 #5842 (alexey-milovidov)
- 修复 ClickHouse 将默认时区判定为 UCT 而不是 UTC 的问题。 #5828 (alexey-milovidov)
- 修复一个 bug,该 bug 会导致在分布式执行 DROP/ALTER/TRUNCATE/OPTIMIZE ON CLUSTER 查询时,先在 follower 副本上而不是在 leader 副本上执行。现在这些查询将直接在 leader 副本上执行。 #5757 (alesapin)
- 修复一个竞争条件,该问题会导致在执行 SYSTEM FLUSH LOGS 查询后,一些查询不会立即出现在
query_log中。 #5685 (Anton Popov) - 为
evalMLModel函数补充对常量参数的支持。 #5820 (alexey-milovidov)
ClickHouse Release 19.9.2.4, 2019-06-24
New Feature
- 在
system.parts表中显示关于 frozen parts 的信息。 #5471 (proller) - 如果未在参数中设置密码,则在 TTY 上启动
clickhouse-client时向客户端询问密码。 #5092 (proller) - 为 Decimal 类型实现
dictGet和dictGetOrDefault函数。 #5394 (Artem Zuikov)
Improvement
- Debian init:添加服务停止超时时间。 #5522 (proller)
- 添加一个默认禁用的设置,用于创建带有可疑 LowCardinality 类型的表。 #5448 (Olga Khvostikova)
- 当在
evalMLMethod函数中不以 State 形式使用时,回归函数会返回模型权重。 #5411 (Quid37) - 重命名并改进回归方法。 #5492 (Quid37)
- 使字符串搜索器的接口更清晰。 #5586 (Danila Kutenin)
Bug Fix
- 修复 Kafka 中潜在的数据丢失 #5445 (Ivan)
- 修复在以零列为参数调用时
PrettySpace格式中可能出现的无限循环问题 #5560 (Olga Khvostikova) - 修复了线性模型中 UInt32 溢出的问题。允许对非 const 模型参数调用 eval ML 模型。#5516 (Nikolai Kochetov)
- 如果指定的索引不存在,
ALTER TABLE ... DROP INDEX IF EXISTS ...不应抛出异常 #5524 (Gleb Novikov) - 修复在标量子查询中使用
bitmapHasAny时出现的段错误 #5528 (Zhichang Yu) - 修复了一个错误:在清空 DNS 缓存后,复制连接池不会重试解析主机。 #5534 (alesapin)
- 修复了 ReplicatedMergeTree 上
ALTER ... MODIFY TTL的问题。#5539 (Anton Popov) - 修复向带有 MATERIALIZED 列的 Distributed 表执行 INSERT 时的问题 #5429 (Azat Khuzhin)
- 修复在截断 Join 存储时出现的 bad alloc 问题 #5437 (TCeason)
- 在最近几个版本的
tzdata软件包中,一些文件现在是符号链接。用于检测默认时区的现有机制因此被破坏,对某些时区会返回错误的名称。现在至少在提供TZ的情况下,我们会强制将时区名称设置为TZ的内容。#5443(Ivan) - 修复了在极少数情况下使用 MultiVolnitsky 搜索器时的问题:当常量 needle 的总长度至少为 16KB 时,算法会遗漏或覆盖之前的结果,从而可能导致
multiSearchAny的结果不正确。#5588 (Danila Kutenin) - 修复了 ExternalData 请求的设置无法复用 ClickHouse 设置的问题。此外,目前由于名称存在歧义(在 external data 中可以被解释为表格式,而在查询中可以被解释为设置),
date_time_input_format和low_cardinality_allow_in_native_format这两个设置暂时无法使用。#5455 (Danila Kutenin) - 修复了仅从文件系统删除数据片段而未从 Zookeeper 中删除时会出现的 Bug。 #5520 (alesapin)
- 从 MySQL 协议中移除调试日志 #5478 (alexey-milovidov)
- 在 DDL 查询处理过程中忽略 ZNONODE #5489 (Azat Khuzhin)
- 修复在包含不同类型的
UNION ALL中结果列的类型问题。在某些情况下,结果列的数据与列类型不一致。 #5503 (Artem Zuikov) - 在
dictGetT函数中遇到错误的整数时抛出异常,而不是直接崩溃。#5446 (Artem Zuikov) - 修复
system.dictionaries表中哈希字典的element_count和load_factor字段值错误。 #5440 (Azat Khuzhin)
构建/测试/打包改进
- 修复在未启用
BrotliHTTP 压缩支持(ENABLE_BROTLI=OFFcmake 变量)的情况下的构建问题。#5521 (Anton Yuzhaninov) - 将 roaring.h 头文件以 roaring/roaring.h 的路径包含。#5523 (Orivej Desh)
- 修复 hyperscan 中的 gcc9 警告(#line 指令非常糟糕!)。#5546 (Danila Kutenin)
- 修复使用 gcc-9 编译时的所有警告。修复部分 contrib 问题。修复 gcc9 ICE 并将其提交到 Bugzilla。#5498 (Danila Kutenin)
- 修复使用 lld 链接时的问题。#5477 (alexey-milovidov)
- 移除字典中未使用的特化实现。#5452 (Artem Zuikov)
- 改进针对不同类型文件的表格格式化与解析的性能测试。#5497 (Olga Khvostikova)
- 修复并行测试运行相关的问题。#5506 (proller)
- Docker:使用来自 clickhouse-test 的配置。#5531 (proller)
- 修复在 FreeBSD 上的编译问题。#5447 (proller)
- 将 boost 升级到 1.70。#5570 (proller)
- 修复将 ClickHouse 作为子模块进行构建时的问题。#5574 (proller)
- 改进 JSONExtract 的性能测试。#5444 (Vitaly Baranov)
ClickHouse 19.8 发布
ClickHouse 19.8.3.8 发布,2019-06-11
新功能
- 增加了用于处理 JSON 的函数 #4686 (hcz) #5124. (Vitaly Baranov)
- 添加一个名为 basename 的函数,其行为类似于许多语言中已存在的 basename 函数(例如 Python 中的
os.path.basename、PHP 中的basename等)。可同时处理类 UNIX 路径和 Windows 路径。#5136 (Guillaume Tassery) - 添加了
LIMIT n, m BY或LIMIT m OFFSET n BY语法,用于在 LIMIT BY 子句中将偏移量设为 n。 #5138 (Anton Popov) - 新增了数据类型
SimpleAggregateFunction,可在AggregatingMergeTree中使用带有轻量级聚合的列。该类型只能与any、anyLast、sum、min、max等简单函数一起使用。 #4629 (Boris Granveaud) - 为函数
ngramDistance新增了对非常量参数的支持 #5198 (Danila Kutenin) - 新增函数
skewPop、skewSamp、kurtPop和kurtSamp,分别用于计算总体偏度、样本偏度、总体峰度和样本峰度。 #5200 (hcz) - 为
MaterializeView存储添加重命名操作支持。 #5209 (Guillaume Tassery) - 新增了服务器,支持使用 MySQL 客户端连接 ClickHouse。 #4715 (Yuriy Baranov)
- 添加
toDecimal*OrZero和toDecimal*OrNull函数。 #5291 (Artem Zuikov) - 为函数
quantile、quantiles、median、quantileExactWeighted、quantilesExactWeighted、medianExactWeighted增加对 Decimal 类型的支持。#5304 (Artem Zuikov) - 添加了
toValidUTF8函数,用于将所有无效的 UTF-8 字符替换为替换字符 �(U+FFFD)。 #5322 (Danila Kutenin) - 添加了
format函数。使用常量格式模式(简化版 Python 格式模式)对参数中列出的字符串进行格式化。#5330 (Danila Kutenin) - 添加了
system.detached_parts表,用于存储MergeTree表中已分离数据部件(detached parts)的信息。 #5353 (akuzm) - 新增
ngramSearch函数,用于计算 needle 与 haystack 之间的非对称差异。#5418#5422 (Danila Kutenin) - 使用聚合函数接口实现了基础机器学习方法(随机线性回归和逻辑回归)。提供多种模型权重更新策略(简单梯度下降、动量法、Nesterov 方法)。同时支持自定义大小的小批量(mini-batch)。 #4943 (Quid37)
- 实现
geohashEncode和geohashDecode函数。#5003(Vasily Nemkov) - 新增聚合函数
timeSeriesGroupSum,可对采样时间戳未对齐的不同时间序列进行聚合。它会在相邻两个采样时间戳之间使用线性插值,然后将这些时间序列求和。新增聚合函数timeSeriesGroupRateSum,用于计算时间序列的变化速率并对这些速率求和。 #4542 (Yangkuan Liu) - 新增了函数
IPv4CIDRtoIPv4Range和IPv6CIDRtoIPv6Range,用于根据 CIDR 计算子网中 IP 地址范围的起始和结束地址。 #5095 (Guillaume Tassery) - 在通过 HTTP 发送查询且启用
send_progress_in_http_headers设置时,添加一个 X-ClickHouse-Summary 头部。返回与 X-ClickHouse-Progress 相同的常规信息,并额外包含本次查询插入的行数和字节数等信息。 #5116 (Guillaume Tassery)
改进
- 为 MergeTree 系列表添加了
max_parts_in_total设置(默认值:100 000),用于防止不安全地指定分区键 #5166。 #5171 (alexey-milovidov) clickhouse-obfuscator:通过将初始种子与列名(而非列位置)组合,为每一列派生种子值。此功能用于转换包含多个关联表的数据集,以便在转换后这些表之间仍然可以进行 JOIN 操作。#5178 (alexey-milovidov)- 新增函数
JSONExtractRaw、JSONExtractKeyAndValues。将函数jsonExtract<type>重命名为JSONExtract<type>。在出错时,这些函数返回相应的值,而不是NULL。修改了函数JSONExtract,现在它从最后一个参数获取返回类型,并且不会引入 Nullable 类型。当 AVX2 指令不可用时,增加了回退到 RapidJSON 的机制。simdjson 库已更新到新版本。#5235 (Vitaly Baranov) - 现在,
if和multiIf函数不再依赖条件的Nullable,而是依赖各个分支来实现 SQL 兼容性。#5238 (Jian Wu) In谓词现在会像Equal函数一样,对Null输入生成Null结果。#5152 (Jian Wu)- 每当从 Kafka 读取了 (flush_interval / poll_timeout) 行数据时,就检查一次时间限制。这样可以更频繁地中断 Kafka 消费者的读取,并检查顶层数据流的时间限制 #5249 (Ivan)
- 将 rdkafka 与内置的 SASL 链接起来,这样就可以使用 SASL SCRAM 认证 #5253 (Ivan)
- RowRefList 的批处理版本,用于 ALL JOINS。 #5267 (Artem Zuikov)
- clickhouse-server:提供更详细的 listen 错误消息。#5268 (proller)
- 在 clickhouse-copier 中为
<sharding_key>所使用的函数增加字典支持 #5270 (proller) - 新增配置项
kafka_commit_every_batch用于控制 Kafka 提交策略。 它允许设置提交模式:在处理完每一批消息后提交,或在整个数据块写入存储后再提交。这是在某些极端情况下,在可能丢失部分消息与可能重复读取消息之间进行的权衡。 #5308 (Ivan) - 使
windowFunnel支持更多无符号整数类型。 #5320 (sundyli) - 允许在 Merge 引擎中隐藏虚拟列
_table。 #5325 (Ivan) - 使
sequenceMatch聚合函数支持其他无符号整数类型 #5339 (sundyli) - 当校验和不匹配且很可能由硬件故障导致时,提供更清晰的错误消息。#5355 (alexey-milovidov)
- 检查
StorageMerge所依赖的底层表是否支持采样 #5366 (Ivan) - 在外部字典中使用完 MySQL 连接后将其关闭。此更改与问题 #893 相关。#5395 (Clément Rodriguez)
- 改进 MySQL Wire 协议。将格式名称更改为 MySQLWire。使用 RAII 调用 RSA_free。如果无法创建上下文则禁用 SSL。 #5419 (Yuriy Baranov)
- clickhouse-client:允许在历史文件无法访问时也能运行(只读、没有磁盘空间、文件是目录等)。 #5431 (proller)
- 在对 Distributed 表执行异步 INSERT 时遵从查询设置。 #4936 (TCeason)
- 已将函数
leastSqr重命名为simpleLinearRegression,LinearRegression重命名为linearRegression,LogisticRegression重命名为logisticRegression。 #5391 (Nikolai Kochetov)
性能改进
- 在
ALTER MODIFY查询中对非复制的 MergeTree 表的部分进行并行处理。#4639 (Ivan Kush) - 优化正则表达式提取。#5193 #5191 (Danila Kutenin)
- 如果右连接键列仅在
JOIN ON子句中使用,则不要将其添加到连接结果中。#5260 (Artem Zuikov) - 在首次获得空响应后冻结 Kafka 缓冲区,从而避免在某些行解析流中针对空结果多次调用
ReadBuffer::next()。#5283 (Ivan) - 对多参数的
concat函数进行优化。#5357 (Danila Kutenin) - 查询优化:在将逗号连接或交叉连接重写为内连接时,允许下推
IN谓词。#5396 (Artem Zuikov) - 将我们的 LZ4 实现升级为参考实现,以加快解压缩速度。#5070 (Danila Kutenin)
- 实现了基于 kxsort 的 MSD 基数排序以及部分排序。#5129 (Evgenii Pravda)
Bug 修复
- 修复在存在
JOIN时下推所需列的问题。#5192 (Winter Zhang) - 修复当 ClickHouse 由 systemd 运行时,命令
sudo service clickhouse-server forcerestart未按预期工作的问题。#5204 (proller) - 修复 DataPartsExchange 中的 HTTP 错误码(用于服务器间通信并监听 9009 端口的 HTTP 服务器在出错时也始终返回 200)。#5216 (proller)
- 修复
SimpleAggregateFunction在String长度大于MAX_SMALL_STRING_SIZE时的问题。#5311 (Azat Khuzhin) - 修复在
IN中从Decimal转换为Nullable(Decimal)的错误,并支持其他 Decimal 到 Decimal 的转换(包括不同的小数位数)。#5350 (Artem Zuikov) - 修复 simdjson 库中 FPU 状态被破坏的问题,该问题会导致
uniqHLL和uniqCombined聚合函数以及log等数学函数的计算结果错误。#5354 (alexey-milovidov) - 修复 JSON 函数中处理常量 / 非常量混合场景时的问题。#5435 (Vitaly Baranov)
- 修复
retention函数。现在一行数据中所有满足条件的项都会被添加到该行的数据状态中。#5119 (小路) - 修复
quantileExact在使用 Decimal 时的结果类型问题。#5304 (Artem Zuikov)
文档
构建/测试/打包方面的改进
- 修复了一些由 sanitizer 报告的、可能存在 use-after-free 的问题。#5139 #5143 #5393 (Ivan)
- 为了方便起见,将性能测试从各自的独立目录中移出。#5158 (alexey-milovidov)
- 修复不正确的性能测试用例。#5255 (alesapin)
- 添加了一个用于计算由比特翻转引起的校验和的工具,以便调试硬件问题。#5334 (alexey-milovidov)
- 提高 runner 脚本的可用性。#5340#5360 (filimonov)
- 添加了一份简短的性能测试编写说明。#5408 (alesapin)
- 在性能测试中新增了在 CREATE、FILL 和 DROP 查询里进行替换的功能。#5367 (Olga Khvostikova)
ClickHouse 版本 19.7
ClickHouse 版本 19.7.5.29,2019-07-05
Bug 修复
- 修复了某些包含 JOIN 的查询中的性能回归问题。 #5192 (Winter Zhang)
ClickHouse 版本 19.7.5.27,2019-06-09
新特性
- 添加了与数组函数
hasAny和hasAll类似的位图函数bitmapHasAny和bitmapHasAll。 #5279 (Sergi Vladykin)
Bug 修复
- 修复在包含 Null 值时
minmax索引导致的段错误问题。#5246 (Nikita Vasilev) - 将 LIMIT BY 中的所有输入列标记为必需的输出列,修复某些分布式查询中的 "Not found column" 错误。#5407 (Constantin S. Pan)
- 修复在带有 DEFAULT 的列上执行
SELECT .. PREWHERE时出现的 "Column '0' already exists" 错误。#5397 (proller) - 修复在
ReplicatedMergeTree上执行ALTER MODIFY TTL查询的问题。#5539 (Anton Popov) - 当 Kafka 消费者启动失败时,不再导致服务器崩溃。#5285 (Ivan)
- 修复导致 bitmap 函数产生错误结果的问题。#5359 (Andy Yang)
- 修复哈希字典的 element_count 计算(不再包含重复项)。#5440 (Azat Khuzhin)
- 使用环境变量 TZ 的内容作为时区名称,这有助于在某些情况下正确检测默认时区。#5443 (Ivan)
- 不再在
dictGetT函数中尝试转换整数,因为该转换行为不正确,改为抛出异常。#5446 (Artem Zuikov) - 修复 ExternalData HTTP 请求中的设置问题。#5455 (Danila Kutenin)
- 修复仅从文件系统删除数据分片而未从 ZooKeeper 中删除的问题。#5520 (alesapin)
- 修复
bitmapHasAny函数中的段错误问题。#5528 (Zhichang Yu) - 修复复制连接池在 DNS 缓存已被清除的情况下仍不会重试解析主机的错误。#5534 (alesapin)
- 修复
DROP INDEX IF EXISTS查询。现在在指定索引不存在时,ALTER TABLE ... DROP INDEX IF EXISTS ...查询不会抛出异常。#5524 (Gleb Novikov) - 修复 UNION ALL 的超类型列问题。此前在结果列的数据和列类型上可能出现不一致的情况。#5503 (Artem Zuikov)
- 在处理 DDL 查询时跳过 ZNONODE。此前如果另一个节点从任务队列中删除了 znode,而本节点尚未处理它、但已经获取到子节点列表,则会终止 DDLWorker 线程。#5489 (Azat Khuzhin)
- 修复向带有 MATERIALIZED 列的 Distributed() 表执行 INSERT 时的问题。#5429 (Azat Khuzhin)
ClickHouse 版本 19.7.3.9,2019-05-30
新特性
- 允许限制用户可指定的设置取值范围。 这些约束可以在用户设置配置文件中进行配置。 #4931 (Vitaly Baranov)
- 为函数
groupUniqArray增加第二个版本,带有可选的max_size参数,用于限制结果数组的大小。其行为类似于groupArray(max_size)(x)函数。 #5026 (Guillaume Tassery) - 对于 TSVWithNames/CSVWithNames 输入文件格式,现在可以从文件头中确定列顺序。
这由
input_format_with_names_use_header参数控制。 #5081 (Alexander)
Bug 修复
- 在合并期间使用 uncompressed_cache + JOIN 时发生崩溃 (#5197) #5133 (Danila Kutenin)
- 对 system 表执行 clickhouse-client 查询时发生段错误。#5066 #5127 (Ivan)
- 通过 KafkaEngine 在高负载下导致数据丢失 (#4736) #5080 (Ivan)
- 修复了一个极其罕见的数据竞争问题:在执行带有 UNION ALL 的查询时,如果涉及至少两个对 system.columns、system.tables、system.parts、system.parts_tables 或 Merge 系列表的 SELECT,并且同时对相关表的列执行 ALTER 操作,则可能会触发该问题。#5189 (alexey-milovidov)
性能改进
- 当在
ORDER BY中按单个数值列排序且未使用LIMIT时,使用基数排序 (radix sort)。#5106, #4439 (Evgenii Pravda, alexey-milovidov)
文档
构建/测试/打包改进
- 在
clickhouse-test中正确打印 UTF-8 字符。 #5084 (alexey-milovidov) - 为 clickhouse-client 添加命令行参数,以始终加载提示 数据。#5102 (alexey-milovidov)
- 修复部分 PVS-Studio 警告。 #5082 (alexey-milovidov)
- 更新 LZ4 #5040 (Danila Kutenin)
- 将 gperf 添加到构建依赖项中,为即将提交的 pull request #5030 做准备。 #5110 (proller)
ClickHouse 版本 19.6
ClickHouse 版本 19.6.3.18,2019-06-13
Bug 修复
- 修复了来自表函数
mysql和odbc以及对应表引擎的查询中 IN 条件下推优化的问题。修复了 #3540 和 #2384。#5313 (alexey-milovidov) - 修复了 Zookeeper 中的死锁。#5297 (github1youlc)
- 允许在 CSV 中使用带引号的小数。#5284 (Artem Zuikov)
- 禁止将浮点数的 Inf/NaN 转换为 Decimal 类型(抛出异常)。#5282 (Artem Zuikov)
- 修复了
RENAME查询中的数据竞争问题。#5247 (Winter Zhang) - 临时禁用 LFAlloc。使用 LFAlloc 可能会在为 UncompressedCache 分配时导致大量 MAP_FAILED,从而在高负载服务器上引发查询崩溃。cfdba93 (Danila Kutenin)
ClickHouse 版本 19.6.2.11,2019-05-13
新特性
- 支持对列和表使用 TTL 表达式。#4212 (Anton Popov)
- 为 HTTP 响应添加了对
brotli压缩的支持(Accept-Encoding: br)。#4388 (Mikhail) - 新增函数
isValidUTF8,用于检查一组字节是否为正确的 UTF-8 编码。#4934 (Danila Kutenin) - 新增负载均衡策略
first_or_random,该策略会将查询发送到第一个指定主机,如果该主机不可访问,则将查询发送到分片中的随机主机。对跨复制拓扑的部署非常有用。#5012 (nvartolomei)
实验性特性
改进
- 为函数
substringUTF8新增对非常量以及负值 size 和 length 参数的支持。#4989 (alexey-milovidov) - 禁用在 LEFT JOIN 中对右表、RIGHT JOIN 中对左表,以及 FULL JOIN 中对两侧表的谓词下推(push-down)。这修复了某些情况下错误的 JOIN 结果。#4846 (Ivan)
clickhouse-copier:自动从--task-file选项指定的文件中上传任务配置。#4876 (proller)- 为存储工厂(storage factory)和表函数工厂(table functions factory)增加拼写错误处理器。#4891 (Danila Kutenin)
- 在没有子查询的多表 JOIN 中支持星号和限定星号(qualified asterisk)。#4898 (Artem Zuikov)
- 让缺失列的错误信息更易于理解、更友好。#4915 (Artem Zuikov)
性能改进
- 显著加速 ASOF JOIN。#4924 (Martijn Bakker)
向后不兼容的更改
Bug 修复
- 修复了
clickhouse-copier中潜在的空指针解引用问题。#4900 (proller) - 修复了在包含 JOIN + ARRAY JOIN 的查询中出现的错误。#4938 (Artem Zuikov)
- 修复了在一个字典通过 engine=Dictionary 的数据库依赖于另一个字典时,服务器启动时可能发生的挂起问题。#4962 (Vitaly Baranov)
- 部分修复 distributed_product_mode = local。现在可以通过表别名在 where/having/order by/... 中引用本地表的列。如果表没有别名则抛出异常。目前仍然无法在没有表别名的情况下访问这些列。#4986 (Artem Zuikov)
- 修复了在
SELECT DISTINCT与JOIN一起使用时可能出现的错误结果。#5001 (Artem Zuikov) - 修复了一个极少见的数据竞争问题:在执行包含至少两个来自 system.columns、system.tables、system.parts、system.parts_tables 或 Merge 系列表的 SELECT,并通过 UNION ALL 合并,同时对相关表的列执行 ALTER 操作的查询时,可能会触发该问题。#5189 (alexey-milovidov)
构建 / 测试 / 打包改进
- 修复了在不同主机上运行 clickhouse-server 时出现的测试失败问题 #4713 (Vasily Nemkov)
- clickhouse-test:在非 TTY 环境中禁用颜色控制序列。#4937 (alesapin)
- clickhouse-test:允许使用任意测试数据库(在可能的情况下移除
test.限定)#5008 (proller) - 修复 ubsan 错误 #5037 (Vitaly Baranov)
- 将 Yandex LFAlloc 添加到 ClickHouse,以便使用不同方式为 MarkCache 和 UncompressedCache 数据分配内存,从而更可靠地捕获段错误 #4995 (Danila Kutenin)
- 用于辅助回溯移植(backport)和编写变更日志的 Python 工具。#4949 (Ivan)
ClickHouse 版本 19.5
ClickHouse 版本 19.5.4.22,2019-05-13
Bug 修复
- 修复了在 bitmap* 函数中可能发生的崩溃。 #5220 #5228 (Andy Yang)
- 修复了一个极少出现的数据竞争问题:在执行包含至少两个从 system.columns、system.tables、system.parts、system.parts_tables 或 Merge 系列表进行 SELECT 的 UNION ALL 查询时,如果同时对相关表的列执行 ALTER 操作,可能会触发该问题。 #5189 (alexey-milovidov)
- 修复错误
Set for IN is not created yet in case of using single LowCardinality column in the left part of IN。当 LowCardinality 列是主键的一部分时会出现此错误。#5031 #5154 (Nikolai Kochetov) - 修改 retention 函数行为:之前如果一行同时满足第一个条件和第 N 个条件,则仅将第一个满足的条件加入数据状态。现在会将该行中所有满足的条件都加入数据状态。 #5119 (小路)
ClickHouse 版本 19.5.3.8,2019-04-18
Bug 修复
- 将设置
max_partitions_per_insert_block的类型从 boolean 修正为 UInt64。 #5028 (Mohammad Hossein Sekhavat)
ClickHouse 版本 19.5.2.6,2019-04-15
新特性
- 添加了基于 Hyperscan 的多模式正则表达式匹配(函数
multiMatchAny、multiMatchAnyIndex、multiFuzzyMatchAny、multiFuzzyMatchAnyIndex)。#4780,#4841(Danila Kutenin) - 添加了
multiSearchFirstPosition函数。#4780(Danila Kutenin) - 为表实现了针对每行的预定义表达式过滤器。#4792(Ivan)
- 新增了一种基于 Bloom Filter 的数据跳过索引类型(可用于
equal、in和like函数)。#4499(Nikita Vasilev) - 新增
ASOF JOIN,用于执行将数据与最新已知值关联起来的查询。#4774 #4867 #4863 #4875(Martijn Bakker、Artem Zuikov) - 将多个
COMMA JOIN重写为CROSS JOIN,然后在可能的情况下再将其重写为INNER JOIN。#4661(Artem Zuikov)
改进
topK和topKWeighted现在支持自定义loadFactor(修复问题 #4252)。#4634(Kirill Danshin)- 允许在没有采样的表上使用
parallel_replicas_count > 1(对于这类表,该设置会被直接忽略)。在之前的版本中,这会导致异常。#4637(Alexey Elymanov) - 支持
CREATE OR REPLACE VIEW。允许在单条语句中创建视图或设置新的定义。#4654(Boris Granveaud) Buffer表引擎现在支持PREWHERE。#4671(Yangkuan Liu)- 新增支持在 zookeeper 中缺少元数据时,以
readonly模式启动副本表。#4691(alesapin) - 修复了 clickhouse-client 中进度条闪烁的问题。该问题在对流式查询使用
FORMAT Null时最为明显。#4811(alexey-milovidov) - 允许按用户级别禁用使用
hyperscan库的函数,以限制潜在的过度且不可控的资源使用。#4816(alexey-milovidov) - 在所有错误日志中增加版本号记录。#4824(proller)
- 为
multiMatch函数添加了限制,要求字符串大小必须能适配到unsigned int的范围。同时为multiSearch函数添加了参数数量上限。#4834(Danila Kutenin) - 改进了 Hyperscan 中临时缓冲区的使用和错误处理。#4866(Danila Kutenin)
- 从
*GraphiteMergeTree引擎表的表配置中填充system.graphite_detentions。#4584(Mikhail f. Shiryaev) - 将
trigramDistance函数重命名为ngramDistance,并添加了更多带有CaseInsensitive和UTF的函数。#4602(Danila Kutenin) - 改进了数据跳过索引的计算。#4640(Nikita Vasilev)
- 将普通列、
DEFAULT、MATERIALIZED和ALIAS列保存在同一个列表中(修复问题 #2867)。#4707(Alex Zatelepin)
Bug 修复
- 在内存分配失败时避免调用
std::terminate。现在会按预期抛出std::bad_alloc异常。 #4665 (alexey-milovidov) - 修复了从缓冲区读取
capnproto的问题。有时文件无法通过 HTTP 成功加载。#4674(Vladislav) - 修复在执行
OPTIMIZE TABLE FINAL查询时出现的错误Unknown log entry type: 0。 #4683 (Amos Bird) - 向
hasAny或hasAll函数传入错误参数可能会导致段错误(segfault)。 #4698 (alexey-milovidov) - 在执行
DROP DATABASE dictionary查询时可能会发生死锁。 #4701 (alexey-milovidov) - 修复
median和quantile函数中的未定义行为。 #4702 (hcz) - 修复当
network_compression_method使用小写时的压缩级别检测问题。该问题出现在 v19.1 中。#4706 (proller) - 修复了忽略
<timezone>UTC</timezone>设置的问题(修复问题 #4658)。#4718(proller) - 修复
histogram函数在Distributed表上的行为。#4741 (olegkv) - 修复了 TSan 报告
destroy of a locked mutex。 #4742 (alexey-milovidov) - 修复了由于系统日志使用中的竞争条件导致在关闭时出现的 TSan 报告。修复了在启用 part_log 时,关闭过程中可能出现的 use-after-free 问题。#4758 (alexey-milovidov)
- 在发生错误时,修复
ReplicatedMergeTreeAlterThread中对部分的重新检查。#4772 (Nikolai Kochetov) - 对中间
aggregate function状态进行算术运算在使用常量参数(例如子查询结果)时不起作用。 #4776 (alexey-milovidov) - 在元数据中始终使用反引号包裹列名。否则,将无法创建包含名为
index的列的表(由于元数据中的ATTACH查询格式错误,服务器将无法重启)。#4782 (alexey-milovidov) - 修复在
Distributed表上执行ALTER ... MODIFY ORDER BY时的崩溃。#4790 (TCeason) - 修复在启用
enable_optimize_predicate_expression时JOIN ON导致的段错误。 #4794 (Winter Zhang) - 修复从 Kafka 消费 protobuf 消息后多插入一行记录的错误。 #4808 (Vitaly Baranov)
- 修复在非空列与可空列之间执行
JOIN时的崩溃。修复在启用ANY JOIN且设置join_use_nulls时,对右侧键中的NULLs处理不正确的问题。#4815 (Artem Zuikov) - 修复
clickhouse-copier中的段错误。 #4835 (proller) - 修复了在对
system.tables执行SELECT时,如果表被并发重命名或修改可能出现的竞争条件。 #4836 (alexey-milovidov) - 修复了在获取已过期的数据分片时发生的数据竞争问题。#4839 (alexey-milovidov)
- 修复了在对 MergeTree 系列表执行
RENAME操作时可能发生的罕见数据竞争问题。 #4844 (alexey-milovidov) - 修复了函数
arrayIntersect中的段错误。当混合使用常量参数和普通参数调用该函数时,可能会发生段错误。#4847 (Lixiang Qian) - 修复了在罕见情况下从
Array(LowCardinality)列读取数据的问题,该问题会在列中包含一长串空数组时出现。 #4850 (Nikolai Kochetov) - 修复在
FULL/RIGHT JOIN中,当连接条件包含可为 NULL 和不可为 NULL 的列时出现的崩溃问题。#4855 (Artem Zuikov) - 修复在副本之间获取数据分片时抛出的
No message received异常。#4856 (alesapin) - 修复了在单个数组中存在多个重复值时,
arrayIntersect函数结果不正确的问题。 #4871 (Nikolai Kochetov) - 修复了在并发执行
ALTER COLUMN查询时可能导致服务器崩溃的竞争条件(修复问题 #3421)。 #4592 (Alex Zatelepin) - 修复在包含常量列的
FULL/RIGHT JOIN中出现错误结果的问题。 #4723 (Artem Zuikov) - 修复使用星号的
GLOBAL JOIN中的重复项。 #4705 (Artem Zuikov) - 在未指定列类型时,修复对列
CODEC执行ALTER MODIFY时的参数推导问题。 #4883 (alesapin) - 当
URL包含片段但不包含查询字符串时,函数cutQueryStringAndFragment()和queryStringAndFragment()现在能够正确工作。#4894 (Vitaly Baranov) - 修复在将
min_bytes_to_use_direct_io设置为大于零时出现的罕见错误,该错误会在线程需要在列文件中向后定位时发生。 #4897 (alesapin) - 修复对带有
LowCardinality参数的聚合函数的错误参数类型处理(修复问题 #4919)。#4922(Nikolai Kochetov) - 修复
GLOBAL JOIN中名称限定错误。#4969 (Artem Zuikov) - 修正函数
toISOWeek在 1970 年的结果。#4988 (alexey-milovidov) - 修复在针对
ReplicatedMergeTree*表引擎系列执行ON CLUSTER时,DROP、TRUNCATE和OPTIMIZE查询被重复执行的问题。#4991 (alesapin)
向后不兼容的变更
- 将设置
insert_sample_with_metadata重命名为input_format_defaults_for_omitted_fields。 #4771 (Artem Zuikov) - 新增设置
max_partitions_per_insert_block(默认值为 100)。如果插入的数据块包含的分区数量大于该值,将抛出异常。如果希望移除此限制,可将其设置为 0(不推荐)。 #4845 (alexey-milovidov) - 多重搜索函数被重命名(
multiPosition重命名为multiSearchAllPositions,multiSearch重命名为multiSearchAny,firstMatch重命名为multiSearchFirstIndex)。 #4780 (Danila Kutenin)
性能改进
- 通过内联优化 Volnitsky 搜索器,对于包含大量待查模式(needles)或许多相似二元组(bigrams)的查询,可带来约 5–10% 的搜索性能提升。 #4862 (Danila Kutenin)
- 修复在
use_uncompressed_cache设置大于 0 且所有读取数据都在缓存中的情况下出现的性能问题。 #4913 (alesapin)
构建/测试/打包改进
- 加强 debug 构建:更细粒度的内存映射和 ASLR;为 mark 缓存和索引添加内存保护。这有助于在 ASan 和 MSan 无法捕获问题时发现更多内存踩踏类 bug。#4632 (alexey-milovidov)
- 增加对 cmake 变量
ENABLE_PROTOBUF、ENABLE_PARQUET和ENABLE_BROTLI的支持,从而可以启用/禁用上述特性(与我们对 librdkafka、mysql 等所做的类似)。#4669 (Silviu Caragea) - 增加在测试运行结束后,当某些查询挂起时打印进程列表以及所有线程堆栈跟踪的能力。#4675 (alesapin)
- 在
clickhouse-test中对Connection loss错误添加重试逻辑。#4682 (alesapin) - 在打包脚本中增加基于 Vagrant 的 FreeBSD 构建以及基于 Thread Sanitizer 的构建。#4712 #4748 (alesapin)
- 安装过程中现在会要求用户为
'default'用户设置密码。#4725 (proller) - 在
rdkafka库中抑制警告。#4740 (alexey-milovidov) - 允许在构建时关闭 SSL 支持。#4750 (proller)
- 新增一种方式,以自定义用户身份运行 clickhouse-server 镜像。#4753 (Mikhail f. Shiryaev)
- 将 contrib 中的 boost 升级到 1.69。#4793 (proller)
- 在使用 Thread Sanitizer 编译时禁用
mremap的使用。出乎意料的是,TSan 不会拦截mremap(尽管会拦截mmap、munmap),这会导致误报。已修复有状态测试中的 TSan 报告。#4859 (alexey-milovidov) - 添加通过 HTTP 接口使用 format schema 的测试用例。#4864 (Vitaly Baranov)
ClickHouse 版本 19.4
ClickHouse 版本 19.4.4.33,2019-04-17
错误修复
- 避免在内存分配失败时调用
std::terminate。现在会按预期抛出std::bad_alloc异常。#4665 (alexey-milovidov) - 修复了
capnproto从缓冲区读取的问题。有时文件无法通过 HTTP 成功加载。#4674 (Vladislav) - 修复在执行
OPTIMIZE TABLE FINAL查询后出现的错误Unknown log entry type: 0。 #4683 (Amos Bird) - 向
hasAny或hasAll函数传入错误参数可能会导致段错误。 #4698 (alexey-milovidov) - 在执行
DROP DATABASE dictionary查询时可能会发生死锁。 #4701 (alexey-milovidov) - 修复
median和quantile函数中的未定义行为。 #4702 (hcz) - 修复当
network_compression_method使用小写时的压缩级别检测问题。该问题存在于 v19.1 版本中。#4706 (proller) - 修复了忽略
<timezone>UTC</timezone>设置的问题(修复了 issue #4658)。 #4718 (proller) - 修正
Distributed表上histogram函数的行为。 #4741 (olegkv) - 修复了 tsan 报告的
destroy of a locked mutex问题。 #4742 (alexey-milovidov) - 修复了由于系统日志使用中的竞争条件导致在关闭过程中触发的 TSan 报告。修复了在启用 part_log 时,关闭时可能出现的 use-after-free 问题。 #4758 (alexey-milovidov)
- 在出错时修复
ReplicatedMergeTreeAlterThread中对数据部件的重新检查。 #4772 (Nikolai Kochetov) - 对中间
aggregate function状态执行算术运算在处理常量参数(例如子查询结果)时无法正常工作。#4776(alexey-milovidov) - 在元数据中始终使用反引号括起列名。否则将无法创建名为
index的列(服务器会因为元数据中格式错误的ATTACH查询而无法重启)。 #4782 (alexey-milovidov) - 修复在
Distributed表上执行ALTER ... MODIFY ORDER BY时的崩溃问题。 #4790 (TCeason) - 修复在启用
enable_optimize_predicate_expression时JOIN ON出现的段错误。 #4794 (Winter Zhang) - 修复从 Kafka 消费 protobuf 消息后多出一行的错误。#4808 (Vitaly Baranov)
- 修复
clickhouse-copier中的段错误。 #4835 (proller) - 修复了在对
system.tables执行SELECT时,表被并发重命名或修改所导致的竞争问题。 #4836 (alexey-milovidov) - 修复了在获取已过期数据部件时出现的数据竞争问题。 #4839 (alexey-milovidov)
- 修复了在对 MergeTree 系列表执行
RENAME TABLE操作时可能发生的罕见数据竞争问题。 #4844 (alexey-milovidov) - 修复了函数
arrayIntersect的段错误。当以常量参数和普通参数混用的方式调用该函数时,可能会发生段错误。 #4847 (Lixiang Qian) - 修复了在罕见情况下从
Array(LowCardinality)列读取数据的问题,该问题会在列包含长序列空数组时出现。 #4850 (Nikolai Kochetov) - 修复在副本之间获取数据分片时出现的
No message received异常。#4856 (alesapin) - 修复在单个数组中存在多个重复值时,
arrayIntersect函数返回结果错误的问题。 #4871 (Nikolai Kochetov) - 修复并发执行
ALTER COLUMN查询时的竞争条件,该问题可能导致服务器崩溃(修复问题 #3421)。#4592(Alex Zatelepin) - 在未指定列类型时,修复对列
CODEC执行ALTER MODIFY时的参数推导逻辑。 #4883 (alesapin) - 函数
cutQueryStringAndFragment()和queryStringAndFragment()现在在URL包含片段但没有查询字符串时可以正确工作。#4894 (Vitaly Baranov) - 修复在将
min_bytes_to_use_direct_io设置为大于零时出现的罕见错误,该错误会在线程需要在列文件中向后移动读指针时触发。 #4897 (alesapin) - 修正聚合函数在处理
LowCardinality参数时的参数类型错误(修复 issue #4919)。#4922(Nikolai Kochetov) - 修复
toISOWeek函数在 1970 年的结果。#4988(alexey-milovidov) - 修复在
ReplicatedMergeTree*表族上使用ON CLUSTER执行DROP、TRUNCATE和OPTIMIZE查询时出现的重复执行问题。#4991 (alesapin)
改进
- 将普通列、
DEFAULT、MATERIALIZED和ALIAS列维护在同一个列表中(修复问题 #2867)。#4707(Alex Zatelepin)
ClickHouse 版本 19.4.3.11,2019-04-02
错误修复
- 修复在
FULL/RIGHT JOIN中,当连接条件一侧为 Nullable 而另一侧为非 Nullable 时发生的崩溃。#4855(Artem Zuikov) - 修复
clickhouse-copier中的段错误(segmentation fault)。#4835(proller)
构建/测试/打包改进
- 新增一种方式,可以以自定义用户身份运行 clickhouse-server 镜像。#4753(Mikhail f. Shiryaev)
ClickHouse 版本 19.4.2.7,2019-03-30
错误修复
- 修复在罕见情况下,从
Array(LowCardinality)列读取数据时的问题:当列包含一长串空数组时会出错。#4850(Nikolai Kochetov)
ClickHouse 版本 19.4.1.3,2019-03-19
错误修复
- 修复包含
LIMIT BY和LIMIT的远程查询。在此之前,如果远程查询同时使用LIMIT BY和LIMIT,LIMIT可能会先于LIMIT BY执行,从而导致结果被过滤得过多。#4708(Constantin S. Pan)
ClickHouse 版本 19.4.0.49,2019-03-09
新功能
- 为
Protobuf格式添加了完整支持(输入、输出以及嵌套数据结构)。#4174 #4493 (Vitaly Baranov) - 基于 Roaring Bitmaps 新增了位图函数。#4207 (Andy Yang) #4568 (Vitaly Baranov)
- 新增对 Parquet 格式的支持。#4448 (proller)
- 为模糊字符串比较新增了 N-gram 距离,类似于 R 语言中的 q-gram 度量。#4466 (Danila Kutenin)
- 将 Graphite rollup 规则从独立的聚合和保留模式中进行了合并。#4426 (Mikhail f. Shiryaev)
- 添加了
max_execution_speed和max_execution_speed_bytes设置以限制资源使用,新增的min_execution_speed_bytes设置用于补充min_execution_speed。#4430 (Winter Zhang) - 实现了函数
flatten。#4555 #4409 (alexey-milovidov, kzon) - 添加了函数
arrayEnumerateDenseRanked和arrayEnumerateUniqRanked(类似于arrayEnumerateUniq,但允许精细控制数组深度,以便查看多维数组内部)。#4475 (proller) #4601 (alexey-milovidov) - 支持多表 JOIN(有部分限制:不支持使用星号,不支持在 ON/WHERE/GROUP BY/… 中使用复杂别名)。#4462 (Artem Zuikov)
Bug 修复
- 本次发布还包含 19.3 和 19.1 中的所有错误修复。
- 修复了数据跳过索引中的一个错误:在执行
INSERT后 granule 的顺序不正确。#4407 (Nikita Vasilev) - 修复了
Nullable和LowCardinality列上的set索引。此前,在Nullable或LowCardinality列上使用set索引,在执行查询时会导致错误Data type must be deserialized with multiple streams。 #4594 (Nikolai Kochetov) - 在执行
executable字典的全量更新时正确设置 update_time。 #4551 (Tema Novikov) - 修复 19.3 中损坏的进度条。 #4627 (filimonov)
- 在某些情况下,当内存区域收缩时,修复了 MemoryTracker 记录值不一致的问题。 #4619 (alexey-milovidov)
- 修复了
ThreadPool中的未定义行为。#4612 (alexey-milovidov) - 修复了一个极其罕见的崩溃问题,其报错信息为
mutex lock failed: Invalid argument,该问题可能在执行 SELECT 的同时并发删除 MergeTree 表时出现。#4608 (Alex Zatelepin) - ODBC 驱动对
LowCardinality数据类型的兼容性。#4381 (proller) - FreeBSD:修复
AIOcontextPool: Found io_event with unknown id 0错误。#4438 (urgordeadbeef) - 无论配置如何,都会创建
system.part_log表。#4483 (alexey-milovidov) - 修复缓存字典中
dictIsIn函数的未定义行为。 #4515 (alesapin) - 修复了这样一种死锁问题:在存在并发 DDL 查询时,当一个 SELECT 查询多次锁定同一张表(例如由不同线程发起或在执行多个子查询时)会导致死锁。 #4535 (Alex Zatelepin)
- 默认禁用
compile_expressions,直到我们引入自有的llvmcontrib 并可以使用clang和asan对其进行测试。#4579 (alesapin) - 当
clickhouse外部字典源的invalidate_query返回不正确的结果集(为空、包含多于一行或多于一列)时,避免调用std::terminate。修复了一个问题:无论lifetime设置如何,invalidate_query都会每隔五秒执行一次。 #4583 (alexey-milovidov) - 在对以
clickhouse为源的字典执行invalidate_query且该查询涉及system.dictionaries表或Dictionaries数据库时,避免发生死锁(较为罕见的情况)。 #4599 (alexey-milovidov) - 修复了在
WHERE为空时的CROSS JOIN行为。#4598 (Artem Zuikov) - 修复了在向函数
replicate传递常量参数时发生的段错误。 #4603 (alexey-milovidov) - 修复谓词优化器中对 lambda 函数的处理。 #4408 (Winter Zhang)
- 多个 JOIN,多处修复。 #4595 (Artem Zuikov)
改进
- 支持在 JOIN ON 子句中为右表列使用别名。 #4412 (Artem Zuikov)
- 多个 JOIN 的结果在子查询中使用时需要正确的结果列名。在结果中用源名称替换扁平别名。 #4474 (Artem Zuikov)
- 改进对包含 JOIN 的语句的下推逻辑。 #4387 (Ivan)
性能改进
- 改进“move to PREWHERE”优化的启发式规则。 #4405 (alexey-milovidov)
- 使用针对 8 位和 16 位键、基于 HashTable API 的合适查找表。 #4536 (Amos Bird)
- 提升字符串比较的性能。 #4564 (alexey-milovidov)
- 在单独的线程中清理分布式 DDL 队列,从而不会减慢处理分布式 DDL 任务的主循环。 #4502 (Alex Zatelepin)
- 当
min_bytes_to_use_direct_io被设置为 1 时,并非每个文件都以 O_DIRECT 模式打开,因为要读取的数据量有时会被低估为仅一个压缩块的大小。 #4526 (alexey-milovidov)
构建/测试/打包改进
- 增加对 clang-9 的支持 #4604 (alexey-milovidov)
- 修复错误的
__asm__指令(再次修复) #4621 (Konstantin Podshumok) - 添加从命令行为
clickhouse-performance-test指定设置的功能。 #4437 (alesapin) - 将字典测试添加到集成测试中。 #4477 (alesapin)
- 将网站上基准测试中的查询添加到自动化性能测试中。 #4496 (alexey-milovidov)
- 外部 lz4 中不存在
xxhash.h,因为它是实现细节,其符号使用XXH_NAMESPACE宏进行命名空间处理。当 lz4 作为外部库使用时,xxHash 也必须作为外部库使用,并且依赖方必须与其链接。 #4495 (Orivej Desh) - 修复了
quantileTiming聚合函数可以使用负数或浮点参数调用的情况(从而修复了使用未定义行为检测器(sanitizer)的 fuzz 测试)。 #4506 (alexey-milovidov) - 拼写错误修正。 #4531 (sdk2)
- 修复在 Mac 上的编译问题。 #4371 (Vitaly Baranov)
- 修复 FreeBSD 和多种非常规构建配置下的构建问题。 #4444 (proller)
ClickHouse 发行版 19.3
ClickHouse 发行版 19.3.9.1,2019-04-02
Bug 修复
- 修复在对可为空与不可为空列进行
FULL/RIGHT JOIN时发生的崩溃。 #4855 (Artem Zuikov) - 修复
clickhouse-copier中的段错误。 #4835 (proller) - 修复在列包含长序列空数组这一少见情况下,从
Array(LowCardinality)列读取数据的问题。 #4850 (Nikolai Kochetov)
构建/测试/打包改进
- 增加了一种以自定义用户启动 clickhouse-server 镜像的方式。 #4753 (Mikhail f. Shiryaev)
ClickHouse 发行版 19.3.7,2019-03-12
Bug 修复
- 修复了 #3920 中的错误。该错误表现为随机的缓存损坏(消息为
Unknown codec family code、Cannot seek through file)以及段错误。此 Bug 首次出现在 19.1 版本,并存在于 19.1.10 和 19.3.6 之前的版本中。 #4623 (alexey-milovidov)
ClickHouse 发行版 19.3.6,2019-03-02
Bug 修复
- 当线程池中有超过 1000 个线程时,在线程退出时可能会触发
std::terminate。 Azat Khuzhin #4485 #4505 (alexey-milovidov) - 现在可以创建
ReplicatedMergeTree*表,这些表可以在无默认值的列上添加注释,也可以创建包含列级 codec 且没有注释和默认值的表。同时还修复了 codec 的比较。 #4523 (alesapin) - 修复了使用数组或元组进行 JOIN 时的崩溃。 #4552 (Artem Zuikov)
- 修复了 clickhouse-copier 中带有
ThreadStatus not created消息的崩溃。 #4540 (Artem Zuikov) - 修复了在使用分布式 DDL 时,服务器关闭时发生的卡死问题。 #4472 (Alex Zatelepin)
- 修复了在解析列号大于 10 的文本格式时,错误消息中打印的列号不正确的问题。 #4484 (alexey-milovidov)
构建/测试/打包改进
- 修复了启用 AVX 时的构建问题。#4527 (alexey-milovidov)
- 基于已知稳定的内核版本启用扩展记账和 IO 记账,而不是基于编译时所在的内核版本。#4541 (nvartolomei)
- 允许跳过对
core_dump.size_limit的设置,当设置限制失败时发出警告而不是抛出异常。#4473 (proller) - 移除了
Field.cpp中void readBinary(...)的inline关键字。同时合并了多余的namespace DB代码块。#4530 (hcz)
ClickHouse Release 19.3.5,2019-02-21
Bug 修复
- 修复了处理大型 HTTP 插入查询时的错误。#4454 (alesapin)
- 修复了由于
send_logs_level设置实现错误导致的与旧版本的向后不兼容问题。#4445 (alexey-milovidov) - 修复了在引入列注释后,表函数
remote的向后不兼容问题。#4446 (alexey-milovidov)
ClickHouse Release 19.3.4,2019-02-16
改进
- 在执行
ATTACH TABLE查询时,表索引大小不再计入内存限制,从而避免了表在被DETACH之后无法再次ATTACH的情况。#4396 (alexey-milovidov) - 略微提高了从 ZooKeeper 接收的最大字符串和数组大小限制。这允许在 ZooKeeper 上使用更大的
CLIENT_JVMFLAGS=-Djute.maxbuffer=...配置后仍能继续工作。#4398 (alexey-milovidov) - 即使副本在其队列中已经存在大量节点,也允许修复被遗弃的副本。#4399 (alexey-milovidov)
- 为
SET索引增加了一个必需参数(最大存储行数)。#4386 (Nikita Vasilev)
Bug 修复
- 修复了按单个
LowCardinality键分组时WITH ROLLUP结果错误的问题。#4384 (Nikolai Kochetov) - 修复了集合索引中的错误(当一个粒度包含超过
max_rows行时会删除该粒度)。#4386 (Nikita Vasilev) - 大量针对 FreeBSD 的构建修复。#4397 (proller)
- 修复了在包含相同别名的子查询中进行别名替换时的问题(issue #4110)。#4351 (Artem Zuikov)
构建/测试/打包改进
- 在 Docker 镜像中支持以无状态测试模式运行
clickhouse-server。#4347 (Vasily Nemkov)
ClickHouse 发布 19.3.3,2019-02-13
新功能
- 新增
KILL MUTATION语句,用于删除由于某些原因卡住的 mutation。向system.mutations表中添加了latest_failed_part、latest_fail_time、latest_fail_reason字段,便于排查问题。 #4287 (Alex Zatelepin) - 新增聚合函数
entropy,用于计算香农熵(Shannon entropy)。 #4238 (Quid37) - 现在可以向服务器发送
INSERT INTO tbl VALUES (....查询,而无需拆分为query和data部分。 #4301 (alesapin) - 新增
arrayWithConstant函数的通用实现。 #4322 (alexey-milovidov) - 实现了
NOT BETWEEN比较运算符。 #4228 (Dmitry Naumov) - 实现
sumMapFiltered,以便能够限制由sumMap参与求和的键的数量。 #4129 (Léo Ercolanelli) - 在
mysqltable function 中增加了对Nullable类型的支持。 #4198 (Emmanuel Donin de Rosière) - 在
LIMIT子句中支持任意常量表达式。 #4246 (k3box) - 新增
topKWeighted聚合函数,它接收一个额外的(无符号整数)权重参数。 #4245 (Andrew Golman) StorageJoin现在支持join_any_take_last_row设置,允许覆盖相同键的现有值。 #3973 (Amos Bird)- 新增函数
toStartOfInterval。 #4304 (Vitaly Baranov) - 新增
RowBinaryWithNamesAndTypes格式。 #4200 (Oleg V. Kozlyuk) - 新增
IPv4和IPv6数据类型,并对IPv*函数进行了更高效的实现。 #3669 (Vasily Nemkov) - 新增函数
toStartOfTenMinutes()。 #4298 (Vitaly Baranov) - 新增
Protobuf输出格式。 #4005 #4158 (Vitaly Baranov) - 为用于数据导入(INSERT)的 HTTP 接口添加了 brotli 支持。 #4235 (Mikhail)
- 当用户在命令行客户端中输入的函数名或类型存在拼写错误时,新增提示信息。 #4239 (Danila Kutenin)
- 在服务器的 HTTP 响应头中添加了
Query-Id。 #4231 (Mikhail)
实验性特性
- 为 MergeTree 表引擎系列新增了
minmax和set数据跳过索引。#4143 (Nikita Vasilev) - 在可能的情况下,将
CROSS JOIN自动转换为INNER JOIN。#4221 #4266 (Artem Zuikov)
Bug 修复
- 修复了在
JOIN ON部分中因重复列导致的Not found column错误。#4279 (Artem Zuikov) - 使
START REPLICATED SENDS命令真正开始执行复制发送。#4229 (nvartolomei) - 修复了在使用
Array(LowCardinality)参数时聚合函数的执行问题。#4055 (KochetovNicolai) - 修复了在执行
INSERT ... SELECT ... FROM file(...)查询时的错误行为:当文件格式为CSVWithNames或TSVWIthNames且缺少第一行数据时的处理。 #4297 (alexey-milovidov) - 修复了在字典不可用时重新加载字典导致的崩溃问题。该问题首次出现在 19.1.6 版本中。 #4188 (proller)
- 修复了在右表包含重复行时的
ALL JOIN。 #4184 (Artem Zuikov) - 修复了在
use_uncompressed_cache=1时出现的段错误,以及因未压缩大小不正确而抛出的异常。此 Bug 出现在 19.1.6 版本中。 #4186 (alesapin) - 修复了在比较超过 int16 范围的日期时的
compile_expressionsbug。 #4341 (alesapin) - 修复了从表函数
numbers(0)查询时出现的无限循环问题。 #4280 (alexey-milovidov) - 暂时禁用针对
ORDER BY的谓词优化。 #3890 (Winter Zhang) - 修复了在旧 CPU 上使用 base64 函数时出现的
Illegal instruction错误。该错误目前仅在使用 gcc-8 编译 ClickHouse 时被复现。#4275 (alexey-milovidov) - 修复了通过 TLS 连接与 PostgreSQL ODBC Driver 交互时出现的
No message received错误,同时也修复了使用 MySQL ODBC Driver 时发生的段错误。 #4170 (alexey-milovidov) - 修复了在条件运算符(函数
if)的分支中使用Date和DateTime参数时产生错误结果的问题。为函数if增加了通用情况支持。#4243 (alexey-milovidov) - ClickHouse 字典现在在
clickhouse进程内加载。#4166 (alexey-milovidov) - 修复了在对
File引擎的表执行SELECT时,在遇到No such file or directory错误后重试会导致死锁的问题。 #4161 (alexey-milovidov) - 修复了一个竞争条件,在从
system.tables查询时可能导致报错table does not exist。 #4313 (alexey-milovidov) - 如果以交互模式运行,
clickhouse-client在退出时为命令行建议加载数据的过程中可能会发生段错误(segfault)。#4317 (alexey-milovidov) - 修复了一个错误:执行包含
IN运算符的 mutation 时会产生错误结果。#4099 (Alex Zatelepin) - 已修复错误:如果存在使用
Dictionary引擎的数据库,所有字典会在服务器启动时被强制加载,而如果其中某个字典的 ClickHouse 源指向 localhost,则该字典无法加载。 #4255 (alexey-milovidov) - 修复了在服务器关闭期间再次尝试创建系统日志时出现的错误。#4254 (alexey-milovidov)
- 在
joinGet函数中返回正确的类型并妥善处理锁。#4153 (Amos Bird) - 新增
sumMapWithOverflow函数。 #4151 (Léo Ercolanelli) - 修复了与
allow_experimental_multiple_joins_emulation相关的段错误。 52de2c (Artem Zuikov) - 修复了
Date和DateTime比较不正确的问题。#4237 (valexey) - 修复了在启用 undefined behavior sanitizer 时的模糊测试:为
quantile*Weighted函数族添加了参数类型检查。 #4145 (alexey-milovidov) - 修复了一个罕见的竞争条件,该问题会导致在删除旧数据部件时操作失败并出现
File not found错误。 #4378 (alexey-milovidov) - 修复安装包中缺少
/etc/clickhouse-server/config.xml的情况。 #4343 (proller)
构建/测试/打包改进
- Debian 包:根据配置修正
/etc/clickhouse-server/preprocessed链接。 #4205 (proller) - 修复了多个针对 FreeBSD 的构建问题。 #4225 (proller)
- 在
perftest中增加了创建、填充和删除表的功能。 #4220 (alesapin) - 添加了用于检查重复 include 的脚本。 #4326 (alexey-milovidov)
- 在性能测试中增加了按索引运行查询的功能。 #4264 (alesapin)
- 建议安装带有调试符号的包。 #4274 (alexey-milovidov)
- 重构了
performance-test,改进了日志记录和信号处理。 #4171 (alesapin) - 为匿名化的 Yandex.Metrica 数据集添加了文档。 #4164 (alesapin)
- 添加了用于将旧的按月分区的分片转换为自定义分区格式的工具。 #4195 (Alex Zatelepin)
- 为 S3 中的两个数据集添加了文档。 #4144 (alesapin)
- 添加了根据 pull request 描述生成变更日志的脚本。 #4169 #4173 (KochetovNicolai) (KochetovNicolai)
- 为 ClickHouse 添加了 puppet 模块。 #4182 (Maxim Fedotov)
- 为一组未记录的函数添加了文档。 #4168 (Winter Zhang)
- 修复了 ARM 构建问题。 #4210#4306 #4291 (proller) (proller)
- 现在可以通过
ctest运行字典测试。 #4189 (proller) - 现在
/etc/ssl被用作 SSL 证书的默认目录。 #4167 (alexey-milovidov) - 在启动时添加了对 SSE 和 AVX 指令的检查。 #4234 (Igr)
- 初始化脚本现在会在服务器启动完成前一直等待。 #4281 (proller)
向后不兼容的变更
- 移除了
allow_experimental_low_cardinality_type设置。LowCardinality数据类型已可用于生产环境。#4323 (alexey-milovidov) - 根据可用内存大小,相应减小 mark cache 和未压缩 cache 的大小。#4240 (Lopatin Konstantin)
- 在
CREATE TABLE查询中增加了关键字INDEX。名为index的列必须使用反引号或双引号进行引用:`index`。#4143 (Nikita Vasilev) sumMap现在会提升结果类型以避免溢出。旧的sumMap行为可以通过使用sumMapWithOverflow函数实现。#4151 (Léo Ercolanelli)
性能改进
- 对于没有
LIMIT的查询,将std::sort替换为pdqsort。#4236 (Evgenii Pravda) - 现在服务器会复用全局线程池中的线程。这会在某些极端情况下影响性能。#4150 (alexey-milovidov)
改进
- 为 FreeBSD 实现了 AIO 支持。 #4305 (urgordeadbeef)
SELECT * FROM a JOIN b USING a, b现在只返回左表中的a和b列。 #4141 (Artem Zuikov)- 允许客户端选项
-C像-c选项一样使用。 #4232 (syominsergey) - 现在在不带参数使用选项
--password时,会从 stdin 请求密码。 #4230 (BSD_Conqueror) - 为包含
LIKE表达式或正则表达式的字符串字面量中未转义的元字符添加了高亮显示。 #4327 (alexey-milovidov) - 添加了在客户端 socket 断开时取消 HTTP 只读查询的功能。 #4213 (nvartolomei)
- 现在服务端会报告进度以保持客户端连接存活。 #4215 (Ivan)
- 在启用
optimize_throw_if_noop设置时,改进了用于说明 OPTIMIZE 查询原因的消息。 #4294 (alexey-milovidov) - 为 clickhouse server 添加了对
--version选项的支持。 #4251 (Lopatin Konstantin) - 为
clickhouse-server添加了--help/-h选项。 #4233 (Yuriy Baranov) - 添加了对返回聚合函数状态结果的标量子查询的支持。 #4348 (Nikolai Kochetov)
- 改进了服务端关闭耗时以及 ALTER 等待时间。 #4372 (alexey-milovidov)
- 在 system.replicas 中添加了关于
replicated_can_become_leader设置的信息,并在副本不会尝试成为 leader 时添加了日志记录。 #4379 (Alex Zatelepin)
ClickHouse 版本 19.1
ClickHouse 版本 19.1.14,2019-03-14
- 修复了在使用
GLOBAL JOIN配合SELECT *时(罕见情况),如果将设置项asterisk_left_columns_only设为 1,可能出现的错误Column ... queried more than once。该问题在 19.3 及之后的版本中不存在。6bac7d8d(Artem Zuikov)
ClickHouse 版本 19.1.13,2019-03-12
此版本包含的补丁集与 19.3.7 完全相同。
ClickHouse 版本 19.1.10,2019-03-03
此版本包含的补丁集与 19.3.6 完全相同。
ClickHouse 发行版 19.1
ClickHouse 发行版 19.1.9,2019-02-21
Bug 修复
- 修复了由于
send_logs_level设置实现错误导致与旧版本不兼容的问题。 #4445 (alexey-milovidov) - 修复了在引入列注释后导致的表函数
remote的向后不兼容问题。 #4446 (alexey-milovidov)
ClickHouse 发行版 19.1.8,2019-02-16
Bug 修复
ClickHouse 19.1 版本发布
ClickHouse 19.1.7 版本发布,2019-02-15
Bug 修复
- 在
joinGet函数中返回正确的类型并妥善处理锁。#4153 (Amos Bird) - 修复了在服务器关闭过程中再次尝试创建系统日志时出现的错误。 #4254 (alexey-milovidov)
- 已修复一个错误:如果存在使用
Dictionary引擎的数据库,所有字典会在服务器启动时被强制加载,此时如果有字典使用来自本机(localhost)上 ClickHouse 的数据源,该字典将无法加载。 #4255 (alexey-milovidov) - 修复了一个错误:执行包含
IN运算符的变更操作时会产生不正确的结果。 #4099 (Alex Zatelepin) - 如果以交互模式运行,
clickhouse-client在退出时为命令行补全加载数据时可能会发生段错误(segfault)。#4317 (alexey-milovidov) - 修复了在查询
system.tables时可能导致table does not exist错误的竞争条件。#4313 (alexey-milovidov) - 修复了在对使用
File引擎的表执行SELECT时,遇到No such file or directory错误后重试可能发生的死锁问题。 #4161 (alexey-milovidov) - 修复了这样一个问题:本地 ClickHouse 字典原本通过 TCP 加载,但应在进程内加载。 #4166 (alexey-milovidov)
- 修复了通过 TLS 连接与 PostgreSQL ODBC Driver 交互时出现的
No message received错误,并修复了使用 MySQL ODBC Driver 时发生的段错误。 #4170 (alexey-milovidov) - 暂时禁用对
ORDER BY的谓词优化。#3890 (Winter Zhang) - 修复了从表函数
numbers(0)查询数据时出现的无限循环问题。#4280 (alexey-milovidov) - 修复了
compile_expressions在比较较大日期(超过 int16 范围)时的问题。 #4341 (alesapin) - 修复了在
uncompressed_cache=1时出现的段错误,以及因未压缩大小错误引发的异常。#4186 (alesapin) - 修复了右表存在重复数据时的
ALL JOIN行为。 #4184 (Artem Zuikov) - 修复了在执行
INSERT ... SELECT ... FROM file(...)查询时的错误行为:当文件格式为CSVWithNames或TSVWIthNames且第一行数据缺失时的处理问题。 #4297 (alexey-milovidov) - 修复了在处理
Array(LowCardinality)参数时的聚合函数执行问题。#4055 (KochetovNicolai) - Debian 软件包:根据配置修正 /etc/clickhouse-server/preprocessed 链接,使其与配置一致。#4205 (proller)
- 在启用未定义行为 sanitizer 时修复了 fuzz 测试:为
quantile*Weighted函数族添加了参数类型检查。#4145 (alexey-milovidov) - 使
START REPLICATED SENDS命令能够启动复制发送。 #4229 (nvartolomei) - 修复了在 JOIN ON 子句中出现重复列时导致的
Not found column错误。#4279 (Artem Zuikov) - 现在
/etc/ssl被用作存放 SSL 证书的默认目录。#4167 (alexey-milovidov) - 修复了在字典不可用时重新加载它时发生的崩溃。 #4188 (proller)
- 修复了
Date与DateTime比较结果不正确的问题。 #4237 (valexey) - 修复了在条件运算符(函数
if)的分支中使用Date和DateTime参数时会产生错误结果的问题。为函数if添加了通用实现。#4243 (alexey-milovidov)
ClickHouse Release 19.1.6, 2019-01-24
新特性
- 表支持为每一列自定义压缩编解码器。 #3899 #4111 (alesapin, Winter Zhang, Anatoly)
- 新增压缩编解码器
Delta。 #4052 (alesapin) - 允许使用
ALTER修改压缩编解码器。 #4054 (alesapin) - 为兼容 SQL 标准,新增函数
left、right、trim、ltrim、rtrim、timestampadd、timestampsub。 #3826 (Ivan Blinkov) - 支持向
HDFS表写入数据,并提供hdfs表函数。 #4084 (alesapin) - 新增用于在大字符串中搜索多个常量字符串的函数:
multiPosition、multiSearch、firstMatch,以及它们的-UTF8、-CaseInsensitive和-CaseInsensitiveUTF8变体。 #4053 (Danila Kutenin) - 当
SELECT查询按分片键过滤时,可跳过未使用的分片(设置项optimize_skip_unused_shards)。 #3851 (Gleb Kanterov, Ivan) - 允许
Kafka引擎对每个数据块忽略一定数量的解析错误。 #4094 (Ivan) - 新增对
CatBoost多分类模型评估的支持。函数modelEvaluate会针对多分类模型返回一个包含各类别原始预测值的元组。libcatboostmodel.so需要按照 #607 进行构建。 #3959 (KochetovNicolai) - 新增函数
filesystemAvailable、filesystemFree、filesystemCapacity。 #4097 (Boris Granveaud) - 新增哈希函数
xxHash64和xxHash32。 #3905 (filimonov) - 新增哈希函数
gccMurmurHash(GCC 风格的 Murmur 哈希),其使用与 gcc 相同的哈希种子。 #4000 (sundyli) - 新增哈希函数
javaHash、hiveHash。 #3811 (shangshujie365) - 新增表函数
remoteSecure。该函数与remote类似,但使用安全连接。 #4088 (proller)
实验性特性
- 添加了对多个 JOIN 仿真的支持(
allow_experimental_multiple_joins_emulation设置)。#3946 (Artem Zuikov)
Bug 修复
- 默认限制
compiled_expression_cache_size以降低内存占用。#4041 (alesapin) - 修复了一个 Bug,该 Bug 会导致执行 Replicated 表 ALTER 操作的线程以及用于从 ZooKeeper 更新配置的线程发生挂起。#2947 #3891 #3934 (Alex Zatelepin)
- 修复了在执行分布式 ALTER 任务时的竞态条件。该竞态条件会导致多个副本同时尝试执行该任务,并使除一个副本之外的所有副本因 ZooKeeper 错误而失败。#3904 (Alex Zatelepin)
- 修复了一个错误:当对 ZooKeeper 的请求超时后,
from_zk配置元素不会被刷新。#2947 #3947 (Alex Zatelepin) - 修复 IPv4 子网掩码前缀错误的问题。 #3945 (alesapin)
- 修复了在极少数情况下由于资源耗尽而无法创建新线程时触发的崩溃(
std::terminate)。 #3956 (alexey-milovidov) - 修复在执行
remote表函数时,getStructureOfRemoteTable使用了错误限制条件的问题。 #4009 (alesapin) - 修复 netlink 套接字泄漏问题。它们被放入一个池中却从未被删除,当所有当前套接字都在使用时,每当启动新线程就会创建新的套接字。#4017 (Alex Zatelepin)
- 修复了在 fork 出
odbc-bridge子进程后、在从/proc读取完所有文件描述符之前就提前关闭/proc/self/fd目录的错误。 #4120 (alesapin) - 在主键中使用 String 时,修复了从 FixedString 到 UInt 的单调转换问题。 #3870 (Winter Zhang)
- 修复了整数转换函数单调性计算中的错误。#3921 (alexey-milovidov)
- 修复了在某些无效参数情况下,
arrayEnumerateUniq和arrayEnumerateDense函数出现段错误的问题。 #3909 (alexey-milovidov) - 修复 StorageMerge 中的未定义行为(UB)。 #3910 (Amos Bird)
- 修复了函数
addDays、subtractDays中的段错误。 #3913 (alexey-milovidov) - 修复了一个错误:当以整数参数并使用较大的负 scale 值执行时,函数
round、floor、trunc、ceil可能返回不正确的结果。 #3914 (alexey-milovidov) - 修复了一个由 'kill query sync' 引发并导致 core dump 的缺陷。 #3916 (muVulDeePecker)
- 修复在复制队列清空后出现的长时间延迟问题。 #3928 #3932 (alesapin)
- 修复了在向具有
LowCardinality主键的表中插入数据时内存占用过高的问题。#3955 (KochetovNicolai) - 修复了在数组为空时,
Native格式中LowCardinality的序列化问题。 #3907 #4011 (KochetovNicolai) - 修复了在对单个 LowCardinality 数值列使用 DISTINCT 子句时产生错误结果的问题。 #3895 #4012 (KochetovNicolai)
- 修复在启用
compile设置时使用 LowCardinality 键的专用聚合问题。 #3886 (KochetovNicolai) - 修复复制表查询中的用户和密码转发问题。 #3957 (alesapin) (小路)
- 修复了一个极少见的竞态条件问题,该问题可能在重新加载字典的同时列出 Dictionary 数据库中的表时发生。 #3970 (alexey-milovidov)
- 修复了在将 HAVING 与 ROLLUP 或 CUBE 一起使用时结果不正确的问题。 #3756 #3837 (Sam Chou)
- 修复了使用
JOIN ON语法且包含分布式表的查询中的列别名处理。#3980 (Winter Zhang) - 修复了
quantileTDigest内部实现中的错误(由 Artem Vakhrushev 发现)。该错误在 ClickHouse 中从未触发,仅会影响那些直接将 ClickHouse 代码库当作库使用的用户。 #3935 (alexey-milovidov)
改进
- 在
ALTER TABLE ADD COLUMN语句中支持IF NOT EXISTS,并在DROP/MODIFY/CLEAR/COMMENT COLUMN中支持IF EXISTS。 #3900 (Boris Granveaud) - 函数
parseDateTimeBestEffort:支持格式DD.MM.YYYY、DD.MM.YY、DD-MM-YYYY、DD-Mon-YYYY、DD/Month/YYYY及类似格式。 #3922 (alexey-milovidov) CapnProtoInputStream现在支持不规则(jagged)结构。 #4063 (Odin Hultgren Van Der Horst)- 易用性改进:增加检查,要求服务器进程必须由数据目录所有者启动。如果数据属于非 root 用户,则不允许以 root 用户启动服务器。 #3785 (sergey-v-galtsev)
- 改进在分析带有 JOIN 的查询时检查必需列的逻辑。 #3930 (Artem Zuikov)
- 在单个服务器上存在大量 Distributed 表的情况下,降低连接数。 #3726 (Winter Zhang)
- 为 ODBC 驱动的
WITH TOTALS查询增加汇总行支持。 #3836 (Maksim Koritckiy) - 允许在 if 函数中将
Enum作为整数使用。 #3875 (Ivan) - 新增
low_cardinality_allow_in_native_format设置。若禁用,则在Native格式中不使用LowCardinality类型。 #3879 (KochetovNicolai) - 从已编译表达式缓存中移除了一些冗余对象,以降低内存使用。 #4042 (alesapin)
- 增加检查,以确保
SET send_logs_level = 'value'查询接受的是有效的值。 #3873 (Sabyanin Maxim) - 修复了类型转换函数中的数据类型检查。 #3896 (Winter Zhang)
性能改进
- 添加一个 MergeTree 设置
use_minimalistic_part_header_in_zookeeper。如果启用,Replicated 表会在单个 part znode 中存储紧凑的 part 元数据。这可以显著减少 ZooKeeper 快照大小(尤其是在表包含大量列时)。注意,在启用此设置后,将无法降级到不支持该设置的版本。#3960 (Alex Zatelepin) - 为函数
sequenceMatch和sequenceCount添加一个基于 DFA 的实现,用于模式不包含时间条件的情况。#4004 (Léo Ercolanelli) - 提升整数序列化的性能。#3968 (Amos Bird)
- 对 PODArray 进行左侧零填充,使得索引为 -1 的元素始终有效且被清零。它用于无分支的偏移量计算。#3920 (Amos Bird)
- 回退了导致性能下降的
jemalloc版本。#4018 (alexey-milovidov)
向后不兼容的更改
- 移除了未在文档中记录的特性
ALTER MODIFY PRIMARY KEY,因为它已被ALTER MODIFY ORDER BY命令取代。#3887 (Alex Zatelepin) - 移除函数
shardByHash。#3833 (alexey-milovidov) - 禁止使用结果类型为
AggregateFunction的标量子查询。#3865 (Ivan)
构建 / 测试 / 打包改进
- 新增对 PowerPC(
ppc64le)构建的支持。#4132 (Danila Kutenin) - 有状态功能测试在公开可用的数据集上运行。 #3969 (alexey-milovidov)
- 修复了在 Docker 或 systemd-nspawn 环境中,当服务器因出现
bash: /usr/bin/clickhouse-extract-from-config: Operation not permitted消息而无法启动的问题。#4136 (alexey-milovidov) - 将
rdkafka库更新到 v1.0.0-RC5。使用 cppkafka 替代原生 C 接口。#4025 (Ivan) - 更新了
mariadb-client库。修复了 UBSan 报告的其中一个问题。 #3924 (alexey-milovidov) - 针对 UBSan 构建的若干修复。#3926 #3021 #3948 (alexey-milovidov)
- 为每次提交新增基于 UBSan 构建的测试运行。
- 为每次提交新增 PVS-Studio 静态分析器运行。
- 修复了通过 PVS-Studio 发现的缺陷。 #4013 (alexey-milovidov)
- 修复 glibc 兼容性问题。 #4100 (alexey-milovidov)
- 将 Docker 镜像升级到 18.10,并为 glibc >= 2.28 添加兼容性文件 #3965 (alesapin)
- 添加环境变量,以便在用户不想在服务器 Docker 镜像中对目录执行 chown 操作时使用。 #3967 (alesapin)
- 在 clang 中启用了
-Weverything中的大部分警告,并启用了-Wpedantic。#3986 (alexey-milovidov) - 新增了几项仅在 clang 8 中可用的警告。#3993 (alexey-milovidov)
- 在进行动态链接时,链接到
libLLVM,而不是分别链接各个 LLVM 库。#3989 (Orivej Desh) - 为测试镜像添加了 sanitizer 变量。 #4072 (alesapin)
clickhouse-server的 Debian 软件包将推荐安装libcap2-bin软件包,以便使用setcap工具设置 capabilities。此步骤是可选的。 #4093 (alexey-milovidov)- 优化了编译时间并修复了 include。 #3898 (proller)
- 新增了哈希函数的性能测试。 #3918 (filimonov)
- 修复了循环库依赖。#3958 (proller)
- 在可用内存较低的情况下优化了编译过程。#4030 (proller)
- 添加了用于复现
jemalloc性能退化问题的测试脚本。#4036 (alexey-milovidov) - 修正了
dbms下注释和字符串字面量中的拼写错误。 #4122 (maiha) - 修正注释中的拼写错误。#4089 (Evgenii Pravda)