跳转到主要内容

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->tableBtableC->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)
  • 修复了在未使用 TABLEDICTIONARY 限定符的情况下使用 EXISTS 查询 (如 EXISTS t) 时会导致段错误的问题。#8213 (alexey-milovidov)
  • 修复了函数 randrandConstant 在参数为 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)
  • 现在已限制从 StorageFileStorageHDFS 读取时的流数量,以避免超出内存限制。#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 类型的索引支持 LowCardinalityNullable #7363 #7561 (Nikolai Kochetov)
  • 新增函数 isValidJSON,用于检查传入的字符串是否为有效的 JSON。#5910 #7293 (Vdimir)
  • 实现 arrayCompact 函数 #7328 (Memo)
  • 新增用于 Decimal 数值的 hex 函数。其行为类似于 hex(reinterpretAsString()),但不会删除末尾的零字节。#7355 (Mikhail Korotov)
  • 新增 arrayFillarrayReverseFill 函数,可用数组中前面/后面的其他元素替换元素。#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 功能

问题修复

  • 修复 Values 中的浮点数解析错误 #7817 #7870 (tavplubix)
  • 修复了在启用 trace_log 时可能出现的罕见死锁。#7838 (filimonov)
  • 当向 Kafka 表写入数据且存在从该表进行 SELECT 的 MV 时,防止消息重复 #7265 (Ivan)
  • 支持在 IN 中使用 Array(LowCardinality(Nullable(String)))。已解决 #7364 #7366 (achimbab)
  • 在 ODBC Bridge 中增加对 SQL_TINYINTSQL_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)

性能改进

构建/测试/打包改进

  • 新增对 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 发布 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 来源的字典添加两个配置选项:credentialshttp-headers#7092 (Guillaume Tassery)
  • 添加新的 ProfileEvent Merge,用于统计已启动的后台合并次数。 #7093 (Mikhail Korotov)
  • 添加 fullHostName 函数,返回完全限定域名。 #7263 #7291 (sundyli)
  • 添加函数 arraySplitarrayReverseSplit,可按“切分” 条件拆分数组。它们在处理时间序列时很有用。 #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)

构建/测试/打包改进

代码清理

  • 将配置仓库通用化,为字典 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)
  • 添加 bitmapMinbitmapMax 函数。#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)
  • 新增功能:对 Float32Float64 使用函数 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 BYWITH FILL 修饰符。 (续 #5069) #6610 (Anton Popov)
  • LIMITWITH 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)
  • 表函数 filehdfs 的路径现已支持通配符。如果路径中包含通配符,则该表为只读。用法示例: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.eventssystem.metrics 的值。#6363 #6467 (Nikita Mikhaylov) #6530 (alexey-milovidov)
  • 支持将 ClickHouse 文本日志写入 system.text_log 表。 #6037 #6103 (Nikita Mikhaylov) #6164 (alexey-milovidov)
  • 在堆栈跟踪中显示私有符号 (这是通过解析 ELF 文件的符号表实现的) 。如果存在调试信息,则会在堆栈跟踪中增加文件名和行号信息。通过为程序中的符号建立索引,加快了符号名称查找。新增了用于内部信息的 SQL 函数:demangleaddressToLine。为保持一致性,将函数 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)
  • 新增了两个函数:sigmoidtanh (对机器学习应用很有帮助) 。#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)
  • 新增聚合函数 quantilesExactInclusivequantilesExactExclusive,它们在 #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 功能

缺陷修复

  • 此版本还包含了 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.partssystem.parts_columns 进行 SELECT 引起。修复了在准备变更查询时的竞态条件。修复了对复制表执行 OPTIMIZE 以及并发修改操作 (如 ALTER) 导致的死锁。 #6514 (alexey-milovidov)
  • 移除了 MySQL 接口中的额外详细日志 #6389 (alexey-milovidov)
  • 恢复了在配置文件中将 ‘true’ 和 ‘false’ 解析为布尔型设置值的能力。#6278 (alesapin)
  • 修复 quantilemedian 函数处理 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)
  • 修复了 AggregateFunctionFactoryLowCardinality 类型转换的问题。此修复解决了 #6257#6281 (Nikolai Kochetov)
  • 修复了聚合函数 topKtopKWeighted 的异常行为,以及可能导致段错误的问题。#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 BYWITH ROLLUPWITH 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_speedmax_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)
  • 修复了从字符串解析列列表时,若类型中包含逗号会导致报错的问题 (该问题与 FileURLHDFS 存储有关) #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)
  • 允许 ATTACH live views (例如在服务器启动时) ,而不受 allow_experimental_live_view 设置影响。#6754 (alexey-milovidov)
  • 对于由 query profiler 收集的堆栈跟踪,不应包含 query profiler 自身生成的堆栈帧。#6250 (alexey-milovidov)
  • 现在,表函数 valuesfileurlhdfs 已支持 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 语句中 prewherewhere 子句的条件。#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_DATATYPE_MISMATCH 错误代码对应的 HTTP 状态码已从默认的 500 Internal Server Error 调整为 400 Bad Request#6271 (Alexander Rodin)
  • 将 Join 对象从 ExpressionAction 移至 AnalyzedJoinExpressionAnalyzerExpressionAction 不再感知 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 BYORDER 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)
  • collectUsedColumnsExpressionAnalyzer 移至 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.ounable to find library -lc 等错误。#6309 (alexey-milovidov)
  • 进一步加强了对可能来自恶意副本的输入的验证。#6303 (alexey-milovidov)
  • 现在,clickhouse-client 软件包中已包含 clickhouse-obfuscator 文件。在早期版本中,它的名称是 clickhouse obfuscator (中间有空格) 。#5816 #6609 (dimarub2000)
  • 修复了一种死锁问题:当至少有两个查询以不同顺序读取至少两个表,且另一个查询对其中一个表执行 DDL 操作时,就可能出现该死锁。还修复了另一种非常罕见的死锁。#6764 (alexey-milovidov)
  • system.processessystem.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_mskafka_max_wait_msconnection_pool_max_wait_ms 设置,以消除歧义。#6692 (alexey-milovidov)
  • ExpressionAnalyzer 中提取出 SelectQueryExpressionAnalyzer。保留 ExpressionAnalyzer 用于非 SELECT 查询。#6499 (Artem Zuikov)
  • 删除了重复的输入和输出格式。#6239 (Nikolai Kochetov)
  • 允许用户在连接级别覆盖 poll_intervalidle_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)
  • explogsigmoidtanh 函数使用 FastOps 库。FastOps 是 Michael Parakhin (Yandex CTO) 开发的快速向量数学库。explog 函数的性能提升超过 6 倍。接受 Float32 参数的 explog 函数将返回 Float32 (在之前的版本中它们始终返回 Float64) 。现在 exp(nan) 可能返回 infexplog 函数的结果可能不是最接近真实值的机器可表示数。#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)

构建/测试/打包改进

不向后兼容的变更

  • 已移除很少使用的表函数 catBoostPool 和存储 CatBoostPool。如果您使用过此表函数,请发送电子邮件至 feedback@clickhouse.com。请注意,CatBoost 集成仍然保留,并将继续受支持。#6279 (alexey-milovidov)
  • 默认禁用 ANY RIGHT JOINANY 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)
  • MySQLODBCJDBC 表函数的查询转换现在可以正确处理带有多个 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.partssystem.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 上保持此设置一致 (需要在滚动更新前完成设置) 。该设置会对 JSONEachRowCSV* 格式中省略字段的复杂默认 expression 进行计算。这本应是符合预期的行为,但可能会带来可忽略的性能差异。#6043 (Artem Zuikov), #5625 (akuzm)

Experimental 功能

  • 新的查询处理管道。使用 experimental_use_processors=1 选项启用。使用风险自负。#4914 (Nikolai Kochetov)

缺陷修复

  • 此版本已修复 Kafka 集成。
  • 修复了在 DoubleDelta 值较大时 Int64DoubleDelta 编码问题,并改进了针对随机数据的 Int32 DoubleDelta 编码。#5998 (Vasily Nemkov)
  • 修复了在将设置 merge_tree_uniform_read_distribution 设为 0 时,max_rows_to_read 被高估的问题。#6019 (alexey-milovidov)

改进

  • 如果 config.d 文件与配置文件没有对应的根元素,则会抛出异常 #6123 (dimarub2000)

性能改进

  • 优化 count()。现在会尽可能使用最小的列。#6028 (Amos Bird)

构建/测试/打包改进

  • 在性能测试中报告内存使用情况。#5899 (akuzm)
  • 修复使用外部 libcxx 时的构建问题 #6010 (Ivan)
  • 修复使用 rdkafka 库时的共享构建问题 #6101 (Ivan)

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

缺陷修复

  • 手动存储 Kafka 消息的偏移量,以便一次性提交所有分区的偏移量。修复了“一个消费者 - 多个分区”场景下可能发生的重复问题。#6872 (Ivan)

ClickHouse 版本 19.11.9.52,2019-09-6

安全修复

  • 如果攻击者对 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.partssystem.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)
  • 修复聚合函数 topKtopKWeighted 中的错误行为以及可能发生的段错误。 #6404 (CurtizJ)
  • 不再在 system.columns 表中暴露虚拟列。这是保持向后兼容所必需的。 #6406 (alexey-milovidov)
  • 修复复杂键缓存字典中字符串字段的内存分配问题。 #6447 (alesapin)
  • 修复为 Replicated*MergeTree 表创建新副本时启用自适应粒度的问题。 #6452 (alesapin)
  • 修复读取 Kafka 消息时出现的无限循环。 #6354 (abyss7)
  • 修复了恶意构造的查询可能因 SQL 解析器中的栈溢出导致服务器崩溃的问题,以及 MergeDistributed 表中可能发生栈溢出的问题 #6433 (alexey-milovidov)
  • 修复小序列上的 Gorilla 编码错误。 #6444 (Enmk)

改进

  • 允许用户在连接级别覆盖 poll_intervalidle_connection_timeout 设置。#6230 (alexey-milovidov)

ClickHouse 发行版 19.11.5.28,2019-08-05

缺陷修复

  • 修复了服务器过载时查询可能挂起的问题。#6301 (alexey-milovidov)
  • 修复了 yandexConsistentHash 函数中的 FPE 问题。此修复解决了 #6304#6126 (alexey-milovidov)
  • 修复了 AggregateFunctionFactoryLowCardinality 类型转换的缺陷。此修复解决了 #6257#6281 (Nikolai Kochetov)
  • 修复了配置文件中将 truefalse 字符串解析为 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 BYWITH ROLLUPWITH 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_handlestartup() 中才初始化,MergeTreeBlockOutputStream::write() 可能会在它初始化之前尝试使用它。现在会先检查它是否已初始化。#6080 (Ivan)

构建/测试/打包改进

向后不兼容的变更

  • 此版本中的 Kafka 无法正常工作。

ClickHouse 发行版 19.11.3.11,2019-07-18

新功能

  • 新增对预处理语句的支持。#5331 (Alexander) #5630 (alexey-milovidov)
  • DoubleDeltaGorilla 列编解码器 #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)
  • 修复 ColumnConstColumnNullable 组合时 coalesce 的问题,并作了相关修改。#5755 (Artem Zuikov)
  • 修复 ReadBufferFromKafkaConsumer:即使在 commit() 之前已发生停滞,也能在 commit() 之后继续读取新消息 #5852 (Ivan)
  • 修复了在对右表中的 Nullable 键进行连接时,FULLRIGHT JOIN 结果不正确的问题。#5859 (Artem Zuikov)
  • 修复了低优先级查询可能无限休眠的问题。#5842 (alexey-milovidov)
  • 修复了一个竞态条件,导致执行 SYSTEM FLUSH LOGS 查询后,某些查询可能不会出现在 query_log 中。#5456 #5685 (Anton Popov)
  • 修复了 ClusterCopier 中的 heap-use-after-free ASan 警告,该警告是由于 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 数据类型,作为 Enum8Enum16 的别名。#5886 (dimarub2000)
  • T64 codec 的完整按位转置变体。配合 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)

构建/测试/打包改进

向后不兼容的变更

  • Kafka 在此版本中不可用。
  • 默认对新的 MergeTree 表启用 adaptive_index_granularity = 10MB。如果你在 19.11+ 版本中创建了新的 MergeTree 表,将无法降级到 19.6 之前的版本。#5628 (alesapin)
  • 移除了 Yandex.Metrica 使用的、已废弃且未文档说明的嵌入式字典。函数 OSInSEInOSToRootSEToRootOSHierarchySEHierarchy 已不再可用。如果你正在使用这些函数,请发送电子邮件至 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)

改进

性能改进

  • 新增了在 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)
  • 修复了适用于 Pretty format 的 “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 类型实现 dictGetdictGetOrDefault 函数。#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_formatlow_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)

构建/测试/打包改进

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 BYLIMIT m OFFSET n BY 语法,用于为 LIMIT BY 子句设置 n 的偏移量。#5138 (Anton Popov)
  • 新增了数据类型 SimpleAggregateFunction,支持在 AggregatingMergeTree 中使用轻量聚合列。它只能与 anyanyLastsumminmax 等简单函数配合使用。#4629 (Boris Granveaud)
  • 新增了对函数 ngramDistance 中非常量参数的支持 #5198 (Danila Kutenin)
  • 新增函数 skewPopskewSampkurtPopkurtSamp,分别用于计算总体偏度、样本偏度、峰度和样本峰度。#5200 (hcz)
  • 支持重命名 MaterializeView 存储。#5209 (Guillaume Tassery)
  • 新增了一个支持通过 MySQL 客户端连接到 ClickHouse 的 server。#4715 (Yuriy Baranov)
  • 新增 toDecimal*OrZerotoDecimal*OrNull 函数。#5291 (Artem Zuikov)
  • 函数 quantilequantilesmedianquantileExactWeightedquantilesExactWeighted、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)
  • 新增了 geohashEncodegeohashDecode 函数。#5003 (Vasily Nemkov)
  • 新增聚合函数 timeSeriesGroupSum,可对样本时间戳不对齐的不同时间序列进行聚合。它会在两个样本时间戳之间使用线性插值,然后将各个时间序列求和。新增聚合函数 timeSeriesGroupRateSum,用于计算时间序列的速率,并将各个速率求和。#4542 (Yangkuan Liu)
  • 新增了函数 IPv4CIDRtoIPv4RangeIPv6CIDRtoIPv6Range,用于根据 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)
  • 新增了函数 JSONExtractRawJSONExtractKeyAndValues。将函数 jsonExtract<type> 重命名为 JSONExtract<type>。当出现问题时,这些函数会返回相应的值,而不是 NULL。修改了函数 JSONExtract,现在它会从最后一个参数获取返回类型,且不再注入 Nullable。实现了在 AVX2 指令不可用时回退到 RapidJSON。Simdjson 库已更新到新版本。#5235 (Vitaly Baranov)
  • 现在,ifmultiIf 函数不再取决于条件的 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 重命名为 simpleLinearRegressionLinearRegression 重命名为 linearRegressionLogisticRegression 重命名为 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 问题,该问题会导致 uniqHLLuniqCombined 聚合函数以及 log 等数学函数计算错误。#5354 (alexey-milovidov)
  • 修复了 JSON 函数中 const/nonconst 混合场景的处理问题。#5435 (Vitaly Baranov)
  • 修复了 retention 函数。现在,数据行中所有满足条件的项都会被加入数据状态中。#5119 (小路)
  • 修复了 quantileExact 处理 Decimal 时的结果类型问题。#5304 (Artem Zuikov)

文档

构建/测试/打包改进

ClickHouse 发行版 19.7

ClickHouse 发行版 19.7.5.29,2019-07-05

缺陷修复

ClickHouse 发行版 19.7.5.27,发布于 2019-06-09

新功能

  • 新增了 bitmap 相关函数 bitmapHasAnybitmapHasAll,对应于数组的 hasAnyhasAll 函数。#5279 (Sergi Vladykin)

缺陷修复

  • 修复 minmax INDEX 遇到 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)

性能改进

文档

构建/测试/打包改进

ClickHouse 发行版 19.6

ClickHouse 发行版 19.6.3.18,2019-06-13

缺陷修复

  • 修复了来自表函数 mysqlodbc 及其对应表引擎的查询中,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 功能

  • 为 MergeTree* 表家族新增设置 index_granularity_bytes (自适应索引粒度) 。#4826 (alesapin)

改进

  • 为函数 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)

性能改进

不兼容的变更

  • 为保持一致,HTTP 请求头 Query-Id 已重命名为 X-ClickHouse-Query-Id#4972 (Mikhail)

缺陷修复

  • 修复了 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 DISTINCTJOIN 一起使用时可能返回错误结果的问题。#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

缺陷修复

ClickHouse 版本 19.5.2.6,2019-04-15

新功能

改进

  • topKtopKWeighted 现已支持自定义 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,并新增了更多带有 CaseInsensitiveUTF 的函数。#4602 (Danila Kutenin)
  • 改进了数据跳过索引的计算。#4640 (Nikita Vasilev)
  • 将普通列、DEFAULTMATERIALIZEDALIAS 列统一保留在一个列表中 (修复了问题 #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)
  • hasAnyhasAll 函数传入错误的参数可能会导致段错误。#4698 (alexey-milovidov)
  • 执行 DROP DATABASE dictionary 查询时,可能会发生死锁。 #4701 (alexey-milovidov)
  • 修复 medianquantile 函数中的未定义行为。#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_expressionJOIN 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 执行 DROPTRUNCATEOPTIMIZE 查询时的重复执行问题。#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 更名为 multiSearchAllPositionsmultiSearch 更名为 multiSearchAnyfirstMatch 更名为 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_PROTOBUFENABLE_PARQUETENABLE_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 (尽管会拦截 mmapmunmap) ,这会导致误报。已修复有状态测试中的 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)
  • hasAnyhasAll 函数传入错误参数可能导致段错误。#4698 (alexey-milovidov)
  • 执行 DROP DATABASE dictionary 查询时,可能发生死锁。#4701 (alexey-milovidov)
  • 修复 medianquantile 函数中的未定义行为。#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_expressionJOIN 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 时,DROPTRUNCATEOPTIMIZE 查询重复的问题。#4991 (alesapin)

改进

  • 将普通列、DEFAULTMATERIALIZEDALIAS 列统一保留在同一个列表中 (修复了问题 #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 发行版 19.4.2.7,2019-03-30

缺陷修复

  • 修复了极少数情况下读取 Array(LowCardinality) 列时出现的问题:当该列包含一长串空数组时会发生此问题。#4850 (Nikolai Kochetov)

ClickHouse 发行版 19.4.1.3,2019-03-19

缺陷修复

  • 修复了同时包含 LIMIT BYLIMIT 的远程查询。此前,如果远程查询中同时使用了 LIMIT BYLIMITLIMIT 可能会在 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_speedmax_execution_speed_bytes,以限制资源使用。新增 min_execution_speed_bytes 设置,作为对 min_execution_speed 的补充。#4430 (Winter Zhang)
  • 实现了函数 flatten#4555 #4409 (alexey-milovidov, kzon)
  • 新增函数 arrayEnumerateDenseRankedarrayEnumerateUniqRanked (类似于 arrayEnumerateUniq,但允许细粒度调整深入查看多维数组时的数组深度) 。#4475 (proller) #4601 (alexey-milovidov)
  • 支持多个 JOIN,但有一些限制:不支持星号,不支持在 ON/WHERE/GROUP BY/… 中使用复杂别名。#4462 (Artem Zuikov)

问题修复

  • 此版本还包含 19.3 和 19.1 版本中的所有错误修复。
  • 修复了数据跳过索引中的一个错误:INSERT 后粒度顺序不正确。#4407 (Nikita Vasilev)
  • 修复了 NullableLowCardinality 列上的 set 索引问题。此前,对带有 NullableLowCardinality 列的 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,直到我们拥有自己的 llvm contrib,并能使用 clangasan 进行测试。 #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_NAMESPACE macro 命名空间前缀。当 lz4 为外部库时,xxHash 也必须作为外部库提供,依赖它的组件也必须链接到它。 #4495 (Orivej Desh)
  • 修复了 quantileTiming aggregate 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 发行版 19.3.7,2019-03-12

缺陷修复

  • 修复了 #3920 中的错误。该错误会导致随机缓存损坏 (报错信息为 Unknown codec family codeCannot seek through file) 以及段错误。该缺陷最早出现在 19.1 版本中,并在截至 19.1.10 和 19.3.6 的版本中一直存在。#4623 (alexey-milovidov)

ClickHouse 19.3.6 发行版,2019-03-02

缺陷修复

  • 当线程池中的线程数超过 1000 时,线程退出时可能会触发 std::terminateAzat 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.cppvoid 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_partlatest_fail_timelatest_fail_reason 字段,以便更方便地排查问题。#4287 (Alex Zatelepin)
  • 新增了聚合函数 entropy,用于计算香农熵。#4238 (Quid37)
  • 现在可以直接向 server 发送 INSERT INTO tbl VALUES (.... 查询,而无需拆分为 querydata 两个分片。#4301 (alesapin)
  • 新增了 arrayWithConstant 函数的通用实现。#4322 (alexey-milovidov)
  • 实现了 NOT BETWEEN 比较运算符。#4228 (Dmitry Naumov)
  • 实现了 sumMapFiltered,从而可以限制 sumMap 仅对指定键的值求和。#4129 (Léo Ercolanelli)
  • mysql table function 现已支持 Nullable 类型。#4198 (Emmanuel Donin de Rosière)
  • LIMIT clause 现已支持任意常量表达式。#4246 (k3box)
  • 新增了聚合函数 topKWeighted,可接收一个额外的 (无符号整数) 权重 argument。#4245 (Andrew Golman)
  • StorageJoin 现在支持 join_any_take_last_row setting,允许覆盖相同 key 的现有值。#3973 (Amos Bird
  • 新增了函数 toStartOfInterval#4304 (Vitaly Baranov)
  • 新增了 RowBinaryWithNamesAndTypes format。#4200 (Oleg V. Kozlyuk)
  • 新增了 IPv4IPv6 数据类型,并改进了 IPv* 函数的实现效率。#3669 (Vasily Nemkov)
  • 新增了函数 toStartOfTenMinutes()#4298 (Vitaly Baranov)
  • 新增了 Protobuf output format。#4005 #4158 (Vitaly Baranov)
  • 为用于数据导入 (INSERTs) 的 HTTP interface 新增了对 brotli 的支持。#4235 (Mikhail)
  • 当用户在命令行客户端中输错函数名或类型名时,新增了提示信息。#4239 (Danila Kutenin)
  • 在 Server 的 HTTP 响应请求头中新增了 Query-Id#4231 (Mikhail)

Experimental 功能

问题修复

  • 修复了 JOIN ON 部分中因重复列而报出的 Not found column 问题。#4279 (Artem Zuikov)
  • 使 START REPLICATED SENDS 命令能够启动复制发送。 #4229 (nvartolomei)
  • 修复了以 Array(LowCardinality) 作为参数的 aggregate functions 执行问题。#4055 (KochetovNicolai)
  • 修复了执行 INSERT ... SELECT ... FROM file(...) 查询时的错误行为:当文件格式为 CSVWithNamesTSVWIthNames,且首行数据缺失时,会出现该问题。#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 received error。还修复了使用 MySQL ODBC Driver 时发生的段错误。#4170 (alexey-milovidov)
  • 修复了在条件运算符 (函数 if) 的分支中使用 DateDateTime 参数时返回结果不正确的问题。为函数 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)
  • 修复了 DateDateTime 比较错误的问题。#4237 (valexey)
  • 修复了在未定义行为检测器下运行的模糊测试:为 quantile*Weighted 函数家族添加了参数类型检查。#4145 (alexey-milovidov)
  • 修复了一个罕见的竞态条件:删除旧数据分区片段时可能会因 File not found 错误而失败。#4378 (alexey-milovidov)
  • 修复安装包中缺少 /etc/clickhouse-server/config.xml 的问题。#4343 (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 现在只会返回左表中的 ab 列。#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 JOINSELECT *,且将设置 asterisk_left_columns_only 设为 1 时,可能会出现 Column ... queried more than once (罕见情况) 。该问题在 19.3 及更高版本中不存在。 6bac7d8d (Artem Zuikov)

ClickHouse 发行版 19.1.13, 2019-03-12

此版本所含补丁与 19.3.7 完全相同。

ClickHouse 发行版 19.1.10,2019-03-03

此版本包含与 19.3.6 完全相同的补丁。

ClickHouse 发行版 19.1

ClickHouse 发行版 19.1.9,2019-02-21

缺陷修复

  • 修复了因 send_logs_level 设置实现错误而导致与旧版本不兼容的问题。#4445 (alexey-milovidov)
  • 修复了因列注释而引入的表函数 remote 与旧版本不兼容的问题。#4446 (alexey-milovidov)

ClickHouse 发行版 19.1.8,2019-02-16

缺陷修复

  • 修复在缺少 /etc/clickhouse-server/config.xml 时安装包出现的问题。#4343 (proller)

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(...) 查询时的错误行为:当文件采用 CSVWithNamesTSVWIthNames 格式且首行数据缺失时,会出现该问题。#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)
  • 修复了 DateDateTime 比较错误的问题。#4237 (valexey)
  • 修复了在条件运算符 (函数 if) 的分支中使用 DateDateTime 参数时结果不正确的问题。为函数 if 添加了通用处理。#4243 (alexey-milovidov)

ClickHouse 发行版 19.1.6,发布于 2019-01-24

新功能

  • 为表新增按列自定义压缩编解码器的功能。#3899 #4111 (alesapin, Winter Zhang, Anatoly)
  • 新增压缩编解码器 Delta#4052 (alesapin)
  • 允许通过 ALTER 修改压缩编解码器。#4054 (alesapin)
  • 为兼容 SQL 标准,新增函数 leftrighttrimltrimrtrimtimestampaddtimestampsub#3826 (Ivan Blinkov)
  • 支持向 HDFS 表和 hdfs 表函数写入。#4084 (alesapin)
  • 新增用于在大型 haystack 中搜索多个常量字符串的函数:multiPositionmultiSearchfirstMatch,以及它们的 -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)
  • 新增函数 filesystemAvailablefilesystemFreefilesystemCapacity#4097 (Boris Granveaud)
  • 新增哈希函数 xxHash64xxHash32#3905 (filimonov)
  • 新增 gccMurmurHash 哈希函数 (GCC 风格的 Murmur 哈希) ,其使用与 gcc 相同的哈希种子。#4000 (sundyli)
  • 新增哈希函数 javaHashhiveHash#3811 (shangshujie365)
  • 新增表函数 remoteSecure。该函数与 remote 类似,但使用安全连接。#4088 (proller)

Experimental 功能

  • 新增了多个 JOIN 的模拟功能 (allow_experimental_multiple_joins_emulation setting) 。#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)
  • 修复了在某些参数无效时,arrayEnumerateUniqarrayEnumerateDense 函数中发生的段错误。#3909 (alexey-milovidov)
  • 修复 StorageMerge 中的 UB 问题。#3910 (Amos Bird)
  • 修复了函数 addDayssubtractDays 中的段错误。#3913 (alexey-milovidov)
  • 已修复错误:函数 roundfloortruncceil 在参数为整数且标度为较大负值时,可能返回错误结果。#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.YYYYDD.MM.YYDD-MM-YYYYDD-Mon-YYYYDD/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)
  • 为函数 sequenceMatchsequenceCount 新增了基于 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-server Debian 软件包会推荐安装 libcap2-bin 软件包,以便使用 setcap 工具设置能力。这是可选的。#4093 (alexey-milovidov)
  • 改进了编译时间,并修复了头文件包含问题。 #3898 (proller)
  • 新增了哈希函数的性能测试。#3918 (filimonov)
  • 修复了库之间的循环依赖问题。#3958 (proller)
  • 改进了低可用内存情况下的编译。#4030 (proller)
  • 添加了用于复现 jemalloc 性能退化问题的测试脚本。#4036 (alexey-milovidov)
  • 修正了 dbms 下注释和字符串字面量中的拼写错误。#4122 (maiha)
  • 修正了注释中的拼写错误。#4089 (Evgenii Pravda)
最后修改于 2026年6月10日