ClickHouse 发布 19.17
ClickHouse 发布 19.17.6.36,2019-12-27
问题修复
- 修复了
decompress中潜在的缓冲区溢出问题。恶意用户可传入伪造的压缩数据,导致读取越过缓冲区边界。该问题由 Yandex 信息安全团队的 Eldar Zaitov 发现。#8404 (alexey-milovidov) - 修复了在以下情况下服务器可能崩溃 (
std::terminate) 的问题:服务器无法以 JSON 或 XML 格式发送或写入包含 String 类型值 (需要进行 UTF-8 校验) 的数据,或者在使用 Brotli 算法压缩结果数据时,以及其他一些罕见情况下。 #8384 (alexey-milovidov) - 已修复源自 ClickHouse
VIEW的固定字典;现在读取此类字典时不会再报错There is no query。#8351 (Nikolai Kochetov) - 修复了根据 users.xml 中指定的 host_regexp 检查客户端主机是否被允许时的问题。#8241, #8342 (Vitaly Baranov)
RENAME TABLE现在对分布式表会在发送到分片之前,先重命名包含已插入数据的文件夹。这修复了连续重命名tableA->tableB、tableC->tableA时的问题。#8306 (tavplubix)- 通过 DDL 查询创建的
range_hashed外部字典现已支持任意数值类型的范围。#8275 (alesapin) - 修复了
INSERT INTO table SELECT ... FROM mysql(...)表函数中的问题。#8234 (tavplubix) - 修复了在向不存在的文件执行
INSERT INTO TABLE FUNCTION file()时发生段错误的问题。现在在这种情况下会先创建文件,然后执行插入操作。#8177 (Olga Khvostikova) - 修复了对聚合后的 bitmap 和标量 bitmap 进行求交时的 bitmapAnd 错误。#8082 (Yue Huang)
- 修复了在未使用
TABLE或DICTIONARY限定符的情况下使用EXISTS查询 (如EXISTS t) 时会导致段错误的问题。#8213 (alexey-milovidov) - 修复了函数
rand和randConstant在参数为 Nullable 时的返回类型。现在这些函数始终返回UInt32,不再返回Nullable(UInt32)。#8204 (Nikolai Kochetov) - 已修复
DROP DICTIONARY IF EXISTS db.dict:现在即使db不存在,也不会抛出异常。#8185 (Vitaly Baranov) - 如果某个表因服务器崩溃而未被完全删除,服务器会尝试将其恢复并加载 #8176 (tavplubix)
- 修复了一个问题:当分片本地表数量超过两个时,针对分布式表的简单
count查询会出错。#8164 (小路) - 修复了一个会导致
DB::BlockStreamProfileInfo::calculateRowsBeforeLimit()中发生数据竞争的问题 #8143 (Alexander Kazakov) - 修复了这样一个问题:在指定的 part 合并完成后立即执行
ALTER table MOVE part,可能会移动该指定 part 合并后生成的 part。现在会正确移动指定的 part。#8104 (Vladimir Chebotarev) - 现在可以将字典的表达式指定为字符串。这对于从非 ClickHouse 数据源提取数据时计算 attribute 很有用,因为这样可以在这些表达式中使用非 ClickHouse 语法。 #8098 (alesapin)
- 修复了
clickhouse-copier中一个极少出现的竞态问题,原因是 ZXid 溢出。#8088 (Ding Xiang Fei) - 修复了一个 bug:当查询失败后 (例如因 “Too many simultaneous queries”) ,系统不会读取外部表信息,而后续请求会将这些信息误认为是下一条查询的开头,从而导致类似
Unknown packet from client的错误。 #8084 (Azat Khuzhin) - 修复在出现 “Unknown packet X from server” 后发生空指针解引用的问题 #8071 (Azat Khuzhin)
- 恢复对所有 ICU 区域设置的支持,新增了可对常量表达式应用排序规则的功能,并在 system.collations 表中添加了语言名称。#8051 (alesapin)
- 现在已限制从
StorageFile和StorageHDFS读取时的流数量,以避免超出内存限制。#7981 (alesapin) - 修复了对不带键的
*MergeTree表执行CHECK TABLE查询时的问题。#7979 (alesapin) - 如果没有变更,则从数据分片名称中去掉变更编号,从而提高了与旧版本的兼容性。 #8250 (alesapin)
- 修复了一个缺陷:某些已附加的 parts 的 data_version 大于表的变更版本,导致这些 parts 的变更被跳过。#7812 (Zhichang Yu)
- 允许在将 parts 移动到另一设备后,即使存在冗余副本也能启动服务器。#7810 (Vladimir Chebotarev)
- 修复了使用聚合函数列时可能出现的错误:“Sizes of columns does not match”。#7790 (Boris Granveaud)
- 现在,如果同时使用 WITH TIES 和 LIMIT BY,将抛出异常。现在也可以将 TOP 与 LIMIT BY 一起使用。#7637 (Nikita Mikhaylov)
- 修复了带有
invalidate_query的字典重新加载问题;此前这会导致更新停止,并在先前的更新尝试中引发一些异常。#8029 (alesapin)
ClickHouse 发布 19.17.4.11,2019-11-22
向后不兼容的更改
- 为了提升性能,改为使用列而不是 AST 来存储标量子查询结果。19.17 新增了设置
enable_scalar_subquery_optimization,且默认启用。这会在从早期版本升级到 19.17.2 或 19.17.3 时导致出现类似此问题中的错误。为确保能够从 19.16 及更早版本无错误升级,19.17.4 将此设置改为默认禁用。#7392 (Amos Bird)
新功能
- 新增支持使用 DDL 查询创建字典。#7360 (alesapin)
- 使
bloom_filter类型的索引支持LowCardinality和Nullable#7363 #7561 (Nikolai Kochetov) - 新增函数
isValidJSON,用于检查传入的字符串是否为有效的 JSON。#5910 #7293 (Vdimir) - 实现
arrayCompact函数 #7328 (Memo) - 新增用于 Decimal 数值的
hex函数。其行为类似于hex(reinterpretAsString()),但不会删除末尾的零字节。#7355 (Mikhail Korotov) - 新增
arrayFill和arrayReverseFill函数,可用数组中前面/后面的其他元素替换元素。#7380 (hcz) - 新增对
CRC32IEEE()/CRC64()的支持 #7480 (Azat Khuzhin) - 实现了与 mysql 中类似的
char函数 #7486 (sundyli) - 新增
bitmapTransform函数。它可将 bitmap 中的一组值转换为另一组值,结果为一个新的 bitmap #7598 (Zhichang Yu) - 实现了
javaHashUTF16LE()函数 #7651 (achimbab) - 为 Distributed engine 新增
_shard_num虚拟列 #7624 (Azat Khuzhin)
Experimental 功能
MergeTree新增对处理器 (新的查询执行流水线) 的支持。#7181 (Nikolai Kochetov)
问题修复
- 修复
Values中的浮点数解析错误 #7817 #7870 (tavplubix) - 修复了在启用 trace_log 时可能出现的罕见死锁。#7838 (filimonov)
- 当向 Kafka 表写入数据且存在从该表进行 SELECT 的 MV 时,防止消息重复 #7265 (Ivan)
- 支持在
IN中使用Array(LowCardinality(Nullable(String)))。已解决 #7364 #7366 (achimbab) - 在 ODBC Bridge 中增加对
SQL_TINYINT和SQL_BIGINT的支持,并修复SQL_FLOAT数据源类型的处理。#7491 (Denis Glazachev) - 修复空十进制列上的聚合 (
avg和分位数) 问题 #7431 (Andrey Konyaev) - 修复了向带有
MATERIALIZED列的 Distributed 表执行INSERT时的问题 #7377 (Azat Khuzhin) - 使
MOVE PARTITION在分区的部分 parts 已位于目标磁盘或卷上时也能正常工作 #7434 (Vladimir Chebotarev) - 修复了在多磁盘配置下,
ReplicatedMergeTree在变更期间无法创建硬链接的问题。#7558 (Vladimir Chebotarev) - 修复了 MergeTree 上变更操作中的一个 bug:当整个分片保持不变,且最佳空间位于另一块磁盘上时,会出现该问题 #7602 (Vladimir Chebotarev)
- 修复了未能从磁盘配置中读取
keep_free_space_ratio的问题 #7645 (Vladimir Chebotarev) - 修复了表仅包含
Tuple列或包含复杂路径的列时出现的错误。修复了 7541。#7545 (alesapin) - 在
max_memory_usage限制中不计入 Buffer 引擎的内存 #7552 (Azat Khuzhin) - 修复在按
tuple()排序的MergeTree表中对 final 标记的使用问题。极少数情况下,这会在 SELECT 查询时导致Can't adjust last granule错误。#7639 (Anton Popov) - 修复了变更中的一个错误:如果谓词中包含需要 Context 的 actions (例如用于 json 的函数) ,可能会导致崩溃或出现异常报错。 #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) - 修复了
concat函数在所有参数均为相同长度的FixedString时的缺陷。#7635 (alesapin) - 修复了在定义 S3、URL 和 HDFS 存储时仅使用 1 个参数会导致异常的问题。#7618 (Vladimir Chebotarev)
- 修复带查询的视图中 InterpreterSelectQuery 的作用域问题 #7601 (Azat Khuzhin)
改进
- ODBC-bridge 现已可识别
Nullable列,并能正确处理 NULL 值 #7402 (Vasily Nemkov) - 以原子方式写入用于分布式发送的当前批次 #7600 (Azat Khuzhin)
- 如果无法在查询中确定列名对应的表,则抛出异常 #7358 (Artem Zuikov)
- 为
MergeTreeSettings添加merge_max_block_size设置 #7412 (Artem Zuikov) - 带有
HAVING但不带GROUP BY的查询会假定按常量分组。因此,SELECT 1 HAVING 1现在会返回结果 #7496 (Amos Bird) - 支持像 Python 一样将
(X,)解析为元组 #7501, #7562 (Amos Bird) - 使
range函数的行为几乎与 Python 版本一致 #7518 (sundyli) - 为表
system.settings添加constraints列 #7553 (Vitaly Baranov) - 改进 TCP handler 的 Null 格式,因此可以通过 clickhouse-client 使用
select ignore(<expression>) from table format Null进行性能测量 #7606 (Amos Bird) - 现在可以正确解析诸如
CREATE TABLE ... AS (SELECT (1, 2))这样的查询 #7542 (hcz)
性能改进
- 提升了短字符串键聚合的性能。#6243 (Alexander Kuzmenkov, Amos Bird)
- 在常量谓词折叠后,再进行一轮语法/表达式分析,以获取潜在的优化机会。#7497 (Amos Bird)
- 使用存储元信息来计算简单的
SELECT count() FROM table;。#7510 (Amos Bird, alexey-milovidov) - 将
arrayReduce的处理向量化,类似于 Aggregator 的addBatch。#7608 (Amos Bird) - 小幅提升了
Kafka消费的性能。#7475 (Ivan)
构建/测试/打包改进
- 新增对 AARCH64 CPU 架构交叉编译的支持。重构打包脚本。#7370 #7539 (Ivan)
- 在构建软件包时,将 darwin-x86_64 和 linux-aarch64 工具链解压到挂载的 Docker 卷中 #7534 (Ivan)
- 更新用于二进制打包器的 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
- 修复了分布式子查询与旧版 ClickHouse 的兼容性问题。修复 #7851 (tabplubix)
- 在执行
CREATE查询时,会对存储引擎参数中的常量表达式进行折叠。将空数据库名替换为当前数据库。修复 #6508、#3492。同时还修复了ClickHouseDictionarySource中本地地址检查的问题。 #9262 (tabplubix) - 现在,
*MergeTree表引擎家族中的后台合并能够更准确地保留存储策略中的卷顺序。 #8549 (Vladimir Chebotarev) - 修复了极少数情况下
Kafka中数据丢失的问题:在读取 suffix 后、提交前发生异常时可能出现该问题。修复 #9378。相关:#7175 #9507 (filimonov) - 修复了一个问题:尝试使用或 drop 以错误参数创建的
Kafka表时,可能导致服务器终止。修复 #9494。包含 #9507。 #9513 (filimonov) - 允许在
Kafka表上使用带子查询的MaterializedView。 #8197 (filimonov)
新功能
- 新增
deduplicate_blocks_in_dependent_materialized_views选项,用于控制对带有 materialized view 的表执行幂等插入时的行为。应 Altinity 的特别要求,这项新功能被加入了这个 bugfix 版本。 #9070 (urykhy)
ClickHouse 发布 19.16.2.2,2019-10-30
向后不兼容的更改
- 为 count/counIf 补充缺失的参数数量校验。 #7095 #7298 (Vdimir)
- 移除遗留的
asterisk_left_columns_only设置 (该设置默认已禁用) 。 #7335 (Artem Zuikov) - Template 数据格式的格式字符串现在在文件中指定。 #7118 (tavplubix)
新功能
- 引入 uniqCombined64(),用于计算大于 UINT_MAX 的基数。 #7213, #7222 (Azat Khuzhin)
- 支持在 Array 列上使用 Bloom filter 索引。 #6984 (achimbab)
- 添加函数
getMacro(name),返回服务器配置中对应<macros>的值,类型为 String。 #7240 (alexey-milovidov) - 为基于 HTTP 来源的字典添加两个配置选项:
credentials和http-headers。 #7092 (Guillaume Tassery) - 添加新的 ProfileEvent
Merge,用于统计已启动的后台合并次数。 #7093 (Mikhail Korotov) - 添加 fullHostName 函数,返回完全限定域名。 #7263 #7291 (sundyli)
- 添加函数
arraySplit和arrayReverseSplit,可按“切分” 条件拆分数组。它们在处理时间序列时很有用。 #7294 (hcz) - 添加新函数,返回 multiMatch 家族函数中所有匹配索引组成的 Array。 #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)
问题修复
- 修复了当查询包含
WHERE IN (SELECT ...)子句并使用optimize_read_in_order时,查询结果错误的问题。#7371 (Anton Popov) - 禁用了 MariaDB 身份验证插件,该插件依赖项目外部的文件。 #7140 (Yuriy Baranov)
- 修复了异常
Cannot convert column ... because it is constant but values of constants are different in source and result,该问题在使用函数now(),today(),yesterday(),randConstant()时极少发生。 #7156 (Nikolai Kochetov) - 修复了将 HTTP Keep-Alive 超时误用为 TCP Keep-Alive 超时的问题。 #7351 (Vasily Nemkov)
- 修复了 groupBitmapOr 中的段错误 (问题 #7109) 。 #7289 (Zhichang Yu)
- 对于 materialized view,Kafka 的提交会在所有数据写入完成后才执行。 #7175 (Ivan)
- 修复了
system.part_log表中错误的duration_ms值。此前该值偏差了十倍。 #7172 (Vladimir Chebotarev) - 快速修复了 LIVE VIEW 表中的崩溃问题,并重新启用了所有 LIVE VIEW 测试。 #7201 (vzakaznikov)
- 正确序列化 MergeTree parts 的最小/最大索引中的 NULL 值。 #7234 (Alexander Kuzmenkov)
- 修复了当表通过
CREATE TABLE AS创建时,将虚拟列写入 .sql 元数据的问题。 #7183 (Ivan) - 修复了
ATTACH PART查询中的段错误。 #7185 (alesapin) - 修复了由于对空 IN 子查询和空 INNER/RIGHT JOIN 的优化而导致的部分查询结果错误问题。#7284 (Nikolai Kochetov)
- 修复了 LIVE VIEW
getHeader()方法中的 AddressSanitizer 报错。 #7271 (vzakaznikov)
改进
- 在发生 queue_wait_max_ms 等待时添加提示消息。 #7390 (Azat Khuzhin)
- 将设置
s3_min_upload_part_size设为表级。 #7059 (Vladimir Chebotarev) - 在 StorageFactory 中检查生存时间 (TTL)。 #7304 (sundyli)
- 在 partial merge join 中合并左侧块 (优化) 。 #7122 (Artem Zuikov)
- 不允许在 Replicated 表引擎的变更中使用非确定性函数,因为这 可能会导致各副本之间出现不一致。 #7247 (Alexander Kazakov)
- 在将异常堆栈跟踪转换为字符串时禁用内存跟踪器。这可以防止服务端丢失
Memory limit exceeded类型的错误消息,而该错误会导致客户端出现Attempt to read after eof异常。 #7264 (Nikolai Kochetov) - 杂项格式改进。解决了 #6033, #2633, #6611, #6742 #7215 (tavplubix)
- ClickHouse 会忽略 IN 运算符右侧无法转换为左侧 类型的值。现已使其对复合类型 (Array 和 Tuple) 也能正常工作。 #7283 (Alexander Kuzmenkov)
- 为 ASOF JOIN 支持缺失的不等式。现在可以在 ON 语法中,对 ASOF 列使用小于等于变体,以及严格大于和严格小于 变体进行连接。 #7282 (Artem Zuikov)
- 优化 partial merge join。 #7070 (Artem Zuikov)
- 使 uniqCombined 函数的内存占用不超过 98K。 #7236, #7270 (Azat Khuzhin)
- 在 PartialMergeJoin 中将右侧连接表的 parts 刷写到磁盘 (如果内存不足 ) 。需要时再将数据加载回来。 #7186 (Artem Zuikov)
性能改进
- 通过避免数据重复拷贝,加快带有常量参数的 joinGet。 #7359 (Amos Bird)
- 若子查询为空,则提前返回。 #7007 (小路)
- 优化 Values 中 SQL 表达式的解析。 #6781 (tavplubix)
构建/测试/打包改进
- 为适配 Mac OS 交叉编译,禁用了部分 contrib。 #7101 (Ivan)
- 为 clickhouse_common_io 补上缺失的 PocoXML 链接。 #7200 (Azat Khuzhin)
- clickhouse-test 现支持多个测试过滤器参数。 #7226 (Alexander Kuzmenkov)
- 为 ARM 平台启用 musl 和 jemalloc。#7300 (Amos Bird)
- 为
clickhouse-test新增了--client-option参数,用于向客户端传递额外参数。 #7277 (Nikolai Kochetov) - 升级 rpm 软件包时保留现有配置。 #7103 (filimonov)
- 修复 PVS 检测到的错误。#7153 (Artem Zuikov)
- 修复 Darwin 平台的构建问题。#7149 (Ivan)
- 支持 glibc 2.29。#7142 (Amos Bird)
- 确保 dh_clean 不会处理可能的源文件。 #7205 (Amos Bird)
- 尽量避免从 altinity rpm 更新时发生冲突——其配置文件是在 clickhouse-server-common 中单独打包的。#7073 (filimonov)
- 优化了一些头文件,以加快重新构建。 #7212, #7231 (Alexander Kuzmenkov)
- 新增 Date 和 DateTime 的性能测试。#7332 (Vasily Nemkov)
- 修复了一些包含非确定性变更操作的测试。 #7132 (Alexander Kazakov)
- 在 CI 中添加了使用 MemorySanitizer 的构建。#7066 (Alexander Kuzmenkov)
- 避免在 MetricsTransmitter 中使用未初始化的值。 #7158 (Azat Khuzhin)
- 修复了 MemorySanitizer 在 Fields 中发现的一些问题。 #7135, #7179 (Alexander Kuzmenkov), #7376 (Amos Bird)
- 修复 murmurhash32 中的未定义行为。#7388 (Amos Bird)
- 修复了 StoragesInfoStream 中的未定义行为。#7384 (tavplubix)
- 修复了外部数据库引擎 (MySQL、ODBC、JDBC) 的常量表达式折叠问题。在之前的 版本中,该功能对多个常量表达式无法生效,对 Date、 DateTime 和 UUID 则完全无效。此修复解决了 #7245 #7252 (alexey-milovidov)
- 修复了 LIVE VIEW 在访问 no_users_thread 变量时触发的 ThreadSanitizer 数据竞争错误。 #7353 (vzakaznikov)
- 移除 libcommon 中的 malloc 符号 #7134, #7065 (Amos Bird)
- 新增全局标志 ENABLE_LIBRARIES,用于禁用所有库。 #7063 (proller)
代码清理
- 将配置仓库通用化,为字典 DDL 做准备。#7155 (alesapin)
- 用于字典 DDL 且不带任何语义分析的解析器。 #7209 (alesapin)
- 将 ParserCreateQuery 拆分为多个更小的解析器。 #7253 (alesapin)
- 对外部字典相关的一些代码进行了小幅重构和重命名。 #7111 (alesapin)
- 重构部分代码,为基于角色的访问控制做准备。#7235 (Vitaly Baranov)
- 对 DatabaseOrdinary 代码做了一些改进。 #7086 (Nikita Vasilev)
- 在哈希表的 find() 和 emplace() 方法中不使用迭代器。 #7026 (Alexander Kuzmenkov)
- 修复了 parameter 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
问题修复
- 在 ODBC Bridge 中新增了对 SQL_TINYINT 和 SQL_BIGINT 的处理,并修复了 SQL_FLOAT 数据源类型的处理问题。 #7491 (Denis Glazachev)
- 在 MOVE PARTITION 中,允许部分 parts 已位于目标磁盘或卷上。 #7434 (Vladimir Chebotarev)
- 修复了通过 ODBC-bridge 处理 Nullable 列中的 NULL 值的问题。 #7402 (Vasily Nemkov)
- 修复了向 Distributed 的非本地节点执行 INSERT 且包含 MATERIALIZED 列时的问题。 #7377 (Azat Khuzhin)
- 修复了函数 getMultipleValuesFromConfig。 #7374 (Mikhail Korotov)
- 修复了误用 HTTP Keep-Alive timeout 而非 TCP Keep-Alive timeout 的问题。 #7351 (Vasily Nemkov)
- 发生异常时会等待所有作业完成 (修复了罕见的段错误) 。 #7350 (tavplubix)
- 向 Kafka 表插入数据时,不再向 MVs 推送。 #7265 (Ivan)
- 为异常堆栈禁用 memory tracker。 #7264 (Nikolai Kochetov)
- 修复了为外部数据库转换查询时的错误代码。 #7252 (alexey-milovidov)
- 避免在 MetricsTransmitter 中使用未初始化的值。 #7158 (Azat Khuzhin)
- 为测试添加了带宏的示例配置 (alexey-milovidov)
ClickHouse 发行版 19.15.3.6,2019-10-09
缺陷修复
- 修复了哈希字典中的 bad_variant 问题。 (alesapin)
- 修复了 ATTACH PART 查询中的段错误。 (alesapin)
- 修复了
MergeTreeData中的时间计算问题。 (Vladimir Chebotarev) - 在写入完成后,显式向 Kafka 提交。 #7175 (Ivan)
- 正确序列化 MergeTree parts 的 min/max 索引中的 NULL 值。 #7234 (Alexander Kuzmenkov)
ClickHouse 发行版 19.15.2.2,2019-10-01
新功能
- 分层存储:支持为使用 MergeTree 引擎的表使用多个存储卷。可以将新数据存储在 SSD 上,并自动将旧数据迁移到 HDD。(示例)。#4918 (Igr) #6489 (alesapin)
- 添加表函数
input,用于在INSERT SELECT查询中读取输入数据。#5450 (palasonic1) #6832 (Anton Popov) - 添加
sparse_hashed字典布局,其功能上等同于hashed布局,但更节省内存。它大约只占用一半内存,但代价是值检索速度更慢。#6894 (Azat Khuzhin) - 实现了可为访问字典定义用户列表的能力。仅供当前已连接的数据库使用。#6907 (Guillaume Tassery)
- 为
SHOW查询添加LIMIT选项。#6944 (Philipp Malkovsky) - 添加
bitmapSubsetLimit(bitmap, range_start, limit)函数,返回集合中不小于range_start的最小limit个值组成的子集。#6957 (Zhichang Yu) - 添加
bitmapMin和bitmapMax函数。#6970 (Zhichang Yu) - 添加与 issue-6648 相关的
repeat函数。#6999 (flynn)
Experimental 功能
- 实现了一种在内存中执行且不会改变当前管道的 Merge Join 变体。结果将按 merge key 部分有序。将
partial_merge_join = 1设为使用此功能。Merge Join 仍在开发中。#6940 (Artem Zuikov) - 添加了
S3引擎和表函数。该功能仍在开发中 (尚不支持身份验证) 。#5596 (Vladimir Chebotarev)
改进
- 从 Kafka 读取的每条消息都会以原子方式插入。这解决了 Kafka 引擎几乎所有已知问题。#6950 (Ivan)
- 改进了 Distributed 查询的故障转移机制。缩短了恢复时间,且现在可进行配置,并可在
system.clusters中查看。#6399 (Vasily Nemkov) - 支持在
IN子句中直接使用枚举的数值。#6766 #6941 (dimarub2000) - URL 存储现支持重定向 (可选,默认禁用) 。#6914 (maqroll)
- 当旧版本客户端连接到服务器时,添加提示信息。#6893 (Philipp Malkovsky)
- 移除了分布式表发送数据时 backoff 最大休眠时间的限制 #6895 (Azat Khuzhin)
- 新增了向 Graphite 发送累积值形式的 profile events (计数器) 的功能。可在服务器的
config.xml中通过<events_cumulative>启用。#6969 (Azat Khuzhin) - 新增功能:通过 HTTP 以 Native 格式向类型为
LowCardinality(T)的列插入数据时,会自动将类型T转换为LowCardinality(T)。#6891 (Nikolai Kochetov) - 新增功能:对
Float32、Float64使用函数hex时,无需再使用reinterpretAsString。#7024 (Mikhail Korotov)
构建/测试/打包改进
- 为带有调试信息的
clickhouse二进制文件添加 gdb-index。这将加快gdb的启动速度。#6947 (alesapin) - 使用打过补丁并采用
pigz的 dpkg-deb,加快 deb 打包速度。#6960 (alesapin) - 设置
enable_fuzzing = 1,以启用对整个项目代码的 libfuzzer 插桩。#7042 (kyprizel) - 在 CI 中添加拆分构建的冒烟测试。#7061 (alesapin)
- 在 CI 中添加启用 MemorySanitizer 的构建。#7066 (Alexander Kuzmenkov)
- 将
libsparsehash替换为sparsehash-c11#6965 (Azat Khuzhin)
缺陷修复
- 修复了在大型表上对复杂键进行索引分析时出现的性能下降问题。此修复解决了 #6924。#7075 (alexey-milovidov)
- 修复了从 Kafka 空 topic 中查询时因逻辑错误导致的段错误。#6909 (Ivan)
- 修复了
MySQLBlockInputStream.cpp中 MySQL 连接过早关闭的问题。#6882 (Clément Rodriguez) - 恢复了对非常旧的 Linux 内核的支持 (修复了 #6841) #6853 (alexey-milovidov)
- 修复了在输入流中出现空块时,
insert select查询可能造成数据丢失的问题。#6834 #6862 #6911 (Nikolai Kochetov) - 修复了函数
АrrayEnumerateUniqRanked在参数中包含空数组时的问题 #6928 (proller) - 修复了包含 array join 和全局子查询的复杂查询。#6934 (Ivan)
- 修复了在包含多个 JOIN 的 ORDER BY 和 GROUP BY 中出现
Unknown identifier错误的问题 #7022 (Artem Zuikov) - 修复了执行带有
LowCardinality参数的函数时出现的MSan警告。#7062 (Nikolai Kochetov)
不向后兼容的变更
- 为提升性能,更改了 bitmap* aggregate function 状态的 serialization format。无法读取旧版本中序列化的 bitmap* 状态。#6908 (Zhichang Yu)
ClickHouse 发行版 19.14
ClickHouse 发行版 19.14.7.15,2019-10-02
缺陷修复
- 此版本还包含 19.11.12.69 中的所有问题修复。
- 修复了 19.14 与更早版本之间的分布式查询兼容性问题。此修复解决了 #7068。#7069 (alexey-milovidov)
ClickHouse 发行版 19.14.6.12,2019-09-19
缺陷修复
- 修复了函数
АrrayEnumerateUniqRanked在参数包含空数组时的问题。#6928 (proller) - 修复了带有
ARRAY JOIN以及使用别名的GLOBAL IN subquery的查询中子查询名称的问题。如果指定了子查询别名,则使用该别名作为外部表名称。#6934 (Ivan)
构建/测试/打包改进
- 将不稳定的 flapping 测试
00715_fetch_merged_or_mutated_part_zookeeper重写为 shell 脚本,修复了该问题,因为它需要等待变更生效。 #6977 (Alexander Kazakov) - 修复了函数
groupUniqArray在空 Array 参数下触发的 UBSan 和 MemSan 失败。原因是空的PaddedPODArray被放入了哈希表的零单元中,因为零单元值的构造函数未被调用。 #6937 (Amos Bird)
ClickHouse 发行版 19.14.3.3,2019-09-10
新功能
ORDER BY的WITH FILL修饰符。 (续 #5069) #6610 (Anton Popov)LIMIT的WITH TIES修饰符。 (延续 #5069) #6610 (Anton Popov)- 将未加引号的
NULL字面量解析为 NULL (如果设置了format_csv_unquoted_null_literal_as_null=1) 。如果该字段的数据类型不是 Nullable,则将空字段初始化为默认值 (如果设置了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将返回修饰名,你需要再调用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)
- 新增对级联 materialized view 的支持。#6324 (Amos Bird)
- 默认开启查询分析器,每秒对每个查询执行线程采样一次。#6283 (alexey-milovidov)
- 输入格式
ORC。 #6454 #6703 (akonyaev90) - 新增了两个函数:
sigmoid和tanh(对机器学习应用很有帮助) 。#6254 (alexey-milovidov) - 函数
hasToken(haystack, token)、hasTokenCaseInsensitive(haystack, token)用于检查给定的标记是否存在于 haystack 中。标记是指由两个非 ASCII 字母数字字符 (或 haystack 的边界) 分隔的最长子串。标记必须是常量字符串。支持 tokenbf_v1 索引特化。#6596, #6662 (Vasily Nemkov) - 新函数
neighbor(value, offset[, default_value])。允许在数据块内访问某列中的前一个/后一个值。#5925 (Alex Krash) 6685365ab8c5b74f9650492c88a012596eb1b0c6 341e2e4587a18065c2da1ca888c73389f48ce36c Alexey Milovidov - 创建了函数
currentUser(),返回已获授权用户的登录名。为兼容 MySQL,新增了别名user()。#6470 (Alex Krash) - 新增聚合函数
quantilesExactInclusive和quantilesExactExclusive,它们在 #5885 中提出。#6477 (dimarub2000) - 函数
bitmapRange(bitmap, range_begin, range_end),返回包含指定范围的新集合 (不包含range_end) 。#6314 (Zhichang Yu) - 函数
geohashesInBox(longitude_min, latitude_min, longitude_max, latitude_max, precision),用于创建一个由长度为 precision 的字符串组成的数组,这些字符串表示覆盖给定区域的 geohash 方框。#6127 (Vasily Nemkov) - 为
Kafka表增加对 INSERT 查询的支持。#6012 (Ivan) - Kafka 引擎现已支持
_partition和_timestamp虚拟列。#6400 (Ivan) - 支持使用基于正则表达式的规则,从
query_log、服务器日志和进程列表中移除敏感数据。#5710 (filimonov)
Experimental 功能
- 输入和输出数据格式
Template。它允许为输入和输出指定自定义格式字符串。#4354 #6727 (tavplubix) - 实现了
LIVE VIEW表,这一功能最初在 #2898 中提出,在 #3925 中完成准备,随后又在 #5541 中更新。详细说明请参见 #5541。#5541 (vzakaznikov) #6425 (Nikolai Kochetov) #6656 (vzakaznikov) 请注意,LIVE VIEW功能可能会在后续版本中移除。
缺陷修复
- 此版本还包含了 19.13 和 19.11 版本中的所有缺陷修复。
- 修复了表包含跳数索引且发生垂直合并时出现的段错误。#6723 (alesapin)
- 修复了带有非简单列默认值的按列生存时间 (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) - 修复了变更中的错误代码,该问题可能导致内存损坏。修复了读取地址
0x14c0时发生的段错误,该问题可能由并发执行DROP TABLE以及从system.parts或system.parts_columns进行SELECT引起。修复了在准备变更查询时的竞态条件。修复了对复制表执行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) - 检查变更的
max_expanded_ast_elements设置。在TRUNCATE TABLE后清除变更。#6205 (Winter Zhang) - 修复了在使用
join_use_nulls时键列的 JOIN 结果。使用 NULL 值而不是列默认值。#6249 (Artem Zuikov) - 修复了垂直合并和 ALTER 操作中的跳过索引问题。修复了
Bad size of marks file异常。#6594 #6713 (alesapin) - 修复了在
ALTER MODIFY COLUMN和垂直合并过程中,当被合并或修改的 parts 之一为空 (0 行) 时偶发的崩溃问题 #6746 #6780 (alesapin) - 修复了
AggregateFunctionFactory中LowCardinality类型转换的问题。此修复解决了 #6257。#6281 (Nikolai Kochetov) - 修复了聚合函数
topK和topKWeighted的异常行为,以及可能导致段错误的问题。#6404 (Anton Popov) - 修复了与
getIdentifier函数相关的不安全代码。#6401 #6409 (alexey-milovidov) - 修复了 MySQL wire 协议中的一个问题 (从 MySQL 客户端连接到 ClickHouse 时会使用该协议) 。该问题是由
PacketPayloadWriteBuffer中的堆缓冲区溢出引起的。#6212 (Yuriy Baranov) - 修复了
bitmapSubsetInRange函数的内存泄漏问题。#6819 (Zhichang Yu) - 修复了在更改粒度后执行变更时出现的一个罕见 bug。#6816 (alesapin)
- 默认允许带有所有字段的 protobuf 消息。 #6132 (Vitaly Baranov)
- 修复了
nullIf函数的一个缺陷:当第二个参数传入NULL时会出现该问题。#6446 (Guillaume Tassery) - 修复了一个罕见问题:在包含 String 字段的复合键缓存字典中,错误的内存分配/释放会导致内存占用无限增长 (看起来像内存泄漏) 。当字符串大小为从 8 开始的 2 的幂 (8、16、32 等) 时,该问题会复现。#6447 (alesapin)
- 修复了 Gorilla 编码在短序列上的问题,该问题会导致异常
Cannot write after end of buffer。#6398 #6444 (Vasily Nemkov) - 允许在启用
join_use_nulls的情况下,在 JOIN 中使用非 Nullable 类型。#6705 (Artem Zuikov) - 禁用
clickhouse-client中查询内的Poco::AbstractConfiguration替换。 #6706 (alexey-milovidov) - 修复
REPLACE PARTITION中的死锁问题。#6677 (alexey-milovidov) - 对常量参数使用
arrayReduce可能会导致段错误。#6242 #6326 (alexey-milovidov) - 修复了在执行
DROP PARTITION后恢复副本时可能出现的 parts 不一致问题。#6522 #6523 (tavplubix) - 修复了
JSONExtractRaw函数卡住的问题。#6195 #6198 (alexey-milovidov) - 修复了 skip 索引序列化不正确以及自适应粒度下的聚合问题。#6594。#6748 (alesapin)
- 修复了在两级聚合情况下,
GROUP BY的WITH ROLLUP和WITH CUBE修饰符相关问题。#6225 (Anton Popov) - 修复了在自适应粒度下写入二级索引标记时的错误。 #6126 (alesapin)
- 修复 server 启动期间的初始化顺序问题。由于
StorageMergeTree::background_task_handle是在startup()中初始化的,MergeTreeBlockOutputStream::write()可能会在它初始化之前就尝试使用它。只需检查它是否已经初始化即可。#6080 (Ivan) - 清除上一次因错误结束的读取操作遗留的数据缓冲区。#6026 (Nikolay)
- 修复了为 Replicated*MergeTree 表创建新副本时无法启用自适应粒度的问题。#6394 #6452 (alesapin)
- 修复了服务器启动期间的一处潜在崩溃问题:如果在访问未初始化的
ThreadStatus结构时触发异常,且异常处理过程中libunwind又发生异常,可能会导致崩溃。#6456 (Nikita Mikhaylov) - 修复
yandexConsistentHash函数中的崩溃问题。通过模糊测试发现。#6304 #6305 (alexey-milovidov) - 修复了当服务器过载且全局线程池接近满载时,查询可能挂起的问题。该问题在拥有大量分片 (数百个) 的集群中更容易发生,因为分布式查询会为到每个分片的每个连接分配一个线程。例如,如果一个包含 330 个分片的集群正在处理 30 个并发分布式查询,就可能复现此问题。该问题影响自 19.2 起的所有版本。#6301 (alexey-milovidov)
- 修复了
arrayEnumerateUniqRanked函数的逻辑问题。#6423 (alexey-milovidov) - 修复了解码符号表时发生的段错误。#6603 (Amos Bird)
- 修复了在将
LowCardinality(Nullable)转换为非Nullable列时,即使其中不包含 NULL 值也会抛出无关异常的问题 (例如在SELECT CAST(CAST('Hello' AS LowCardinality(Nullable(String))) AS String)这样的查询中) 。 #6094 #6119 (Nikolai Kochetov) - 移除了
system.settings表中 description 的多余引号。#6696 #6699 (alexey-milovidov) - 避免在 Replicated 表上执行
TRUNCATE时可能出现的死锁。#6695 (alexey-milovidov) - 修复了按 sorting key 顺序读取的问题。#6189 (Anton Popov)
- 修复了在
enable_mixed_granularity_parts=1的表上执行ALTER TABLE ... UPDATE查询时的问题。#6543 (alesapin) - 修复了由 #4405 引入的 bug (自 19.4.0 起) 。在查询基于 MergeTree 表的分布式表且未查询任何列 (
SELECT 1) 时可复现。 #6236 (alesapin) - 修复了有符号类型与无符号类型相除时整数除法中的溢出问题。此前的行为与 C 或 C++ 语言完全一致 (遵循整数提升规则) ,这可能会让人感到意外。请注意,当较大的有符号数除以较大的无符号数,或反过来时,仍然可能发生溢出 (不过这种情况较为少见) 。该问题存在于所有 server 版本中。#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 表、materialized view 以及涉及子查询的行级安全条件中可能发生栈溢出的问题。#6433 (alexey-milovidov)
改进
- 正确实现
AND/OR的三值逻辑。#6048 (Alexander Kazakov) - 现在,对于不含 TTL 信息或 TTL 信息已过期的旧 parts,在执行
OPTIMIZE ... FINAL查询后,已过期生存时间 (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) - 支持在
ASOF JOIN中使用ON子句。#6211 (Artem Zuikov) - 增强了跳过索引对变更和复制的支持。支持
MATERIALIZE/CLEAR INDEX ... IN PARTITION查询。UPDATE x = x会重新计算所有使用列x的索引。#5053 (Nikita Vasilev) - 允许
ATTACHlive views (例如在服务器启动时) ,而不受allow_experimental_live_view设置影响。#6754 (alexey-milovidov) - 对于由 query profiler 收集的堆栈跟踪,不应包含 query profiler 自身生成的堆栈帧。#6250 (alexey-milovidov)
- 现在,表函数
values、file、url和hdfs已支持 ALIAS 列。#6255 (alexey-milovidov) - 如果
config.d文件与配置文件的根元素不对应,则抛出异常。#6123 (dimarub2000) - 在
no space left on device异常消息中输出更多信息。#6182, #6252 #6352 (tavplubix) - 在确定读查询 (当
optimize_skip_unused_shards= 1 时) 需要访问哪些Distributed表分片时,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 兼容性 server,避免将整个数据包载荷加载到内存中。将每个 connection 的内存占用降至约
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,用于显示文件系统中由分布式表选中并发送到远程服务器的文件总数。该数值会汇总所有分片。#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查询复用。这会导致误报 “Attempt to acquire exclusive lock recursively” 消息。#6771 (alexey-milovidov) - 将
ExpressionAnalyzer.appendJoin()拆分出来。在ExpressionAnalyzer中为MergeJoin预留位置。#6524 (Artem Zuikov) - 在 MySQL 兼容服务器中新增了
mysql_native_password身份验证插件。#6194 (Yuriy Baranov) - 减少了
clock_gettime的调用次数;修复了Allocator中 debug/release 版本之间的 ABI 兼容性问题 (影响很小) 。#6197 (alexey-milovidov) - 将
collectUsedColumns从ExpressionAnalyzer移至SyntaxAnalyzer。现在由SyntaxAnalyzer自行生成required_source_columns。#6416 (Artem Zuikov) - 新增设置
joined_subquery_requires_alias,要求当FROM中存在多个表时 (即带有 JOIN 的查询) ,子查询和表函数必须指定别名。#6733 (Artem Zuikov) - 将
GetAggregatesVisitor类从ExpressionAnalyzer中拆分出来。#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-client软件包中已包含clickhouse-obfuscator文件。在早期版本中,它的名称是clickhouse obfuscator(中间有空格) 。#5816 #6609 (dimarub2000) - 修复了一种死锁问题:当至少有两个查询以不同顺序读取至少两个表,且另一个查询对其中一个表执行 DDL 操作时,就可能出现该死锁。还修复了另一种非常罕见的死锁。#6764 (alexey-milovidov)
- 在
system.processes和system.query_log中新增了os_thread_ids列,以便更好地进行调试。#6763 (alexey-milovidov) - 针对 PHP mysqlnd 扩展中这样一个 bug 的临时解决方法:当
sha256_password被用作默认身份验证插件时会出现该问题 (见 #6031) 。#6113 (Yuriy Baranov) - 移除可空性发生变化的列中不需要的位置。#6693 (Artem Zuikov)
- 将
queue_max_wait_ms的默认值设为零,因为当前值 (5 秒) 并不合理。这个设置只有在极少数情况下才有用。新增了replace_running_query_max_wait_ms、kafka_max_wait_ms和connection_pool_max_wait_ms设置,以消除歧义。#6692 (alexey-milovidov) - 从
ExpressionAnalyzer中提取出SelectQueryExpressionAnalyzer。保留ExpressionAnalyzer用于非SELECT查询。#6499 (Artem Zuikov) - 删除了重复的输入和输出格式。#6239 (Nikolai Kochetov)
- 允许用户在连接级别覆盖
poll_interval和idle_connection_timeout设置。#6230 (alexey-milovidov) MergeTree现新增一个选项ttl_only_drop_parts(默认禁用) ,用于避免对 parts 进行部分剪枝;当某个 part 中的所有行都已过期时,会将该 part 整体删除。#6191 (Sergi Vladykin)- 为 set 索引函数添加类型检查。如果函数接收到错误的类型,则抛出异常。此修复解决了 UBSan 模糊测试中发现的问题。#6511 (Nikita Vasilev)
性能改进
- 优化了在
MergeTree表中对带有ORDER BY expressions子句的查询:当expressions与排序键具有相同前缀时可应用此优化。该优化由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 (runtime 模板实例化) ,因为我们在性能方面已经超过了它。#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)
- 移除重复定义的 const
TABLE_IS_READ_ONLY。#6566 (filimonov) StringHashMap格式调整,PR #5417。#6700 (akuzm)ExpressionAnalyzer中用于创建 join 的子查询得到了改进。#6824 (Artem Zuikov)- 移除了一个冗余条件 (由 PVS Studio 发现) 。#6775 (akuzm)
- 将
ReverseIndex的哈希表接口拆分出来。#6672 (akuzm) - 重构了设置相关部分。#6689 (alesapin)
- 为
set索引函数添加注释。#6319 (Nikita Vasilev) - 提高 Linux 下调试版本的 OOM 分数。#6152 (akuzm)
- HDFS HA 现在可在调试构建中运行。#6650 (Weiqing Xu)
- 为
transform_query_for_external_database新增了一项测试。#6388 (alexey-milovidov) - 为 Kafka 表添加多个 materialized view 的测试。#6509 (Ivan)
- 优化构建方案。 #6500 (Ivan)
- 修复了在非 root 用户下执行
test_external_dictionaries集成时出现的问题。#6507 (Nikolai Kochetov) - 当已写入数据包的总大小超过
DBMS_DEFAULT_BUFFER_SIZE时,会复现该问题。#6204 (Yuriy Baranov) - 新增了针对
RENAME表竞态条件的测试 #6752 (alexey-milovidov) - 避免
KILL QUERY中的 Settings 出现数据竞争。#6753 (alexey-milovidov) - 为缓存字典处理错误的情况添加集成测试。#6755 (Vitaly Baranov)
- 在 Mac OS 上禁用 ELF 目标文件解析,因为这没有意义。#6578 (alexey-milovidov)
- 改进更新日志生成器。#6327 (alexey-milovidov)
- 为 GCC 添加
-Wshadow选项。#6325 (kreuzerkrieg) - 移除了已弃用的
mimalloc支持代码。#6715 (alexey-milovidov) zlib-ng会检测 x86 特性,并将这些信息保存到全局变量中。此操作原本在调用 defalteInit 时完成,但该调用可能会被不同线程同时执行。为避免多线程写入,应在库启动时完成此操作。#6141 (akuzm)- 针对 #5192 中修复的 join 缺陷的回归测试。#6147 (Bakhtiyor Ruziev)
- 修复了 MSan 报告中的问题。#6144 (alexey-milovidov)
- 修复不稳定的生存时间 (TTL) 测试。#6782 (Anton Popov)
- 修复了
MergeTreeDataPart::is_frozen字段中误报的数据竞争问题。#6583 (alexey-milovidov) - 修复了模糊测试中的超时问题。在之前的版本中,它曾在查询
SELECT * FROM numbers_mt(gccMurmurHash(''))中误报挂起。#6582 (alexey-milovidov) - 为列的
static_cast添加了调试检查。#6581 (alexey-milovidov) - 官方 RPM 软件包现已支持 Oracle Linux。#6356 #6585 (alexey-milovidov)
- 将 json perftests 的类型从
once改为loop。#6536 (Nikolai Kochetov) odbc-bridge.cpp中定义了main(),因此不应将其包含到clickhouse-lib中。#6538 (Orivej Desh)- 新增了一个测试,用于检测在
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)
- 由于在调试版本中该测试可能耗时较长,因此增加了 “stack overflow” 测试的超时时间。#6637 (alexey-milovidov)
- 新增了对连续两个空白字符的检查。#6643 (alexey-milovidov)
- 修复使用 sanitizers 构建时
new/delete的内存跟踪问题。该跟踪并不完善,只是为了避免测试中出现内存限制异常。#6450 (Artem Zuikov) - 重新启用链接时对未定义符号的检查。#6453 (Ivan)
- 避免每天都重新构建
hyperscan。 #6307 (alexey-milovidov) - 修复了
ProtobufWriter中的 UBSan 报错。#6163 (alexey-milovidov) - 禁止将 query profiler 与 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)
- 现在,无论关于可疑低基数类型的设置如何,都可以使用任何低基数类型创建 materialized view。#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。如果您使用过此表函数,请发送电子邮件至feedback@clickhouse.com。请注意,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 发布
缺陷修复
- 此版本还包含 19.11.12.69 版本中的所有缺陷修复。
ClickHouse 版本 19.13.5.44,2019-09-20
缺陷修复
- 此版本还包含 19.14.6.12 中的所有 bug 修复。
- 修复了在 ZooKeeper 不可访问时,对 replicated table 执行
DROP查询期间表可能出现状态不一致的问题。#6045 #6413 (Nikita Mikhaylov) - 修复了 StorageMerge 中的数据竞争问题。#6717 (alexey-milovidov)
- 修复了 query profiler 中引入的一个 bug,该问题会导致从套接字无休止地接收数据。#6386 (alesapin)
- 修复了对布尔值执行
JSONExtractRaw函数时 CPU 使用过高的问题。#6208 (Vitaly Baranov) - 修复了写入 materialized view 时的回归问题。#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
缺陷修复
- 此版本还包含了 19.11.9.52 和 19.11.10.54 中的所有安全漏洞修复。
- 修复了
system.parts表和ALTER查询中的数据竞争问题。#6245 #6513 (alexey-milovidov) - 修复了在对带有 sample 和 prewhere 的空分布式表进行读取时,流中的头信息不匹配问题。#6167 (Lixiang Qian) #6823 (Nikolai Kochetov)
- 修复了在
IN子句中使用包含 Tuple 的子查询时发生崩溃的问题。#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)
安全修复
- 修复了解压缩阶段 codec 中的两个漏洞 (恶意用户可构造压缩数据,导致解压缩时发生缓冲区溢出) 。#6670 (Artem Zuikov)
ClickHouse 版本 19.13.3.26,2019-08-22
缺陷修复
- 修复了在启用
enable_mixed_granularity_parts=1的表上执行ALTER TABLE ... UPDATE查询时的问题。#6543 (alesapin) - 修复了在 IN 子句中使用包含 Tuple 的子查询时出现的 NPE。#6125 #6550 (tavplubix)
- 修复了一个问题:过期副本重新恢复后,仍可能保留已被 DROP PARTITION 删除的数据分区片段。#6522 #6523 (tavplubix)
- 修复了 CSV 解析问题 #6426 #6559 (tavplubix)
- 修复了 system.parts 表和 ALTER 查询中的数据竞争问题。该修复解决了 #6245。#6513 (alexey-milovidov)
- 修复了变更 中的错误代码,该问题可能导致内存损坏。修复了读取地址
0x14c0时出现的段错误,这可能由并发执行DROP TABLE以及从system.parts或system.parts_columns查询SELECT引起。修复了准备 mutation queries 时的竞态条件。修复了由对 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) stochasticLinearRegression()和stochasticLogisticRegression()聚合函数默认使用 Adam 优化器进行随机梯度下降,因为它几乎无需调优也能取得良好效果。#6000 (Quid37)- 新增了用于处理自定义周数的函数 #5212 (Andy Yang)
RENAME查询现在可用于所有存储引擎。#5953 (Ivan)- 现在客户端可通过设置
send_logs_level接收服务器发送的任意级别日志,而不受服务器设置中指定的日志级别限制。#5964 (Nikita Mikhaylov)
向后不兼容的更改
- 设置
input_format_defaults_for_omitted_fields现已默认启用。对于分布式表的插入操作,需要在整个 cluster 上保持此设置一致 (需要在滚动更新前完成设置) 。该设置会对JSONEachRow和CSV*格式中省略字段的复杂默认 expression 进行计算。这本应是符合预期的行为,但可能会带来可忽略的性能差异。#6043 (Artem Zuikov), #5625 (akuzm)
Experimental 功能
- 新的查询处理管道。使用
experimental_use_processors=1选项启用。使用风险自负。#4914 (Nikolai Kochetov)
缺陷修复
- 此版本已修复 Kafka 集成。
- 修复了在
DoubleDelta值较大时Int64的DoubleDelta编码问题,并改进了针对随机数据的Int32DoubleDelta编码。#5998 (Vasily Nemkov) - 修复了在将设置
merge_tree_uniform_read_distribution设为 0 时,max_rows_to_read被高估的问题。#6019 (alexey-milovidov)
改进
- 如果
config.d文件与配置文件没有对应的根元素,则会抛出异常 #6123 (dimarub2000)
性能改进
构建/测试/打包改进
ClickHouse 版本 19.11
ClickHouse 19.11.13.74 版本,2019-11-01
缺陷修复
- 修复了
ALTER MODIFY COLUMN和垂直合并中的一个罕见崩溃问题:当被合并或修改的 parts 之一为空 (0 行) 时会触发该问题。#6780 (alesapin) - 手动更新了
SIMDJSON。这修复了 stderr 文件可能被错误的 JSON 诊断消息刷屏的问题。#7548 (Alexander Kazakov) - 修复了变更中
mrk文件扩展名相关的问题 (alesapin)
ClickHouse 版本 19.11.12.69,2019-10-02
缺陷修复
- 修复了大型表中复杂键上的索引分析性能下降问题。此修复对应 #6924。#7075 (alexey-milovidov)
- 避免了在使用 Distributed engine 的表中发送数据时偶发的 SIGSEGV (
Failed to send batch: file with index XXXXX is absent) 。#7032 (Azat Khuzhin) - 修复了使用多个 JOIN 时出现
Unknown identifier的问题。此修复对应 #5254。#7022 (Artem Zuikov)
ClickHouse 版本 19.11.11.57,2019-09-13
- 修复了从 Kafka 空 topic 读取数据时因逻辑错误导致的段错误。#6902 #6909 (Ivan)
- 修复了函数
АrrayEnumerateUniqRanked在参数包含空数组时的问题。#6928 (proller)
ClickHouse 版本 19.11.10.54,2019-09-10
缺陷修复
ClickHouse 版本 19.11.9.52,2019-09-6
- 改进了 cache 字典中的错误处理。#6737 (Vitaly Baranov)
- 修复了函数
arrayEnumerateUniqRanked中的 bug。#6779 (proller) - 修复了从 JSON 中提取
Tuple时JSONExtract函数的问题。#6718 (Vitaly Baranov) - 修复了在带有跳过索引的表上执行
ALTER DELETE查询后可能发生的数据丢失问题。#6224 #6282 (Nikita Vasilev) - 修复了性能测试。#6392 (alexey-milovidov)
- Parquet:修复了读取布尔列时的问题。#6579 (alexey-milovidov)
- 修复了
nullIf函数在常量参数下行为错误的问题。#6518 (Guillaume Tassery) #6580 (alexey-milovidov) - 修复了 server 正常重启时 Kafka 消息重复的问题。#6597 (Ivan)
- 修复了一个问题:长时间运行的
ALTER UPDATE或ALTER DELETE可能会阻止常规合并操作运行;如果没有足够的空闲线程,则阻止变更操作执行。#6502 #6617 (tavplubix) - 修复了在服务器配置文件中处理 “timezone” 时的错误。#6709 (alexey-milovidov)
- 修复了 Kafka 测试。#6805 (Ivan)
安全修复
- 如果攻击者对 ZooKeeper 具有写入权限,并且能够运行一台可从 ClickHouse 所在网络访问的自定义服务器,那么其就可以构造一台特制的恶意服务器,使其充当 ClickHouse 副本并注册到 ZooKeeper 中。当另一个副本从恶意副本拉取数据分区片段时,它就可以强制 clickhouse-server 向文件系统中的任意路径写入数据。由 Yandex 信息安全团队的 Eldar Zaitov 发现。#6247 (alexey-milovidov)
ClickHouse 版本 19.11.8.46,2019-08-22
缺陷修复
- 修复了在启用
enable_mixed_granularity_parts=1的表上执行ALTER TABLE ... UPDATE查询时的问题。#6543 (alesapin) - 修复了在 IN 子句中使用包含 Tuple 的子查询时出现的 NPE 问题。#6125 #6550 (tavplubix)
- 修复了一个问题:如果过期副本重新恢复在线状态,仍可能保留已被 DROP PARTITION 删除的数据分区片段。#6522 #6523 (tavplubix)
- 修复了 CSV 解析问题 #6426 #6559 (tavplubix)
- 修复了 system.parts 表和 ALTER 查询中的数据竞争问题。此修复解决了 #6245。#6513 (alexey-milovidov)
- 修复了变更 中可能导致内存损坏的错误代码。修复了读取地址
0x14c0时的段错误,该问题可能由并发执行DROP TABLE以及从system.parts或system.parts_columns中执行SELECT引起。修复了准备 mutation queries 时的竞态条件。修复了对 Replicated 表执行OPTIMIZE与并发修改操作 (如 ALTER) 同时发生时导致的死锁。#6514 (alexey-milovidov)
发行版 19.11.7.40,2019-08-14
缺陷修复
- 此版本修复了 Kafka 集成问题。
- 修复对常量参数使用
arrayReduce时出现的段错误。 #6326 (alexey-milovidov) - 修复
toFloat()的单调性问题。 #6374 (dimarub2000) - 修复在启用
optimize_skip_unused_shards且缺少分片键时出现的段错误。 #6384 (CurtizJ) - 修复
arrayEnumerateUniqRanked函数的逻辑问题。 #6423 (alexey-milovidov) - 移除了 MySQL 处理程序中过于冗长的额外日志。 #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 发行版 19.11.5.28,2019-08-05
缺陷修复
- 修复了服务器过载时查询可能挂起的问题。#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仍未修复。
发行版 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 对外部字典进行初始加载时,update 字段上的一个无用且错误的条件。这修复了 #6069 #6083 (alexey-milovidov)
- 修复了在不包含 NULL 的情况下,将
LowCardinality(Nullable)转换为非 Nullable 列时出现的不必要异常 (例如在SELECT CAST(CAST('Hello' AS LowCardinality(Nullable(String))) AS String)这样的查询中) 。#6094 #6119 (Nikolai Kochetov) - 修复了
"uniq"聚合函数在极少数情况下结果不确定的问题。该 bug 存在于所有 ClickHouse 版本中。#6058 (alexey-milovidov) - 在函数
IPv6CIDRToRange中设置稍高一些的 CIDR 时会发生段错误。#6068 (Guillaume Tassery) - 修复了服务器在许多不同上下文中抛出大量异常时出现的轻微内存泄漏问题。#6144 (alexey-milovidov)
- 修复了一种情况:消费者在订阅前被暂停,之后却没有恢复。#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 发行版 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 engine 实现了
_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)
缺陷修复
- 实现支持异步更新的 DNS 缓存。由单独的线程解析所有主机,并按周期更新 DNS 缓存 (设置
dns_cache_update_period) 。当主机 IP 经常变化时,这会有所帮助。#5857 (Anton Popov) - 修复了
Delta编解码器中的段错误问题,该问题会影响值位宽小于 32 位的列。该缺陷会导致随机内存损坏。#5786 (alesapin) - 修复了块中包含非物理列时生存时间 (TTL) 合并导致的段错误。#5819 (Anton Popov)
- 修复了检查包含
LowCardinality列的分片时的一个罕见 bug。此前,checkDataPart在处理包含LowCardinality列的分片时总是失败。#5832 (alesapin) - 避免在服务器线程池已满时出现连接挂起。在连接超时时间较长时,这对于来自
remote表函数的连接,或连接到没有副本的分片的连接尤为重要。此修复解决了 #5878 #5881 (alexey-milovidov) - 支持为
evalMLModel函数提供常量参数。此修复解决了 #5817 #5820 (alexey-milovidov) - 修复了 ClickHouse 将默认时区识别为
UCT而非UTC的问题。此修复解决了 #5804。#5828 (alexey-milovidov) - 修复了
visitParamExtractRaw中的缓冲区下溢问题。该修复解决了 #5901 #5902 (alexey-milovidov) - 现在,分布式
DROP/ALTER/TRUNCATE/OPTIMIZE ON CLUSTER查询将直接在 leader 副本上执行。#5757 (alesapin) - 修复
ColumnConst与ColumnNullable组合时coalesce的问题,并作了相关修改。#5755 (Artem Zuikov) - 修复
ReadBufferFromKafkaConsumer:即使在commit()之前已发生停滞,也能在commit()之后继续读取新消息 #5852 (Ivan) - 修复了在对右表中的
Nullable键进行连接时,FULL和RIGHTJOIN 结果不正确的问题。#5859 (Artem Zuikov) - 修复了低优先级查询可能无限休眠的问题。#5842 (alexey-milovidov)
- 修复了一个竞态条件,导致执行
SYSTEM FLUSH LOGS查询后,某些查询可能不会出现在 query_log 中。#5456 #5685 (Anton Popov) - 修复了 ClusterCopier 中的
heap-use-after-freeASan 警告,该警告是由于watch试图使用已被移除的 copier 对象而导致的。 #5871 (Nikolai Kochetov) - 修复了某些
IColumn::deserializeAndInsertFromArena实现返回错误StringRef指针的问题。该 bug 仅影响单元测试。#5973 (Nikolai Kochetov) - 防止源列和中间 ARRAY JOIN 列遮蔽同名列。#5941 (Artem Zuikov)
- 修复 MySQL engine 在使用 MySQL 风格的标识符引号时的 insert 和 select 查询问题。#5704 (Winter Zhang)
- 现在,
CHECK TABLE查询已可用于 MergeTree 引擎家族。它会返回每个分片 (对于更简单的引擎则为文件) 的检查状态以及相应消息 (如果有) 。此外,还修复了拉取损坏分片时的 bug。#5865 (alesapin) - 修复 SPLIT_SHARED_LIBRARIES 的运行时问题 #5793 (Danila Kutenin)
- 修复了在
/etc/localtime为类似../usr/share/zoneinfo/Asia/Istanbul的相对符号链接时的时区初始化问题 #5922 (alexey-milovidov) - clickhouse-copier:修复关闭时释放后仍被使用的问题 #5752 (proller)
- 已更新
simdjson。修复了某些包含零字节的无效 JSON 仍可被成功解析的问题。#5938 (alexey-milovidov) - 修复 SystemLogs 关闭时的问题 #5802 (Anton Popov)
- 修复了当 invalidate_query 中的条件依赖于字典时发生卡住的问题。#6011 (Vitaly Baranov)
改进
- 允许在集群配置中存在无法解析的地址。它们会被视为不可用,并在每次尝试建立连接时重新解析。这对 Kubernetes 尤其有用。此项修复见 #5714 #5924 (alexey-milovidov)
- 关闭空闲的 TCP 连接 (默认超时时间为一小时) 。这对于每台服务器上都有多个分布式表的大型集群尤为重要,因为每台服务器都可能与其他所有服务器维持一个连接池,而在查询并发高峰过后,这些连接会处于停滞状态。此修复参见 #5879 #5880 (alexey-milovidov)
- 改进了
topK函数的效果。调整了 SavingSpace 集合的行为:如果新元素的权重更大,则移除最后一个元素。#5833 #5850 (Guillaume Tassery) - 用于处理域名的 URL 函数现在也支持不带协议的非完整 URL #5725 (alesapin)
- 向
system.parts_columns表中添加了校验和。#5874 (Nikita Mikhaylov) - 新增
Enum数据类型,作为Enum8或Enum16的别名。#5886 (dimarub2000) T64codec 的完整按位转置变体。配合zstd时可获得更好的压缩效果。 #5742 (Artem Zuikov)- 基于
startsWith函数的条件现在可以利用主键。这修复了 #5310 和 #5882 #5919 (dimarub2000) - 通过允许数据库名为空,使
clickhouse-copier可用于跨复制集群拓扑。#5745 (nvartolomei) - 在没有
tzdata的系统上 (例如裸 Docker 容器) 默认使用UTC时区。在此补丁之前,会打印错误消息Could not determine local time zone,并导致 server 或客户端无法启动。#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 engine 构建器中添加对用户的解析支持 #5946 (akonyaev90)
- 更新
max_ast_elements 参数的默认值 #5933 (Artem Konovalov) - 新增了“已废弃设置”这一概念。已废弃设置
allow_experimental_low_cardinality_type即使使用也不会产生任何效果。0f15c01c6802f7ce1a1494c12c846be8c98944cd Alexey Milovidov
性能改进
- 增加从 Merge 表执行 SELECT 时的流数量,使线程分布更加均匀。新增设置
max_streams_multiplier_for_merge_tables。此项修复解决了 #5797 #5915 (alexey-milovidov)
构建/测试/打包改进
- 为不同版本 ClickHouse 之间的客户端与服务器交互新增一项向后兼容性测试。#5868 (alesapin)
- 在每次提交和拉取请求中提供测试覆盖率信息。#5896 (alesapin)
- 与 address sanitizer 配合,以支持我们的自定义分配器 (
Arena和ArenaWithFreeLists) ,从而更好地调试“释放后使用”错误。 #5728 (akuzm) - 改用 LLVM libunwind implementation 来进行 C++ 异常处理和打印堆栈跟踪 #4828 (Nikita Lapkov)
- 从 -Weverything 中再启用两条警告 #5923 (alexey-milovidov)
- 支持使用 Memory Sanitizer 构建 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选项会强制链接器在链接时检查所有外部名称是否都已定义。它对于在 split 构建模式下跟踪库之间的实际依赖关系非常有用。#5855 (Ivan)- 新增了 #5797 的性能测试 #5914 (alexey-milovidov)
- 修复了 gcc-7 兼容性问题。#5840 (alexey-milovidov)
- 新增了对 gcc-9 的支持。此项修复见 #5717 #5774 (alexey-milovidov)
- 修复了 libunwind 可能被错误链接时产生的错误。#5948 (alexey-milovidov)
- 修复了 PVS-Studio 检测出的几项警告。#5921 (alexey-milovidov)
- 新增了对
clang-tidy静态分析工具的初步支持。#5806 (alexey-milovidov) - 将 BSD/Linux 字节序宏 (‘be64toh’ 和 ‘htobe64’) 转换为 Mac OS X 的等效版本 #5785 (Fu Chen)
- 完善了集成测试指南。#5796 (Vladimir Chebotarev)
- 修复 macOS + gcc9 下的构建问题 #5822 (filimonov)
- 修复一个不易察觉的拼写错误:aggreAGte -> aggregate。 #5753 (akuzm)
- 修复 FreeBSD 构建问题 #5760 (proller)
- 向网站添加 Experimental YouTube 频道链接 #5845 (Ivan Blinkov)
- CMake:添加覆盖率标志选项:WITH_COVERAGE #5776 (proller)
- 修复了一些内联 PODArray 的初始大小问题。 #5787 (akuzm)
- clickhouse-server.postinst:修复对 CentOS 6 的操作系统检测 #5788 (proller)
- 新增了 Arch Linux 软件包生成功能。#5719 (Vladimir Chebotarev)
- 按库 (dbms) 拆分 Common/config.h #5715 (proller)
- 修复“Arcadia”构建平台相关问题 #5795 (proller)
- 修复非常规构建 (gcc9、无子模块) 相关问题 #5792 (proller)
- 要求在
unalignedStore中显式指定类型,因为这已被证明容易引发 bug #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已不再可用。如果你正在使用这些函数,请发送电子邮件至 clickhouse-feedback@yandex-team.com。注意:在最后时刻,我们决定暂时继续保留这些函数。#5780 (alexey-milovidov)
ClickHouse 19.10 发行版
ClickHouse 发行版 19.10.1.5,2019-07-12
新功能
- 新增列编解码器:
T64。专为 (U)IntX/EnumX/Data(Time)/DecimalX 列设计,适用于值恒定或取值范围较小的列。该编解码器支持在无需重新压缩的情况下扩大或缩小数据类型。#5557 (Artem Zuikov) - 新增数据库引擎
MySQL,可查看远程 MySQL 服务器上的所有表 #5599 (Winter Zhang) - 实现了
bitmapContains。如果第二个 bitmap 只包含一个元素,它的速度比bitmapHasAny快 2 倍。#5535 (Zhichang Yu) - 支持
crc32函数 (其行为与 MySQL 或 PHP 中完全一致) 。如果你需要的是哈希函数,请不要使用它。#5661 (Remen Ivan) - 实现了
SYSTEM START/STOP DISTRIBUTED SENDS查询,用于控制向Distributed表的异步插入。#4935 (Winter Zhang)
缺陷修复
- 在执行变更时,merge 限制将忽略查询执行限制和 max parts size。 #5659 (Anton Popov)
- 修复了一个缺陷:该问题可能导致普通块被去重 (极其罕见) ,以及重复块被插入 (更常见) 。 #5549 (alesapin)
- 修复了函数
arrayEnumerateUniqRanked在参数为空数组时的问题 #5559 (proller) - 不再订阅无意拉取任何消息的 Kafka topic。 #5698 (Ivan)
- 使设置
join_use_nulls对无法包含在 Nullable 中的类型不生效 #5700 (Olga Khvostikova) - 修复了
Incorrect size of index granularity错误 #5720 (coraxster) - 修复了 Float 转 Decimal 时的溢出问题 #5607 (coraxster)
- 在调用
WriteBufferFromHDFS的析构函数时刷新 buffer。这修复了向HDFS写入的问题。 #5684 (Xindong Peng)
改进
- 启用设置
input_format_defaults_for_omitted_fields时,将CSV中的空单元格视为默认值。#5625 (akuzm) - 以非阻塞方式加载外部字典。#5567 (Vitaly Baranov)
- 已建立的连接可根据设置动态调整网络超时。#4558 (Konstantin Podshumok)
- 函数
firstSignificantSubdomain和cutToFirstSignificantSubdomain使用 “public_suffix_list”。它使用由gperf生成的完美哈希表,列表来自以下文件:https://publicsuffix.org/list/public_suffix_list.dat。 (例如,现在我们会将域ac.uk识别为非显著域) 。#5030 (Guillaume Tassery) - 在系统表中采用
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) - 修复了从 MergeTree 表读取数据时的性能下降问题,该问题是在 19.6 版本中引入的。修复了 #5631。#5633 (alexey-milovidov)
构建/测试/打包改进
- 实现了
TestKeeper,作为测试中使用的 ZooKeeper 接口实现 #5643 (alexey-milovidov) (levushkin aleksej) - 从现在起,
.sql测试可以按服务器隔离、并行运行,并使用随机 database。这样既能加快运行速度,也能添加带有自定义服务器配置的新测试,并确保不同测试之间互不影响。 #5554 (Ivan) - 从性能测试中移除了
<name>和<metrics>#5672 (Olga Khvostikova) - 修复了适用于
Prettyformat 的 “select_format” 性能测试 #5642 (alexey-milovidov)
ClickHouse 19.9 发行版发布
ClickHouse 发行版 19.9.3.31,2019-07-05
缺陷修复
- 修复了 Delta 编解码器中的段错误,该问题会影响值大小小于 32 位的列,并导致随机内存损坏。#5786 (alesapin)
- 修复了检查带有 LowCardinality 列的分片时出现的一个罕见缺陷。#5832 (alesapin)
- 修复了在块中包含非物理列时,TTL 合并过程中的段错误。#5819 (Anton Popov)
- 修复了低优先级查询可能无限休眠的潜在问题。#5842 (alexey-milovidov)
- 修复了 ClickHouse 将默认时区识别为 UCT 而非 UTC 的问题。#5828 (alexey-milovidov)
- 修复了一个缺陷:分布式执行的 DROP/ALTER/TRUNCATE/OPTIMIZE ON CLUSTER 查询会先在 follower 副本上执行,而不是在 leader 副本上执行。现在这些查询将直接在 leader 副本上执行。#5757 (alesapin)
- 修复了一个竞态条件:执行 SYSTEM FLUSH LOGS 查询后,某些查询可能不会立即出现在 query_log 中。#5685 (Anton Popov)
- 为
evalMLModel函数补充了对常量参数的支持。#5820 (alexey-milovidov)
ClickHouse 发行版 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)
缺陷修复
- 修复 Kafka 中可能发生的数据丢失问题 #5445 (Ivan)
- 修复
PrettySpace格式在以零列调用时可能陷入无限循环的问题 #5560 (Olga Khvostikova) - 修复了线性模型中的 UInt32 溢出问题。允许在模型 argument 非常量时对 ML 模型执行 eval。 #5516 (Nikolai Kochetov)
ALTER TABLE ... DROP INDEX IF EXISTS ...在指定的索引不存在时不应抛出异常 #5524 (Gleb Novikov)- 修复标量子查询中
bitmapHasAny引发的段错误 #5528 (Zhichang Yu) - 修复了一个错误:即使 DNS 缓存已清除,复制连接池在解析主机时也不会重试。#5534 (alesapin)
- 修复了 ReplicatedMergeTree 中的
ALTER ... MODIFY TTL问题。#5539 (Anton Popov) - 修复向带有 MATERIALIZED 列的 Distributed 表中执行 INSERT 时的问题 #5429 (Azat Khuzhin)
- 修复 TRUNCATE Join 存储时出现 bad alloc 的问题 #5437 (TCeason)
- 在 tzdata 软件包的较新版本中,部分文件现在是符号链接。当前检测默认时区的机制因此会失效,并为某些时区返回错误的名称。现在,至少在提供了
TZ时,我们会强制将时区名称设为TZ的内容。#5443 (Ivan) - 修复了 MultiVolnitsky 搜索器中的一些极其罕见的问题:当常量 needle 的总长度至少为 16KB 时,算法可能会漏掉或覆盖先前的结果,从而导致
multiSearchAny返回错误结果。#5588 (Danila Kutenin) - 修复了 ExternalData 请求中的设置无法使用 ClickHouse 设置的问题。此外,由于名称存在歧义,当前还无法使用设置
date_time_input_format和low_cardinality_allow_in_native_format(在外部数据中,它可能会被解释为表格式;而在查询中,它又可能是一个设置项) 。#5455 (Danila Kutenin) - 修复了这样一个 bug:当 parts 仅从 FS 中移除、而未从 Zookeeper 中删除时,会出现问题。#5520 (alesapin)
- 移除 MySQL 协议中的调试日志 #5478 (alexey-milovidov)
- 在 DDL 查询处理过程中跳过 ZNONODE #5489 (Azat Khuzhin)
- 修复混用
UNION ALL时结果列类型的问题。此前在某些情况下,结果列的数据与列类型会不一致。#5503 (Artem Zuikov) - 在
dictGetT函数中,遇到错误的整数值时会抛出异常,而不是崩溃。#5446 (Artem Zuikov) - 修复
system.dictionaries表中哈希字典的 element_count 和 load_factor 错误。 #5440 (Azat Khuzhin)
构建/测试/打包改进
- 修复了在禁用
BrotliHTTP 压缩支持时的构建问题 (ENABLE_BROTLI=OFFcmake 变量) 。#5521 (Anton Yuzhaninov) - 将 roaring.h 以 roaring/roaring.h 的形式包含 #5523 (Orivej Desh)
- 修复了 hyperscan 中的 gcc9 警告 (#line 指令太坑人了!) #5546 (Danila Kutenin)
- 修复了使用 gcc-9 编译时的所有警告,修复了一些 contrib 问题,修复了 gcc9 ICE 并将其提交到 bugzilla。#5498 (Danila Kutenin)
- 修复了与 lld 链接时的问题 #5477 (alexey-milovidov)
- 移除了字典中未使用的特化实现 #5452 (Artem Zuikov)
- 改进了针对不同文件类型表的格式化和解析的性能测试 #5497 (Olga Khvostikova)
- 修复了并行运行测试时的问题 #5506 (proller)
- Docker:使用来自 clickhouse-test 的配置 #5531 (proller)
- 修复了在 FreeBSD 上的编译问题 #5447 (proller)
- 将 boost 升级到 1.70 #5570 (proller)
- 修复了将 clickhouse 作为子模块进行构建时的问题 #5574 (proller)
- 改进了 JSONExtract 的性能测试 #5444 (Vitaly Baranov)
ClickHouse 发行版 19.8
ClickHouse 发行版 19.8.3.8,2019-06-11
新功能
- 新增了用于处理 JSON 的函数 #4686 (hcz) #5124。 (Vitaly Baranov)
- 新增函数 basename,其行为与许多语言中的 basename 函数类似 (如 Python 中的
os.path.basename、PHP 中的basename等) 。同时支持类 UNIX path 和 Windows path。#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 的 server。#4715 (Yuriy Baranov)
- 新增
toDecimal*OrZero和toDecimal*OrNull函数。#5291 (Artem Zuikov) - 函数
quantile、quantiles、median、quantileExactWeighted、quantilesExactWeighted、medianExactWeighted 现已支持 Decimal 类型。#5304 (Artem Zuikov) - 新增了
toValidUTF8函数,可将所有无效的 UTF-8 字符替换为替换字符 � (U+FFFD)。 #5322 (Danila Kutenin) - 新增了
format函数。可使用参数中列出的字符串对常量模式 (简化版 Python format 模式) 进行格式化。#5330 (Danila Kutenin) - 新增了
system.detached_parts表,其中包含有关MergeTree表中 detached parts 的信息。#5353 (akuzm) - 添加了
ngramSearch函数,用于计算 needle 与 haystack 之间的非对称差。#5418#5422 (Danila Kutenin) - 通过聚合函数接口实现了基础机器学习方法 (随机线性回归和逻辑回归) 。支持多种模型权重更新策略 (简单梯度下降、动量法、Nesterov 方法) ,还支持自定义大小的小批次。#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:通过将初始 seed 与列名而非列位置组合,为各列派生 seed。此举旨在转换包含多个相关表的数据集,从而使这些表在转换后仍可进行 JOIN。#5178 (alexey-milovidov)- 新增了函数
JSONExtractRaw、JSONExtractKeyAndValues。将函数jsonExtract<type>重命名为JSONExtract<type>。当出现问题时,这些函数会返回相应的值,而不是NULL。修改了函数JSONExtract,现在它会从最后一个参数获取返回类型,且不再注入Nullable。实现了在 AVX2 指令不可用时回退到 RapidJSON。Simdjson 库已更新到新版本。#5235 (Vitaly Baranov) - 现在,
if和multiIf函数不再取决于条件的Nullable,而是出于 SQL 兼容性考虑,取决于各分支。 #5238 (Jian Wu) In谓词现在会像Equal函数一样,对Null输入返回Null结果。#5152 (Jian Wu)- 每从 Kafka 读取 (flush_interval / poll_timeout) 行数据,就检查一次时间限制。这样可以更频繁地中断 Kafka 消费者的读取过程,并检查顶层流的时间限制 #5249 (Ivan)
- 将 rdkafka 与内置的 SASL 链接。这样即可使用 SASL SCRAM 身份验证 #5253 (Ivan)
- 为所有 JOIN 提供了 RowRefList 的批次版本。#5267 (Artem Zuikov)
- clickhouse-server:监听错误消息提供了更多信息。 #5268 (proller)
- 支持在 clickhouse-copier 的
<sharding_key>函数中使用字典 #5270 (proller) - 新增设置
kafka_commit_every_batch,用于控制 Kafka 的提交策略。 它支持设置提交模式:每处理完一个消息批次后提交,或在整个块写入存储后再提交。这是在某些极端情况下丢失部分消息与重复读取消息之间做出的权衡。#5308 (Ivan) - 让
windowFunnel支持其他无符号整数类型。#5320 (sundyli) - 允许在 Merge 引擎中遮蔽虚拟列
_table。#5325 (Ivan) - 为
sequenceMatch聚合函数增加对其他无符号整数类型的支持 #5339 (sundyli) - 如果校验和不匹配很可能是由硬件故障引起的,错误信息会更明确。#5355 (alexey-milovidov)
- 检查底层表是否支持
StorageMerge的采样 #5366 (Ivan) - 在外部字典中使用完 MySQL 连接后关闭连接。这与问题 #893 相关。#5395 (Clément Rodriguez)
- 改进了 MySQL wire 协议。将格式名称改为 MySQLWire。使用 RAII 调用 RSA_free。若无法创建 SSL 上下文,则禁用 SSL。#5419 (Yuriy Baranov)
- clickhouse-client:允许在历史文件无法访问时运行 (只读、磁盘空间不足、文件是目录等) 。#5431 (proller)
- 在向分布式表进行异步 INSERT 时遵循查询设置。#4936 (TCeason)
- 将函数
leastSqr重命名为simpleLinearRegression,LinearRegression重命名为linearRegression,LogisticRegression重命名为logisticRegression。#5391 (Nikolai Kochetov)
性能改进
- 在 ALTER MODIFY 查询中,支持并行处理非复制的 MergeTree 表的 parts。 #4639 (Ivan Kush)
- 优化了正则表达式提取。 #5193 #5191 (Danila Kutenin)
- 如果右侧 join 键列仅在 JOIN ON 子句中使用,则不再将其添加到 JOIN 结果中。 #5260 (Artem Zuikov)
- 在首次收到空响应后冻结 Kafka 缓冲区。这可以避免在某些行解析流中对空结果多次调用
ReadBuffer::next()。 #5283 (Ivan) - 优化了
concat函数在多个参数场景下的性能。 #5357 (Danila Kutenin) - 查询优化:在将 comma/cross join 重写为 inner join 时,允许下推 IN 语句。 #5396 (Artem Zuikov)
- 将我们的 LZ4 实现升级为参考实现,以获得更快的解压缩速度。 #5070 (Danila Kutenin)
- 实现了 MSD 基数排序 (基于 kxsort) 以及部分排序。 #5129 (Evgenii Pravda)
缺陷修复
- 修复了 join 与 push require columns 一起使用时的问题 #5192 (Winter Zhang)
- 修复了一个问题:当 ClickHouse 由 systemd 运行时,命令
sudo service clickhouse-server forcerestart无法按预期工作。#5204 (proller) - 修复了 DataPartsExchange 中的 HTTP 错误码问题 (9009 端口上的 interserver HTTP server 即使发生错误时也始终返回 200) 。#5216 (proller)
- 修复了 String 长度超过 MAX_SMALL_STRING_SIZE 时的 SimpleAggregateFunction 问题 #5311 (Azat Khuzhin)
- 修复了 IN 中
Decimal转换为Nullable(Decimal)时的报错问题。现已支持其他 Decimal 到 Decimal 的转换 (包括不同标度) 。#5350 (Artem Zuikov) - 修复了 simdjson 库中的 FPU clobbering 问题,该问题会导致
uniqHLL、uniqCombined聚合函数以及log等数学函数计算错误。#5354 (alexey-milovidov) - 修复了 JSON 函数中 const/nonconst 混合场景的处理问题。#5435 (Vitaly Baranov)
- 修复了
retention函数。现在,数据行中所有满足条件的项都会被加入数据状态中。#5119 (小路) - 修复了
quantileExact处理 Decimal 时的结果类型问题。#5304 (Artem Zuikov)
文档
构建/测试/打包改进
- 修复了一些 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
缺陷修复
- 修复某些含 JOIN 的查询中的性能回归问题。#5192 (Winter Zhang)
ClickHouse 发行版 19.7.5.27,发布于 2019-06-09
新功能
- 新增了 bitmap 相关函数
bitmapHasAny和bitmapHasAll,对应于数组的hasAny和hasAll函数。#5279 (Sergi Vladykin)
缺陷修复
- 修复
minmaxINDEX 遇到 Null 值时的段错误。 #5246 (Nikita Vasilev) - 将 LIMIT BY 中所有输入列都标记为必需的输出列。这修复了某些分布式查询中的 “Not found column” 错误。 #5407 (Constantin S. Pan)
- 修复在带有 DEFAULT 的列上执行
SELECT .. PREWHERE时出现的 “Column ‘0’ already exists” 错误。 #5397 (proller) - 修复
ReplicatedMergeTree上的ALTER MODIFY TTL查询。 #5539 (Anton Popov) - 当 Kafka 消费者启动失败时,不再导致服务器崩溃。 #5285 (Ivan)
- 修复 bitmap 函数产生错误结果的问题。 #5359 (Andy Yang)
- 修复哈希字典的 element_count 计数问题 (不包含重复项) 。 #5440 (Azat Khuzhin)
- 将环境变量 TZ 的内容用作时区名称。这有助于在某些情况下正确识别默认时区。 #5443 (Ivan)
- 不再尝试在
dictGetT函数中转换整数,因为这样无法正确工作,改为抛出异常。 #5446 (Artem Zuikov) - 修复 ExternalData HTTP 请求中的设置问题。 #5455 (Danila Kutenin)
- 修复这样一个问题: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 列的 Distributed() 表执行 INSERT 时的问题。 #5429 (Azat Khuzhin)
ClickHouse 发行版 19.7.3.9,2019-05-30
新功能
- 允许限制用户可指定的设置取值范围。 这些约束可以在用户 settings profile 中配置。 #4931 (Vitaly Baranov)
- 为函数
groupUniqArray增加了第二个版本,并提供可选的max_size参数,用于限制结果数组的大小。其 行为类似于groupArray(max_size)(x)函数。 #5026 (Guillaume Tassery) - 对于 TSVWithNames/CSVWithNames 输入文件格式,现在可以
根据文件头确定列顺序。这由
input_format_with_names_use_header参数控制。 #5081 (Alexander)
缺陷修复
- 在 merge 过程中使用 uncompressed_cache + JOIN 时发生崩溃 (#5197) #5133 (Danila Kutenin)
- 使用 clickhouse-client 查询系统表时发生段错误。#5066 #5127 (Ivan)
- 通过 KafkaEngine 在高负载下出现数据丢失 (#4736) #5080 (Ivan)
- 修复了一个极少见的数据竞态条件:执行包含 UNION ALL 的查询时,如果其中至少有两个 SELECT 来自 system.columns、system.tables、system.parts、system.parts_tables 或 Merge 家族的表,同时并发对相关表的列执行 ALTER,则可能触发该问题。#5189 (alexey-milovidov)
性能改进
- 对
ORDER BY中单个数值列进行排序且不带LIMIT时,使用基数排序。#5106, #4439 (Evgenii Pravda, alexey-milovidov)
文档
构建/测试/打包改进
- 在
clickhouse-test中正确输出 UTF-8 字符。 #5084 (alexey-milovidov) - 为 clickhouse-client 添加命令行参数,以便始终加载自动补全 数据。 #5102 (alexey-milovidov)
- 修复了一些 PVS-Studio 警告。 #5082 (alexey-milovidov)
- 更新 LZ4 #5040 (Danila Kutenin)
- 将 gperf 添加到构建依赖中,为即将提交的拉取请求 #5030 做准备。 #5110 (proller)
ClickHouse 发行版 19.6
ClickHouse 发行版 19.6.3.18,2019-06-13
缺陷修复
- 修复了来自表函数
mysql和odbc及其对应表引擎的查询中,IN条件无法下推的问题。此修复解决了 #3540 和 #2384。 #5313 (alexey-milovidov) - 修复了 Zookeeper 中的死锁问题。 #5297 (github1youlc)
- 允许 CSV 中使用带引号的小数值。 #5284 (Artem Zuikov
- 禁止将浮点 Inf/NaN 转换为 Decimal (会抛出异常) 。 #5282 (Artem Zuikov)
- 修复了 rename 查询中的数据竞争问题。 #5247 (Winter Zhang)
- 临时禁用 LFAlloc。使用 LFAlloc 可能会在分配 UncompressedCache 时导致大量 MAP_FAILED,进而在高负载服务器上引发查询崩溃。 cfdba93(Danila Kutenin)
ClickHouse 版本 19.6.2.11,2019-05-13
新功能
- 为列和表新增生存时间 (TTL) 表达式。#4212 (Anton Popov)
- 新增对 HTTP 响应
brotli压缩的支持 (Accept-Encoding: br) #4388 (Mikhail) - 新增函数
isValidUTF8,用于检查一组字节是否采用了正确的 UTF-8 编码。#4934 (Danila Kutenin) - 新增负载均衡策略
first_or_random:将查询发送到第一个指定主机;如果该主机不可访问,则将查询发送到分片中的随机主机。适用于跨复制拓扑设置。#5012 (nvartolomei)
Experimental 功能
改进
- 为函数
substringUTF8新增了对非常量以及负数 size 和 length 参数的支持。#4989 (alexey-milovidov) - 在 left join 中禁用向右表下推,在 right join 中禁用向左表下推,并在 full join 中禁用向两张表下推。这修复了某些情况下错误的 JOIN 结果。#4846 (Ivan)
clickhouse-copier:自动从--task-file选项上传任务配置。#4876 (proller)- 为存储工厂和表函数工厂添加了拼写错误处理程序。#4891 (Danila Kutenin)
- 支持在无子查询的多个 join 中使用星号和限定星号。#4898 (Artem Zuikov)
- 使缺失列的错误消息对用户更友好。#4915 (Artem Zuikov)
性能改进
- ASOF JOIN 速度显著提升 #4924 (Martijn Bakker)
不兼容的变更
缺陷修复
- 修复了
clickhouse-copier中潜在的空指针解引用问题。#4900 (proller) - 修复了包含 JOIN + ARRAY JOIN 的查询报错问题。#4938 (Artem Zuikov)
- 修复了在一个字典通过 engine=Dictionary 的数据库依赖另一个字典时,server 启动过程中可能卡住的问题。#4962 (Vitaly Baranov)
- 部分修复了 distributed_product_mode = local。现在允许通过表别名在 where/having/order by/… 中使用本地表的列。如果表没有别名,则会抛出异常。不过目前仍无法在不使用表别名的情况下访问这些列。#4986 (Artem Zuikov)
- 修复了
SELECT DISTINCT与JOIN一起使用时可能返回错误结果的问题。#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)
- 在 ClickHouse 中加入了 Yandex LFAlloc,以不同方式分配 MarkCache 和 UncompressedCache 数据,从而更可靠地捕获段错误 #4995 (Danila Kutenin)
- 用于辅助处理回移和更新日志的 Python 工具。#4949 (Ivan)
ClickHouse 版本 19.5
ClickHouse 版本 19.5.4.22,2019-05-13
缺陷修复
- 修复了 bitmap* 函数可能发生崩溃的问题 #5220 #5228 (Andy Yang)
- 修复了一个极其罕见的数据竞态条件:当执行包含至少两个 SELECT 的 UNION ALL 查询,且这些 SELECT 来自 system.columns、system.tables、system.parts、system.parts_tables 或 Merge 家族的表,同时并发对相关表的列执行 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
缺陷修复
- 将设置
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)- 新增了在 ZooKeeper 中缺少元数据时以
readonly模式启动复制表的能力。#4691 (alesapin) - 修复了 clickhouse-client 中进度条闪烁的问题。使用
FORMAT Null配合流式查询时,这个问题最为明显。#4811 (alexey-milovidov) - 允许按用户禁用使用
hyperscan库的函数,以限制潜在的过度且不可控的资源消耗。#4816 (alexey-milovidov) - 在所有错误日志中加入版本号。#4824 (proller)
- 为
multiMatch函数添加了限制,要求字符串大小必须能容纳进unsigned int。同时还为multiSearch函数增加了参数数量限制。#4834 (Danila Kutenin) - 改进了 Hyperscan 中临时工作区的使用和错误处理。#4866 (Danila Kutenin)
- 根据
*GraphiteMergeTree引擎表的表配置填充system.graphite_detentions。#4584 (Mikhail f. Shiryaev) - 将
trigramDistance函数重命名为ngramDistance,并新增了更多带有CaseInsensitive和UTF的函数。#4602 (Danila Kutenin) - 改进了数据跳过索引的计算。#4640 (Nikita Vasilev)
- 将普通列、
DEFAULT、MATERIALIZED和ALIAS列统一保留在一个列表中 (修复了问题 #2867) 。#4707 (Alex Zatelepin)
问题修复
- 避免在内存分配失败时触发
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) - 修复了关闭时因 system 日志使用中的竞态条件导致的 TSan 报告。修复了在启用
part_log时关闭过程中可能发生的释放后使用问题。#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 消息后会额外添加一行的 bug。#4808 (Vitaly Baranov)
- 修复
JOIN在非 Nullable 列与 Nullable 列之间时的崩溃问题。修复ANY JOIN+join_use_nulls中右侧键里的NULLs问题。#4815 (Artem Zuikov) - 修复
clickhouse-copier的段错误。#4835 (proller) - 修复了在并发重命名或修改表时,从
system.tables中执行SELECT的竞态条件。#4836 (alexey-milovidov) - 修复了在拉取已失效的数据分区片段时发生的数据竞争问题。#4839 (alexey-milovidov)
- 修复了在对 MergeTree 家族表执行
RENAME时可能发生的罕见竞态条件。#4844 (alexey-milovidov) - 修复了函数
arrayIntersect中的段错误。在以混合的常量参数和普通参数调用该函数时,可能会发生段错误。#4847 (Lixiang Qian) - 修复了这样一个罕见问题:当
Array(LowCardinality)列包含一长串空数组时,读取该列会出错。#4850 (Nikolai Kochetov) - 修复了在
FULL/RIGHT JOIN中按 Nullable 列与非 Nullable 列连接时发生崩溃的问题。#4855 (Artem Zuikov) - 修复在副本之间拉取 parts 时发生的
No message received异常。#4856 (alesapin) - 修复了在单个数组包含多个重复值时,
arrayIntersect函数返回结果错误的问题。#4871 (Nikolai Kochetov) - 修复了并发执行
ALTER COLUMN查询时的一个竞态条件,该问题可能导致服务器崩溃 (修复问题 #3421) 。#4592 (Alex Zatelepin) - 修复
FULL/RIGHT JOIN在使用 const 列时结果不正确的问题。#4723 (Artem Zuikov) - 修复
GLOBAL JOIN中使用星号时出现的重复项问题。#4705 (Artem Zuikov) - 修复了在未指定列类型时,对列
CODEC执行ALTER MODIFY时的参数推断问题。#4883 (alesapin) - 当
URL包含片段但不含查询字符串时,函数cutQueryStringAndFragment()和queryStringAndFragment()现在可以正确工作。#4894 (Vitaly Baranov) - 修复了一个罕见问题:当
min_bytes_to_use_direct_io设置大于零且线程需要在列文件中向后寻道时,就会出现该问题。#4897 (alesapin) - 修复聚合函数在使用
LowCardinality参数时参数类型错误的问题 (修复了问题 #4919) 。#4922 (Nikolai Kochetov) - 修复
GLOBAL JOIN中错误的名称限定问题。#4969 (Artem Zuikov) - 修复函数
toISOWeek在 1970 年返回结果的问题。#4988 (alexey-milovidov) - 修复在
ReplicatedMergeTree*系列表上使用ON CLUSTER执行DROP、TRUNCATE和OPTIMIZE查询时的重复执行问题。#4991 (alesapin)
向后不兼容的变更
- 将设置
insert_sample_with_metadata重命名为input_format_defaults_for_omitted_fields。#4771 (Artem Zuikov) - 新增设置
max_partitions_per_insert_block(默认值为 100) 。如果插入的块包含更多分区,则会抛出异常。如需取消该限制,可将其设为 0 (不推荐) 。#4845 (alexey-milovidov) - 多重搜索函数已重命名 (
multiPosition更名为multiSearchAllPositions,multiSearch更名为multiSearchAny,firstMatch更名为multiSearchFirstIndex) 。#4780 (Danila Kutenin)
性能改进
- 通过内联优化 Volnitsky searcher,对于包含大量 needle 或大量相似二元组的查询,搜索性能提升约 5-10%。 #4862 (Danila Kutenin)
- 修复了在设置
use_uncompressed_cache大于零且所有读取数据都位于缓存中时出现的性能问题。 #4913 (alesapin)
构建/测试/打包改进
- 加固调试构建:采用更细粒度的内存映射和 ASLR;为标记缓存和索引增加内存保护。这有助于在 ASan 和 MSan 无法发现问题时,找出更多内存踩踏 bug。#4632 (alexey-milovidov)
- 为 CMake 变量
ENABLE_PROTOBUF、ENABLE_PARQUET和ENABLE_BROTLI添加支持,从而可以启用/禁用上述功能 (与 librdkafka、mysql 等的做法相同) 。#4669 (Silviu Caragea) - 增加了一项能力:如果某些查询在测试运行后卡住,可打印进程列表以及所有线程的堆栈跟踪。#4675 (alesapin)
- 在
clickhouse-test中为Connection loss错误添加重试机制。#4682 (alesapin) - 在打包脚本中加入基于 Vagrant 的 FreeBSD 构建,以及带 Thread Sanitizer 的构建。#4712 #4748 (alesapin)
- 现在安装期间会提示用户为
'default'用户设置密码。#4725 (proller) - 抑制
rdkafka库中的警告。#4740 (alexey-milovidov) - 允许在不使用 SSL 的情况下构建。#4750 (proller)
- 增加了一种以自定义用户身份启动 clickhouse-server 镜像的方式。#4753 (Mikhail f. Shiryaev)
- 将 contrib boost 升级到 1.69。#4793 (proller)
- 在使用 Thread Sanitizer 编译时禁用
mremap。令人意外的是,TSan 不会拦截mremap(尽管会拦截mmap、munmap) ,这会导致误报。已修复有状态测试中的 TSan 报告问题。#4859 (alexey-milovidov) - 添加了一项测试,用于检查通过 HTTP 接口使用 format schema。#4864 (Vitaly Baranov)
ClickHouse 19.4 版本
ClickHouse 版本 19.4.4.33,2019-04-17
缺陷修复
- 避免在内存分配失败时触发
std::terminate。现在会按预期抛出std::bad_alloc异常。 #4665 (alexey-milovidov) - 修复了从缓冲区读取
capnproto的问题。有时文件无法通过 HTTP 成功加载。#4674 (Vladislav) - 修复在执行
OPTIMIZE TABLE FINAL查询后出现的错误Unknown log entry type: 0。#4683 (Amos Bird) - 向
hasAny或hasAll函数传入错误参数可能导致段错误。#4698 (alexey-milovidov) - 执行
DROP DATABASE dictionary查询时,可能发生死锁。#4701 (alexey-milovidov) - 修复
median和quantile函数中的未定义行为。#4702 (hcz) - 修复
network_compression_method为小写时无法正确检测压缩级别的问题。此问题始于 v19.1。 #4706 (proller) - 修复了会忽略
<timezone>UTC</timezone>设置的问题 (修复了问题 #4658) 。#4718 (proller) - 修复
histogram函数在Distributed表上的行为。#4741 (olegkv) - 修复了 tsan 报告的
destroy of a locked mutex错误。#4742 (alexey-milovidov) - 修复了关闭时因 system 日志使用中的竞态条件而触发的 TSan 报告。修复了在启用 part_log 时关闭过程中潜在的释放后使用问题。#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) - 修复了拉取已废弃的数据分区片段时的数据竞争问题。#4839 (alexey-milovidov)
- 修复了对 MergeTree 家族的表执行
RENAME时可能发生的罕见数据竞争问题。#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) - 修复了在未指定列类型时,使用
ALTER MODIFY修改列CODEC时的参数推断问题。#4883 (alesapin) - 当
URL包含片段但不包含查询参数时,函数cutQueryStringAndFragment()和queryStringAndFragment()现已能够正确工作。#4894 (Vitaly Baranov) - 修复了一个罕见错误:当设置
min_bytes_to_use_direct_io大于零且线程需要在列文件中向后寻道时,会发生该错误。 #4897 (alesapin) - 修复带有
LowCardinality参数的聚合函数参数类型错误的问题 (修复了 issue #4919) 。#4922 (Nikolai Kochetov) - 修复函数
toISOWeek在 1970 年返回结果的问题。 #4988 (alexey-milovidov) - 修复了对
ReplicatedMergeTree*家族的表执行ON CLUSTER时,DROP、TRUNCATE和OPTIMIZE查询重复的问题。#4991 (alesapin)
改进
- 将普通列、
DEFAULT、MATERIALIZED和ALIAS列统一保留在同一个列表中 (修复了问题 #2867) 。#4707 (Alex Zatelepin)
ClickHouse 版本 19.4.3.11,2019-04-02
缺陷修复
- 修复
FULL/RIGHT JOIN在基于 Nullable 和非 Nullable 类型进行连接时发生崩溃的问题。#4855 (Artem Zuikov) - 修复
clickhouse-copier中的段错误。#4835 (proller)
构建/测试/打包改进
- 新增了以自定义用户身份启动 clickhouse-server 镜像的方法。#4753 (Mikhail f. Shiryaev)
ClickHouse 发行版 19.4.2.7,2019-03-30
缺陷修复
- 修复了极少数情况下读取
Array(LowCardinality)列时出现的问题:当该列包含一长串空数组时会发生此问题。#4850 (Nikolai Kochetov)
ClickHouse 发行版 19.4.1.3,2019-03-19
缺陷修复
- 修复了同时包含
LIMIT BY和LIMIT的远程查询。此前,如果远程查询中同时使用了LIMIT BY和LIMIT,LIMIT可能会在LIMIT BY之前执行,从而导致结果被过滤得过多。#4708 (Constantin S. Pan)
ClickHouse 发行版 19.4.0.49,2019-03-09
新功能
- 新增对
Protobuf格式的完整支持 (输入和输出、嵌套数据结构) 。#4174 #4493 (Vitaly Baranov) - 新增基于 Roaring Bitmaps 的 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)
问题修复
- 此版本还包含 19.3 和 19.1 版本中的所有错误修复。
- 修复了数据跳过索引中的一个错误:INSERT 后粒度顺序不正确。#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 表执行 DROP 的同时进行 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,直到我们拥有自己的
llvmcontrib,并能使用clang和asan进行测试。 #4579 (alesapin) - 当
clickhouse外部字典源的invalidate_query返回错误的结果集 (空结果、超过一行或超过一列) 时,避免触发std::terminate。修复了此前不论lifetime如何,invalidate_query都会每 5 秒执行一次的问题。#4583 (alexey-milovidov) - 避免在使用
clickhouse数据源的字典中,当invalidate_query涉及system.dictionaries表或Dictionaries数据库时出现死锁 (罕见情况) 。#4599 (alexey-milovidov) - 修复了在 WHERE 为空时 CROSS JOIN 的问题。#4598 (Artem Zuikov)
- 修复了函数 “replicate” 在传入常量参数时出现的段错误。 #4603 (alexey-milovidov)
- 修复谓词优化器中的 lambda function 问题。 #4408 (Winter Zhang)
- 修复了多个 JOIN 相关问题。#4595 (Artem Zuikov)
改进
- 支持在 JOIN ON 部分为右侧表的列使用别名。#4412 (Artem Zuikov)
- 多个 JOIN 的结果需要使用正确的结果名称,以便在子查询中引用。将结果中的扁平别名替换为源名称。#4474 (Artem Zuikov)
- 改进 JOIN 语句的下推逻辑。#4387 (Ivan)
性能改进
- 改进了 “move to PREWHERE” 优化的启发式策略。#4405 (alexey-milovidov)
- 对于 8 位和 16 位 key,改为使用基于 HashTable API 的适当查找表。#4536 (Amos Bird)
- 提升了字符串比较的性能。#4564 (alexey-milovidov)
- 在单独的线程中清理 分布式 DDL queue,以免拖慢处理 分布式 DDL tasks 的主循环。#4502 (Alex Zatelepin)
- 当
min_bytes_to_use_direct_io设置为 1 时,并非每个文件都会以 O_DIRECT 模式打开,因为待读取的数据大小有时会少估一个压缩块的大小。#4526 (alexey-milovidov)
构建/测试/打包改进
- 新增对 clang-9 的支持 #4604 (alexey-milovidov)
- 修复错误的
__asm__指令 (又一次) #4621 (Konstantin Podshumok) - 新增了可从命令行为
clickhouse-performance-test指定设置的能力。 #4437 (alesapin) - 将字典测试加入集成测试。 #4477 (alesapin)
- 将网站上 benchmark 中的查询加入自动化性能测试。 #4496 (alexey-milovidov)
- 外部 lz4 中不存在
xxhash.h,因为它属于实现细节,其符号带有XXH_NAMESPACEmacro 命名空间前缀。当 lz4 为外部库时,xxHash 也必须作为外部库提供,依赖它的组件也必须链接到它。 #4495 (Orivej Desh) - 修复了
quantileTimingaggregate function 可接受负数或浮点参数调用的问题 (这也修复了启用 undefined behavior sanitizer 的 fuzz 测试) 。 #4506 (alexey-milovidov) - 修正拼写错误。 #4531 (sdk2)
- 修复了 Mac 上的编译问题。 #4371 (Vitaly Baranov)
- 修复了 FreeBSD 以及多种非常规构建配置下的构建问题。 #4444 (proller)
ClickHouse 19.3 发行版
ClickHouse 19.3.9.1 发行版,2019-04-02
缺陷修复
- 修复在
FULL/RIGHT JOIN中按 Nullable 与非 Nullable 列进行连接时发生崩溃的问题。#4855 (Artem Zuikov) - 修复
clickhouse-copier中的段错误。#4835 (proller) - 修复了极少数情况下从
Array(LowCardinality)列读取数据时的问题,即该列包含很长一串空数组时。#4850 (Nikolai Kochetov)
构建/测试/打包改进
- 新增了以自定义用户启动 clickhouse-server 镜像的方法 #4753 (Mikhail f. Shiryaev)
ClickHouse 发行版 19.3.7,2019-03-12
缺陷修复
- 修复了 #3920 中的错误。该错误会导致随机缓存损坏 (报错信息为
Unknown codec family code、Cannot seek through file) 以及段错误。该缺陷最早出现在 19.1 版本中,并在截至 19.1.10 和 19.3.6 的版本中一直存在。#4623 (alexey-milovidov)
ClickHouse 19.3.6 发行版,2019-03-02
缺陷修复
- 当线程池中的线程数超过 1000 时,线程退出时可能会触发
std::terminate。 Azat Khuzhin #4485 #4505 (alexey-milovidov) - 现在可以创建
ReplicatedMergeTree*表:既支持为没有默认值的列添加注释,也支持创建列带有 codec 但没有注释和默认值的表。同时还修复了 codec 的比较问题。 #4523 (alesapin) - 修复了对 array 或 tuple 执行 JOIN 时发生崩溃的问题。 #4552 (Artem Zuikov)
- 修复了 clickhouse-copier 出现
ThreadStatus not created消息时的崩溃问题。 #4540 (Artem Zuikov) - 修复了使用分布式 DDL 后,server 关闭时可能发生挂起的问题。 #4472 (Alex Zatelepin)
- 对于编号大于 10 的列,文本格式解析相关错误消息中打印的列号不正确。 #4484 (alexey-milovidov)
构建/测试/打包改进
- 修复了启用 AVX 时的构建问题。#4527 (alexey-milovidov)
- 根据已知正常的版本来启用扩展核算和 IO 核算,而不再依据编译时所用的内核版本。#4541 (nvartolomei)
- 允许跳过设置 core_dump.size_limit;如果设置限制失败,则发出警告而不是抛出异常。#4473 (proller)
- 移除了
Field.cpp中void readBinary(...)的inline标记。还合并了冗余的namespace DB块。#4530 (hcz)
ClickHouse 发行版 19.3.5,2019-02-21
缺陷修复
- 修复了大型 HTTP insert 查询的处理问题。 #4454 (alesapin)
- 修复了因
send_logs_level设置实现错误而导致的与旧版本不向后兼容问题。 #4445 (alexey-milovidov) - 修复了因列注释而引入的表函数
remote不向后兼容问题。 #4446 (alexey-milovidov)
ClickHouse 发行版 19.3.4,2019-02-16
改进
- 执行
ATTACH TABLE查询时,表索引大小未计入内存限制。避免了表在分离后无法重新附加的问题。#4396 (alexey-milovidov) - 略微提高了从 ZooKeeper 接收的最大 String 和 Array 大小限制。这样,在 ZooKeeper 上增大
CLIENT_JVMFLAGS=-Djute.maxbuffer=...后,系统仍可继续正常工作。#4398 (alexey-milovidov) - 即使某个被遗弃的副本的 queue 中已有大量节点,也允许对其进行修复。#4399 (alexey-milovidov)
- 为
SET索引新增了一个必需参数 (最大存储行数) 。#4386 (Nikita Vasilev)
缺陷修复
- 修复了按单个
LowCardinality键分组时WITH ROLLUP的结果错误。#4384 (Nikolai Kochetov) - 修复了 set 索引中的一个错误 (如果某个粒度包含的行数超过
max_rows,则会丢弃该粒度) 。#4386 (Nikita Vasilev) - 修复了大量 FreeBSD 构建问题。#4397 (proller)
- 修复了当子查询中包含相同别名时,查询中的别名替换问题 (问题 #4110) 。#4351 (Artem Zuikov)
构建/测试/打包改进
- 支持在 Docker 镜像中运行
clickhouse-server进行无状态测试。#4347 (Vasily Nemkov)
ClickHouse 19.3.3 发行版,2019-02-13
新功能
- 新增了
KILL MUTATION语句,可用于移除因各种原因卡住的变更。并为system.mutations表新增了latest_failed_part、latest_fail_time和latest_fail_reason字段,以便更方便地排查问题。#4287 (Alex Zatelepin) - 新增了聚合函数
entropy,用于计算香农熵。#4238 (Quid37) - 现在可以直接向 server 发送
INSERT INTO tbl VALUES (....查询,而无需拆分为query和data两个分片。#4301 (alesapin) - 新增了
arrayWithConstant函数的通用实现。#4322 (alexey-milovidov) - 实现了
NOT BETWEEN比较运算符。#4228 (Dmitry Naumov) - 实现了
sumMapFiltered,从而可以限制sumMap仅对指定键的值求和。#4129 (Léo Ercolanelli) mysqltable function 现已支持Nullable类型。#4198 (Emmanuel Donin de Rosière)LIMITclause 现已支持任意常量表达式。#4246 (k3box)- 新增了聚合函数
topKWeighted,可接收一个额外的 (无符号整数) 权重 argument。#4245 (Andrew Golman) StorageJoin现在支持join_any_take_last_rowsetting,允许覆盖相同 key 的现有值。#3973 (Amos Bird- 新增了函数
toStartOfInterval。#4304 (Vitaly Baranov) - 新增了
RowBinaryWithNamesAndTypesformat。#4200 (Oleg V. Kozlyuk) - 新增了
IPv4和IPv6数据类型,并改进了IPv*函数的实现效率。#3669 (Vasily Nemkov) - 新增了函数
toStartOfTenMinutes()。#4298 (Vitaly Baranov) - 新增了
Protobufoutput format。#4005 #4158 (Vitaly Baranov) - 为用于数据导入 (INSERTs) 的 HTTP interface 新增了对 brotli 的支持。#4235 (Mikhail)
- 当用户在命令行客户端中输错函数名或类型名时,新增了提示信息。#4239 (Danila Kutenin)
- 在 Server 的 HTTP 响应请求头中新增了
Query-Id。#4231 (Mikhail)
Experimental 功能
- 为 MergeTree 表引擎家族新增了
minmax和set数据跳过索引。#4143 (Nikita Vasilev) - 新增了在可能时将
CROSS JOIN转换为INNER JOIN的功能。#4221 #4266 (Artem Zuikov)
问题修复
- 修复了
JOIN ON部分中因重复列而报出的Not found column问题。#4279 (Artem Zuikov) - 使
START REPLICATED SENDS命令能够启动复制发送。 #4229 (nvartolomei) - 修复了以
Array(LowCardinality)作为参数的 aggregate functions 执行问题。#4055 (KochetovNicolai) - 修复了执行
INSERT ... SELECT ... FROM file(...)查询时的错误行为:当文件格式为CSVWithNames或TSVWIthNames,且首行数据缺失时,会出现该问题。#4297 (alexey-milovidov) - 修复了在字典不可用时重新加载字典会导致崩溃的问题。该 bug 于 19.1.6 中引入。#4188 (proller)
- 修复了右表存在重复项时
ALL JOIN的问题。#4184 (Artem Zuikov) - 修复了在
use_uncompressed_cache=1时的段错误,以及因未压缩大小错误而引发的异常。该 bug 出现在 19.1.6 中。#4186 (alesapin) - 修复了
compile_expressions在比较较大日期值 (超过 int16) 时的错误。#4341 (alesapin) - 修复了从表函数
numbers(0)选择数据时出现的无限循环问题。#4280 (alexey-milovidov) - 临时禁用
ORDER BY的谓词优化。#3890 (Winter Zhang) - 修复了在旧款 CPU 上使用 base64 函数时出现的
Illegal instruction错误。该错误仅在使用 gcc-8 编译 ClickHouse 时才会复现。 #4275 (alexey-milovidov) - 修复了通过 TLS 连接与 PostgreSQL ODBC Driver 交互时出现的
No message receivederror。还修复了使用 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运算符的变更时会产生错误结果。#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) - 修复了一个罕见的竞态条件:删除旧数据分区片段时可能会因
File not found错误而失败。#4378 (alexey-milovidov) - 修复安装包中缺少 /etc/clickhouse-server/config.xml 的问题。#4343 (proller)
构建/测试/打包改进
- Debian 软件包:根据配置修正 /etc/clickhouse-server/preprocessed 链接。 #4205 (proller)
- 修复了 FreeBSD 上的多项构建问题。 #4225 (proller)
- 在 perftest 中新增了创建、填充和删除表的功能。 #4220 (alesapin)
- 添加了一个用于检查重复 include 的脚本。 #4326 (alexey-milovidov)
- 在性能测试中新增了按索引运行查询的功能。 #4264 (alesapin)
- 现建议安装包含调试符号的软件包。 #4274 (alexey-milovidov)
- 重构了 performance-test,改进了日志记录和信号处理。 #4171 (alesapin)
- 为匿名化的 Yandex.Metrica 数据集添加了文档。 #4164 (alesapin)
- 添加了一个工具,用于将旧的按月分区分片转换为自定义分区格式。 #4195 (Alex Zatelepin)
- 添加了关于 S3 中两个数据集的文档。 #4144 (alesapin)
- 添加了一个根据拉取请求描述生成更新日志的脚本。 #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)
- Init 脚本会等待服务器启动完成。 #4281 (proller)
向后不兼容的变更
- 已移除
allow_experimental_low_cardinality_type设置。LowCardinality数据类型现已可用于生产环境。#4323 (alexey-milovidov) - 根据可用内存大小,相应减小 mark cache 和 uncompressed cache 的大小。#4240 (Lopatin Konstantin
- 在
CREATE TABLE查询中新增了关键字INDEX。名称为index的列必须用反引号或双引号括起来:`index`。#4143 (Nikita Vasilev) sumMap现在会提升结果类型,而不再发生 overflow。旧版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 server 增加了对
--version选项的支持。#4251 (Lopatin Konstantin) - 为
clickhouse-server增加了--help/-h选项。#4233 (Yuriy Baranov) - 增加了对返回 aggregate function state 结果的标量子查询的支持。#4348 (Nikolai Kochetov)
- 改进了服务端关闭耗时以及 ALTER 等待时间。#4372 (alexey-milovidov)
- 在 system.replicas 中增加了关于 replicated_can_become_leader 设置的信息,并在副本不会尝试成为 leader 时增加了日志。#4379 (Alex Zatelepin)
ClickHouse 19.1 发行版
ClickHouse 发行版 19.1.14, 2019-03-14
- 修复了一个错误:在使用
GLOBAL JOIN和SELECT *,且将设置asterisk_left_columns_only设为 1 时,可能会出现Column ... queried more than once(罕见情况) 。该问题在 19.3 及更高版本中不存在。 6bac7d8d (Artem Zuikov)
ClickHouse 发行版 19.1.13, 2019-03-12
ClickHouse 发行版 19.1.10,2019-03-03
ClickHouse 发行版 19.1
ClickHouse 发行版 19.1.9,2019-02-21
缺陷修复
- 修复了因
send_logs_level设置实现错误而导致与旧版本不兼容的问题。#4445 (alexey-milovidov) - 修复了因列注释而引入的表函数
remote与旧版本不兼容的问题。#4446 (alexey-milovidov)
ClickHouse 发行版 19.1.8,2019-02-16
缺陷修复
ClickHouse 发行版 19.1
ClickHouse 发行版 19.1.7,2019-02-15
问题修复
- 在
joinGet函数中正确返回相应类型,并妥善处理锁。#4153 (Amos Bird) - 修复了服务器关闭时再次尝试创建系统日志而导致的错误。 #4254 (alexey-milovidov)
- 修复了一个错误:如果存在使用
Dictionary引擎的数据库,所有字典都会在服务器启动时强制加载;而如果某个字典使用来自 localhost 的 ClickHouse 源,则该字典将无法加载。#4255 (alexey-milovidov) - 修复了执行包含
IN运算符的变更时会产生错误结果的问题。#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) 的日期时的 bug。#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 发行版 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会返回一个 Tuple,其中包含多分类模型各类别的原始预测值。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)
Experimental 功能
- 新增了多个 JOIN 的模拟功能 (
allow_experimental_multiple_joins_emulationsetting) 。#3946 (Artem Zuikov)
问题修复
- 默认限制
compiled_expression_cache_size设置,以降低内存消耗。#4041 (alesapin) - 修复了一个 bug,该问题会导致执行复制表 ALTER 操作的线程,以及从 ZooKeeper 更新配置的线程发生卡住。#2947 #3891 #3934 (Alex Zatelepin)
- 修复了执行分布式 ALTER 任务时的一个竞态条件。该竞态条件会导致多个副本同时尝试执行该任务,最终除一个副本外,其余所有副本都会因 ZooKeeper 错误而失败。#3904 (Alex Zatelepin)
- 修复了一个 bug:当向 ZooKeeper 的请求超时后,
from_zk配置元素未被刷新。#2947 #3947 (Alex Zatelepin) - 修复了 IPv4 子网掩码前缀不正确的问题。#3945 (alesapin)
- 修复了在极少数情况下,由于资源耗尽无法创建新线程而导致的崩溃 (
std::terminate) 。#3956 (alexey-milovidov) - 修复了
remote表函数执行时,getStructureOfRemoteTable中使用错误限制条件导致的 bug。#4009 (alesapin) - 修复了 netlink 套接字泄漏问题。它们被放入一个永远不会清理的池中;当现有套接字都在使用时,新线程启动时还会创建新的套接字。#4017 (Alex Zatelepin)
- 修复了这样一个问题:在 fork 出
odbc-bridge子进程后,还没从/proc读取完所有 fd,就提前关闭了/proc/self/fd目录。#4120 (alesapin) - 修复了主键使用 String 时,String 到 UInt 的单调转换问题。#3870 (Winter Zhang)
- 修复了整数转换函数单调性计算中的 error。#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)
- 修复了启用
compile设置时,使用 LowCardinality 键进行专用聚合的问题。#3886 (KochetovNicolai) - 修复复制表查询中用户和密码的转发问题。#3957 (alesapin) (小路)
- 修复了一个极少发生的竞态条件:重新加载字典时,列出 Dictionary database 中的表可能会触发该问题。#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。启用后,复制表会将 compact part 的元数据存储在单个 part znode 中。这可以显著减小 ZooKeeper 快照的大小 (尤其是在表包含很多列时) 。请注意,启用此设置后,将无法再降级到不支持它的版本。#3960 (Alex Zatelepin) - 为函数
sequenceMatch和sequenceCount新增了基于 DFA 的实现,适用于 pattern 不包含时间信息的情况。#4004 (Léo Ercolanelli) - 提升了整数序列化的性能。#3968 (Amos Bird)
- 对 PODArray 左侧补零,使得 -1 位置的元素始终有效且为 0。这用于无分支计算 offset。#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)
- 如果用户不想在 server Docker 镜像中对目录执行
chown,则可添加环境变量。#3967 (alesapin) - 在 clang 中启用了
-Weverything中的大部分警告。还启用了-Wpedantic。#3986 (alexey-milovidov) - 新增了几项仅在 clang 8 中可用的警告。 #3993 (alexey-milovidov)
- 使用共享链接时,应链接到
libLLVM,而不是各个单独的 LLVM 库。#3989 (Orivej Desh) - 为测试镜像添加了 Sanitizer 变量。#4072 (alesapin)
clickhouse-serverDebian 软件包会推荐安装libcap2-bin软件包,以便使用setcap工具设置能力。这是可选的。#4093 (alexey-milovidov)- 改进了编译时间,并修复了头文件包含问题。 #3898 (proller)
- 新增了哈希函数的性能测试。#3918 (filimonov)
- 修复了库之间的循环依赖问题。#3958 (proller)
- 改进了低可用内存情况下的编译。#4030 (proller)
- 添加了用于复现
jemalloc性能退化问题的测试脚本。#4036 (alexey-milovidov) - 修正了
dbms下注释和字符串字面量中的拼写错误。#4122 (maiha) - 修正了注释中的拼写错误。#4089 (Evgenii Pravda)