2019 年更新日志
ClickHouse Release 19.17
ClickHouse Release 19.17.6.36, 2019-12-27
Bug 修复
- 修复了解压缩中潜在的缓冲区溢出。恶意用户可以传递伪造的压缩数据,可能导致缓冲区后读取。此问题由 Yandex 信息安全团队的 Eldar Zaitov 发现。#8404 (alexey-milovidov)
- 修复了在服务器无法发送或写入具有 String 数据类型值(需要 UTF-8 验证)的 JSON 或 XML 格式数据,或者使用 Brotli 算法压缩结果数据,或在某些其他罕见情况下,可能导致服务器崩溃 (
std::terminate
) 的问题。#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) - 修复了当聚合位图与标量位图相交时的 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)
- 修复了如果分片本地表超过两个的分布式表的简单计数查询。#8164 (小路)
- 修复了导致 DB::BlockStreamProfileInfo::calculateRowsBeforeLimit() 中数据竞争的错误。#8143 (Alexander Kazakov)
- 修复了在合并指定 part 后立即执行
ALTER table MOVE part
,这可能导致移动指定 part 合并到的 part。现在它会正确移动指定的 part。#8104 (Vladimir Chebotarev) - 字典的表达式现在可以指定为字符串。这对于从非 ClickHouse 源提取数据时计算属性非常有用,因为它允许对这些表达式使用非 ClickHouse 语法。#8098 (alesapin)
- 修复了由于 ZXid 溢出导致
clickhouse-copier
中非常罕见的竞争。#8088 (Ding Xiang Fei) - 修复了查询失败后(例如由于“同时查询过多”),不会读取外部表信息,并且下一个请求会将此信息解释为下一个查询的开始,从而导致类似
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) - 如果不存在 mutation,则从 part 名称中删除 mutation 编号。此删除改进了与旧版本的兼容性。#8250 (alesapin)
- 修复了由于某些附加 part 的 data_version 大于表 mutation 版本而跳过这些 part 的 mutation 的错误。#7812 (Zhichang Yu)
- 允许在将 part 移动到另一个设备后,使用冗余 part 副本启动服务器。#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 Release 19.17.4.11, 2019-11-22
向后不兼容的变更
- 使用列而不是 AST 来存储标量子查询结果,以获得更好的性能。设置
enable_scalar_subquery_optimization
在 19.17 中添加,默认启用。它导致了类似 this 的错误,在从以前版本升级到 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
函数。它将位图中值的数组转换为另一个值的数组,结果是一个新的位图。#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)
- 防止 Kafka 表生成任何从中选择数据的 MV 时消息重复。#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) - 修复了
INSERT
到带有MATERIALIZED
列的 Distributed 表。#7377 (Azat Khuzhin) - 使
MOVE PARTITION
在分区的一些 part 已经在目标磁盘或卷上时工作。#7434 (Vladimir Chebotarev) - 修复了在多磁盘配置中,
ReplicatedMergeTree
中 mutation 期间硬链接创建失败的错误。#7558 (Vladimir Chebotarev) - 修复了 MergeTree 上 mutation 的错误,当整个 part 保持不变并且在另一个磁盘上找到最佳空间时。#7602 (Vladimir Chebotarev)
- 修复了
keep_free_space_ratio
未从磁盘配置中读取的错误。#7645 (Vladimir Chebotarev) - 修复了表仅包含
Tuple
列或具有复杂路径的列的错误。修复了 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 连接表达式时出现的
Not found column <expression> in block
错误。#7641 (Artem Zuikov) - 再次尝试修复
PrettySpace
格式中的无限循环。#7591 (Olga Khvostikova) - 修复了当所有参数都是相同大小的
FixedString
时concat
函数中的错误。#7635 (alesapin) - 修复了在使用 1 个参数定义 S3、URL 和 HDFS 存储时出现的异常。#7618 (Vladimir Chebotarev)
- 修复了带有 query 的视图的 InterpreterSelectQuery 的作用域。#7601 (Azat Khuzhin)
改进
- ODBC-bridge 正确识别
Nullable
列并处理 NULL 值。#7402 (Vasily Nemkov) - 原子性地写入分布式发送的当前批次。#7600 (Azat Khuzhin)
- 如果无法检测查询中列名的表,则抛出异常。#7358 (Artem Zuikov)
- 将
merge_max_block_size
设置添加到MergeTreeSettings
。#7412 (Artem Zuikov) - 带有
HAVING
但没有GROUP BY
的查询假定按常量分组。因此,SELECT 1 HAVING 1
现在返回结果。#7496 (Amos Bird) - 支持将
(X,)
解析为类似于 python 的元组。#7501, #7562 (Amos Bird) - 使
range
函数的行为几乎像 pythonic 那样。#7518 (sundyli) - 将
constraints
列添加到表system.settings
。#7553 (Vitaly Baranov) - 改进了 tcp 处理程序的 Null 格式,因此可以使用
select ignore(<expression>) from table format Null
通过 clickhouse-client 进行性能测量。#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
,类似于 AggregatoraddBatch
。#7608 (Amos Bird) Kafka
消费性能上的小幅改进 #7475 (Ivan)
构建/测试/打包改进
- 增加对交叉编译到 CPU 架构 AARCH64 的支持。重构打包脚本。 #7370 #7539 (Ivan)
- 在构建包时,将 darwin-x86_64 和 linux-aarch64 工具链解压到挂载的 Docker 卷中 #7534 (Ivan)
- 更新二进制打包器的 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 19.16 版本
ClickHouse 19.16.14.65 版本,2020-03-25
- 修复了在多个参数(超过 10 个)上批量计算三元逻辑运算中的一个错误。 #8718 (Alexander Kazakov) 此错误修复已根据 Altinity 的特殊请求反向移植到 19.16 版本。
ClickHouse 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) - 允许将
MaterializedView
与Kafka
表之上的子查询一起使用。 #8197 (filimonov)
新功能
- 添加
deduplicate_blocks_in_dependent_materialized_views
选项,以控制对包含物化视图的表执行幂等插入的行为。此新功能是根据 Altinity 的特殊请求添加到错误修复版本中的。 #9070 (urykhy)
ClickHouse 19.16.2.2 版本,2019-10-30
向后不兼容的变更
- 为 count/countIf 添加缺失的参数个数验证。 #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>
的值。 #7240 (alexey-milovidov) - 为基于 HTTP 源的字典设置两个配置选项:
credentials
和http-headers
。 #7092 (Guillaume Tassery) - 添加一个新的 ProfileEvent
Merge
,用于计算启动的后台合并的数量。 #7093 (Mikhail Korotov) - 添加 fullHostName 函数,该函数返回完全限定域名。 #7263 #7291 (sundyli)
- 添加函数
arraySplit
和arrayReverseSplit
,它们通过“切断”条件来分割数组。它们在时间序列处理中很有用。 #7294 (hcz) - 添加返回 multiMatch 函数族中所有匹配索引数组的新函数。 #7299 (Danila Kutenin)
- 添加一个新的数据库引擎
Lazy
,该引擎针对存储大量小型 -Log 表进行了优化。 #7171 (Nikita Vasilev) - 为 bitmap 列添加聚合函数 groupBitmapAnd、-Or、-Xor。 #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)
- 在部分合并连接中压缩左侧块(优化)。 #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)
- 优化部分合并连接。 #7070 (Artem Zuikov)
- 在 uniqCombined 函数中不要使用超过 98K 的内存。 #7236, #7270 (Azat Khuzhin)
- 在 PartialMergeJoin 中将右侧连接表的部分刷新到磁盘(如果内存不足)。在需要时加载回数据。 #7186 (Artem Zuikov)
性能改进
- 通过避免数据重复来加速带有 const 参数的 joinGet。 #7359 (Amos Bird)
- 如果子查询为空,则提前返回。 #7007 (小路)
- 优化 Values 中 SQL 表达式的解析。 #6781 (tavplubix)
构建/测试/打包改进
- 禁用一些 contribs 以进行交叉编译到 Mac OS。 #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)
- 修复了一些包含非确定性 mutation 的测试。 #7132 (Alexander Kazakov)
- 将使用 MemorySanitizer 的构建添加到 CI。 #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)
- 修复了访问 no_users_thread 变量时 LIVE VIEW 中的 ThreadSanitizer 数据竞争错误。 #7353 (vzakaznikov)
- 去除 libcommon 中的 malloc 符号 #7134, #7065 (Amos Bird)
- 添加全局标志 ENABLE_LIBRARIES 以禁用所有库。 #7063 (proller)
代码清理
- 通用化配置存储库,为字典的 DDL 做准备。 #7155 (alesapin)
- 用于字典 DDL 的解析器,没有任何语义。 #7209 (alesapin)
- 将 ParserCreateQuery 拆分为不同的较小解析器。 #7253 (alesapin)
- 外部字典附近的一些小的重构和重命名。 #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 值。 #7402 (Vasily Nemkov)
- 修复了使用 MATERIALIZED 列插入到分布式非本地节点的问题。 #7377 (Azat Khuzhin)
- 修复了函数 getMultipleValuesFromConfig。 #7374 (Mikhail Korotov)
- 修复了使用 HTTP keep alive 超时而不是 TCP keep alive 超时的问题。 #7351 (Vasily Nemkov)
- 等待所有作业在异常时完成(修复了罕见的段错误)。 #7350 (tavplubix)
- 插入到 Kafka 表时不要推送到 MV。 #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 查询中段错误的错误。 (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)
- 为在
INSERT SELECT
查询中读取传入数据添加表函数input
。 #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 引擎问题。 #6950 (Ivan)
- 改进分布式查询的故障转移。缩短恢复时间,现在可以配置,并在
system.clusters
中可见。 #6399 (Vasily Nemkov) - 直接在
IN
部分支持 Enum 的数值。 #6766 #6941 (dimarub2000) - 支持 URL 存储上的重定向(可选,默认禁用)。 #6914 (maqroll)
- 当旧版本的客户端连接到服务器时,添加信息消息。 #6893 (Philipp Malkovsky)
- 删除分布式表发送数据的最大退避睡眠时间限制 #6895 (Azat Khuzhin)
- 添加将配置文件事件(计数器)及其累积值发送到 Graphite 的功能。可以在服务器
config.xml
中的<events_cumulative>
下启用它。 #6969 (Azat Khuzhin) - 在通过 HTTP 以 Native 格式将数据插入
LowCardinality(T)
类型的列时,添加自动将类型T
转换为LowCardinality(T)
的功能。 #6891 (Nikolai Kochetov) - 添加在不使用
reinterpretAsString
的情况下对Float32
、Float64
使用函数hex
的能力。 #7024 (Mikhail Korotov)
构建/测试/打包改进
- 将 gdb-index 添加到带有调试信息的 clickhouse 二进制文件。这将加快
gdb
的启动时间。 #6947 (alesapin) - 使用打了补丁的
dpkg-deb
加快 deb 打包速度,该补丁使用pigz
。 #6960 (alesapin) - 设置
enable_fuzzing = 1
以启用所有项目代码的 libfuzzer instrumentation。 #7042 (kyprizel) - 在 CI 中添加拆分构建冒烟测试。 #7061 (alesapin)
- 将使用 MemorySanitizer 的构建添加到 CI。 #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) - 修复了带有数组 JOIN 和全局子查询的复杂查询。 #6934 (Ivan)
- 修复了在使用多个 JOIN 的 ORDER BY 和 GROUP BY 中出现的
Unknown identifier
错误 #7022 (Artem Zuikov) - 修复了使用
LowCardinality
参数执行函数时出现的MSan
警告。 #7062 (Nikolai Kochetov)
向后不兼容的更改
- 更改了 bitmap* 聚合函数状态的序列化格式以提高性能。无法读取先前版本 bitmap* 的序列化状态。 #6908 (Zhichang Yu)
ClickHouse Release 19.14
ClickHouse Release 19.14.7.15, 2019-10-02
Bug 修复
- 此版本还包含 19.11.12.69 中的所有错误修复。
- 修复了 19.14 和更早版本之间分布式查询的兼容性问题。这修复了 #7068。 #7069 (alexey-milovidov)
ClickHouse Release 19.14.6.12, 2019-09-19
Bug 修复
- 修复了函数
АrrayEnumerateUniqRanked
在参数为空数组时的错误。 #6928 (proller) - 修复了带有别名的
ARRAY JOIN
和GLOBAL IN subquery
查询中的子查询名称。如果指定了子查询别名,则将其用作外部表名。 #6934 (Ivan)
构建/测试/打包改进
- 修复了 flapping 测试
00715_fetch_merged_or_mutated_part_zookeeper
,方法是将其重写为 shell 脚本,因为它需要等待 mutation 应用。 #6977 (Alexander Kazakov) - 修复了函数
groupUniqArray
在使用空数组参数时出现的 UBSan 和 MemSan 失败。这是由于将空的PaddedPODArray
放入哈希表零单元格引起的,因为没有调用零单元格值的构造函数。 #6937 (Amos Bird)
ClickHouse Release 19.14.3.3, 2019-09-10
新功能
- 用于
ORDER BY
的WITH FILL
修饰符。(#5069 的延续) #6610 (Anton Popov) - 用于
LIMIT
的WITH TIES
修饰符。(#5069 的延续) #6610 (Anton Popov) - 将未加引号的
NULL
字面量解析为 NULL(如果设置format_csv_unquoted_null_literal_as_null=1
)。如果此字段的数据类型不可为空,则使用默认值初始化空字段(如果设置input_format_null_as_default=1
)。 #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) - 支持删除 detached parts。语法:
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)
,用于检查 haystack 中是否包含给定的 token。Token 是两个非字母数字 ASCII 字符(或 haystack 的边界)之间的最大长度子字符串。Token 必须是常量字符串。由 tokenbf_v1 索引专业化支持。 #6596, #6662 (Vasily Nemkov) - 新函数
neighbor(value, offset[, default_value])
。允许访问数据块中列内的上一个/下一个值。 #5925 (Alex Krash) 6685365ab8c5b74f9650492c88a012596eb1b0c6 341e2e4587a18065c2da1ca888c73389f48ce36c Alexey Milovidov - 创建了函数
currentUser()
,返回授权用户的登录名。添加了别名user()
以与 MySQL 兼容。 #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)
,它创建精度长的 geohash-boxes 字符串数组,覆盖提供的区域。 #6127 (Vasily Nemkov) - 实现对 Kafka 表的 INSERT 查询的支持。 #6012 (Ivan)
- 为 Kafka 引擎添加了对
_partition
和_timestamp
虚拟列的支持。 #6400 (Ivan) - 可以使用基于 regexp 规则从
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 中的所有错误修复。
- 修复了表具有 skip indices 且发生 vertical merge 时出现的段错误。 #6723 (alesapin)
- 修复了具有非平凡列默认值的 per-column TTL。以前,在强制执行带有
OPTIMIZE ... FINAL
查询的 TTL merge 时,过期的值被类型默认值替换,而不是用户指定的列默认值。 #6796 (Anton Popov) - 修复了正常服务器重启时 Kafka 消息重复问题。 #6597 (Ivan)
- 修复了读取 Kafka 消息时的无限循环。完全不要在订阅时暂停/恢复消费者 - 否则在某些情况下可能会无限期地暂停。 #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
的段错误。修复了 mutation 查询准备中的竞争条件。修复了由 Replicated 表的OPTIMIZE
和并发修改操作(如 ALTER)引起的死锁。 #6514 (alexey-milovidov) - 删除了 MySQL 接口中额外的详细日志记录 #6389 (alexey-milovidov)
- 恢复了在配置文件中从 ‘true’ 和 ‘false’ 解析布尔设置的功能。 #6278 (alesapin)
- 修复了
quantile
和median
函数在Nullable(Decimal128)
上的崩溃问题。 #6378 (Artem Zuikov) - 修复了
SELECT
查询在主键上使用WHERE
条件,且主键包含转换为 Float 类型时可能返回不完整结果的问题。这是由于toFloat
函数中不正确的单调性检查引起的。 #6248 #6374 (dimarub2000) - 检查 mutation 的
max_expanded_ast_elements
设置。在TRUNCATE TABLE
后清除 mutation。 #6205 (Winter Zhang) - 修复了与
join_use_nulls
一起使用时,JOIN 结果中键列的问题。附加 Null 而不是列默认值。 #6249 (Artem Zuikov) - 修复了带有 vertical merge 和 alter 的 skip indices 问题。修复了
Bad size of marks file
异常。 #6594 #6713 (alesapin) - 修复了
ALTER MODIFY COLUMN
和 vertical merge 在合并/更改的部分之一为空(0 行)时的罕见崩溃问题 #6746 #6780 (alesapin) - 修复了
AggregateFunctionFactory
中LowCardinality
类型转换的错误。这修复了 #6257。 #6281 (Nikolai Kochetov) - 修复了
topK
和topKWeighted
聚合函数中的错误行为和可能的段错误。 #6404 (Anton Popov) - 修复了
getIdentifier
函数周围的不安全代码。 #6401 #6409 (alexey-milovidov) - 修复了 MySQL 有线协议中的错误(在从 MySQL 客户端连接到 ClickHouse 时使用)。由
PacketPayloadWriteBuffer
中的堆缓冲区溢出引起。 #6212 (Yuriy Baranov) - 修复了
bitmapSubsetInRange
函数中的内存泄漏。 #6819 (Zhichang Yu) - 修复了在粒度更改后执行 mutation 的罕见错误。 #6816 (alesapin)
- 默认允许包含所有字段的 protobuf 消息。 #6132 (Vitaly Baranov)
- 解决了当我们在第二个参数上发送
NULL
参数时nullIf
函数的错误。 #6446 (Guillaume Tassery) - 修复了复杂键缓存字典中字符串字段的错误内存分配/释放的罕见错误,该错误导致无限内存消耗(看起来像内存泄漏)。当字符串大小是 8(8、16、32 等)开始的 2 的幂时,会重现此错误。 #6447 (alesapin)
- 修复了小序列上的 Gorilla 编码,该编码导致异常
Cannot write after end of buffer
。 #6398 #6444 (Vasily Nemkov) - 允许在启用
join_use_nulls
的 JOIN 中使用不可为空的类型。 #6705 (Artem Zuikov) - 禁用
clickhouse-client
中查询中的Poco::AbstractConfiguration
替换。 #6706 (alexey-milovidov) - 避免
REPLACE PARTITION
中的死锁。 #6677 (alexey-milovidov) - 对常量参数使用
arrayReduce
可能会导致段错误。 #6242 #6326 (alexey-milovidov) - 修复了在
DROP PARTITION
后恢复副本时可能出现的不一致 parts。 #6522 #6523 (tavplubix) - 修复了
JSONExtractRaw
函数中的挂起问题。 #6195 #6198 (alexey-milovidov) - 修复了自适应粒度下不正确的跳过索引序列化和聚合的错误。 #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
表中描述的额外引号。 #6696 #6699 (alexey-milovidov) - 避免了 Replicated 表
TRUNCATE
操作中可能发生的死锁。 #6695 (alexey-milovidov) - 修复了按排序键顺序读取的问题。 #6189 (Anton Popov)
- 修复了
enable_mixed_granularity_parts=1
表的ALTER TABLE ... UPDATE
查询。 #6543 (alesapin) - 修复了由 #4405(自 19.4.0 起)引入的错误。当我们在 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
对于未作为处理器实现的输入流的行为。 #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) - 现在,在
OPTIMIZE ... FINAL
查询之后,具有过期 TTL 的值和行将从旧 parts 中删除,这些旧 parts 没有 TTL 信息或 TTL 信息已过时,例如在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) - 更好地支持 mutation 和 replication 的跳过索引。支持
MATERIALIZE/CLEAR INDEX ... IN PARTITION
查询。UPDATE x = x
重新计算所有使用列x
的索引。 #5053 (Nikita Vasilev) - 允许
ATTACH
live view(例如,在服务器启动时),而无需考虑allow_experimental_live_view
设置。 #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) - 禁用了没有键的聚合的“按顺序读取”优化。 #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
中添加了可选的消息参数。 (#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 功能的更好的信息消息。使用 "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) - 删除了线程的递归 rwlock。这没有意义,因为线程在查询之间重用。
SELECT
查询可能在一个线程中获取锁,持有来自另一个线程的锁并从第一个线程退出。同时,第一个线程可以被DROP
查询重用。这将导致错误的“尝试以递归方式获取独占锁”消息。 #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) - PHP mysqlnd 扩展错误的解决方法,当
sha256_password
用作默认身份验证插件时会发生这些错误(在 #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
。保留最后一个用于非选择查询。 #6499 (Artem Zuikov) - 删除了重复的输入和输出格式。 #6239 (Nikolai Kochetov)
- 允许用户在连接上覆盖
poll_interval
和idle_connection_timeout
设置。 #6230 (alexey-milovidov) MergeTree
现在有一个额外的选项ttl_only_drop_parts
(默认禁用),以避免 parts 的部分修剪,以便当 part 中的所有行都过期时完全删除它们。 #6191 (Sergi Vladykin)- 设置索引函数的类型检查。如果函数获取了错误的类型,则抛出异常。这修复了带有 UBSan 的模糊测试。 #6511 (Nikita Vasilev)
性能提升
- 优化了带有
ORDER BY expressions
子句的查询,其中expressions
在MergeTree
表中与排序键具有重合前缀。此优化由optimize_read_in_order
设置控制。 #6054 #6629 (Anton Popov) - 允许在 parts 加载和删除期间使用多个线程。 #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) StringHashMap
PR 的格式更改 #5417。 #6700 (akuzm)ExpressionAnalyzer
中用于连接创建的更好的子查询。 #6824 (Artem Zuikov)- 删除一个冗余条件(由 PVS Studio 发现)。 #6775 (akuzm)
- 为
ReverseIndex
分离哈希表接口。 #6672 (akuzm) - 重构设置。 #6689 (alesapin)
- 为
set
索引函数添加注释。 #6319 (Nikita Vasilev) - 增加 Linux 调试版本中的 OOM 分数。 #6152 (akuzm)
- HDFS HA 现在可以在调试版本中工作。 #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
时,会重现该错误。 #6204 (Yuriy Baranov) - 为
RENAME
表竞争条件添加了一个测试 #6752 (alexey-milovidov) - 避免
KILL QUERY
中设置的数据竞争。 #6753 (alexey-milovidov) - 为缓存字典处理错误添加集成测试。 #6755 (Vitaly Baranov)
- 禁用在 Mac OS 上解析 ELF 对象文件,因为它没有意义。 #6578 (alexey-milovidov)
- 尝试改进变更日志生成器。 #6327 (alexey-milovidov)
- 将
-Wshadow
开关添加到 GCC。 #6325 (kreuzerkrieg) - 删除了对
mimalloc
支持的过时代码。 #6715 (alexey-milovidov) zlib-ng
确定 x86 功能并将此信息保存到全局变量。这在 defalteInit 调用中完成,该调用可能由不同的线程同时进行。为避免多线程写入,请在库启动时执行此操作。 #6141 (akuzm)- 回归测试,用于修复 #5192 中修复的连接中的错误。 #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 性能测试从
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) - 允许将
library
字典源与 ASan 一起使用。 #6482 (alexey-milovidov) - 添加了从 PR 列表生成变更日志的选项。 #6350 (alexey-milovidov)
- 读取时锁定
TinyLog
存储。 #6226 (akuzm) - 检查 CI 中损坏的符号链接。 #6634 (alexey-milovidov)
- 增加“堆栈溢出”测试的超时时间,因为它在调试版本中可能需要很长时间。 #6637 (alexey-milovidov)
- 添加了双空格检查。 #6643 (alexey-milovidov)
- 修复使用 sanitizers 构建时的
new/delete
内存跟踪。跟踪不明确。它仅防止测试中的内存限制异常。 #6450 (Artem Zuikov) - 重新启用链接时未定义符号的检查。 #6453 (Ivan)
- 避免每天重建
hyperscan
。 #6307 (alexey-milovidov) - 修复了
ProtobufWriter
中的 UBSan 报告。 #6163 (alexey-milovidov) - 不允许将查询分析器与 sanitizers 一起使用,因为它不兼容。 #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)
- 为 #6029 中修复的
groupUniqArray
中的崩溃添加测试用例。 #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)
- 修复“拆分”构建。 #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 版本 19.13
ClickHouse 版本 19.13.6.51, 2019-10-02
Bug 修复
- 此版本还包含 19.11.12.69 中的所有错误修复。
ClickHouse 版本 19.13.5.44, 2019-09-20
Bug 修复
- 此版本还包含 19.14.6.12 中的所有 Bug 修复。
- 修复了当 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 版本 19.13.4.32, 2019-09-10
Bug 修复
- 此版本还包含 19.11.9.52 和 19.11.10.54 中的所有 bug 安全性修复。
- 修复了
system.parts
表和ALTER
查询中的数据竞争。 #6245 #6513 (alexey-milovidov) - 修复了从带有 sample 和 prewhere 的空分布式表读取时发生的流中 header 不匹配的问题。 #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 版本 19.13.3.26, 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
的段错误。修复了 mutation 查询准备中的竞争条件。修复了由 Replicated 表的OPTIMIZE
和并发修改操作(如 ALTER)引起的死锁。 #6514 (alexey-milovidov) - 修复了在具有跳过索引的表上执行
ALTER DELETE
查询后可能发生的数据丢失。 #6224 #6282 (Nikita Vasilev)
安全修复
- 如果攻击者具有 ZooKeeper 的写入权限,并且能够运行可从 ClickHouse 运行的网络访问的自定义服务器,则它可以创建自定义构建的恶意服务器,该服务器将充当 ClickHouse 副本并在 ZooKeeper 中注册它。当另一个副本将从恶意副本中获取数据部分时,它可以强制 clickhouse-server 写入文件系统上的任意路径。由 Yandex 信息安全团队的 Eldar Zaitov 发现。 #6247 (alexey-milovidov)
ClickHouse 版本 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) - 随机梯度下降的 Adam 优化器默认用于
stochasticLinearRegression()
和stochasticLogisticRegression()
聚合函数,因为它在几乎不需要调整的情况下显示出良好的质量。 #6000 (Quid37) - 添加了用于处理自定义周数的函数 #5212 (Andy Yang)
RENAME
查询现在可以与所有存储一起使用。 #5953 (Ivan)- 现在,客户端可以通过设置
send_logs_level
接收来自服务器的任何所需级别的日志,而无需考虑服务器设置中指定的日志级别。 #5964 (Nikita Mikhaylov)
向后不兼容的更改
- 默认情况下启用设置
input_format_defaults_for_omitted_fields
。分布式表中的插入需要此设置在集群上保持相同(您需要在滚动更新之前设置它)。它为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 Release 19.11
ClickHouse Release 19.11.13.74, 2019-11-01
Bug 修复
- 修复了在
ALTER MODIFY COLUMN
和垂直合并中,当合并/修改的部分之一为空(0 行)时,罕见的崩溃问题。 #6780 (alesapin) - 手动更新
SIMDJSON
。这修复了可能用虚假的 json 诊断消息填充 stderr 文件的问题。 #7548 (Alexander Kazakov) - 修复了 mutations 的
mrk
文件扩展名的错误 (alesapin)
ClickHouse Release 19.11.12.69, 2019-10-02
Bug 修复
- 修复了大型表上复杂键的索引分析性能下降的问题。 这修复了 #6924。 #7075 (alexey-milovidov)
- 避免在使用 Distributed 引擎的表发送数据时出现罕见的 SIGSEGV 错误(
Failed to send batch: file with index XXXXX is absent
)。 #7032 (Azat Khuzhin) - 修复了多个 joins 导致的
Unknown identifier
错误。 这修复了 #5254。 #7022 (Artem Zuikov)
ClickHouse Release 19.11.11.57, 2019-09-13
- 修复了从 Kafka 空主题中选择数据时导致段错误的逻辑错误。 #6902 #6909 (Ivan)
- 修复了函数
АrrayEnumerateUniqRanked
在参数为空数组时的错误。 #6928 (proller)
ClickHouse Release 19.11.10.54, 2019-09-10
Bug 修复
ClickHouse Release 19.11.9.52, 2019-09-6
- 改进缓存字典中的错误处理。 #6737 (Vitaly Baranov)
- 修复了函数
arrayEnumerateUniqRanked
中的错误。 #6779 (proller) - 修复了从 JSON 中提取
Tuple
的JSONExtract
函数。 #6718 (Vitaly Baranov) - 修复了在具有跳过索引的表上执行
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
可能阻止常规合并运行的问题。 阻止在没有足够空闲线程可用时执行 mutations。 #6502 #6617 (tavplubix) - 修复了服务器配置文件中处理 "timezone" 时出现的错误。 #6709 (alexey-milovidov)
- 修复 kafka 测试。 #6805 (Ivan)
安全修复
- 如果攻击者具有 ZooKeeper 的写入权限,并且能够从 ClickHouse 运行的网络上运行自定义服务器,则它可以创建自定义构建的恶意服务器,该服务器将充当 ClickHouse 副本并在 ZooKeeper 中注册它。 当另一个副本从恶意副本获取数据 part 时,它可能强制 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
的段错误。修复了 mutation 查询准备中的竞争条件。修复了由 Replicated 表的OPTIMIZE
和并发修改操作(如 ALTER)引起的死锁。 #6514 (alexey-milovidov)
ClickHouse Release 19.11.7.40, 2019-08-14
Bug 修复
- Kafka 集成在此版本中已修复。
- 修复了为常量参数使用
arrayReduce
时发生的段错误。 #6326 (alexey-milovidov) - 修复了
toFloat()
的单调性。 #6374 (dimarub2000) - 修复了启用
optimize_skip_unused_shards
和缺少 sharding key 时发生的段错误。 #6384 (CurtizJ) - 修复了
arrayEnumerateUniqRanked
函数的逻辑。 #6423 (alexey-milovidov) - 从 MySQL handler 中删除了额外的详细日志记录。 #6389 (alexey-milovidov)
- 修复了
topK
和topKWeighted
聚合函数中的错误行为和可能的段错误。 #6404 (CurtizJ) - 不要在
system.columns
表中公开虚拟列。 这是向后兼容性所必需的。 #6406 (alexey-milovidov) - 修复了复杂键缓存字典中字符串字段的内存分配错误。 #6447 (alesapin)
- 修复了为
Replicated*MergeTree
表创建新副本时启用自适应粒度的错误。 #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) - 修复了在
WHERE
的一部分移动到PREWHERE
时,对MergeTree
表的Distributed
表的查询中出现不兼容流头的罕见错误。 #6236 (alesapin) - 修复了有符号类型除以无符号类型的整数除法中的溢出。 这修复了 #6214。 #6233 (alexey-milovidov)
向后不兼容的变更
Kafka
仍然损坏。
ClickHouse Release 19.11.4.24, 2019-08-01
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" 聚合函数的非确定性结果。 此错误存在于所有 ClickHouse 版本中。 #6058 (alexey-milovidov)
- 当我们在函数
IPv6CIDRToRange
上设置过高的 CIDR 时,会发生段错误。 #6068 (Guillaume Tassery) - 修复了服务器从许多不同上下文中抛出许多异常时出现的小内存泄漏。 #6144 (alexey-milovidov)
- 修复了消费者在订阅之前暂停,之后未恢复的情况。 #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
新功能
- 添加了对预处理语句的支持。 #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_cache_update_period
)更新 DNS 缓存。 当主机的 IP 频繁更改时,它应该有所帮助。 #5857 (Anton Popov) - 修复了
Delta
编解码器中的段错误,该错误影响值小于 32 位大小的列。 该错误导致随机内存损坏。 #5786 (alesapin) - 修复了 TTL 合并中块中非物理列的段错误。 #5819 (Anton Popov)
- 修复了检查带有
LowCardinality
列的 part 的罕见错误。 以前checkDataPart
总是对带有LowCardinality
列的 part 失败。 #5832 (alesapin) - 避免在服务器线程池已满时挂起连接。 这对于每个服务器上都有多个分布式表的大型集群非常重要,因为每个服务器都可能保持与每个其他服务器的连接池,并且在查询并发高峰之后,连接将停滞。 这修复了 #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
查询将直接在 leader 副本上执行。 #5757 (alesapin) - 修复了带有
ColumnNullable
的ColumnConst
的coalesce
以及相关更改。 #5755 (Artem Zuikov) - 修复了
ReadBufferFromKafkaConsumer
,以便即使之前停顿,它也能在commit()
之后继续读取新消息 #5852 (Ivan) - 修复了在右表中对
Nullable
键进行连接时的FULL
和RIGHT
JOIN 结果。 #5859 (Artem Zuikov) - 可能修复了低优先级查询的无限休眠问题。 #5842 (alexey-milovidov)
- 修复了竞争条件,该条件导致在
SYSTEM FLUSH LOGS
查询之后某些查询可能不会出现在 query_log 中。 #5456 #5685 (Anton Popov) - 修复了 ClusterCopier 中由 watch 引起的
heap-use-after-free
ASan 警告,该 watch 尝试使用已删除的 copier 对象。 #5871 (Nikolai Kochetov) - 修复了
IColumn::deserializeAndInsertFromArena
的某些实现返回的错误的StringRef
指针。 此错误仅影响单元测试。 #5973 (Nikolai Kochetov) - 防止源数组连接列和中间数组连接列掩盖同名列。 #5941 (Artem Zuikov)
- 修复了使用 MySQL 样式标识符引用对 MySQL 引擎的 insert 和 select 查询。 #5704 (Winter Zhang)
- 现在
CHECK TABLE
查询可以与 MergeTree 引擎系列一起使用。 它为每个 part(或对于更简单的引擎,为文件)返回检查状态和消息(如果有)。 此外,修复了获取损坏 part 的错误。 #5865 (alesapin) - 修复了 SPLIT_SHARED_LIBRARIES 运行时问题 #5793 (Danila Kutenin)
- 修复了当
/etc/localtime
是相对符号链接(如../usr/share/zoneinfo/Asia/Istanbul
)时的时间zone初始化问题 #5922 (alexey-milovidov) - clickhouse-copier:修复了 shutdown 时的 use-after-free 错误 #5752 (proller)
- 更新了
simdjson
。 修复了一些带有零字节的无效 JSON 成功解析的问题。 #5938 (alexey-milovidov) - 修复了 SystemLogs 的 shutdown 问题 #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 parameter
的默认值 #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)
- 每个 commit 和 pull request 中的测试覆盖率信息。 #5896 (alesapin)
- 与 address sanitizer 合作,以支持我们的自定义分配器(
Arena
和ArenaWithFreeLists
),以便更好地调试 "use-after-free" 错误。 #5728 (akuzm) - 切换到 LLVM libunwind 实现,用于 C++ 异常处理和堆栈跟踪打印 #4828 (Nikita Lapkov)
- 从 -Weverything 添加两个更多警告 #5923 (alexey-milovidov)
- 允许使用内存 санитайзер 构建 ClickHouse。 #3949 (alexey-milovidov)
- 修复了关于模糊测试中
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)
- 修复了 macosx + 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)
- 按库拆分 Common/config.h (dbms) #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 Release 19.10
ClickHouse Release 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
快 2 倍。 #5535 (Zhichang Yu)- 支持
crc32
函数(行为与 MySQL 或 PHP 完全相同)。 如果您需要哈希函数,请不要使用它。 #5661 (Remen Ivan) - 实现了
SYSTEM START/STOP DISTRIBUTED SENDS
查询,以控制异步插入到Distributed
表中。 #4935 (Winter Zhang)
Bug 修复
- 在执行 mutations 时,忽略查询执行限制和合并限制的最大 parts 大小。 #5659 (Anton Popov)
- 修复了可能导致正常数据块重复数据删除(极其罕见)和插入重复数据块(更常见)的错误。 #5549 (alesapin)
- 修复了参数为空数组的
arrayEnumerateUniqRanked
函数的错误 #5559 (proller) - 不要订阅无意轮询任何消息的 Kafka 主题。 #5698 (Ivan)
- 使设置
join_use_nulls
对不能在 Nullable 内部的类型无效 #5700 (Olga Khvostikova) - 修复了
索引粒度大小不正确
错误 #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)
- 将 “public_suffix_list” 用于函数
firstSignificantSubdomain
,cutToFirstSignificantSubdomain
。 它使用由gperf
生成的完美哈希表,该表使用从文件生成的列表:https://publicsuffix.org/list/public_suffix_list.dat。(例如,现在我们将域ac.uk
识别为非显著的)。 #5030 (Guillaume Tassery) - 在系统表中采用了
IPv6
数据类型; 统一了system.processes
和system.query_log
中的客户端信息列 #5640 (alexey-milovidov) - 将会话用于与 MySQL 兼容性协议的连接。 #5476 #5646 (Yuriy Baranov)
- 支持更多
ON CLUSTER
的ALTER
查询。 #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)
构建/测试/打包改进
- 实现了
TestKeeper
,作为用于测试的 ZooKeeper 接口的实现 #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 修复
- 修复了 Delta 编解码器中的段错误,该错误影响值大小小于 32 位的列。 该错误导致随机内存损坏。 #5786 (alesapin)
- 修复了检查带有 LowCardinality 列的 part 时出现的罕见错误。 #5832 (alesapin)
- 修复了 TTL 合并中块中非物理列的段错误。 #5819 (Anton Popov)
- 修复了低优先级查询可能无限期休眠的问题。 #5842 (alexey-milovidov)
- 修复了 ClickHouse 将默认时区确定为 UCT 而不是 UTC 的问题。 #5828 (alexey-milovidov)
- 修复了在 leader 副本之前在 follower 副本上执行分布式 DROP/ALTER/TRUNCATE/OPTIMIZE ON CLUSTER 查询的错误。 现在它们将直接在 leader 副本上执行。 #5757 (alesapin)
- 修复了竞争条件,这导致某些查询可能在 SYSTEM FLUSH LOGS 查询后不会立即出现在 query_log 中。 #5685 (Anton Popov)
- 为
evalMLModel
函数添加了对常量参数的缺失支持。 #5820 (alexey-milovidov)
ClickHouse Release 19.9.2.4, 2019-06-24
新功能
- 在
system.parts
表中打印有关冻结 parts 的信息。 #5471 (proller) - 如果未在参数中设置,则在 tty 上的 clickhouse-client 启动时询问客户端密码 #5092 (proller)
- 为 Decimal 类型实现
dictGet
和dictGetOrDefault
函数。 #5394 (Artem Zuikov)
改进
- Debian init:添加服务停止超时 #5522 (proller)
- 添加默认禁止的设置,以使用可疑类型为 LowCardinality 创建表 #5448 (Olga Khvostikova)
- 当不作为
evalMLMethod
函数中的 State 使用时,回归函数返回模型权重。 #5411 (Quid37) - 重命名并改进回归方法。 #5492 (Quid37)
- 更清晰的字符串搜索器接口。 #5586 (Danila Kutenin)
Bug 修复
- 修复了 Kafka 中潜在的数据丢失问题 #5445 (Ivan)
- 修复了使用零列调用
PrettySpace
格式时可能发生的无限循环 #5560 (Olga Khvostikova) - 修复了线性模型中的 UInt32 溢出错误。 允许为非 const 模型参数评估 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 列的 INSERT 到 Distributed 表的问题 #5429 (Azat Khuzhin)
- 修复了截断 Join 存储时发生的 bad alloc 问题 #5437 (TCeason)
- 在最新版本的 package tzdata 中,某些文件现在是符号链接。 当前用于检测默认时区的机制被破坏,并为某些时区提供了错误的名称。 现在,至少我们强制时区名称为 TZ 的内容(如果提供)。 #5443 (Ivan)
- 修复了 MultiVolnitsky 搜索器在总和中的常量 needles 至少为 16KB 长时出现的一些极其罕见的情况。 该算法遗漏或覆盖了之前的结果,这可能导致
multiSearchAny
的结果不正确。 #5588 (Danila Kutenin) - 修复了 ExternalData 请求的设置无法使用 ClickHouse 设置的问题。 此外,目前,由于名称的歧义(在外部数据中,它可以被解释为表格式,而在查询中,它可以是一个设置),因此无法使用设置
date_time_input_format
和low_cardinality_allow_in_native_format
。 #5455 (Danila Kutenin) - 修复了 parts 仅从 FS 中删除而未从 Zookeeper 中删除的错误。 #5520 (alesapin)
- 从 MySQL 协议中删除调试日志 #5478 (alexey-milovidov)
- 在 DDL 查询处理期间跳过 ZNONODE #5489 (Azat Khuzhin)
- 修复了 mix
UNION ALL
结果列类型。 存在结果列的数据和列类型不一致的情况。 #5503 (Artem Zuikov) - 在
dictGetT
函数中对错误的整数抛出异常,而不是崩溃。 #5446 (Artem Zuikov) - 修复了
system.dictionaries
表中哈希字典的错误 element_count 和 load_factor。 #5440 (Azat Khuzhin)
构建/测试/打包改进
- 修复了在没有
Brotli
HTTP 压缩支持的情况下构建(ENABLE_BROTLI=OFF
cmake 变量)。 #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 Release 19.8
ClickHouse Release 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) - 在函数中支持 Decimal 类型:
quantile
,quantiles
,median
,quantileExactWeighted
,quantilesExactWeighted
,medianExactWeighted。 #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-batches。 #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
谓词现在从Null
输入生成Null
结果,就像Equal
函数一样。#5152 (Jian Wu)- 每隔 (flush_interval / poll_timeout) 行从 Kafka 检查一次时间限制。这允许更频繁地中断从 Kafka 消费者的读取,并检查顶级流的时间限制。#5249 (Ivan)
- 将 rdkafka 与捆绑的 SASL 链接。这应该允许使用 SASL SCRAM 身份验证。#5253 (Ivan)
- 用于 ALL JOINS 的 RowRefList 的批处理版本。#5267 (Artem Zuikov)
- clickhouse-server:更具信息量的监听错误消息。#5268 (proller)
- 在
<sharding_key>
中的函数中支持 clickhouse-copier 中的字典。#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 Protocol。将格式名称更改为 MySQLWire。使用 RAII 调用 RSA_free。如果无法创建上下文,则禁用 SSL。#5419 (Yuriy Baranov)
- clickhouse-client:允许在无法访问历史记录文件的情况下运行(只读、磁盘空间不足、文件是目录等)。#5431 (proller)
- 在异步 INSERT 中尊重对 Distributed 表的查询设置。#4936 (TCeason)
- 重命名函数
leastSqr
为simpleLinearRegression
,LinearRegression
为linearRegression
,LogisticRegression
为logisticRegression
。#5391 (Nikolai Kochetov)
性能改进
- 并行化 ALTER MODIFY 查询中非复制 MergeTree 表的 parts 处理。#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)
- 实现了 MSD 基数排序(基于 kxsort)和部分排序。#5129 (Evgenii Pravda)
Bug 修复
- 修复了使用 join 推送 require 列的问题。#5192 (Winter Zhang)
- 修复了当 ClickHouse 由 systemd 运行时,命令
sudo service clickhouse-server forcerestart
未按预期工作的问题。#5204 (proller) - 修复了 DataPartsExchange 中的 http 错误代码(interserver http 服务器在 9009 端口始终返回代码 200,即使发生错误)。#5216 (proller)
- 修复了 String 长度超过 MAX_SMALL_STRING_SIZE 的 SimpleAggregateFunction 的问题。#5311 (Azat Khuzhin)
- 修复了 IN 中
Decimal
到Nullable(Decimal)
转换的错误。支持其他 Decimal 到 Decimal 的转换(包括不同的 scale)。#5350 (Artem Zuikov) - 修复了 simdjson 库中 FPU clobbering,这导致
uniqHLL
和uniqCombined
聚合函数以及数学函数(如log
)的错误计算。#5354 (alexey-milovidov) - 修复了 JSON 函数中混合 const/nonconst 情况的处理。#5435 (Vitaly Baranov)
- 修复
retention
函数。现在,满足数据行中条件的所有条件都将添加到数据状态中。#5119 (小路) - 修复了带 Decimals 的
quantileExact
的结果类型。#5304 (Artem Zuikov)
文档
构建/测试/打包改进
- 修复了一些显示可能 use-after-free 的 sanitizer 报告。#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
新功能
- 添加了位图相关函数
bitmapHasAny
和bitmapHasAll
,类似于数组的hasAny
和hasAll
函数。#5279 (Sergi Vladykin)
Bug 修复
- 修复了带有 Null 值的
minmax
INDEX 上的段错误。#5246 (Nikita Vasilev) - 将 LIMIT BY 中的所有输入列标记为必需输出。它修复了一些分布式查询中的“找不到列”错误。#5407 (Constantin S. Pan)
- 修复了在具有 DEFAULT 的列上
SELECT .. PREWHERE
中“列 '0' 已存在”错误。#5397 (proller) - 修复了
ReplicatedMergeTree
上的ALTER MODIFY TTL
查询。#5539 (Anton Popov) - 当 Kafka 消费者启动失败时,不要使服务器崩溃。#5285 (Ivan)
- 修复了位图函数产生错误结果的问题。#5359 (Andy Yang)
- 修复了哈希字典的 element_count(不包括重复项)。#5440 (Azat Khuzhin)
- 使用环境变量 TZ 的内容作为时区名称。这有助于在某些情况下正确检测默认时区。#5443 (Ivan)
- 不要尝试转换
dictGetT
函数中的整数,因为它无法正确工作。而是抛出异常。#5446 (Artem Zuikov) - 修复了 ExternalData HTTP 请求中的设置。#5455 (Danila Kutenin)
- 修复了 parts 仅从 FS 中删除而未从 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 列的 INSERT 到 Distributed() 表中的问题。#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)
- 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)
性能改进
- 在没有
LIMIT
的ORDER BY
中,对单个数字列进行排序时使用基数排序。#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)
- 为即将到来的 pull request #5030 向构建需求添加 gperf。#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
- 禁止将 float Inf/NaN 转换为 Decimals(抛出异常)。#5282 (Artem Zuikov)
- 修复了重命名查询中的数据竞争。#5247 (Winter Zhang)
- 临时禁用 LFAlloc。在分配 UncompressedCache 和结果中,使用 LFAlloc 可能会导致大量 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) - 在左连接中禁用向下推送到右表,在右连接中禁用向下推送到左表,以及在全连接中禁用向下推送到两个表。这修复了某些情况下错误的 JOIN 结果。#4846 (Ivan)
clickhouse-copier
:从--task-file
选项自动上传任务配置。#4876 (proller)- 为存储工厂和表函数工厂添加了拼写错误处理程序。#4891 (Danila Kutenin)
- 支持没有子查询的多个连接的星号和限定星号。#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)
- 修复了带有
JOIN
的SELECT DISTINCT
可能产生的错误结果。#5001 (Artem Zuikov) - 修复了非常罕见的数据竞争条件,当执行 UNION ALL 查询(涉及至少两个来自 system.columns、system.tables、system.parts、system.parts_tables 或 Merge 系列表的 SELECT)并同时执行相关表的列的 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)
- Python 工具,以帮助进行向后移植和变更日志。 #4949 (Ivan)
ClickHouse 19.5 版本
ClickHouse 19.5.4.22 版本,2019-05-13
Bug 修复
- 修复了 bitmap* 函数中可能发生的崩溃 #5220 #5228 (Andy Yang)
- 修复了非常罕见的数据竞争条件,当执行 UNION ALL 查询(涉及至少两个来自 system.columns、system.tables、system.parts、system.parts_tables 或 Merge 系列表的 SELECT)并同时执行相关表的列的 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)
- 添加了基于布隆过滤器的新型数据跳过索引(可用于
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)- 添加了在
readonly
模式下启动复制表而无需 zookeeper 中的元数据的能力。 #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
函数的错误参数可能会导致段错误。 #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
中重新检查 parts 的问题。 #4772 (Nikolai Kochetov) - 中间聚合函数状态的算术运算不适用于常量参数(例如子查询结果)。 #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) - 修复了获取已过时的数据 part 时的数据竞争。 #4839 (alexey-milovidov)
- 修复了在重命名 MergeTree 系列表期间可能发生的罕见数据竞争。 #4844 (alexey-milovidov)
- 修复了函数
arrayIntersect
中的段错误。如果使用混合常量参数和普通参数调用该函数,则可能会发生段错误。 #4847 (Lixiang Qian) - 修复了在极少数情况下从
Array(LowCardinality)
列读取数据的问题,当列包含一长串空数组时。 #4850 (Nikolai Kochetov) - 修复了在可为空列与不可为空列上进行连接时
FULL/RIGHT JOIN
中的崩溃。 #4855 (Artem Zuikov) - 修复了在副本之间获取 parts 时出现的
No message received
异常。 #4856 (alesapin) - 修复了在单个数组中存在多个重复值的情况下,
arrayIntersect
函数的错误结果。 #4871 (Nikolai Kochetov) - 修复了并发
ALTER COLUMN
查询期间的竞争条件,这可能导致服务器崩溃(修复了问题 #3421)。 #4592 (Alex Zatelepin) - 修复了带有 const 列的
FULL/RIGHT JOIN
中的不正确结果。 #4723 (Artem Zuikov) - 修复了带有星号的
GLOBAL JOIN
中的重复项。 #4705 (Artem Zuikov) - 修复了未指定列类型时,列
CODEC
的ALTER MODIFY
中的参数推导。 #4883 (alesapin) - 函数
cutQueryStringAndFragment()
和queryStringAndFragment()
现在在URL
包含片段且没有查询时也能正常工作。 #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 搜索器,对于具有许多 needle 或许多相似 bigram 的查询,性能提升约 5-10%。 #4862 (Danila Kutenin)
- 修复了当设置
use_uncompressed_cache
大于零时出现的性能问题,当所有读取的数据都包含在缓存中时会出现此问题。 #4913 (alesapin)
构建/测试/打包 改进
- 强化调试构建:更细粒度的内存映射和 ASLR;为标记缓存和索引添加内存保护。这允许在 ASan 和 MSan 无法做到时,找到更多的内存踩踏错误。 #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 构建,并将线程清理器构建添加到打包器脚本。 #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 接口使用格式 schema。 #4864 (Vitaly Baranov)
ClickHouse 19.4 版本
ClickHouse 19.4.4.33 版本,2019-04-17
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
函数的错误参数可能会导致段错误。 #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
中重新检查 parts 的问题。 #4772 (Nikolai Kochetov) - 中间聚合函数状态的算术运算不适用于常量参数(例如子查询结果)。 #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) - 修复了获取已过时的数据 part 时的数据竞争。 #4839 (alexey-milovidov)
- 修复了在重命名 MergeTree 系列表期间可能发生的罕见数据竞争。 #4844 (alexey-milovidov)
- 修复了函数
arrayIntersect
中的段错误。如果使用混合常量参数和普通参数调用该函数,则可能会发生段错误。 #4847 (Lixiang Qian) - 修复了在极少数情况下从
Array(LowCardinality)
列读取数据的问题,当列包含一长串空数组时。 #4850 (Nikolai Kochetov) - 修复了在副本之间获取 parts 时出现的
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
参数的聚合函数的错误参数类型(修复了问题 #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
Bug 修复
- 修复了在可为空列与不可为空列上进行连接时
FULL/RIGHT JOIN
中的崩溃。 #4855 (Artem Zuikov) - 修复了
clickhouse-copier
中的段错误。 #4835 (proller)
构建/测试/打包 改进
- 添加了一种从自定义用户启动 clickhouse-server 镜像的方法。 #4753 (Mikhail f. Shiryaev)
ClickHouse 19.4.2.7 版本,2019-03-30
Bug 修复
- 修复了在极少数情况下从
Array(LowCardinality)
列读取数据的问题,当列包含一长串空数组时。 #4850 (Nikolai Kochetov)
ClickHouse 19.4.1.3 版本,2019-03-19
Bug 修复
- 修复了包含
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 的 bitmap 函数。 #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 Fixes
- 此版本还包含来自 19.3 和 19.1 的所有错误修复。
- 修复了数据跳过索引中的错误:INSERT 后的 granules 顺序不正确。 #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
,当 MergeTree 表在与 SELECT 并发删除时可能发生。 #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) - 修复了当 SELECT 查询多次锁定同一张表(例如,来自不同线程或执行多个子查询时)并且存在并发 DDL 查询时发生的死锁。 #4535 (Alex Zatelepin)
- 默认禁用 compile_expressions,直到我们获得自己的
llvm
contrib 并可以使用clang
和asan
对其进行测试。 #4579 (alesapin) - 防止
std::terminate
,当clickhouse
外部字典源的invalidate_query
返回了错误的结果集(空或多于一行或多于一列)。修复了invalidate_query
每五秒执行一次,而不管lifetime
的问题。 #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)
Improvements
- 支持右表列的 JOIN ON 部分中的别名。 #4412 (Artem Zuikov)
- 多重 JOIN 的结果需要正确的结果名称才能在子查询中使用。在结果中用源名称替换扁平别名。 #4474 (Artem Zuikov)
- 改进了 joined 语句的下推逻辑。 #4387 (Ivan)
Performance Improvements
- 改进了 "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)
Build/Testing/Packaging Improvement
- 增加了对 clang-9 的支持 #4604 (alexey-milovidov)
- 修复了错误的
__asm__
指令(再次) #4621 (Konstantin Podshumok) - 添加了从命令行指定
clickhouse-performance-test
设置的能力。 #4437 (alesapin) - 将字典测试添加到集成测试中。 #4477 (alesapin)
- 将网站上基准测试中的查询添加到自动化性能测试中。 #4496 (alexey-milovidov)
xxhash.h
在外部 lz4 中不存在,因为它是一个实现细节,并且其符号使用XXH_NAMESPACE
宏进行命名空间限定。当 lz4 是外部的时,xxHash 也必须是外部的,并且依赖项必须链接到它。 #4495 (Orivej Desh)- 修复了一个案例,其中
quantileTiming
聚合函数可以使用负数或浮点参数调用(这修复了带有未定义行为 sanitizer 的模糊测试)。 #4506 (alexey-milovidov) - 拼写错误更正。 #4531 (sdk2)
- 修复了 Mac 上的编译。 #4371 (Vitaly Baranov)
- 修复了 FreeBSD 和各种不寻常的构建配置的构建问题。 #4444 (proller)
ClickHouse Release 19.3
ClickHouse Release 19.3.9.1, 2019-04-02
Bug Fixes
- 修复了在可为空列与不可为空列上进行连接时
FULL/RIGHT JOIN
中的崩溃。 #4855 (Artem Zuikov) - 修复了
clickhouse-copier
中的段错误。 #4835 (proller) - 修复了在极少数情况下从
Array(LowCardinality)
列读取数据的问题,当列包含一长串空数组时。 #4850 (Nikolai Kochetov)
Build/Testing/Packaging Improvement
- 添加了一种从自定义用户启动 clickhouse-server 镜像的方法 #4753 (Mikhail f. Shiryaev)
ClickHouse Release 19.3.7, 2019-03-12
Bug Fixes
- 修复了 #3920 中的错误。此错误表现为随机缓存损坏(消息
Unknown codec family code
,Cannot seek through file
)和段错误。此错误首次出现在 19.1 版本中,并且存在于 19.1.10 和 19.3.6 版本中。 #4623 (alexey-milovidov)
ClickHouse Release 19.3.6, 2019-03-02
Bug Fixes
- 当线程池中有超过 1000 个线程时,
std::terminate
可能会在线程退出时发生。 Azat Khuzhin #4485 #4505 (alexey-milovidov) - 现在可以创建带有列注释(没有默认值)和列编解码器(没有注释和默认值)的
ReplicatedMergeTree*
表。同时修复了编解码器的比较。 #4523 (alesapin) - 修复了带有数组或元组的 JOIN 上的崩溃。 #4552 (Artem Zuikov)
- 修复了 clickhouse-copier 中崩溃,消息为
ThreadStatus not created
。 #4540 (Artem Zuikov) - 修复了如果使用了分布式 DDL,服务器关闭时挂起的问题。 #4472 (Alex Zatelepin)
- 对于列号大于 10 的列,在关于文本格式解析的错误消息中打印了不正确的列号。 #4484 (alexey-milovidov)
Build/Testing/Packaging Improvements
- 修复了启用 AVX 时的构建。 #4527 (alexey-milovidov)
- 基于良好的已知版本而不是编译时内核启用扩展的 accounting 和 IO accounting。 #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 Fixes
- 修复了处理大型 http insert 查询的错误。 #4454 (alesapin)
- 修复了由于错误实现
send_logs_level
设置而导致的与旧版本的向后不兼容性。 #4445 (alexey-milovidov) - 修复了由于列注释而引入的表函数
remote
的向后不兼容性。 #4446 (alexey-milovidov)
ClickHouse Release 19.3.4, 2019-02-16
Improvements
- 当执行
ATTACH TABLE
查询时,表索引大小未计入内存限制。避免了在 detached 后无法 attach 表的可能性。 #4396 (alexey-milovidov) - 略微提高了从 ZooKeeper 接收的最大字符串和数组大小的限制。它允许继续使用 ZooKeeper 上增加的
CLIENT_JVMFLAGS=-Djute.maxbuffer=...
大小。 #4398 (alexey-milovidov) - 即使废弃的副本在其队列中已经有大量节点,也允许修复它。 #4399 (alexey-milovidov)
- 为
SET
索引添加一个必需的参数(最大存储行数)。 #4386 (Nikita Vasilev)
Bug Fixes
- 修复了
WITH ROLLUP
对单个LowCardinality
键进行 group by 的结果。 #4384 (Nikolai Kochetov) - 修复了 set 索引中的错误(如果一个 granule 包含超过
max_rows
行,则删除该 granule)。 #4386 (Nikita Vasilev) - 大量的 FreeBSD 构建修复。 #4397 (proller)
- 修复了在包含相同别名的子查询的查询中别名替换的问题 (issue #4110)。 #4351 (Artem Zuikov)
Build/Testing/Packaging Improvements
- 添加了在 docker 镜像中为无状态测试运行
clickhouse-server
的能力。 #4347 (Vasily Nemkov)
ClickHouse Release 19.3.3, 2019-02-13
New Features
- 添加了
KILL MUTATION
语句,允许删除由于某些原因卡住的 mutations。在system.mutations
表中添加了latest_failed_part
、latest_fail_time
、latest_fail_reason
字段,以便更轻松地进行故障排除。 #4287 (Alex Zatelepin) - 添加了聚合函数
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) - 在
mysql
表函数中添加了对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) - 为 HTTP 接口的数据导入 (INSERT) 添加了 brotli 支持。 #4235 (Mikhail)
- 当用户在命令行客户端中输入函数名称或类型时,添加了提示。 #4239 (Danila Kutenin)
- 在服务器的 HTTP 响应头中添加了
Query-Id
。 #4231 (Mikhail)
Experimental Features
- 为 MergeTree 表引擎系列添加了
minmax
和set
数据跳过索引。 #4143 (Nikita Vasilev) - 如果可能,添加了将
CROSS JOIN
转换为INNER JOIN
的功能。 #4221 #4266 (Artem Zuikov)
Bug Fixes
- 修复了
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
时的段错误以及未压缩大小错误的异常。此错误出现在 19.1.6 版本中。 #4186 (alesapin) - 修复了
compile_expressions
在比较大的(超过 int16)日期时的错误。 #4341 (alesapin) - 修复了从表函数
numbers(0)
中选择时的无限循环。 #4280 (alexey-milovidov) - 临时禁用
ORDER BY
的谓词优化。 #3890 (Winter Zhang) - 修复了在旧 CPU 上使用 base64 函数时的
Illegal instruction
错误。此错误仅在 ClickHouse 使用 gcc-8 编译时重现。 #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
在交互模式下运行,则在加载命令行建议的数据时,可能会在退出时发生段错误。 #4317 (alexey-milovidov) - 修复了一个错误,即执行包含
IN
运算符的 mutations 会产生不正确的结果。 #4099 (Alex Zatelepin) - 修复了错误:如果存在带有
Dictionary
引擎的数据库,则所有字典在服务器启动时都会强制加载,并且如果存在来自 localhost 的 ClickHouse 源的字典,则该字典无法加载。 #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) - 修复了未定义行为清理器下的模糊测试:为
quantile*Weighted
函数族添加了参数类型检查。 #4145 (alexey-milovidov) - 修复了删除旧数据 part 时可能发生的
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)
- 性能测试的重构。 更好的日志记录和信号处理。 #4171 (alesapin)
- 为匿名化的 Yandex.Metrica 数据集添加了文档。 #4164 (alesapin)
- 添加了用于将旧的按月分区的 part 转换为自定义分区格式的工具。 #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) - 根据可用内存量减少了标记缓存大小和未压缩缓存大小。 #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) - 如果客户端套接字断开,则添加了取消 HTTP 只读查询的功能。 #4213 (nvartolomei)
- 现在服务器报告进度以保持客户端连接活动。 #4215 (Ivan)
- 对于启用了
optimize_throw_if_noop
设置的 OPTIMIZE 查询,提供了稍好的消息和原因。 #4294 (alexey-milovidov) - 为 clickhouse 服务器添加了
--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 Release 19.1
ClickHouse Release 19.1.14, 2019-03-14
- 修复了如果设置
asterisk_left_columns_only
在使用带有SELECT *
的GLOBAL JOIN
的情况下设置为 1 时可能发生的错误Column ... queried more than once
(罕见情况)。 此问题在 19.3 及更新版本中不存在。 6bac7d8d (Artem Zuikov)
ClickHouse Release 19.1.13, 2019-03-12
此版本包含与 19.3.7 完全相同的补丁集。
ClickHouse Release 19.1.10, 2019-03-03
此版本包含与 19.3.6 完全相同的补丁集。
ClickHouse Release 19.1
ClickHouse Release 19.1.9, 2019-02-21
Bug 修复
- 修复了由于错误实现
send_logs_level
设置而导致的与旧版本的向后不兼容性。 #4445 (alexey-milovidov) - 修复了由于列注释而引入的表函数
remote
的向后不兼容性。 #4446 (alexey-milovidov)
ClickHouse Release 19.1.8, 2019-02-16
Bug 修复
ClickHouse Release 19.1
ClickHouse Release 19.1.7, 2019-02-15
Bug 修复
- 正确返回
joinGet
函数的正确类型并正确处理锁。 #4153 (Amos Bird) - 修复了在服务器关闭时尝试再次创建系统日志时发生的错误。 #4254 (alexey-milovidov)
- 修复了错误:如果存在带有
Dictionary
引擎的数据库,则所有字典在服务器启动时都会强制加载,并且如果存在来自 localhost 的 ClickHouse 源的字典,则该字典无法加载。 #4255 (alexey-milovidov) - 修复了一个错误,即执行包含
IN
运算符的 mutations 会产生不正确的结果。 #4099 (Alex Zatelepin) - 如果
clickhouse-client
在交互模式下运行,则在加载命令行建议的数据时,可能会在退出时发生段错误。 #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)
- 修复了未定义行为清理器下的模糊测试:为
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) - 添加了从大的 haystack 中搜索多个常量字符串的函数:
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) - 修复了一个导致在执行 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
读取所有 fds 更早关闭/proc/self/fd
目录的错误。 #4120 (alesapin) - 修复了在主键中使用 String 的情况下,String 到 UInt 的单调转换。 #3870 (Winter Zhang)
- 修复了整数转换函数单调性计算中的错误。 #3921 (alexey-milovidov)
- 修复了在某些无效参数情况下,
arrayEnumerateUniq
、arrayEnumerateDense
函数中的段错误。 #3909 (alexey-milovidov) - 修复了 StorageMerge 中的 UB。 #3910 (Amos Bird)
- 修复了
addDays
、subtractDays
函数中的段错误。 #3913 (alexey-milovidov) - 修复了错误:当对整数参数和大的负比例执行时,函数
round
、floor
、trunc
、ceil
可能会返回错误的结果。 #3914 (alexey-milovidov) - 修复了由 ‘kill query sync’ 引起的可能导致核心转储的 bug。 #3916 (muVulDeePecker)
- 修复了空复制队列后长时间延迟的错误。 #3928 #3932 (alesapin)
- 修复了在插入具有
LowCardinality
主键的表时,过度的内存使用。 #3955 (KochetovNicolai) - 修复了空数组情况下
Native
格式的LowCardinality
序列化。 #3907 #4011 (KochetovNicolai) - 修复了使用单个 LowCardinality 数字列进行 distinct 时结果不正确的问题。 #3895 #4012 (KochetovNicolai)
- 修复了带有 LowCardinality 键的专用聚合(在启用
compile
设置的情况下)。 #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
现在支持锯齿状结构。 #4063 (Odin Hultgren Van Der Horst)- 可用性改进:添加了检查服务器进程是否从数据目录的所有者启动。 如果数据属于非 root 用户,则不允许从 root 启动服务器。 #3785 (sergey-v-galtsev)
- 在分析带有 JOIN 的查询期间,改进了检查所需列的逻辑。 #3930 (Artem Zuikov)
- 减少了单个服务器中大量分布式表情况下的连接数。 #3726 (Winter Zhang)
- 支持 ODBC 驱动程序的
WITH TOTALS
查询的总计行。 #3836 (Maksim Koritckiy) - 允许在 if 函数内部使用
Enum
作为整数。 #3875 (Ivan) - 添加了
low_cardinality_allow_in_native_format
设置。 如果禁用,则不在Native
格式中使用LowCadrinality
类型。 #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 中存储紧凑的部分元数据。这可以显著减小 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 镜像中更改目录所有者,则添加环境变量。 #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)- 改进了编译时间,修复了 includes。 #3898 (proller)
- 为哈希函数添加了性能测试。 #3918 (filimonov)
- 修复了循环库依赖。 #3958 (proller)
- 改进了低可用内存下的编译。 #4030 (proller)
- 添加了测试脚本以重现
jemalloc
中的性能下降。 #4036 (alexey-milovidov) - 修复了
dbms
下注释和字符串文字中的拼写错误。 #4122 (maiha) - 修复了注释中的错别字。 #4089 (Evgenii Pravda)