跳到主要内容
跳到主要内容

2019 更新日志

ClickHouse 版本 19.17

ClickHouse 版本 19.17.6.36,2019-12-27

缺陷修复

  • 修复了 decompress 中潜在的缓冲区溢出问题。恶意用户可能传入伪造的压缩数据,从而导致对缓冲区的越界读取。该问题由 Yandex 信息安全团队的 Eldar Zaitov 发现。#8404 (alexey-milovidov)
  • 修复了在以下情况下可能发生的服务器崩溃(std::terminate)问题:当服务器无法以 JSON 或 XML 格式发送或写入包含 String 类型(需要进行 UTF-8 校验)值的数据时,或在使用 Brotli 算法压缩结果数据时,或在其他一些罕见情况下。 #8384 (alexey-milovidov)
  • 修复了以 ClickHouse 中的 VIEW 作为源的固定字典,现在读取此类字典时不会再触发 There is no query 错误。#8351 (Nikolai Kochetov)
  • 修复了根据 users.xml 中指定的 host_regexp 判断客户端主机是否被允许的逻辑。#8241, #8342 (Vitaly Baranov)
  • 现在,对分布式表执行 RENAME TABLE 时,会在将数据发送到分片之前,先重命名包含已插入数据的目录。这样修复了连续重命名 tableA->tableBtableC->tableA 时出现的问题。 #8306 (tavplubix)
  • 通过 DDL 查询创建的 range_hashed 外部字典现在允许使用任意数值类型的区间。#8275 (alesapin)
  • 修复了 INSERT INTO table SELECT ... FROM mysql(...) 表函数。#8234tavplubix
  • 修复了在向不存在的文件中执行 INSERT INTO TABLE FUNCTION file() 时出现的段错误。现在在这种情况下会先创建该文件,然后再处理插入操作。#8177 (Olga Khvostikova)
  • 修复了在聚合 bitmap 与标量 bitmap 求交时出现的 bitmapAnd 错误。 #8082 (Yue Huang)
  • 修复了当 EXISTS 查询未带 TABLEDICTIONARY 限定符(如 EXISTS t)时导致的段错误。 #8213 (alexey-milovidov)
  • 在参数可为空的情况下,修正了函数 randrandConstant 的返回类型。现在这些函数始终返回 UInt32,而不会返回 Nullable(UInt32)#8204 (Nikolai Kochetov)
  • 修复了 DROP DICTIONARY IF EXISTS db.dict,现在即使 db 不存在也不会抛出异常。 #8185 (Vitaly Baranov)
  • 如果由于服务器崩溃导致表未完全删除,服务器将尝试恢复并加载该表 #8176 (tavplubix)
  • 修复了在分布式表上执行简单的 count 查询时,当存在两个以上分片本地表时的问题。 #8164 (小路)
  • 修复了 DB::BlockStreamProfileInfo::calculateRowsBeforeLimit() 中导致数据竞争的问题 #8143 (Alexander Kazakov)
  • 修复了在合并指定分片后立即执行的 ALTER table MOVE part,该问题可能会导致移动指定分片被合并到的目标分片。现在它会正确地只移动指定的分片。 #8104 (Vladimir Chebotarev)
  • 现在可以将字典的表达式指定为字符串。对于在从非 ClickHouse 数据源提取数据时计算属性的场景,这非常有用,因为它允许为这些表达式使用非 ClickHouse 语法。#8098 (alesapin)
  • 修复了 clickhouse-copier 中由于 ZXid 溢出而导致的一个极其罕见的竞争条件。 #8088 (Ding Xiang Fei)
  • 修复了一个错误:在查询失败之后(例如由于 "Too many simultaneous queries"),不会读取外部表信息;随后下一个请求会将这些信息解释为下一条查询的开头,从而引发类似 Unknown packet from client 的错误。 #8084 (Azat Khuzhin)
  • 避免在出现 "Unknown packet X from server" 错误时发生空指针解引用 #8071 (Azat Khuzhin)
  • 恢复对所有 ICU 区域设置的支持,新增对常量表达式应用排序规则的支持,并在 system.collations 表中添加语言名称。 #8051 (alesapin)
  • 现在对从 StorageFileStorageHDFS 读取时的读取流数量进行了限制,以避免内存超限。#7981 (alesapin)
  • 修复了在无主键的 *MergeTree 表上执行的 CHECK TABLE 查询。 #7979 (alesapin)
  • 在没有 mutations 的情况下,从 part 名称中移除了 mutation 编号。此更改提升了与旧版本的兼容性。#8250 (alesapin)
  • 修复了一个 bug:由于某些已附加 part 的 data_version 大于表的 mutation 版本,导致这些 part 的变更被跳过。 #7812 (Zhichang Yu)
  • 允许在将数据分片移动到其他设备后,即使存在冗余副本也能启动服务器。 #7810 (Vladimir Chebotarev)
  • 修复了在使用聚合函数列时可能出现的错误 “Sizes of columns does not match”。 #7790 (Boris Granveaud)
  • 现在,如果将 WITH TIES 与 LIMIT BY 一起使用,将会抛出异常。现在也可以将 TOP 与 LIMIT BY 一起使用。#7637 (Nikita Mikhaylov)
  • 修复在字典配置了 invalidate_query 时的重载问题,该问题会导致更新停止,并在之前的更新尝试中抛出异常。 #8029 (alesapin)

ClickHouse 版本 19.17.4.11,2019-11-22

向后不兼容的变更

  • 为了获得更好的性能,使用列而不是 AST 来存储标量子查询结果。在 19.17 中新增了设置 enable_scalar_subquery_optimization,且默认开启。这会在从早期版本升级到 19.17.2 或 19.17.3 时导致类似这里的错误。此设置在 19.17.4 中默认改为禁用,以便可以从 19.16 及更早版本无错误地升级。 #7392 (Amos Bird)

新功能

  • 支持使用 DDL 查询创建字典。#7360 (alesapin)
  • 使 bloom_filter 类型索引支持 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 引擎添加 _shard_num 虚拟列。#7624 (Azat Khuzhin)

实验性功能

Bug 修复

  • 修复 Values 中的浮点数解析错误 #7817 #7870 (tavplubix)
  • 修复在启用 trace_log 时可能发生的罕见死锁。#7838 (filimonov)
  • 在向存在任意从其读取的物化视图(MV)的 Kafka 表写入数据时,防止消息重复 #7265 (Ivan)
  • IN 中添加对 Array(LowCardinality(Nullable(String))) 的支持。解决 #7364 #7366achimbab
  • 在 ODBC Bridge 中新增对 SQL_TINYINTSQL_BIGINT 的处理,并修复对 SQL_FLOAT 数据源类型的处理。#7491 (Denis Glazachev)
  • 修复对空 decimal 列进行聚合(avg 和分位数)时的问题 #7431Andrey Konyaev
  • 修复对包含 MATERIALIZED 列的 Distributed 表执行 INSERT 时的问题 #7377 (Azat Khuzhin)
  • 当分区的部分数据已在目标磁盘或卷上时,使 MOVE PARTITION 也能正常工作 #7434 (Vladimir Chebotarev)
  • 修复了在多磁盘配置中,ReplicatedMergeTree 在执行 mutation 过程中创建硬链接失败的问题。 #7558 (Vladimir Chebotarev)
  • 修复了在 MergeTree 上执行 mutation 时,如果整个 part 保持不变且在另一块磁盘上寻找最佳存储位置时出现的 bug #7602 (Vladimir Chebotarev)
  • 修复了未能从磁盘配置中读取 keep_free_space_ratio 的问题 #7645 (Vladimir Chebotarev)
  • 修复当表只包含 Tuple 列或具有复杂路径的列时出现的 bug。修复了 7541#7545alesapin
  • 不要在 max_memory_usage 限制中将 Buffer 引擎的内存计入统计 #7552 (Azat Khuzhin)
  • 修复按 tuple() 排序的 MergeTree 表中最终标记的使用方式。在极少数情况下,这可能会在执行查询时导致 Can't adjust last granule 错误。 #7639 (Anton Popov)
  • 修复在带有谓词且该谓词包含需要上下文的操作(例如 JSON 函数)的 mutation 中的错误,该错误可能导致崩溃或奇怪的异常。 #7664 (alesapin)
  • 修复 data/shadow/ 目录中数据库和表名转义规则不一致的问题 #7575 (Alexander Burmak)
  • 在 RIGHT|FULL JOIN 中支持重复键,例如 ON t.x = u.x AND t.x = u.y。修复此情况下的崩溃问题。#7586 (Artem Zuikov)
  • 修复在使用 RIGHT 或 FULL JOIN 按表达式进行 JOIN 时出现的 Not found column <expression> in block 问题。#7641 (Artem Zuikov)
  • 再次尝试修复 PrettySpace 格式中的死循环 #7591 (Olga Khvostikova)
  • 修复 concat 函数在所有参数都是相同大小的 FixedString 类型时的错误。 #7635 (alesapin)
  • 修复了在使用单个参数定义 S3、URL 和 HDFS 存储时出现的异常。#7618 (Vladimir Chebotarev)
  • 修复带查询视图的 InterpreterSelectQuery 作用域问题 #7601 (Azat Khuzhin)

改进

  • 通过 ODBC-bridge 正确识别 Nullable 列并正确处理 NULL 值 #7402 (Vasily Nemkov)
  • 以原子方式写入当前批次数据用于分布式发送 #7600 (Azat Khuzhin)
  • 如果无法在查询中根据列名检测到对应的表,则抛出异常。#7358 (Artem Zuikov)
  • MergeTreeSettings 中添加 merge_max_block_size 设置 #7412 (Artem Zuikov)
  • 带有 HAVING 但没有 GROUP BY 的查询会假定按常量分组。因此,现在 SELECT 1 HAVING 1 会返回结果。#7496 (Amos Bird)
  • 支持像 python 一样将 (X,) 解析为元组。#7501, #7562 (Amos Bird)
  • 使 range 函数的行为尽可能接近 python 风格。#7518 (sundyli)
  • 为表 system.settings 添加 constraints#7553 (Vitaly Baranov)
  • 改进 tcp handler 的 Null 格式,因此可以通过 clickhouse-client 使用 select ignore(<expression>) from table format Null 来进行性能测量 #7606 (Amos Bird)
  • 类似 CREATE TABLE ... AS (SELECT (1, 2)) 的查询现在可以被正确解析 #7542 (hcz)

性能改进

构建/测试/打包改进

  • 增加对交叉编译为 AARCH64 CPU 架构的支持。重构打包脚本。#7370 #7539 (Ivan)
  • 在构建包时,将 darwin-x86_64 和 linux-aarch64 工具链解压到挂载的 Docker 卷中 #7534 (Ivan)
  • 更新二进制打包器(Binary Packager)的 Docker 镜像 #7474 (Ivan)
  • 修复在 macOS Catalina 上的编译错误 #7585 (Ernest Poletaev)
  • 对查询分析逻辑进行部分重构:将复杂类拆分为多个简单类。#7454 (Artem Zuikov)
  • 修复在不包含子模块时的构建问题 #7295 (proller)
  • 改进 CMake 文件中的 add_globs #7418 (Amos Bird)
  • 删除 unwind 目标中硬编码的路径 #7460 (Konstantin Podshumok)
  • 允许在不使用 SSL 的情况下使用 MySQL 格式 #7524 (proller)

其他

ClickHouse Release 19.16

ClickHouse Release 19.16.14.65, 2020-03-25

  • 修复了在对多参数(三元)逻辑运算符(参数数量大于 10)进行批量计算时的一个错误。#8718Alexander Kazakov)该错误修复根据 Altinity 的特别请求回溯移植到了 19.16 版本。

ClickHouse Release 19.16.14.65, 2020-03-05

  • 修复了分布式子查询与旧版 CH 不兼容的问题。修复 #7851 (tabplubix)
  • 在执行 CREATE 查询时,对存储引擎参数中的常量表达式进行折叠。将空的数据库名替换为当前数据库。修复 #6508#3492。同时修复了在 ClickHouseDictionarySource 中检查本地地址的问题。 #9262 (tabplubix)
  • 现在,*MergeTree 表引擎族中的后台合并操作,能够更精确地保持存储策略各卷的顺序。 #8549Vladimir Chebotarev
  • 防止在极少数情况下,在读取后缀之后但在提交之前抛出异常时导致 Kafka 中数据丢失。修复 #9378。相关问题:#7175 #9507 (filimonov)
  • 修复了当尝试使用/删除使用错误参数创建的 Kafka 表时,会导致服务器终止的错误。修复 #9494。合并了 #9507#9513 (filimonov)
  • 允许在 Kafka 表之上的子查询中使用 MaterializedView#8197filimonov

新功能

  • 新增 deduplicate_blocks_in_dependent_materialized_views 选项,用于控制向带有物化视图的表进行幂等插入时的行为。该新特性根据 Altinity 的特别请求被加入到了此错误修复版本中。 #9070 (urykhy)

ClickHouse Release 19.16.2.2, 2019-10-30

向后不兼容变更

  • 为 count/counIf 补充缺失的参数个数(arity)校验。 #7095 #7298Vdimir
  • 移除已废弃的 asterisk_left_columns_only 设置(默认已禁用)。 #7335Artem Zuikov
  • Template 数据格式所使用的格式字符串现在需在文件中进行指定。 #7118 (tavplubix)

新功能

  • 引入 uniqCombined64(),用于计算大于 UINT_MAX 的基数。 #7213, #7222 (Azat Khuzhin)
  • 支持在 Array 列上使用 Bloom 过滤器索引。 #6984 (achimbab)
  • 新增函数 getMacro(name),返回服务器配置中对应 <macros> 的值,类型为 String#7240 (alexey-milovidov)
  • 为基于 HTTP 源的字典设置两个配置项:credentialshttp-headers#7092 (Guillaume Tassery)
  • 新增 ProfileEvent Merge,用于统计启动的后台合并次数。 #7093 (Mikhail Korotov)
  • 新增 fullHostName 函数,返回完全限定域名(FQDN)。 #7263 #7291 (sundyli)
  • 新增函数 arraySplitarrayReverseSplit,用于按照“切断”条件拆分数组。 它们在处理时间序列时非常有用。 #7294 (hcz)
  • 新增函数,用于在 multiMatch 系列函数中返回所有匹配索引组成的 Array#7299 (Danila Kutenin)
  • 新增数据库引擎 Lazy,针对存储大量小型 Log 引擎表进行了优化。 #7171 (Nikita Vasilev)
  • 为 bitmap 列新增聚合函数 groupBitmapAndgroupBitmapOrgroupBitmapXor#7109 (Zhichang Yu)
  • 新增聚合函数组合子 -OrNull-OrDefault,在没有可聚合数据时返回 null 或默认值。 #7331 (hcz)
  • 引入 CustomSeparated 数据格式,支持自定义转义和 分隔符规则。 #7118 (tavplubix)
  • 支持使用 Redis 作为外部字典的数据源。 #4361 #6962 (comunodi, Anton Popov)

Bug 修复

  • 修复在查询包含 WHERE IN (SELECT ...) 子句且使用 optimize_read_in_order 时得到错误查询结果的问题。#7371Anton Popov
  • 禁用依赖于项目外部文件的 MariaDB 身份验证插件。 #7140Yuriy Baranov
  • 修复在使用函数 now(), today(), yesterday(), randConstant() 时,极少数情况下可能出现的异常: Cannot convert column ... because it is constant but values of constants are different in source and result#7156Nikolai Kochetov
  • 修复使用 HTTP keep alive 超时时间而非 TCP keep alive 超时时间的问题。 #7351Vasily Nemkov
  • 修复在 groupBitmapOr 中的段错误(问题 #7109)。 #7289Zhichang Yu
  • 对于物化视图,在所有数据写入完成后才对 Kafka 执行提交操作。 #7175Ivan
  • 修复 system.part_log 表中错误的 duration_ms 值。原来的值偏差了十倍。 #7172Vladimir Chebotarev
  • 快速修复 LIVE VIEW 表中的崩溃问题,并重新启用所有 LIVE VIEW 测试。 #7201 (vzakaznikov)
  • 在 MergeTree 数据片段的 min/max 索引中正确序列化 NULL 值。 #7234Alexander Kuzmenkov
  • 当通过 CREATE TABLE AS 创建表时,不再将虚拟列写入 .sql 元数据。 #7183Ivan
  • 修复在执行 ATTACH PART 查询时发生的段错误。 #7185 (alesapin)
  • 修复由于对空 IN 子查询和空 INNER/RIGHT JOIN 的优化导致某些查询返回错误结果的问题。 #7284Nikolai Kochetov
  • 修复 LIVE VIEW 的 getHeader() 方法中的 AddressSanitizer 错误。 #7271 (vzakaznikov)

改进

  • 在发生 queue_wait_max_ms 等待时添加一条消息。 #7390 (Azat Khuzhin)
  • s3_min_upload_part_size 设置改为表级别。 #7059 (Vladimir Chebotarev)
  • 在 StorageFactory 中检查 TTL。 #7304 (sundyli)
  • 在部分合并连接(partial merge join)中合并左侧数据块(优化)。 #7122 (Artem Zuikov)
  • 不允许在 Replicated 表引擎的 mutation 中使用非确定性函数,因为这可能会在副本之间引入不一致。 #7247 (Alexander Kazakov)
  • 在将异常堆栈跟踪转换为字符串时禁用内存追踪器。这样可以防止服务端类型为 Memory limit exceeded 的错误消息丢失,否则可能会在客户端引发 Attempt to read after eof 异常。 #7264 (Nikolai Kochetov)
  • 各种格式改进。解决了 #6033, #2633, #6611, #6742 #7215 (tavplubix)
  • ClickHouse 会忽略 IN 运算符右侧中无法转换为左侧类型的值。现在这一行为已对复合类型(ArrayTuple)也能正确生效。 #7283 (Alexander Kuzmenkov)
  • 为 ASOF JOIN 支持缺失的不等式。现在可以在 ON 语法中,对 ASOF 列使用“小于等于”变体以及严格“大于”和“小于”变体来进行连接。 #7282 (Artem Zuikov)
  • 优化 partial merge join。 #7070 (Artem Zuikov)
  • uniqCombined 函数中不使用超过 98K 的内存。 #7236, #7270 (Azat Khuzhin)
  • 在 PartialMergeJoin 中将右侧连接表的部分数据刷写到磁盘(如果内存不足),并在需要时再将数据加载回来。 #7186 (Artem Zuikov)

性能改进

  • 通过避免数据复制,加速带常量参数的 joinGet#7359 (Amos Bird)
  • 如果子查询为空则提前返回。 #7007 (小路)
  • 优化 Values 中 SQL 表达式的解析。 #6781 (tavplubix)

构建/测试/打包改进

代码清理

  • 将配置仓库通用化,为 Dictionaries 的 DDL 做准备。#7155 (alesapin)
  • 为 Dictionaries 的 DDL 实现一个不带任何语义的解析器。 #7209 (alesapin)
  • 将 ParserCreateQuery 拆分为多个更小的解析器。 #7253 (alesapin)
  • 在与 external dictionaries 相关的代码附近进行了一些小的重构和重命名。 #7111 (alesapin)
  • 重构部分代码,为基于角色的访问控制做准备。#7235 (Vitaly Baranov)
  • 对 DatabaseOrdinary 代码进行了一些改进。 #7086 (Nikita Vasilev)
  • 在哈希表的 find() 和 emplace() 方法中不再使用迭代器。 #7026 (Alexander Kuzmenkov)
  • 修复在参数 root 非空情况下 getMultipleValuesFromConfig 的行为。#7374 (Mikhail Korotov)
  • 移除一些重复代码(TemporaryFile 和 TemporaryFileStream)。 #7166 (Artem Zuikov)
  • 略微提升代码可读性(MergeTreeData::getActiveContainingPart)。 #7361 (Vladimir Chebotarev)
  • ThreadPool::schedule(...) 抛出异常时,等待所有已调度且使用本地对象的任务完成。将 ThreadPool::schedule(...) 重命名为 ThreadPool::scheduleOrThrowOnError(...),并修正注释以明确其可能抛出异常。 #7350 (tavplubix)

ClickHouse 发行版 19.15

ClickHouse 发行版 19.15.4.10,2019-10-31

Bug 修复

  • 在 ODBC Bridge 中新增对 SQL_TINYINT 和 SQL_BIGINT 的处理,并修复了对 SQL_FLOAT 数据源类型的处理。 #7491 (Denis Glazachev)
  • 允许在执行 MOVE PARTITION 时,部分数据部分位于目标磁盘或卷上。 #7434 (Vladimir Chebotarev)
  • 修复了通过 ODBC bridge 在可为 NULL 的列中处理 NULL 值的问题。 #7402 (Vasily Nemkov)
  • 修复了向非本地节点上的 Distributed 表插入包含 MATERIALIZED 列的数据时的问题。 #7377 (Azat Khuzhin)
  • 修复了函数 getMultipleValuesFromConfig。 #7374 (Mikhail Korotov)
  • 修复了使用 HTTP keep alive 超时时间而不是 TCP keep alive 超时时间的问题。 #7351 (Vasily Nemkov)
  • 在发生异常时等待所有任务完成(修复罕见的段错误)。 #7350 (tavplubix)
  • 向 Kafka 表插入数据时不再推送到物化视图(MVs)。 #7265 (Ivan)
  • 为异常栈禁用内存跟踪器。 #7264 (Nikolai Kochetov)
  • 修复了为外部数据库转换查询时的不正确代码。 #7252 (alexey-milovidov)
  • 避免在 MetricsTransmitter 中使用未初始化的值。 #7158 (Azat Khuzhin)
  • 添加了带宏的测试用示例配置。 (alexey-milovidov)

ClickHouse 发行版 19.15.3.6,2019-10-09

Bug 修复

  • 修复了哈希字典中的 bad_variant。 (alesapin)
  • 修复了 ATTACH PART 查询中导致段错误的 bug。 (alesapin)
  • 修复了 MergeTreeData 中的时间计算。 (Vladimir Chebotarev)
  • 在写入完成后显式提交到 Kafka。 #7175 (Ivan)
  • 在 MergeTree 数据部分的 min/max 索引中正确序列化 NULL 值。 #7234 (Alexander Kuzmenkov)

ClickHouse 发行版 19.15.2.2,2019-10-01

新特性

  • 分层存储:支持为使用 MergeTree 引擎的表配置多个存储卷。可以将最新数据存储在 SSD 上,并自动将旧数据迁移到 HDD。(示例)。#4918 (Igr) #6489 (alesapin)
  • 添加表函数 input,用于在 INSERT SELECT 查询中读取输入数据。 #5450 (palasonic1) #6832 (Anton Popov)
  • 新增 sparse_hashed 字典布局,该布局在功能上等同于 hashed 布局,但更节省内存。在取值速度变慢的代价下,内存占用约为后者的一半。 #6894 (Azat Khuzhin)
  • 实现可为字典配置访问用户列表的功能。仅对当前连接的数据库生效。 #6907 (Guillaume Tassery)
  • SHOW 查询添加 LIMIT 选项。 #6944 (Philipp Malkovsky)
  • 添加 bitmapSubsetLimit(bitmap, range_start, limit) 函数,该函数返回集合中不小于 range_start 的、按值从小到大排列的最小 limit 个值的子集。 #6957 (Zhichang Yu)
  • 添加 bitmapMinbitmapMax 函数。 #6970 (Zhichang Yu)
  • 添加与 issue-6648 相关的函数 repeat#6999 (flynn)

实验特性

  • 实现一种不会改变当前流水线的(内存中)Merge Join 变体。结果按合并键部分排序。将 partial_merge_join 设为 1 以使用此特性。Merge Join 仍在开发中。 #6940 (Artem Zuikov)
  • 新增 S3 引擎和表函数。该功能仍在开发中(尚不支持身份验证)。 #5596 (Vladimir Chebotarev)

改进

  • 从 Kafka 读取的每条消息都会以原子方式插入。这解决了几乎所有已知的 Kafka engine 问题。#6950 (Ivan)
  • 改进 Distributed 查询的故障切换。缩短恢复时间,同时现在可以进行配置,并且可在 system.clusters 中查看。#6399 (Vasily Nemkov)
  • IN 子句中直接支持 Enums 的数值形式。#6766 #6941 (dimarub2000)
  • 为 URL 存储新增(可选的,默认禁用)重定向支持。#6914 (maqroll)
  • 当使用较旧版本的客户端连接到服务器时,添加提示信息。#6893 (Philipp Malkovsky)
  • 移除在 Distributed 表中发送数据时的最大退避等待时间限制。#6895 (Azat Khuzhin)
  • 支持向 Graphite 发送带有累积值的 profile events(计数器)。可以在服务器 config.xml 中的 <events_cumulative> 下启用。#6969 (Azat Khuzhin)
  • 在通过 HTTP 以 Native 格式向 LowCardinality(T) 类型的列插入数据时,自动将类型 T 转换为 LowCardinality(T)#6891 (Nikolai Kochetov)
  • 在对 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)

Bug 修复

  • 修复了在大表上对复杂键进行索引分析时的性能下降问题。这修复了 #6924。#7075 (alexey-milovidov)
  • 修复了在从空的 Kafka 主题进行查询时导致段错误的逻辑错误。#6909 (Ivan)
  • 修复了在 MySQLBlockInputStream.cpp 中过早关闭 MySQL 连接的问题。#6882 (Clément Rodriguez)
  • 恢复了对非常旧的 Linux 内核的支持(修复 #6841)。#6853 (alexey-milovidov)
  • 修复了在输入流中存在空块时,insert select 查询可能导致数据丢失的问题。#6834 #6862 #6911 (Nikolai Kochetov)
  • 修复了函数 АrrayEnumerateUniqRanked 在参数包含空数组时的问题。#6928 (proller)
  • 修复了包含 ARRAY JOIN 和全局子查询的复杂查询的问题。#6934 (Ivan)
  • 修复了在包含多个 JOIN 的 ORDER BY 和 GROUP BY 中出现的 Unknown identifier 错误。#7022 (Artem Zuikov)
  • 修复了在执行带有 LowCardinality 参数的函数时出现的 MSan 警告。#7062 (Nikolai Kochetov)

向后不兼容的变更

  • 修改了 bitmap* 聚合函数状态的序列化格式以提升性能。先前版本中序列化得到的 bitmap* 状态将无法读取。#6908 (Zhichang Yu)

ClickHouse 版本 19.14

ClickHouse 版本 19.14.7.15,2019-10-02

Bug 修复

  • 此版本还包含来自 19.11.12.69 的所有 bug 修复。
  • 修复了 19.14 与更早版本之间分布式查询的兼容性。修复了 #7068#7069alexey-milovidov

ClickHouse 版本 19.14.6.12,2019-09-19

Bug 修复

  • 修复了函数 АrrayEnumerateUniqRanked 在参数为空数组时的问题。#6928proller
  • 修复了在带有 ARRAY JOIN 和带别名的 GLOBAL IN subquery 的查询中子查询名称的问题。如果指定了子查询别名,则将其用作外部表名。#6934Ivan

构建/测试/打包 改进

  • 通过将测试改写为 shell 脚本,修复了不稳定(flapping)的测试 00715_fetch_merged_or_mutated_part_zookeeper,因为它需要等待变更(mutation)生效。#6977Alexander Kazakov
  • 修复了函数 groupUniqArray 在空数组参数情况下的 UBSan 和 MemSan 失败。问题是由于将空的 PaddedPODArray 放入哈希表的第 0 个单元格,而该单元格值的构造函数未被调用所导致。#6937Amos Bird

ClickHouse 版本 19.14.3.3,2019-09-10

新功能

  • ORDER BYWITH FILL 修饰符。(#5069 的后续)#6610Anton Popov
  • LIMIT 增加 WITH TIES 修饰符。(#5069 的延续) #6610 (Anton Popov)
  • 在设置 format_csv_unquoted_null_literal_as_null=1 时,将未加引号的 NULL 字面量解析为 NULL。若该字段的数据类型不可为空(非 Nullable 类型),在设置 input_format_null_as_default=1 时,将 NULL 字段初始化为默认值。 #5990 #6055 (tavplubix)
  • 在表函数 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 将返回 mangled 符号名,用户需要自行调用 demangle。新增设置 allow_introspection_functions,默认关闭。 #6201 (alexey-milovidov)
  • 表函数 values(函数名不区分大小写)。它支持从在 #5984 中提出的 VALUES 列表中读取数据。示例:SELECT * FROM VALUES('a UInt64, s String', (1, 'one'), (2, 'two'), (3, 'three'))#6217#6209dimarub2000
  • 现在可以修改存储设置。语法:ALTER TABLE <table> MODIFY SETTING <setting> = <value>#6366 #6669 #6685 (alesapin)
  • 支持删除已分离的 part。语法:ALTER TABLE <table_name> DROP DETACHED PART '<part_id>'#6158 (tavplubix)
  • 表约束。允许在表定义中添加约束条件,并在插入数据时进行检查。#5273 (Gleb Novikov) #6652 (alexey-milovidov)
  • 支持级联物化视图. #6324 (Amos Bird)
  • 默认启用查询性能分析器,使其每秒对每个查询执行线程采样一次。 #6283 (alexey-milovidov)
  • 输入格式为 ORC#6454 #6703 (akonyaev90)
  • 添加了两个新函数:sigmoidtanh(对机器学习应用很有用)。#6254 (alexey-milovidov)
  • 函数 hasToken(haystack, token)hasTokenCaseInsensitive(haystack, token) 用于检查给定的 token 是否存在于 haystack 中。Token 是指位于两个非字母数字的 ASCII 字符(或 haystack 边界)之间、长度尽可能长的子字符串。Token 必须是常量字符串。支持 tokenbf_v1 索引特化。#6596#6662Vasily 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)

实验性功能

Bug 修复

  • 本次发布还包含 19.13 和 19.11 中的所有错误修复。
  • 修复当表包含跳过索引且发生垂直合并时出现的段错误问题。 #6723 (alesapin)
  • 修复在存在复杂列默认值时的按列 TTL 行为。此前,在使用带有 OPTIMIZE ... FINAL 的查询强制执行 TTL 合并时,过期的值会被类型默认值替换,而不是用户指定的列默认值。#6796Anton Popov
  • 在服务器正常重启时修复 Kafka 消息重复的问题。 #6597 (Ivan)
  • 修复读取 Kafka 消息时出现的无限循环问题。在订阅时完全不要对 consumer 执行暂停/恢复操作——否则在某些场景下它可能会被无限期暂停。#6354 (Ivan)
  • 修复 bitmapContains 函数中出现的 Key expression contains comparison between inconvertible types 异常。#6136 #6146 #6156 (dimarub2000)
  • 修复在启用 optimize_skip_unused_shards 且缺少分片键时出现的段错误。 #6384 (Anton Popov)
  • 修复了 mutation 中可能导致内存损坏的错误代码。修复了由于并发执行 DROP TABLE 和从 system.partssystem.parts_columns 中执行 SELECT 而可能发生的读取地址 0x14c0 的段错误(segfault)。修复了在准备 mutation 查询时出现的竞争条件(race condition)。修复了由于对 Replicated 表执行 OPTIMIZE 与 ALTER 等并发修改操作导致的死锁(deadlock)。 #6514 (alexey-milovidov)
  • 移除 MySQL 接口中过于冗长的日志输出 #6389 (alexey-milovidov)
  • 恢复在配置文件中将 'true' 和 'false' 解析为布尔设置的功能。 #6278 (alesapin)
  • 修复在 Nullable(Decimal128) 上使用 quantilemedian 函数时出现的崩溃问题。 #6378 (Artem Zuikov)
  • 修复了在主键上带有 WHERE 条件且对其进行了 Float 类型转换的 SELECT 查询可能返回不完整结果的问题。该问题是由于 toFloat 函数中对单调性的检查不正确所致。 #6248 #6374 (dimarub2000)
  • 检查用于 mutation 操作的 max_expanded_ast_elements 设置。在执行 TRUNCATE TABLE 后清理 mutation。 #6205 (Winter Zhang)
  • 修复在使用 join_use_nulls 时键列 JOIN 结果的问题,将列默认值改为填充为 NULL。#6249 (Artem Zuikov)
  • 修复了在垂直合并和 ALTER 操作中使用 skip 索引时的问题。修复了 Bad size of marks file 异常。#6594 #6713 (alesapin)
  • 修复在 ALTER MODIFY COLUMN 和垂直合并中,当参与合并/修改的某个数据分片为空(0 行)时会发生的罕见崩溃 #6746 #6780 (alesapin)
  • 修复了 AggregateFunctionFactoryLowCardinality 类型转换的 Bug,从而解决了 #6257#6281Nikolai Kochetov
  • 修复 topKtopKWeighted 聚合函数中的错误行为以及潜在的段错误。 #6404 (Anton Popov)
  • 修复了与 getIdentifier 函数相关的不安全代码。#6401 #6409 (alexey-milovidov)
  • 修复了 MySQL wire 协议中的缺陷(用于通过 MySQL 客户端连接到 ClickHouse)。该缺陷由 PacketPayloadWriteBuffer 中的堆缓冲溢出导致。#6212 (Yuriy Baranov)
  • 修复 bitmapSubsetInRange 函数中的内存泄漏问题。 #6819 (Zhichang Yu)
  • 修复在粒度变更后执行 mutation 时出现的罕见 bug。 #6816 (alesapin)
  • 默认允许 protobuf 消息包含所有字段。 #6132 (Vitaly Baranov)
  • 修复当第二个参数为 NULLnullIf 函数中的一个 bug。#6446 (Guillaume Tassery)
  • 修复复杂键缓存字典在包含字符串字段时,错误的内存分配/释放导致的一个罕见问题,该问题会导致内存被无限占用(表现类似内存泄漏)。当字符串长度为从 8 开始的 2 的幂(8、16、32 等)时会复现此 Bug。 #6447 (alesapin)
  • 修复了对短序列进行 Gorilla 编码时的问题,该问题会抛出异常 Cannot write after end of buffer#6398 #6444 (Vasily Nemkov)
  • 在启用 join_use_nulls 时,允许在 JOIN 中使用非 Nullable 类型。 #6705 (Artem Zuikov)
  • clickhouse-client 中禁用查询中的 Poco::AbstractConfiguration 替换功能。 #6706 (alexey-milovidov)
  • 避免在 REPLACE PARTITION 中发生死锁。 #6677 (alexey-milovidov)
  • 对常量参数调用 arrayReduce 可能导致段错误。#6242 #6326 (alexey-milovidov)
  • 修复当副本在执行 DROP PARTITION 之后恢复时可能出现的不一致数据分片。#6522 #6523 (tavplubix)
  • 修复了 JSONExtractRaw 函数中的挂起问题。#6195 #6198 (alexey-milovidov)
  • 修复了在自适应粒度下 skip indices 序列化和聚合不正确的问题。#6594#6748 (alesapin)
  • 修复在两级聚合中使用 GROUP BYWITH ROLLUPWITH CUBE 修饰符的问题。 #6225 (Anton Popov)
  • 修复在使用自适应粒度时写入二级索引标记的缺陷。 #6126 (alesapin)
  • 在服务器启动阶段修正初始化顺序。由于 StorageMergeTree::background_task_handlestartup() 中才会初始化,MergeTreeBlockOutputStream::write() 可能会在其初始化之前尝试使用它。因此,只需在使用前检查该句柄是否已初始化即可。#6080 (Ivan)
  • 清空上一次因错误结束的读取操作留下的数据缓冲区。#6026 (Nikolay)
  • 修复了在为 Replicated*MergeTree 表创建新副本时启用自适应粒度的问题。 #6394 #6452 (alesapin)
  • 修复了在服务器启动期间可能发生的一种崩溃:当访问未初始化的 ThreadStatus 结构体抛出异常时,如果在处理该异常的过程中 libunwind 再次抛出异常,可能会导致崩溃。 #6456 (Nikita Mikhaylov)
  • 修复 yandexConsistentHash 函数中的崩溃问题。通过模糊测试发现。#6304 #6305 (alexey-milovidov)
  • 修复了在服务器过载且全局线程池接近耗尽时查询可能挂起的问题。在具有大量分片(数百个)的集群上更有可能出现此问题,因为分布式查询会为到每个分片的连接分配一个线程。例如,如果一个具有 330 个分片的集群正在处理 30 个并发分布式查询,就可能复现该问题。此问题影响从 19.2 开始的所有版本。#6301 (alexey-milovidov)
  • 修复了 arrayEnumerateUniqRanked 函数的逻辑。#6423 (alexey-milovidov)
  • 修复在解码符号表时出现的段错误。 #6603 (Amos Bird)
  • 修复了在将 LowCardinality(Nullable) 转换为非 Nullable 列时,如果列中不包含 Null 值(例如在 SELECT CAST(CAST('Hello' AS LowCardinality(Nullable(String))) AS String) 这样的查询中),会抛出的无关异常。 #6094 #6119 (Nikolai Kochetov)
  • 移除了 system.settings 表中对 description 字段的多余引号。#6696 #6699 (alexey-milovidov)
  • 避免在复制表的 TRUNCATE 操作中可能出现的死锁。#6695 (alexey-milovidov)
  • 修复按排序键顺序读取的问题。 #6189 (Anton Popov)
  • 修复在 enable_mixed_granularity_parts=1 表上执行 ALTER TABLE ... UPDATE 查询时的问题。 #6543 (alesapin)
  • 修复由 #4405(自 19.4.0 起)引入的 bug。该问题会在对基于 MergeTree 表的 Distributed 表执行查询且未查询任何列时(如 SELECT 1)复现。#6236alesapin
  • 修复了带符号类型与无符号类型进行整数除法时的溢出问题。此前行为与 C 或 C++ 语言完全相同(遵循整数提升规则),这可能会让人感到意外。请注意,当将较大的带符号整数与较大的无符号整数相互进行除法运算时,仍然有可能发生溢出(但这种情况不太常见)。该问题存在于所有服务器版本中。 #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 对未实现为 processor 的输入流的处理行为。 #6495 (Nikolai Kochetov)
  • 修复拼写错误。 #6631 (Alex Ryndin)
  • 错误信息中的笔误(is -> are)。#6839Denis Zhuravlev
  • 修复了从字符串解析列列表时的错误:如果类型中包含逗号就会触发该错误(该问题会影响 FileURLHDFS 存储)#6217#6209dimarub2000

安全修复

  • 此版本还包含 19.13 和 19.11 中的所有安全漏洞修复。
  • 修复了伪造查询可能导致 SQL 解析器栈溢出并使服务器崩溃的问题。修复了在 Merge 和 Distributed 表、物化视图,以及包含子查询的行级安全策略条件中可能出现栈溢出的问题。 #6433 (alexey-milovidov)

改进

  • 正确实现 AND/OR 的三值逻辑。 #6048 (Alexander Kazakov)
  • 现在,具有已过期 TTL 的值和行会在对旧的、没有 TTL 信息或 TTL 信息已过期的部分执行 OPTIMIZE ... FINAL 查询后被移除,例如在执行 ALTER ... MODIFY TTL 查询之后。新增了 SYSTEM STOP/START TTL MERGES 查询,用于禁止/允许分配带有 TTL 的合并任务,并在所有合并中过滤已过期的值。 #6274 (Anton Popov)
  • 支持通过 CLICKHOUSE_HISTORY_FILE 环境变量更改 ClickHouse 客户端历史文件的位置。#6840 (filimonov)
  • InterpreterSelectQuery 中移除 dry_run 标志位。... #6375 (Nikolai Kochetov)
  • 支持在 ON 子句中使用 ASOF JOIN#6211 (Artem Zuikov)
  • 改进了针对变更(mutations)和复制(replication)操作的跳过索引(skip indexes)支持。支持 MATERIALIZE/CLEAR INDEX ... IN PARTITION 查询。UPDATE x = x 会重新计算所有使用列 x 的索引。 #5053 (Nikita Vasilev)
  • 允许在不受 allow_experimental_live_view 设置限制的情况下(例如在服务器启动时)对 live view 执行 ATTACH 操作。 #6754 (alexey-milovidov)
  • 在查询分析器收集的堆栈跟踪中,不包括由查询分析器自身生成的堆栈帧。#6250 (alexey-milovidov)
  • 现在表函数 valuesfileurlhdfs 已支持 ALIAS 列。#6255 (alexey-milovidov)
  • 如果 config.d 文件未使用与配置文件相同的根元素,则抛出异常。#6123 (dimarub2000)
  • 在出现 no space left on device 错误时,在异常消息中输出更多信息。#6182, #6252 #6352 (tavplubix)
  • 在确定读查询需要覆盖 Distributed 表的哪些分片时(当 optimize_skip_unused_shards = 1 时),ClickHouse 现在会同时检查 select 语句中 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)
  • 在无键聚合中禁用 "read in order" 优化。#6599 (Anton Popov)
  • INCORRECT_DATATYPE_MISMATCH 错误码对应的 HTTP 状态码已从默认的 500 Internal Server Error 修改为 400 Bad Request#6271 (Alexander Rodin)
  • Join 对象从 ExpressionAction 移动到 AnalyzedJoin 中。ExpressionAnalyzerExpressionAction 不再直接依赖 Join 类,其逻辑由 AnalyzedJoin 接口进行封装和隐藏。 #6801 (Artem Zuikov)
  • 修复在某个分片为 localhost 且查询通过网络连接发送时,分布式查询可能发生死锁的问题。 #6759 (alexey-milovidov)
  • 更改了多张表 RENAME 操作的语义,以避免可能发生的死锁。#6757#6756 (alexey-milovidov)
  • 重写了 MySQL 兼容服务器,以避免在内存中加载完整的数据包负载。将每个连接的内存占用降低至大约 2 * DBMS_DEFAULT_BUFFER_SIZE(读/写缓冲区)。 #5811 (Yuriy Baranov)
  • 将 AST 别名解析逻辑从解析器中移出,因为解析器无需了解任何查询语义。 #6108 (Artem Zuikov)
  • 使 NamesAndTypesList 的解析稍微更加安全。#6408#6410 (alexey-milovidov)
  • clickhouse-copier:允许在检查分区是否存在的查询中使用配置中的 where_condition,并在查询中使用 partition_key 别名(之前它仅用于读取数据的查询)。 #6577 (proller)
  • throwIf 中新增了可选的 message 参数。(#5772) #6329 (Vdimir)
  • 在发送插入数据时收到的服务器端异常现在也会在客户端进行处理。#5891 #6711 (dimarub2000)
  • 新增指标 DistributedFilesToInsert,用于显示由 Distributed 表选中、准备发送到远程服务器的文件系统中文件的总数。该数量会在所有分片上进行求和。 #6600 (alexey-milovidov)
  • 将大部分 JOIN 的预处理逻辑从 ExpressionAction/ExpressionAnalyzer 移动到 AnalyzedJoin#6785 (Artem Zuikov)
  • 修复 TSan 关于“锁顺序反转”(lock-order-inversion)的告警#6740 (Vasily Nemkov)
  • 改进了在缺少 Linux capabilities 时的信息提示。以 "fatal" 级别记录致命错误,便于在 system.text_log 中定位。 #6441 (alexey-milovidov)
  • 在启用在执行 GROUP BYORDER BY 时将临时数据转储到磁盘以限制内存使用的功能时,之前不会检查可用磁盘空间。此修复新增了一个设置项 min_free_disk_space,当可用磁盘空间小于该阈值时,查询会停止并抛出 ErrorCodes::NOT_ENOUGH_SPACE#6678 (Weiqing Xu) #6691 (alexey-milovidov)
  • 移除了基于线程的递归读写锁。这样做没有意义,因为线程会在查询之间被重用。SELECT 查询可能会在一个线程中获取锁、在另一个线程中持有锁,并在第一个线程中退出。与此同时,第一个线程可能会被 DROP 查询重用。这会导致出现错误的“Attempt to acquire exclusive lock recursively”消息。#6771 (alexey-milovidov)
  • 拆分 ExpressionAnalyzer.appendJoin()。在 ExpressionAnalyzer 中为 MergeJoin 预留位置。#6524 (Artem Zuikov)
  • 为 MySQL 兼容性服务器添加了 mysql_native_password 身份验证插件。#6194 (Yuriy Baranov)
  • 减少对 clock_gettime 的调用次数;修复了 Allocator 在调试版/发布版之间的 ABI 兼容性问题(影响较小)。 #6197 (alexey-milovidov)
  • collectUsedColumnsExpressionAnalyzer 移动到 SyntaxAnalyzerSyntaxAnalyzer 现在会自行构造 required_source_columns#6416 (Artem Zuikov)
  • 新增设置 joined_subquery_requires_alias,用于在 FROM 子句中当存在多个表(即包含 JOIN 的查询)时,强制要求子查询和表函数必须使用别名。 #6733 (Artem Zuikov)
  • ExpressionAnalyzer 中提取 GetAggregatesVisitor 类。 #6458 (Artem Zuikov)
  • system.query_log:将 type 列的数据类型修改为 Enum#6265 (Nikita Mikhaylov)
  • sha256_password 认证插件进行静态链接。 #6512 (Yuriy Baranov)
  • 避免为了让 compile 设置生效而引入额外的依赖项。在之前的版本中,用户可能会遇到诸如 cannot open crti.ounable to find library -lc 等错误。#6309 (alexey-milovidov)
  • 进一步加强对可能来自恶意副本的输入的验证。#6303 (alexey-milovidov)
  • 现在 clickhouse-obfuscator 文件随 clickhouse-client 软件包一同提供。 在之前的版本中,它名为 clickhouse obfuscator(中间带空格)。#5816 #6609 (dimarub2000)
  • 修复了以下情况下可能出现的死锁:当存在至少两个查询以不同顺序读取至少两个表,且另有一个查询在其中一个表上执行 DDL 操作时。还修复了另一个极其罕见的死锁。#6764 (alexey-milovidov)
  • system.processessystem.query_log 添加了 os_thread_ids 列,以便更好地进行调试。 #6763 (alexey-milovidov)
  • 针对在将 sha256_password 用作默认身份验证插件时会出现的 PHP mysqlnd 扩展缺陷的变通解决方案(详见 #6031)。#6113Yuriy Baranov
  • 移除在更改列可空性时不必要的步骤。 #6693 (Artem Zuikov)
  • queue_max_wait_ms 的默认值设置为零,因为当前的值(五秒)几乎没有意义。只有在极少数情况下该设置才会被用到。为避免歧义,新增了设置项 replace_running_query_max_wait_mskafka_max_wait_msconnection_pool_max_wait_ms#6692 (alexey-milovidov)
  • ExpressionAnalyzer 中抽取出 SelectQueryExpressionAnalyzer。保留后者用于非 SELECT 查询。#6499 (Artem Zuikov)
  • 去除了重复的输入和输出格式。 #6239 (Nikolai Kochetov)
  • 允许用户在建立连接时自定义 poll_intervalidle_connection_timeout 设置。 #6230 (alexey-milovidov)
  • MergeTree 现在新增了一个选项 ttl_only_drop_parts(默认禁用),用于避免对数据分片进行部分裁剪,从而在某个分片中的所有行都过期时,直接将该分片整体删除。#6191 (Sergi Vladykin)
  • 为 set index 函数添加类型检查。如果函数收到错误类型则抛出异常。修复了使用 UBSan 的模糊测试问题。#6511 (Nikita Vasilev)

性能改进

  • 使用 ORDER BY expressions 子句优化查询,其中 expressions 的前缀与 MergeTree 表的排序键前缀一致。该优化由 optimize_read_in_order 设置控制。#6054 #6629 (Anton Popov)
  • 允许在数据片段加载和删除期间使用多个线程。#6372 #6074 #6438 (alexey-milovidov)
  • 实现了批量更新聚合函数状态的方式,这可能带来性能收益。#6435 (alexey-milovidov)
  • 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。如果你曾使用过该表函数,请发送邮件到 [email protected]。注意,CatBoost 集成功能仍然保留并会继续得到支持。#6279 (alexey-milovidov)
  • 默认禁用 ANY RIGHT JOINANY FULL JOIN。请通过设置 any_join_distinct_right_table_keys 参数来启用它们。#5126 #6351 (Artem Zuikov)

ClickHouse Release 19.13

ClickHouse Release 19.13.6.51, 2019-10-02

Bug Fix

  • 此版本还包含 19.11.12.69 中的所有错误修复。

ClickHouse Release 19.13.5.44, 2019-09-20

Bug Fix

  • 此版本还包含 19.14.6.12 中的所有错误修复。
  • 修复了在 ZooKeeper 不可访问时,对副本表执行 DROP 查询可能导致表处于不一致状态的问题。 #6045 #6413 (Nikita Mikhaylov)
  • 修复了 StorageMerge 中的数据竞争问题。 #6717 (alexey-milovidov)
  • 修复了在查询分析器中引入的错误,该错误会导致从套接字无限次接收数据。 #6386 (alesapin)
  • 修复了在布尔值上执行 JSONExtractRaw 函数时过高的 CPU 使用率。 #6208 (Vitaly Baranov)
  • 修复了向物化视图写入数据时的回归问题。 #6415 (Ivan)
  • 表函数 url 存在一个漏洞,允许攻击者在请求中注入任意 HTTP 头部。该问题由 Nikita Tikhomirov 发现。 #6466 (alexey-milovidov)
  • 修复了 Set 索引中无用的 AST 检查。 #6510 #6651 (Nikita Vasilev)
  • 修复了解析嵌入在查询中的 AggregateFunction 值时的问题。 #6575 #6773 (Zhichang Yu)
  • 修复了 trim 函数族的不正确行为。 #6647 (alexey-milovidov)

ClickHouse Release 19.13.4.32, 2019-09-10

Bug Fix

  • 此版本还包含 19.11.9.52 和 19.11.10.54 中的所有安全漏洞修复。
  • 修复了在 system.parts 表和 ALTER 查询中的数据竞争问题。#6245 #6513 (alexey-milovidov)
  • 修复了在从带有 sample 和 prewhere 的空分布式表读取时发生的数据流头部不匹配问题。#6167 (Lixiang Qian) #6823 (Nikolai Kochetov)
  • 修复了在使用带有元组子查询的 IN 子句时发生的崩溃。#6125 #6550 (tavplubix)
  • 修复了在 GLOBAL JOIN ON 子句中存在相同列名时的问题。#6181 (Artem Zuikov)
  • 修复了在将不支持转换为 Decimal 的类型进行转换时的崩溃,现在改为抛出异常。#6297 (Artem Zuikov)
  • 修复了 extractAll() 函数中的崩溃。#6644 (Artem Zuikov)
  • 现在 MySQLODBCJDBC 表函数的查询改写已能正确处理包含多个 AND 表达式的 SELECT WHERE 查询。#6381 #6676 (dimarub2000)
  • 为 MySQL 8 集成增加了对重复声明的检查。#6569 (Rafael David Tinoco)

安全修复

  • 修复了解压阶段中编解码器的两个漏洞(恶意用户可以伪造压缩数据,从而在解压过程中导致缓冲区溢出)。#6670 (Artem Zuikov)

ClickHouse Release 19.13.3.26,2019-08-22

错误修复

  • 修复在 enable_mixed_granularity_parts=1 的表上执行 ALTER TABLE ... UPDATE 查询的问题。#6543 (alesapin)
  • 修复在 IN 子句中使用带元组的子查询时出现的 NPE(空指针异常)。#6125 #6550 (tavplubix)
  • 修复一个问题:如果落后的副本恢复为可用状态,它可能仍然包含已被 DROP PARTITION 删除的数据分片。#6522 #6523 (tavplubix)
  • 修复解析 CSV 的问题。#6426 #6559 (tavplubix)
  • 修复 system.parts 表和 ALTER 查询中的数据竞争问题。这修复了 #6245#6513 (alexey-milovidov)
  • 修复了变更(mutation)代码中的错误,该错误可能导致内存损坏。修复了读取地址 0x14c0 时产生的段错误(segfault),该问题可能由于并发执行 DROP TABLE 与从 system.partssystem.parts_columns 进行 SELECT 导致。修复了在准备变更查询时出现的竞争条件。修复了由复制表(Replicated 表)的 OPTIMIZE 与 ALTER 等并发修改操作引起的死锁。#6514 (alexey-milovidov)
  • 修复了在带有跳过索引(skipping index)的表上执行 ALTER DELETE 查询后可能导致数据丢失的问题。#6224 #6282 (Nikita Vasilev)

安全修复

  • 如果攻击者对 ZooKeeper 拥有写权限,并且能够在 ClickHouse 所在网络中运行自定义服务器,则可以创建一个特制的恶意服务器,使其作为 ClickHouse 副本运行并在 ZooKeeper 中注册。当其他副本从该恶意副本拉取数据分片时,它可以强制 clickhouse-server 向文件系统上的任意路径写入数据。该问题由 Yandex 信息安全团队的 Eldar Zaitov 发现。#6247 (alexey-milovidov)

ClickHouse Release 19.13.2.19,2019-08-14

新特性

  • 查询级别的采样分析器。 示例#4247 (laplab) #6124 (alexey-milovidov) #6250 #6283 #6386
  • 允许使用 COLUMNS('regexp') 表达式指定列列表,该表达式的行为类似于更高级版本的 * 通配符。 #5951 (mfridental), (alexey-milovidov)
  • 现在支持 CREATE TABLE AS table_function()#6057 (dimarub2000)
  • stochasticLinearRegression()stochasticLogisticRegression() 聚合函数中,默认使用随机梯度下降的 Adam 优化器,因为它在几乎无需调参的情况下就能提供良好的效果。 #6000 (Quid37)
  • 新增用于处理自定义周序号的函数。 #5212 (Andy Yang)
  • 现在 RENAME 查询可用于所有存储引擎。 #5953 (Ivan)
  • 现在客户端可以通过设置 send_logs_level,在不考虑服务端配置的日志级别的情况下,从服务端接收任意所需级别的日志。 #5964 (Nikita Mikhaylov)

向后不兼容的更改

  • 设置 input_format_defaults_for_omitted_fields 默认启用。对 Distributed 表执行插入操作时,需要在整个集群中保持该设置一致(需要在滚动升级前设置好)。该设置会在 JSONEachRowCSV* 格式中,为被省略字段计算复杂的默认表达式。这应该是预期行为,但可能带来可以忽略不计的性能差异。 #6043 (Artem Zuikov), #5625 (akuzm)

实验特性

  • 新的查询处理流水线。使用 experimental_use_processors=1 选项启用。请自行承担使用风险。 #4914 (Nikolai Kochetov)

Bug 修复

  • 本版本修复了 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

Bug Fix

  • 修复了在执行 ALTER MODIFY COLUMN 和垂直合并时,当被合并/被修改的某个数据部分为空(0 行)时出现的罕见崩溃问题。 #6780 (alesapin)
  • 手动更新 SIMDJSON。修复了可能向 stderr 输出文件大量写入虚假的 JSON 诊断消息的问题。 #7548 (Alexander Kazakov)
  • 修复了与变更操作中 mrk 文件扩展名相关的错误。 #7548 (alesapin)

ClickHouse 发行版 19.11.12.69,2019-10-02

Bug Fix

  • 修复了在大表上针对复杂键进行索引分析时的性能下降问题。修复了 #6924#7075 (alexey-milovidov)
  • 避免在向使用 Distributed 引擎的表发送数据时出现罕见的 SIGSEGV(Failed to send batch: file with index XXXXX is absent)。 #7032 (Azat Khuzhin)
  • 修复了多表 join 时出现的 Unknown identifier 错误。修复了 #5254#7022 (Artem Zuikov)

ClickHouse 发行版 19.11.11.57,2019-09-13

  • 修复了在从空的 Kafka 主题中进行查询时导致段错误的逻辑错误。 #6902 #6909 (Ivan)
  • 修复了函数 АrrayEnumerateUniqRanked 在参数包含空数组时的问题。 #6928 (proller)

ClickHouse 发行版 19.11.10.54,2019-09-10

Bug Fix

  • 手动存储 Kafka 消息的 offset,以便能够一次性为所有分区统一提交。修复了在「一个 consumer - 多个 partition」场景下可能出现的重复消费问题。 #6872 (Ivan)

ClickHouse 发行版 19.11.9.52,2019-09-6

安全修复

  • 如果攻击者对 ZooKeeper 拥有写入权限,并且能够在 ClickHouse 所在网络中运行自定义服务器,则它可以创建一个特制的恶意服务器,使其作为 ClickHouse 副本并注册到 ZooKeeper 中。当另一副本从该恶意副本拉取数据分片时,可以强制 clickhouse-server 向文件系统上的任意路径写入。该问题由 Yandex 信息安全团队的 Eldar Zaitov 发现。 #6247 (alexey-milovidov)

ClickHouse Release 19.11.8.46,2019-08-22

Bug 修复

  • 修复在 enable_mixed_granularity_parts=1 的表上执行 ALTER TABLE ... UPDATE 查询的问题。#6543 (alesapin)
  • 修复在 IN 子句中使用带有元组的子查询时出现的空指针异常(NPE)。#6125 #6550 (tavplubix)
  • 修复这样一个问题:如果一个过期副本重新变为活跃状态,它可能仍然包含已被 DROP PARTITION 删除的数据分片。#6522 #6523 (tavplubix)
  • 修复解析 CSV 时的问题。#6426 #6559 (tavplubix)
  • 修复 system.parts 表与 ALTER 查询中的数据竞争问题。此修复解决了 #6245#6513 (alexey-milovidov)
  • 修复变更(mutation)代码中的错误,该错误可能导致内存损坏。修复因并发执行 DROP TABLE 与从 system.partssystem.parts_columns 中执行 SELECT 读取而可能发生的读取地址 0x14c0 的段错误(segfault)。修复在准备变更查询时的竞争条件。修复由对 Replicated 表执行 OPTIMIZE 与并发 ALTER 等修改操作导致的死锁。#6514 (alexey-milovidov)

ClickHouse Release 19.11.7.40, 2019-08-14

Bug Fix

  • 本版本已修复 Kafka 集成。
  • 修复了对常量参数使用 arrayReduce 时的段错误(segfault)。 #6326 (alexey-milovidov)
  • 修复了 toFloat() 的单调性问题。 #6374 (dimarub2000)
  • 修复在启用 optimize_skip_unused_shards 且缺失分片键时出现的段错误(segfault)。 #6384 (CurtizJ)
  • 修正了 arrayEnumerateUniqRanked 函数的逻辑。 #6423 (alexey-milovidov)
  • 从 MySQL 处理器中移除了多余的详细日志输出。 #6389 (alexey-milovidov)
  • 修复了 topKtopKWeighted 聚合函数中的错误行为及可能发生的段错误(segfault)。 #6404 (CurtizJ)
  • 不再在 system.columns 表中暴露虚拟列。此更改是为了保持向后兼容性。 #6406 (alexey-milovidov)
  • 修复了复合键缓存字典中字符串字段内存分配的错误。 #6447 (alesapin)
  • 修复在为 Replicated*MergeTree 表创建新副本时启用自适应粒度(adaptive granularity)功能的错误。 #6452 (alesapin)
  • 修复了读取 Kafka 消息时出现的无限循环问题。 #6354 (abyss7)
  • 修复了构造查询可能导致 SQL 解析器栈溢出并引发服务器崩溃的问题,以及在 MergeDistributed 表中可能出现的栈溢出问题。 #6433 (alexey-milovidov)
  • 修复了在短序列上进行 Gorilla 编码时的错误。 #6444 (Enmk)

改进

  • 允许用户在连接时重写 poll_intervalidle_connection_timeout 设置。 #6230 (alexey-milovidov)

ClickHouse Release 19.11.5.28, 2019-08-05

Bug 修复

  • 修复了在服务器过载时查询可能挂起的问题。#6301 (alexey-milovidov)
  • 修复了 yandexConsistentHash 函数中的浮点运算异常(FPE)。此修复对应 #6304#6126 (alexey-milovidov)
  • 修复了在 AggregateFunctionFactory 中转换 LowCardinality 类型时的错误。此修复对应 #6257#6281 (Nikolai Kochetov)
  • 修复了从配置文件中的字符串 truefalse 解析 bool 设置时的问题。#6278 (alesapin)
  • 修复了在对基于 MergeTree 表的 Distributed 表执行查询时,当 WHERE 的一部分被下推到 PREWHERE 时,可能出现的数据流头部不兼容的罕见错误。#6236 (alesapin)
  • 修复了有符号类型除以无符号类型时整数除法溢出的问题。此修复对应 #6214#6233 (alexey-milovidov)

向后不兼容的变更

  • Kafka 仍然不可用。

ClickHouse Release 19.11.4.24, 2019-08-01

Bug 修复

  • 修复了在自适应粒度下写入二级索引标记时的 bug。#6126 (alesapin)
  • 修复了在两级聚合下 GROUP 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 初始加载外部字典时,对更新字段进行无用且不正确条件判断的问题。此更改修复了 #6069 #6083 (alexey-milovidov)
  • 修复了在将 LowCardinality(Nullable) 转换为非 Nullable 列、且该列不包含 Null 的情况下(例如在类似 SELECT CAST(CAST('Hello' AS LowCardinality(Nullable(String))) AS String) 的查询中)抛出的无关异常。#6094 #6119 (Nikolai Kochetov)
  • 修复了在极其罕见情况下 "uniq" 聚合函数结果非确定性的问题。该 bug 存在于所有 ClickHouse 版本中。#6058 (alexey-milovidov)
  • 修复了在对函数 IPv6CIDRToRange 设置略高的 CIDR 时产生的段错误。#6068 (Guillaume Tassery)
  • 修复了当服务器在许多不同上下文中抛出大量异常时发生的小内存泄漏。#6144 (alexey-milovidov)
  • 修复了 consumer 在订阅之前被暂停且之后未恢复的情况。#6075 (Ivan) 请注意,Kafka 在该版本中是不可用的。
  • 清理了上一次以错误结束的读取操作留下的 Kafka 数据缓冲区。#6026 (Nikolay) 请注意,Kafka 在该版本中是不可用的。
  • 由于 StorageMergeTree::background_task_handlestartup() 中初始化,MergeTreeBlockOutputStream::write() 可能会在其初始化之前尝试使用它。因此仅在使用前检查它是否已初始化。#6080 (Ivan)

构建/测试/打包改进

不向后兼容的变更

  • 本版本中 Kafka 不可用。

ClickHouse Release 19.11.3.11, 2019-07-18

新特性

  • 增加了对预处理语句(prepared statements)的支持。#5331 (Alexander) #5630 (alexey-milovidov)
  • 新增 DoubleDeltaGorilla 列编解码器。#5600 (Vasily Nemkov)
  • 新增 os_thread_priority 设置项,用于控制查询处理线程的 "nice" 值,操作系统会根据该值调整动态调度优先级。要正常工作需要 CAP_SYS_NICE 权限。实现了 #5858 #5909 (alexey-milovidov)
  • 为 Kafka 引擎实现 _topic_offset_key 列。#5382 (Ivan) 请注意,本版本中 Kafka 不可用。
  • 新增聚合函数组合子 -Resample#5590 (hcz)
  • 新增聚合函数 groupArrayMovingSum(win_size)(x)groupArrayMovingAvg(win_size)(x),用于计算带或不带窗口大小限制的滑动求和/平均值。#5595 (inv2004)
  • 新增同义函数 arrayFlatten <-> flatten#5764 (hcz)
  • 集成了来自 Uber 的 H3 函数 geoToH3#4724 (Remen Ivan) #5805 (alexey-milovidov)

Bug 修复

  • 实现异步更新的 DNS 缓存机制。独立线程会定期解析所有主机并更新 DNS 缓存(周期由设置 dns_cache_update_period 控制)。当主机 IP 频繁变更时,这将很有帮助。 #5857 (Anton Popov)
  • 修复 Delta 编解码器中的段错误,该错误会影响包含小于 32 位值的列。此缺陷会导致内存随机损坏。#5786 (alesapin)
  • 修复在对包含非物理列的块执行 TTL 合并时发生的段错误。 #5819 (Anton Popov)
  • 修复在检查包含 LowCardinality 列的数据分片时的一个罕见错误。此前,对于包含 LowCardinality 列的数据分片,checkDataPart 总是会失败。#5832 (alesapin)
  • 当服务器线程池已满时,避免连接被挂起。对于来自 remote 表函数的连接,或在连接超时时间较长且目标分片没有副本的情况下发起的连接,这一点尤为重要。此更改修复了 #5878 #5881alexey-milovidov
  • evalMLModel 函数增加对常量参数的支持。修复了 #5817#5820alexey-milovidov
  • 修复了 ClickHouse 将默认时区识别为 UCT 而不是 UTC 的问题。此修复解决了 #5804#5828alexey-milovidov
  • 修复了 visitParamExtractRaw 中的缓冲区下溢问题。此更改修复了 #5901#5902alexey-milovidov
  • 现在,分布式的 DROP/ALTER/TRUNCATE/OPTIMIZE ON CLUSTER 查询将直接在主副本上执行。 #5757 (alesapin)
  • 修复 coalesceColumnConstColumnNullable 组合下的问题及相关更改。 #5755 (Artem Zuikov)
  • 修复 ReadBufferFromKafkaConsumer,使其在调用 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 指针的问题。此缺陷仅影响单元测试。#5973 (Nikolai Kochetov)
  • 避免源列和中间 ARRAY JOIN 列覆盖同名列。 #5941 (Artem Zuikov)
  • 修复向 MySQL 引擎执行 INSERT 和 SELECT 查询时对 MySQL 风格标识符引用的处理。 #5704 (Winter Zhang)
  • 现在 CHECK TABLE 查询可以用于 MergeTree 引擎系列。它会为每个数据部分(对于更简单的引擎则为每个文件)返回检查状态以及(如果有的话)消息。同时修复了在拉取损坏数据部分时的一个错误。#5865 (alesapin)
  • 修复 SPLIT_SHARED_LIBRARIES 运行时错误 #5793 (Danila Kutenin)
  • 修复了在 /etc/localtime 为类似 ../usr/share/zoneinfo/Asia/Istanbul 的相对符号链接时的时区初始化问题 #5922 (alexey-milovidov)
  • clickhouse-copier:修复关闭时的 use-after-free 问题 #5752 (proller)
  • 已更新 simdjson。修复了某些包含零字节的无效 JSON 仍被成功解析的问题。#5938 (alexey-milovidov)
  • 修复 SystemLogs 的关闭逻辑 #5802 (Anton Popov)
  • 修复当 invalidate_query 中的条件依赖于字典时导致的挂起问题。#6011 (Vitaly Baranov)

改进

  • 允许在集群配置中使用无法解析的地址。它们将被视为不可用,并在每次连接尝试时重新解析。这对 Kubernetes 尤其有用。此更改修复了 #5714 #5924alexey-milovidov
  • 关闭空闲的 TCP 连接(默认超时时间为一小时)。这对大型集群尤为重要,尤其是在每台服务器上都有多张分布式表的情况下,因为每台服务器都可能对其他每台服务器维护一个连接池,在峰值查询并发结束后,这些连接会长时间处于空闲状态。此更改修复了 #5879 #5880alexey-milovidov)。
  • 提升了 topK 函数的结果质量。更改了 SavingSpace 集合的行为:当新元素的权重大于最后一个元素时,将移除最后一个元素。 #5833 #5850 (Guillaume Tassery)
  • 用于处理域名的 URL 函数现在也可以处理缺少 scheme 的不完整 URL #5725 (alesapin)
  • 已向 system.parts_columns 表添加校验和。 #5874 (Nikita Mikhaylov)
  • 添加了 Enum 数据类型,作为 Enum8Enum16 的别名。 #5886 (dimarub2000)
  • 针对 T64 编解码器的完全比特转置版本。与 zstd 搭配使用时可以获得更好的压缩效果。#5742 (Artem Zuikov)
  • 现在 startsWith 函数中的条件可以使用主键。这修复了 #5310#5882#5919dimarub2000)。
  • 通过允许数据库名为空,使 clickhouse-copier 可用于跨复制集群拓扑。 #5745 (nvartolomei)
  • 在未安装 tzdata 的系统上(例如纯 Docker 容器)使用 UTC 作为默认时区。在此补丁之前,会打印错误信息 Could not determine local time zone,并且服务器或客户端会拒绝启动。 #5827 (alexey-milovidov)
  • 为向后兼容,恢复了函数 quantileTiming 对浮点参数的支持。 #5911 (alexey-milovidov)
  • 在错误信息中显示缺少列的是哪个表。#5768 (Ivan)
  • 禁止不同用户使用相同 query_id 运行查询 #5430 (proller)
  • 用于向 Graphite 发送指标的代码更加健壮。即使在长时间执行多次 RENAME TABLE 操作期间,它也能正常工作。#5875 (alexey-milovidov)
  • 当 ThreadPool 无法调度任务执行时,将显示更详细的错误信息。此更改修复了 #5305 #5801alexey-milovidov
  • 反转 ngramSearch 以使其更直观 #5807 (Danila Kutenin)
  • 在 HDFS 引擎构建器中添加用户解析功能 #5946 (akonyaev90)
  • 更新 max_ast_elements 参数的默认值 #5933 (Artem Konovalov)
  • 新增了“已弃用设置”的概念。已弃用设置 allow_experimental_low_cardinality_type 仍可使用,但不会产生任何效果。0f15c01c6802f7ce1a1494c12c846be8c98944cd Alexey Milovidov

性能改进

  • 增加用于从 Merge 表执行 SELECT 的流数量,以实现线程更均匀的分布。新增设置 max_streams_multiplier_for_merge_tables。修复了 #5797 #5915 (alexey-milovidov)

构建/测试/打包改进

向后不兼容的变更

  • 此版本中的 Kafka 表引擎不可用。
  • 对新的 MergeTree 表默认启用 adaptive_index_granularity = 10MB。如果你在 19.11+ 版本上创建了新的 MergeTree 表,则无法降级到 19.6 之前的版本。 #5628 (alesapin)
  • 移除了供 Yandex.Metrica 使用的、已过时且未公开文档的内置字典。函数 OSInSEInOSToRootSEToRootOSHierarchySEHierarchy 将不再可用。如果你在使用这些函数,请发送邮件至 [email protected]。注意:在最后一刻我们决定暂时保留这些函数。 #5780 (alexey-milovidov)

ClickHouse 版本 19.10

ClickHouse 版本 19.10.1.5,2019-07-12

新特性

  • 新增列编解码器:T64。适用于 (U)IntX/EnumX/Data(Time)/DecimalX 列。对于取值恒定或取值范围很小的列效果较好。该编解码器本身允许在无需重新压缩的情况下扩大或缩小数据类型。#5557 (Artem Zuikov)
  • 新增数据库引擎 MySQL,允许查看远程 MySQL 服务器中的所有表。#5599 (Winter Zhang)
  • 实现 bitmapContains。当第二个 bitmap 只包含一个元素时,其速度是 bitmapHasAny 的两倍。#5535 (Zhichang Yu)
  • 支持 crc32 函数(其行为与 MySQL 或 PHP 中完全一致)。如果你需要的是哈希函数,请不要使用它。#5661 (Remen Ivan)
  • 实现了 SYSTEM START/STOP DISTRIBUTED SENDS 查询,用于控制对 Distributed 表的异步插入。#4935 (Winter Zhang)

Bug 修复

  • 在执行 mutation 时,忽略查询执行限制以及用于合并操作的最大 part 大小限制。#5659 (Anton Popov)
  • 修复可能导致正常数据块被去重(极其罕见)以及插入重复数据块(较常见)的 bug。#5549 (alesapin)
  • 修复函数 arrayEnumerateUniqRanked 在参数为空数组时的行为问题。#5559 (proller)
  • 如果没有拉取任何消息的意图,则不要订阅 Kafka 主题。#5698 (Ivan)
  • 让设置项 join_use_nulls 对不能出现在 Nullable 中的类型不产生任何效果。#5700 (Olga Khvostikova)
  • 修复 Incorrect size of index granularity 错误。#5720 (coraxster)
  • 修复 Float 转 Decimal 时的溢出问题。#5607 (coraxster)
  • 在调用 WriteBufferFromHDFS 析构函数时刷新缓冲区,从而修复向 HDFS 写入的问题。#5684 (Xindong Peng)

改进

性能改进

  • 新增在 MergeTree 列末尾写入最终标记的功能。这可以避免对超出表数据范围的键进行无用读取。仅在使用自适应索引粒度时启用。#5624 (alesapin)
  • 通过减少 stat 系统调用次数,提高了在非常慢的文件系统上 MergeTree 表的性能。#5648 (alexey-milovidov)
  • 修复了在 19.6 版本中引入的,从 MergeTree 表读取时的性能下降问题。修复 #5631。#5633 (alexey-milovidov)

构建/测试/打包改进

  • 实现了一个用于测试的 ZooKeeper 接口实现 TestKeeper #5643 (alexey-milovidov) (levushkin aleksej)
  • 从现在开始,.sql 测试可以按服务器隔离、并行运行,并使用随机数据库。这样可以更快地运行测试,添加具有自定义服务器配置的新测试,并确保不同测试之间不会互相影响。#5554 (Ivan)
  • 从性能测试中移除了 <name><metrics> #5672 (Olga Khvostikova)
  • 修复了 Pretty 格式的 "select_format" 性能测试 #5642 (alexey-milovidov)

ClickHouse Release 19.9

ClickHouse Release 19.9.3.31, 2019-07-05

Bug Fix

  • 修复 Delta 编解码器中的段错误,该错误会影响值长度小于 32 位的列。此缺陷会导致随机内存损坏。 #5786 (alesapin)
  • 修复在检查包含 LowCardinality 列的 part 时出现的罕见错误。 #5832 (alesapin)
  • 修复在对包含非物理列的 block 进行 TTL merge 时的段错误。 #5819 (Anton Popov)
  • 修复低优先级查询可能无限休眠的潜在问题。 #5842 (alexey-milovidov)
  • 修复 ClickHouse 将默认时区判定为 UCT 而不是 UTC 的问题。 #5828 (alexey-milovidov)
  • 修复一个 bug,该 bug 会导致在分布式执行 DROP/ALTER/TRUNCATE/OPTIMIZE ON CLUSTER 查询时,先在 follower 副本上而不是在 leader 副本上执行。现在这些查询将直接在 leader 副本上执行。 #5757 (alesapin)
  • 修复一个竞争条件,该问题会导致在执行 SYSTEM FLUSH LOGS 查询后,一些查询不会立即出现在 query_log 中。 #5685 (Anton Popov)
  • evalMLModel 函数补充对常量参数的支持。 #5820 (alexey-milovidov)

ClickHouse Release 19.9.2.4, 2019-06-24

New Feature

  • system.parts 表中显示关于 frozen parts 的信息。 #5471 (proller)
  • 如果未在参数中设置密码,则在 TTY 上启动 clickhouse-client 时向客户端询问密码。 #5092 (proller)
  • 为 Decimal 类型实现 dictGetdictGetOrDefault 函数。 #5394 (Artem Zuikov)

Improvement

  • Debian init:添加服务停止超时时间。 #5522 (proller)
  • 添加一个默认禁用的设置,用于创建带有可疑 LowCardinality 类型的表。 #5448 (Olga Khvostikova)
  • 当在 evalMLMethod 函数中不以 State 形式使用时,回归函数会返回模型权重。 #5411 (Quid37)
  • 重命名并改进回归方法。 #5492 (Quid37)
  • 使字符串搜索器的接口更清晰。 #5586 (Danila Kutenin)

Bug Fix

  • 修复 Kafka 中潜在的数据丢失 #5445 (Ivan)
  • 修复在以零列为参数调用时 PrettySpace 格式中可能出现的无限循环问题 #5560 (Olga Khvostikova)
  • 修复了线性模型中 UInt32 溢出的问题。允许对非 const 模型参数调用 eval ML 模型。#5516 (Nikolai Kochetov)
  • 如果指定的索引不存在,ALTER TABLE ... DROP INDEX IF EXISTS ... 不应抛出异常 #5524 (Gleb Novikov)
  • 修复在标量子查询中使用 bitmapHasAny 时出现的段错误 #5528 (Zhichang Yu)
  • 修复了一个错误:在清空 DNS 缓存后,复制连接池不会重试解析主机。 #5534 (alesapin)
  • 修复了 ReplicatedMergeTree 上 ALTER ... MODIFY TTL 的问题。#5539 (Anton Popov)
  • 修复向带有 MATERIALIZED 列的 Distributed 表执行 INSERT 时的问题 #5429 (Azat Khuzhin)
  • 修复在截断 Join 存储时出现的 bad alloc 问题 #5437 (TCeason)
  • 在最近几个版本的 tzdata 软件包中,一些文件现在是符号链接。用于检测默认时区的现有机制因此被破坏,对某些时区会返回错误的名称。现在至少在提供 TZ 的情况下,我们会强制将时区名称设置为 TZ 的内容。#5443Ivan
  • 修复了在极少数情况下使用 MultiVolnitsky 搜索器时的问题:当常量 needle 的总长度至少为 16KB 时,算法会遗漏或覆盖之前的结果,从而可能导致 multiSearchAny 的结果不正确。#5588 (Danila Kutenin)
  • 修复了 ExternalData 请求的设置无法复用 ClickHouse 设置的问题。此外,目前由于名称存在歧义(在 external data 中可以被解释为表格式,而在查询中可以被解释为设置),date_time_input_formatlow_cardinality_allow_in_native_format 这两个设置暂时无法使用。#5455 (Danila Kutenin)
  • 修复了仅从文件系统删除数据片段而未从 Zookeeper 中删除时会出现的 Bug。 #5520 (alesapin)
  • 从 MySQL 协议中移除调试日志 #5478 (alexey-milovidov)
  • 在 DDL 查询处理过程中忽略 ZNONODE #5489 (Azat Khuzhin)
  • 修复在包含不同类型的 UNION ALL 中结果列的类型问题。在某些情况下,结果列的数据与列类型不一致。 #5503 (Artem Zuikov)
  • dictGetT 函数中遇到错误的整数时抛出异常,而不是直接崩溃。#5446 (Artem Zuikov)
  • 修复 system.dictionaries 表中哈希字典的 element_countload_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 路径和 Windows 路径。#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。 #4715 (Yuriy Baranov)
  • 添加 toDecimal*OrZerotoDecimal*OrNull 函数。 #5291 (Artem Zuikov)
  • 为函数 quantilequantilesmedianquantileExactWeightedquantilesExactWeightedmedianExactWeighted 增加对 Decimal 类型的支持。#5304 (Artem Zuikov)
  • 添加了 toValidUTF8 函数,用于将所有无效的 UTF-8 字符替换为替换字符 �(U+FFFD)。 #5322 (Danila Kutenin)
  • 添加了 format 函数。使用常量格式模式(简化版 Python 格式模式)对参数中列出的字符串进行格式化。#5330 (Danila Kutenin)
  • 添加了 system.detached_parts 表,用于存储 MergeTree 表中已分离数据部件(detached parts)的信息。 #5353 (akuzm)
  • 新增 ngramSearch 函数,用于计算 needle 与 haystack 之间的非对称差异。#5418#5422 (Danila Kutenin)
  • 使用聚合函数接口实现了基础机器学习方法(随机线性回归和逻辑回归)。提供多种模型权重更新策略(简单梯度下降、动量法、Nesterov 方法)。同时支持自定义大小的小批量(mini-batch)。 #4943 (Quid37)
  • 实现 geohashEncodegeohashDecode 函数。#5003Vasily 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:通过将初始种子与列名(而非列位置)组合,为每一列派生种子值。此功能用于转换包含多个关联表的数据集,以便在转换后这些表之间仍然可以进行 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)
  • RowRefList 的批处理版本,用于 ALL JOINS。 #5267 (Artem Zuikov)
  • clickhouse-server:提供更详细的 listen 错误消息。#5268 (proller)
  • 在 clickhouse-copier 中为 <sharding_key> 所使用的函数增加字典支持 #5270 (proller)
  • 新增配置项 kafka_commit_every_batch 用于控制 Kafka 提交策略。 它允许设置提交模式:在处理完每一批消息后提交,或在整个数据块写入存储后再提交。这是在某些极端情况下,在可能丢失部分消息与可能重复读取消息之间进行的权衡。 #5308 (Ivan)
  • 使 windowFunnel 支持更多无符号整数类型。 #5320 (sundyli)
  • 允许在 Merge 引擎中隐藏虚拟列 _table#5325 (Ivan)
  • 使 sequenceMatch 聚合函数支持其他无符号整数类型 #5339 (sundyli)
  • 当校验和不匹配且很可能由硬件故障导致时,提供更清晰的错误消息。#5355 (alexey-milovidov)
  • 检查 StorageMerge 所依赖的底层表是否支持采样 #5366 (Ivan)
  • 在外部字典中使用完 MySQL 连接后将其关闭。此更改与问题 #893 相关。#5395 (Clément Rodriguez)
  • 改进 MySQL Wire 协议。将格式名称更改为 MySQLWire。使用 RAII 调用 RSA_free。如果无法创建上下文则禁用 SSL。 #5419 (Yuriy Baranov)
  • clickhouse-client:允许在历史文件无法访问时也能运行(只读、没有磁盘空间、文件是目录等)。 #5431 (proller)
  • 在对 Distributed 表执行异步 INSERT 时遵从查询设置。 #4936 (TCeason)
  • 已将函数 leastSqr 重命名为 simpleLinearRegressionLinearRegression 重命名为 linearRegressionLogisticRegression 重命名为 logisticRegression#5391 (Nikolai Kochetov)

性能改进

  • ALTER MODIFY 查询中对非复制的 MergeTree 表的部分进行并行处理。#4639 (Ivan Kush)
  • 优化正则表达式提取。#5193 #5191 (Danila Kutenin)
  • 如果右连接键列仅在 JOIN ON 子句中使用,则不要将其添加到连接结果中。#5260 (Artem Zuikov)
  • 在首次获得空响应后冻结 Kafka 缓冲区,从而避免在某些行解析流中针对空结果多次调用 ReadBuffer::next()#5283 (Ivan)
  • 对多参数的 concat 函数进行优化。#5357 (Danila Kutenin)
  • 查询优化:在将逗号连接或交叉连接重写为内连接时,允许下推 IN 谓词。#5396 (Artem Zuikov)
  • 将我们的 LZ4 实现升级为参考实现,以加快解压缩速度。#5070 (Danila Kutenin)
  • 实现了基于 kxsort 的 MSD 基数排序以及部分排序。#5129 (Evgenii Pravda)

Bug 修复

  • 修复在存在 JOIN 时下推所需列的问题。#5192 (Winter Zhang)
  • 修复当 ClickHouse 由 systemd 运行时,命令 sudo service clickhouse-server forcerestart 未按预期工作的问题。#5204 (proller)
  • 修复 DataPartsExchange 中的 HTTP 错误码(用于服务器间通信并监听 9009 端口的 HTTP 服务器在出错时也始终返回 200)。#5216 (proller)
  • 修复 SimpleAggregateFunctionString 长度大于 MAX_SMALL_STRING_SIZE 时的问题。#5311 (Azat Khuzhin)
  • 修复在 IN 中从 Decimal 转换为 Nullable(Decimal) 的错误,并支持其他 Decimal 到 Decimal 的转换(包括不同的小数位数)。#5350 (Artem Zuikov)
  • 修复 simdjson 库中 FPU 状态被破坏的问题,该问题会导致 uniqHLLuniqCombined 聚合函数以及 log 等数学函数的计算结果错误。#5354 (alexey-milovidov)
  • 修复 JSON 函数中处理常量 / 非常量混合场景时的问题。#5435 (Vitaly Baranov)
  • 修复 retention 函数。现在一行数据中所有满足条件的项都会被添加到该行的数据状态中。#5119 (小路)
  • 修复 quantileExact 在使用 Decimal 时的结果类型问题。#5304 (Artem Zuikov)

文档

构建/测试/打包方面的改进

ClickHouse 版本 19.7

ClickHouse 版本 19.7.5.29,2019-07-05

Bug 修复

  • 修复了某些包含 JOIN 的查询中的性能回归问题。 #5192 (Winter Zhang)

ClickHouse 版本 19.7.5.27,2019-06-09

新特性

  • 添加了与数组函数 hasAnyhasAll 类似的位图函数 bitmapHasAnybitmapHasAll#5279 (Sergi Vladykin)

Bug 修复

  • 修复在包含 Null 值时 minmax 索引导致的段错误问题。#5246 (Nikita Vasilev)
  • 将 LIMIT BY 中的所有输入列标记为必需的输出列,修复某些分布式查询中的 "Not found column" 错误。#5407 (Constantin S. Pan)
  • 修复在带有 DEFAULT 的列上执行 SELECT .. PREWHERE 时出现的 "Column '0' already exists" 错误。#5397 (proller)
  • 修复在 ReplicatedMergeTree 上执行 ALTER MODIFY TTL 查询的问题。#5539 (Anton Popov)
  • 当 Kafka 消费者启动失败时,不再导致服务器崩溃。#5285 (Ivan)
  • 修复导致 bitmap 函数产生错误结果的问题。#5359 (Andy Yang)
  • 修复哈希字典的 element_count 计算(不再包含重复项)。#5440 (Azat Khuzhin)
  • 使用环境变量 TZ 的内容作为时区名称,这有助于在某些情况下正确检测默认时区。#5443 (Ivan)
  • 不再在 dictGetT 函数中尝试转换整数,因为该转换行为不正确,改为抛出异常。#5446 (Artem Zuikov)
  • 修复 ExternalData HTTP 请求中的设置问题。#5455 (Danila Kutenin)
  • 修复仅从文件系统删除数据分片而未从 ZooKeeper 中删除的问题。#5520 (alesapin)
  • 修复 bitmapHasAny 函数中的段错误问题。#5528 (Zhichang Yu)
  • 修复复制连接池在 DNS 缓存已被清除的情况下仍不会重试解析主机的错误。#5534 (alesapin)
  • 修复 DROP INDEX IF EXISTS 查询。现在在指定索引不存在时,ALTER TABLE ... DROP INDEX IF EXISTS ... 查询不会抛出异常。#5524 (Gleb Novikov)
  • 修复 UNION ALL 的超类型列问题。此前在结果列的数据和列类型上可能出现不一致的情况。#5503 (Artem Zuikov)
  • 在处理 DDL 查询时跳过 ZNONODE。此前如果另一个节点从任务队列中删除了 znode,而本节点尚未处理它、但已经获取到子节点列表,则会终止 DDLWorker 线程。#5489 (Azat Khuzhin)
  • 修复向带有 MATERIALIZED 列的 Distributed() 表执行 INSERT 时的问题。#5429 (Azat Khuzhin)

ClickHouse 版本 19.7.3.9,2019-05-30

新特性

  • 允许限制用户可指定的设置取值范围。 这些约束可以在用户设置配置文件中进行配置。 #4931 (Vitaly Baranov)
  • 为函数 groupUniqArray 增加第二个版本,带有可选的 max_size 参数,用于限制结果数组的大小。其行为类似于 groupArray(max_size)(x) 函数。 #5026 (Guillaume Tassery)
  • 对于 TSVWithNames/CSVWithNames 输入文件格式,现在可以从文件头中确定列顺序。 这由 input_format_with_names_use_header 参数控制。 #5081 (Alexander)

Bug 修复

  • 在合并期间使用 uncompressed_cache + JOIN 时发生崩溃 (#5197) #5133 (Danila Kutenin)
  • 对 system 表执行 clickhouse-client 查询时发生段错误。#5066 #5127 (Ivan)
  • 通过 KafkaEngine 在高负载下导致数据丢失 (#4736) #5080 (Ivan)
  • 修复了一个极其罕见的数据竞争问题:在执行带有 UNION ALL 的查询时,如果涉及至少两个对 system.columns、system.tables、system.parts、system.parts_tables 或 Merge 系列表的 SELECT,并且同时对相关表的列执行 ALTER 操作,则可能会触发该问题。#5189 (alexey-milovidov)

性能改进

文档

构建/测试/打包改进

ClickHouse 版本 19.6

ClickHouse 版本 19.6.3.18,2019-06-13

Bug 修复

  • 修复了来自表函数 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)

实验性特性

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

改进

  • 为函数 substringUTF8 新增对非常量以及负值 size 和 length 参数的支持。#4989 (alexey-milovidov)
  • 禁用在 LEFT JOIN 中对右表、RIGHT JOIN 中对左表,以及 FULL JOIN 中对两侧表的谓词下推(push-down)。这修复了某些情况下错误的 JOIN 结果。#4846 (Ivan)
  • clickhouse-copier:自动从 --task-file 选项指定的文件中上传任务配置。#4876 (proller)
  • 为存储工厂(storage factory)和表函数工厂(table functions factory)增加拼写错误处理器。#4891 (Danila Kutenin)
  • 在没有子查询的多表 JOIN 中支持星号和限定星号(qualified asterisk)。#4898 (Artem Zuikov)
  • 让缺失列的错误信息更易于理解、更友好。#4915 (Artem Zuikov)

性能改进

向后不兼容的更改

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

Bug 修复

  • 修复了 clickhouse-copier 中潜在的空指针解引用问题。#4900 (proller)
  • 修复了在包含 JOIN + ARRAY JOIN 的查询中出现的错误。#4938 (Artem Zuikov)
  • 修复了在一个字典通过 engine=Dictionary 的数据库依赖于另一个字典时,服务器启动时可能发生的挂起问题。#4962 (Vitaly Baranov)
  • 部分修复 distributed_product_mode = local。现在可以通过表别名在 where/having/order by/... 中引用本地表的列。如果表没有别名则抛出异常。目前仍然无法在没有表别名的情况下访问这些列。#4986 (Artem Zuikov)
  • 修复了在 SELECT DISTINCTJOIN 一起使用时可能出现的错误结果。#5001 (Artem Zuikov)
  • 修复了一个极少见的数据竞争问题:在执行包含至少两个来自 system.columns、system.tables、system.parts、system.parts_tables 或 Merge 系列表的 SELECT,并通过 UNION ALL 合并,同时对相关表的列执行 ALTER 操作的查询时,可能会触发该问题。#5189 (alexey-milovidov)

构建 / 测试 / 打包改进

  • 修复了在不同主机上运行 clickhouse-server 时出现的测试失败问题 #4713 (Vasily Nemkov)
  • clickhouse-test:在非 TTY 环境中禁用颜色控制序列。#4937 (alesapin)
  • clickhouse-test:允许使用任意测试数据库(在可能的情况下移除 test. 限定)#5008 (proller)
  • 修复 ubsan 错误 #5037 (Vitaly Baranov)
  • 将 Yandex LFAlloc 添加到 ClickHouse,以便使用不同方式为 MarkCache 和 UncompressedCache 数据分配内存,从而更可靠地捕获段错误 #4995 (Danila Kutenin)
  • 用于辅助回溯移植(backport)和编写变更日志的 Python 工具。#4949 (Ivan)

ClickHouse 版本 19.5

ClickHouse 版本 19.5.4.22,2019-05-13

Bug 修复

  • 修复了在 bitmap* 函数中可能发生的崩溃。 #5220 #5228 (Andy Yang)
  • 修复了一个极少出现的数据竞争问题:在执行包含至少两个从 system.columns、system.tables、system.parts、system.parts_tables 或 Merge 系列表进行 SELECT 的 UNION ALL 查询时,如果同时对相关表的列执行 ALTER 操作,可能会触发该问题。 #5189 (alexey-milovidov)
  • 修复错误 Set for IN is not created yet in case of using single LowCardinality column in the left part of IN。当 LowCardinality 列是主键的一部分时会出现此错误。#5031 #5154 (Nikolai Kochetov)
  • 修改 retention 函数行为:之前如果一行同时满足第一个条件和第 N 个条件,则仅将第一个满足的条件加入数据状态。现在会将该行中所有满足的条件都加入数据状态。 #5119 (小路)

ClickHouse 版本 19.5.3.8,2019-04-18

Bug 修复

ClickHouse 版本 19.5.2.6,2019-04-15

新特性

  • 添加了基于 Hyperscan 的多模式正则表达式匹配(函数 multiMatchAnymultiMatchAnyIndexmultiFuzzyMatchAnymultiFuzzyMatchAnyIndex)。#4780#4841Danila Kutenin
  • 添加了 multiSearchFirstPosition 函数。#4780Danila Kutenin
  • 为表实现了针对每行的预定义表达式过滤器。#4792Ivan
  • 新增了一种基于 Bloom Filter 的数据跳过索引类型(可用于 equalinlike 函数)。#4499Nikita Vasilev
  • 新增 ASOF JOIN,用于执行将数据与最新已知值关联起来的查询。#4774 #4867 #4863 #4875Martijn BakkerArtem Zuikov
  • 将多个 COMMA JOIN 重写为 CROSS JOIN,然后在可能的情况下再将其重写为 INNER JOIN#4661Artem Zuikov

改进

  • topKtopKWeighted 现在支持自定义 loadFactor(修复问题 #4252)。#4634Kirill Danshin
  • 允许在没有采样的表上使用 parallel_replicas_count > 1(对于这类表,该设置会被直接忽略)。在之前的版本中,这会导致异常。#4637Alexey Elymanov
  • 支持 CREATE OR REPLACE VIEW。允许在单条语句中创建视图或设置新的定义。#4654Boris Granveaud
  • Buffer 表引擎现在支持 PREWHERE#4671Yangkuan Liu
  • 新增支持在 zookeeper 中缺少元数据时,以 readonly 模式启动副本表。#4691alesapin
  • 修复了 clickhouse-client 中进度条闪烁的问题。该问题在对流式查询使用 FORMAT Null 时最为明显。#4811alexey-milovidov
  • 允许按用户级别禁用使用 hyperscan 库的函数,以限制潜在的过度且不可控的资源使用。#4816alexey-milovidov
  • 在所有错误日志中增加版本号记录。#4824proller
  • multiMatch 函数添加了限制,要求字符串大小必须能适配到 unsigned int 的范围。同时为 multiSearch 函数添加了参数数量上限。#4834Danila Kutenin
  • 改进了 Hyperscan 中临时缓冲区的使用和错误处理。#4866Danila Kutenin
  • *GraphiteMergeTree 引擎表的表配置中填充 system.graphite_detentions#4584Mikhail f. Shiryaev
  • trigramDistance 函数重命名为 ngramDistance,并添加了更多带有 CaseInsensitiveUTF 的函数。#4602Danila Kutenin
  • 改进了数据跳过索引的计算。#4640Nikita Vasilev
  • 将普通列、DEFAULTMATERIALIZEDALIAS 列保存在同一个列表中(修复问题 #2867)。#4707Alex Zatelepin

Bug 修复

  • 在内存分配失败时避免调用 std::terminate。现在会按预期抛出 std::bad_alloc 异常。 #4665 (alexey-milovidov)
  • 修复了从缓冲区读取 capnproto 的问题。有时文件无法通过 HTTP 成功加载。#4674Vladislav
  • 修复在执行 OPTIMIZE TABLE FINAL 查询时出现的错误 Unknown log entry type: 0#4683 (Amos Bird)
  • hasAnyhasAll 函数传入错误参数可能会导致段错误(segfault)。 #4698 (alexey-milovidov)
  • 在执行 DROP DATABASE dictionary 查询时可能会发生死锁。 #4701 (alexey-milovidov)
  • 修复 medianquantile 函数中的未定义行为。 #4702 (hcz)
  • 修复当 network_compression_method 使用小写时的压缩级别检测问题。该问题出现在 v19.1 中。#4706 (proller)
  • 修复了忽略 <timezone>UTC</timezone> 设置的问题(修复问题 #4658)。#4718proller
  • 修复 histogram 函数在 Distributed 表上的行为。#4741 (olegkv)
  • 修复了 TSan 报告 destroy of a locked mutex#4742 (alexey-milovidov)
  • 修复了由于系统日志使用中的竞争条件导致在关闭时出现的 TSan 报告。修复了在启用 part_log 时,关闭过程中可能出现的 use-after-free 问题。#4758 (alexey-milovidov)
  • 在发生错误时,修复 ReplicatedMergeTreeAlterThread 中对部分的重新检查。#4772 (Nikolai Kochetov)
  • 对中间 aggregate function 状态进行算术运算在使用常量参数(例如子查询结果)时不起作用。 #4776 (alexey-milovidov)
  • 在元数据中始终使用反引号包裹列名。否则,将无法创建包含名为 index 的列的表(由于元数据中的 ATTACH 查询格式错误,服务器将无法重启)。#4782 (alexey-milovidov)
  • 修复在 Distributed 表上执行 ALTER ... MODIFY ORDER BY 时的崩溃。#4790 (TCeason)
  • 修复在启用 enable_optimize_predicate_expressionJOIN ON 导致的段错误。 #4794 (Winter Zhang)
  • 修复从 Kafka 消费 protobuf 消息后多插入一行记录的错误。 #4808 (Vitaly Baranov)
  • 修复在非空列与可空列之间执行 JOIN 时的崩溃。修复在启用 ANY JOIN 且设置 join_use_nulls 时,对右侧键中的 NULLs 处理不正确的问题。#4815 (Artem Zuikov)
  • 修复 clickhouse-copier 中的段错误。 #4835 (proller)
  • 修复了在对 system.tables 执行 SELECT 时,如果表被并发重命名或修改可能出现的竞争条件。 #4836 (alexey-milovidov)
  • 修复了在获取已过期的数据分片时发生的数据竞争问题。#4839 (alexey-milovidov)
  • 修复了在对 MergeTree 系列表执行 RENAME 操作时可能发生的罕见数据竞争问题。 #4844 (alexey-milovidov)
  • 修复了函数 arrayIntersect 中的段错误。当混合使用常量参数和普通参数调用该函数时,可能会发生段错误。#4847 (Lixiang Qian)
  • 修复了在罕见情况下从 Array(LowCardinality) 列读取数据的问题,该问题会在列中包含一长串空数组时出现。 #4850 (Nikolai Kochetov)
  • 修复在 FULL/RIGHT JOIN 中,当连接条件包含可为 NULL 和不可为 NULL 的列时出现的崩溃问题。#4855 (Artem Zuikov)
  • 修复在副本之间获取数据分片时抛出的 No message received 异常。#4856 (alesapin)
  • 修复了在单个数组中存在多个重复值时,arrayIntersect 函数结果不正确的问题。 #4871 (Nikolai Kochetov)
  • 修复了在并发执行 ALTER COLUMN 查询时可能导致服务器崩溃的竞争条件(修复问题 #3421)。 #4592 (Alex Zatelepin)
  • 修复在包含常量列的 FULL/RIGHT JOIN 中出现错误结果的问题。 #4723 (Artem Zuikov)
  • 修复使用星号的 GLOBAL JOIN 中的重复项。 #4705 (Artem Zuikov)
  • 在未指定列类型时,修复对列 CODEC 执行 ALTER MODIFY 时的参数推导问题。 #4883 (alesapin)
  • URL 包含片段但不包含查询字符串时,函数 cutQueryStringAndFragment()queryStringAndFragment() 现在能够正确工作。#4894 (Vitaly Baranov)
  • 修复在将 min_bytes_to_use_direct_io 设置为大于零时出现的罕见错误,该错误会在线程需要在列文件中向后定位时发生。 #4897 (alesapin)
  • 修复对带有 LowCardinality 参数的聚合函数的错误参数类型处理(修复问题 #4919)。#4922Nikolai 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 搜索器,对于包含大量待查模式(needles)或许多相似二元组(bigrams)的查询,可带来约 5–10% 的搜索性能提升。 #4862 (Danila Kutenin)
  • 修复在 use_uncompressed_cache 设置大于 0 且所有读取数据都在缓存中的情况下出现的性能问题。 #4913 (alesapin)

构建/测试/打包改进

  • 加强 debug 构建:更细粒度的内存映射和 ASLR;为 mark 缓存和索引添加内存保护。这有助于在 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> 设置的问题(修复了 issue #4658)。 #4718 (proller)
  • 修正 Distributed 表上 histogram 函数的行为。 #4741 (olegkv)
  • 修复了 tsan 报告的 destroy of a locked mutex 问题。 #4742 (alexey-milovidov)
  • 修复了由于系统日志使用中的竞争条件导致在关闭过程中触发的 TSan 报告。修复了在启用 part_log 时,关闭时可能出现的 use-after-free 问题。 #4758 (alexey-milovidov)
  • 在出错时修复 ReplicatedMergeTreeAlterThread 中对数据部件的重新检查。 #4772 (Nikolai Kochetov)
  • 对中间 aggregate function 状态执行算术运算在处理常量参数(例如子查询结果)时无法正常工作。#4776alexey-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 TABLE 操作时可能发生的罕见数据竞争问题。 #4844 (alexey-milovidov)
  • 修复了函数 arrayIntersect 的段错误。当以常量参数和普通参数混用的方式调用该函数时,可能会发生段错误。 #4847 (Lixiang Qian)
  • 修复了在罕见情况下从 Array(LowCardinality) 列读取数据的问题,该问题会在列包含长序列空数组时出现。 #4850 (Nikolai Kochetov)
  • 修复在副本之间获取数据分片时出现的 No message received 异常。#4856 (alesapin)
  • 修复在单个数组中存在多个重复值时,arrayIntersect 函数返回结果错误的问题。 #4871 (Nikolai Kochetov)
  • 修复并发执行 ALTER COLUMN 查询时的竞争条件,该问题可能导致服务器崩溃(修复问题 #3421)。#4592Alex Zatelepin
  • 在未指定列类型时,修复对列 CODEC 执行 ALTER MODIFY 时的参数推导逻辑。 #4883 (alesapin)
  • 函数 cutQueryStringAndFragment()queryStringAndFragment() 现在在 URL 包含片段但没有查询字符串时可以正确工作。#4894 (Vitaly Baranov)
  • 修复在将 min_bytes_to_use_direct_io 设置为大于零时出现的罕见错误,该错误会在线程需要在列文件中向后移动读指针时触发。 #4897 (alesapin)
  • 修正聚合函数在处理 LowCardinality 参数时的参数类型错误(修复 issue #4919)。#4922Nikolai Kochetov
  • 修复 toISOWeek 函数在 1970 年的结果。#4988alexey-milovidov
  • 修复在 ReplicatedMergeTree* 表族上使用 ON CLUSTER 执行 DROPTRUNCATEOPTIMIZE 查询时出现的重复执行问题。#4991 (alesapin)

改进

  • 将普通列、DEFAULTMATERIALIZEDALIAS 列维护在同一个列表中(修复问题 #2867)。#4707Alex Zatelepin

ClickHouse 版本 19.4.3.11,2019-04-02

错误修复

  • 修复在 FULL/RIGHT JOIN 中,当连接条件一侧为 Nullable 而另一侧为非 Nullable 时发生的崩溃。#4855Artem Zuikov
  • 修复 clickhouse-copier 中的段错误(segmentation fault)。#4835proller

构建/测试/打包改进

ClickHouse 版本 19.4.2.7,2019-03-30

错误修复

  • 修复在罕见情况下,从 Array(LowCardinality) 列读取数据时的问题:当列包含一长串空数组时会出错。#4850Nikolai Kochetov

ClickHouse 版本 19.4.1.3,2019-03-19

错误修复

  • 修复包含 LIMIT BYLIMIT 的远程查询。在此之前,如果远程查询同时使用 LIMIT BYLIMITLIMIT 可能会先于 LIMIT BY 执行,从而导致结果被过滤得过多。#4708Constantin S. Pan

ClickHouse 版本 19.4.0.49,2019-03-09

新功能

  • Protobuf 格式添加了完整支持(输入、输出以及嵌套数据结构)。#4174 #4493 (Vitaly Baranov)
  • 基于 Roaring Bitmaps 新增了位图函数。#4207 (Andy Yang) #4568 (Vitaly Baranov)
  • 新增对 Parquet 格式的支持。#4448 (proller)
  • 为模糊字符串比较新增了 N-gram 距离,类似于 R 语言中的 q-gram 度量。#4466 (Danila Kutenin)
  • 将 Graphite rollup 规则从独立的聚合和保留模式中进行了合并。#4426 (Mikhail f. Shiryaev)
  • 添加了 max_execution_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)

Bug 修复

  • 本次发布还包含 19.3 和 19.1 中的所有错误修复。
  • 修复了数据跳过索引中的一个错误:在执行 INSERT 后 granule 的顺序不正确。#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,该问题可能在执行 SELECT 的同时并发删除 MergeTree 表时出现。#4608 (Alex Zatelepin)
  • ODBC 驱动对 LowCardinality 数据类型的兼容性。#4381 (proller)
  • FreeBSD:修复 AIOcontextPool: Found io_event with unknown id 0 错误。#4438 (urgordeadbeef)
  • 无论配置如何,都会创建 system.part_log 表。#4483 (alexey-milovidov)
  • 修复缓存字典中 dictIsIn 函数的未定义行为。 #4515 (alesapin)
  • 修复了这样一种死锁问题:在存在并发 DDL 查询时,当一个 SELECT 查询多次锁定同一张表(例如由不同线程发起或在执行多个子查询时)会导致死锁。 #4535 (Alex Zatelepin)
  • 默认禁用 compile_expressions,直到我们引入自有的 llvm contrib 并可以使用 clangasan 对其进行测试。#4579 (alesapin)
  • clickhouse 外部字典源的 invalidate_query 返回不正确的结果集(为空、包含多于一行或多于一列)时,避免调用 std::terminate。修复了一个问题:无论 lifetime 设置如何,invalidate_query 都会每隔五秒执行一次。 #4583 (alexey-milovidov)
  • 在对以 clickhouse 为源的字典执行 invalidate_query 且该查询涉及 system.dictionaries 表或 Dictionaries 数据库时,避免发生死锁(较为罕见的情况)。 #4599 (alexey-milovidov)
  • 修复了在 WHERE 为空时的 CROSS JOIN 行为。#4598 (Artem Zuikov)
  • 修复了在向函数 replicate 传递常量参数时发生的段错误。 #4603 (alexey-milovidov)
  • 修复谓词优化器中对 lambda 函数的处理。 #4408 (Winter Zhang)
  • 多个 JOIN,多处修复。 #4595 (Artem Zuikov)

改进

  • 支持在 JOIN ON 子句中为右表列使用别名。 #4412 (Artem Zuikov)
  • 多个 JOIN 的结果在子查询中使用时需要正确的结果列名。在结果中用源名称替换扁平别名。 #4474 (Artem Zuikov)
  • 改进对包含 JOIN 的语句的下推逻辑。 #4387 (Ivan)

性能改进

  • 改进“move to PREWHERE”优化的启发式规则。 #4405 (alexey-milovidov)
  • 使用针对 8 位和 16 位键、基于 HashTable API 的合适查找表。 #4536 (Amos Bird)
  • 提升字符串比较的性能。 #4564 (alexey-milovidov)
  • 在单独的线程中清理分布式 DDL 队列,从而不会减慢处理分布式 DDL 任务的主循环。 #4502 (Alex Zatelepin)
  • min_bytes_to_use_direct_io 被设置为 1 时,并非每个文件都以 O_DIRECT 模式打开,因为要读取的数据量有时会被低估为仅一个压缩块的大小。 #4526 (alexey-milovidov)

构建/测试/打包改进

  • 增加对 clang-9 的支持 #4604 (alexey-milovidov)
  • 修复错误的 __asm__ 指令(再次修复) #4621 (Konstantin Podshumok)
  • 添加从命令行为 clickhouse-performance-test 指定设置的功能。 #4437 (alesapin)
  • 将字典测试添加到集成测试中。 #4477 (alesapin)
  • 将网站上基准测试中的查询添加到自动化性能测试中。 #4496 (alexey-milovidov)
  • 外部 lz4 中不存在 xxhash.h,因为它是实现细节,其符号使用 XXH_NAMESPACE 宏进行命名空间处理。当 lz4 作为外部库使用时,xxHash 也必须作为外部库使用,并且依赖方必须与其链接。 #4495 (Orivej Desh)
  • 修复了 quantileTiming 聚合函数可以使用负数或浮点参数调用的情况(从而修复了使用未定义行为检测器(sanitizer)的 fuzz 测试)。 #4506 (alexey-milovidov)
  • 拼写错误修正。 #4531 (sdk2)
  • 修复在 Mac 上的编译问题。 #4371 (Vitaly Baranov)
  • 修复 FreeBSD 和多种非常规构建配置下的构建问题。 #4444 (proller)

ClickHouse 发行版 19.3

ClickHouse 发行版 19.3.9.1,2019-04-02

Bug 修复

  • 修复在对可为空与不可为空列进行 FULL/RIGHT JOIN 时发生的崩溃。 #4855 (Artem Zuikov)
  • 修复 clickhouse-copier 中的段错误。 #4835 (proller)
  • 修复在列包含长序列空数组这一少见情况下,从 Array(LowCardinality) 列读取数据的问题。 #4850 (Nikolai Kochetov)

构建/测试/打包改进

ClickHouse 发行版 19.3.7,2019-03-12

Bug 修复

  • 修复了 #3920 中的错误。该错误表现为随机的缓存损坏(消息为 Unknown codec family codeCannot seek through file)以及段错误。此 Bug 首次出现在 19.1 版本,并存在于 19.1.10 和 19.3.6 之前的版本中。 #4623 (alexey-milovidov)

ClickHouse 发行版 19.3.6,2019-03-02

Bug 修复

  • 当线程池中有超过 1000 个线程时,在线程退出时可能会触发 std::terminateAzat Khuzhin #4485 #4505 (alexey-milovidov)
  • 现在可以创建 ReplicatedMergeTree* 表,这些表可以在无默认值的列上添加注释,也可以创建包含列级 codec 且没有注释和默认值的表。同时还修复了 codec 的比较。 #4523 (alesapin)
  • 修复了使用数组或元组进行 JOIN 时的崩溃。 #4552 (Artem Zuikov)
  • 修复了 clickhouse-copier 中带有 ThreadStatus not created 消息的崩溃。 #4540 (Artem Zuikov)
  • 修复了在使用分布式 DDL 时,服务器关闭时发生的卡死问题。 #4472 (Alex Zatelepin)
  • 修复了在解析列号大于 10 的文本格式时,错误消息中打印的列号不正确的问题。 #4484 (alexey-milovidov)

构建/测试/打包改进

  • 修复了启用 AVX 时的构建问题。#4527 (alexey-milovidov)
  • 基于已知稳定的内核版本启用扩展记账和 IO 记账,而不是基于编译时所在的内核版本。#4541 (nvartolomei)
  • 允许跳过对 core_dump.size_limit 的设置,当设置限制失败时发出警告而不是抛出异常。#4473 (proller)
  • 移除了 Field.cppvoid readBinary(...)inline 关键字。同时合并了多余的 namespace DB 代码块。#4530 (hcz)

ClickHouse Release 19.3.5,2019-02-21

Bug 修复

  • 修复了处理大型 HTTP 插入查询时的错误。#4454 (alesapin)
  • 修复了由于 send_logs_level 设置实现错误导致的与旧版本的向后不兼容问题。#4445 (alexey-milovidov)
  • 修复了在引入列注释后,表函数 remote 的向后不兼容问题。#4446 (alexey-milovidov)

ClickHouse Release 19.3.4,2019-02-16

改进

  • 在执行 ATTACH TABLE 查询时,表索引大小不再计入内存限制,从而避免了表在被 DETACH 之后无法再次 ATTACH 的情况。#4396 (alexey-milovidov)
  • 略微提高了从 ZooKeeper 接收的最大字符串和数组大小限制。这允许在 ZooKeeper 上使用更大的 CLIENT_JVMFLAGS=-Djute.maxbuffer=... 配置后仍能继续工作。#4398 (alexey-milovidov)
  • 即使副本在其队列中已经存在大量节点,也允许修复被遗弃的副本。#4399 (alexey-milovidov)
  • SET 索引增加了一个必需参数(最大存储行数)。#4386 (Nikita Vasilev)

Bug 修复

  • 修复了按单个 LowCardinality 键分组时 WITH ROLLUP 结果错误的问题。#4384 (Nikolai Kochetov)
  • 修复了集合索引中的错误(当一个粒度包含超过 max_rows 行时会删除该粒度)。#4386 (Nikita Vasilev)
  • 大量针对 FreeBSD 的构建修复。#4397 (proller)
  • 修复了在包含相同别名的子查询中进行别名替换时的问题(issue #4110)。#4351 (Artem Zuikov)

构建/测试/打包改进

  • 在 Docker 镜像中支持以无状态测试模式运行 clickhouse-server#4347 (Vasily Nemkov)

ClickHouse 发布 19.3.3,2019-02-13

新功能

  • 新增 KILL MUTATION 语句,用于删除由于某些原因卡住的 mutation。向 system.mutations 表中添加了 latest_failed_partlatest_fail_timelatest_fail_reason 字段,便于排查问题。 #4287 (Alex Zatelepin)
  • 新增聚合函数 entropy,用于计算香农熵(Shannon entropy)。 #4238 (Quid37)
  • 现在可以向服务器发送 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 子句中支持任意常量表达式。 #4246 (k3box)
  • 新增 topKWeighted 聚合函数,它接收一个额外的(无符号整数)权重参数。 #4245 (Andrew Golman)
  • StorageJoin 现在支持 join_any_take_last_row 设置,允许覆盖相同键的现有值。 #3973 (Amos Bird)
  • 新增函数 toStartOfInterval#4304 (Vitaly Baranov)
  • 新增 RowBinaryWithNamesAndTypes 格式。 #4200 (Oleg V. Kozlyuk)
  • 新增 IPv4IPv6 数据类型,并对 IPv* 函数进行了更高效的实现。 #3669 (Vasily Nemkov)
  • 新增函数 toStartOfTenMinutes()#4298 (Vitaly Baranov)
  • 新增 Protobuf 输出格式。 #4005 #4158 (Vitaly Baranov)
  • 为用于数据导入(INSERT)的 HTTP 接口添加了 brotli 支持。 #4235 (Mikhail)
  • 当用户在命令行客户端中输入的函数名或类型存在拼写错误时,新增提示信息。 #4239 (Danila Kutenin)
  • 在服务器的 HTTP 响应头中添加了 Query-Id#4231 (Mikhail)

实验性特性

Bug 修复

  • 修复了在 JOIN ON 部分中因重复列导致的 Not found column 错误。#4279 (Artem Zuikov)
  • 使 START REPLICATED SENDS 命令真正开始执行复制发送。#4229 (nvartolomei)
  • 修复了在使用 Array(LowCardinality) 参数时聚合函数的执行问题。#4055 (KochetovNicolai)
  • 修复了在执行 INSERT ... SELECT ... FROM file(...) 查询时的错误行为:当文件格式为 CSVWithNamesTSVWIthNames 且缺少第一行数据时的处理。 #4297 (alexey-milovidov)
  • 修复了在字典不可用时重新加载字典导致的崩溃问题。该问题首次出现在 19.1.6 版本中。 #4188 (proller)
  • 修复了在右表包含重复行时的 ALL JOIN#4184 (Artem Zuikov)
  • 修复了在 use_uncompressed_cache=1 时出现的段错误,以及因未压缩大小不正确而抛出的异常。此 Bug 出现在 19.1.6 版本中。 #4186 (alesapin)
  • 修复了在比较超过 int16 范围的日期时的 compile_expressions bug。 #4341 (alesapin)
  • 修复了从表函数 numbers(0) 查询时出现的无限循环问题。 #4280 (alexey-milovidov)
  • 暂时禁用针对 ORDER BY 的谓词优化。 #3890 (Winter Zhang)
  • 修复了在旧 CPU 上使用 base64 函数时出现的 Illegal instruction 错误。该错误目前仅在使用 gcc-8 编译 ClickHouse 时被复现。#4275 (alexey-milovidov)
  • 修复了通过 TLS 连接与 PostgreSQL ODBC Driver 交互时出现的 No message received 错误,同时也修复了使用 MySQL ODBC Driver 时发生的段错误。 #4170 (alexey-milovidov)
  • 修复了在条件运算符(函数 if)的分支中使用 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 在退出时为命令行建议加载数据的过程中可能会发生段错误(segfault)。#4317 (alexey-milovidov)
  • 修复了一个错误:执行包含 IN 运算符的 mutation 时会产生错误结果。#4099 (Alex Zatelepin)
  • 已修复错误:如果存在使用 Dictionary 引擎的数据库,所有字典会在服务器启动时被强制加载,而如果其中某个字典的 ClickHouse 源指向 localhost,则该字典无法加载。 #4255 (alexey-milovidov)
  • 修复了在服务器关闭期间再次尝试创建系统日志时出现的错误。#4254 (alexey-milovidov)
  • joinGet 函数中返回正确的类型并妥善处理锁。#4153 (Amos Bird)
  • 新增 sumMapWithOverflow 函数。 #4151 (Léo Ercolanelli)
  • 修复了与 allow_experimental_multiple_joins_emulation 相关的段错误。 52de2c (Artem Zuikov)
  • 修复了 DateDateTime 比较不正确的问题。#4237 (valexey)
  • 修复了在启用 undefined behavior sanitizer 时的模糊测试:为 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 和未压缩 cache 的大小。#4240 (Lopatin Konstantin)
  • CREATE TABLE 查询中增加了关键字 INDEX。名为 index 的列必须使用反引号或双引号进行引用:`index`#4143 (Nikita Vasilev)
  • sumMap 现在会提升结果类型以避免溢出。旧的 sumMap 行为可以通过使用 sumMapWithOverflow 函数实现。#4151 (Léo Ercolanelli)

性能改进

  • 对于没有 LIMIT 的查询,将 std::sort 替换为 pdqsort#4236 (Evgenii Pravda)
  • 现在服务器会复用全局线程池中的线程。这会在某些极端情况下影响性能。#4150 (alexey-milovidov)

改进

  • 为 FreeBSD 实现了 AIO 支持。 #4305 (urgordeadbeef)
  • SELECT * FROM a JOIN b USING a, b 现在只返回左表中的 ab 列。 #4141 (Artem Zuikov)
  • 允许客户端选项 -C-c 选项一样使用。 #4232 (syominsergey)
  • 现在在不带参数使用选项 --password 时,会从 stdin 请求密码。 #4230 (BSD_Conqueror)
  • 为包含 LIKE 表达式或正则表达式的字符串字面量中未转义的元字符添加了高亮显示。 #4327 (alexey-milovidov)
  • 添加了在客户端 socket 断开时取消 HTTP 只读查询的功能。 #4213 (nvartolomei)
  • 现在服务端会报告进度以保持客户端连接存活。 #4215 (Ivan)
  • 在启用 optimize_throw_if_noop 设置时,改进了用于说明 OPTIMIZE 查询原因的消息。 #4294 (alexey-milovidov)
  • 为 clickhouse server 添加了对 --version 选项的支持。 #4251 (Lopatin Konstantin)
  • clickhouse-server 添加了 --help/-h 选项。 #4233 (Yuriy Baranov)
  • 添加了对返回聚合函数状态结果的标量子查询的支持。 #4348 (Nikolai Kochetov)
  • 改进了服务端关闭耗时以及 ALTER 等待时间。 #4372 (alexey-milovidov)
  • 在 system.replicas 中添加了关于 replicated_can_become_leader 设置的信息,并在副本不会尝试成为 leader 时添加了日志记录。 #4379 (Alex Zatelepin)

ClickHouse 版本 19.1

ClickHouse 版本 19.1.14,2019-03-14

  • 修复了在使用 GLOBAL JOIN 配合 SELECT * 时(罕见情况),如果将设置项 asterisk_left_columns_only 设为 1,可能出现的错误 Column ... queried more than once。该问题在 19.3 及之后的版本中不存在。6bac7d8dArtem Zuikov

ClickHouse 版本 19.1.13,2019-03-12

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

ClickHouse 版本 19.1.10,2019-03-03

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

ClickHouse 发行版 19.1

ClickHouse 发行版 19.1.9,2019-02-21

Bug 修复

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

ClickHouse 发行版 19.1.8,2019-02-16

Bug 修复

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

ClickHouse 19.1 版本发布

ClickHouse 19.1.7 版本发布,2019-02-15

Bug 修复

  • joinGet 函数中返回正确的类型并妥善处理锁。#4153 (Amos Bird)
  • 修复了在服务器关闭过程中再次尝试创建系统日志时出现的错误。 #4254 (alexey-milovidov)
  • 已修复一个错误:如果存在使用 Dictionary 引擎的数据库,所有字典会在服务器启动时被强制加载,此时如果有字典使用来自本机(localhost)上 ClickHouse 的数据源,该字典将无法加载。 #4255 (alexey-milovidov)
  • 修复了一个错误:执行包含 IN 运算符的变更操作时会产生不正确的结果。 #4099 (Alex Zatelepin)
  • 如果以交互模式运行,clickhouse-client 在退出时为命令行补全加载数据时可能会发生段错误(segfault)。#4317 (alexey-milovidov)
  • 修复了在查询 system.tables 时可能导致 table does not exist 错误的竞争条件。#4313 (alexey-milovidov)
  • 修复了在对使用 File 引擎的表执行 SELECT 时,遇到 No such file or directory 错误后重试可能发生的死锁问题。 #4161 (alexey-milovidov)
  • 修复了这样一个问题:本地 ClickHouse 字典原本通过 TCP 加载,但应在进程内加载。 #4166 (alexey-milovidov)
  • 修复了通过 TLS 连接与 PostgreSQL ODBC Driver 交互时出现的 No message received 错误,并修复了使用 MySQL ODBC Driver 时发生的段错误。 #4170 (alexey-milovidov)
  • 暂时禁用对 ORDER BY 的谓词优化。#3890 (Winter Zhang)
  • 修复了从表函数 numbers(0) 查询数据时出现的无限循环问题。#4280 (alexey-milovidov)
  • 修复了 compile_expressions 在比较较大日期(超过 int16 范围)时的问题。 #4341 (alesapin)
  • 修复了在 uncompressed_cache=1 时出现的段错误,以及因未压缩大小错误引发的异常。#4186 (alesapin)
  • 修复了右表存在重复数据时的 ALL JOIN 行为。 #4184 (Artem Zuikov)
  • 修复了在执行 INSERT ... SELECT ... FROM file(...) 查询时的错误行为:当文件格式为 CSVWithNamesTSVWIthNames 且第一行数据缺失时的处理问题。 #4297 (alexey-milovidov)
  • 修复了在处理 Array(LowCardinality) 参数时的聚合函数执行问题。#4055 (KochetovNicolai)
  • Debian 软件包:根据配置修正 /etc/clickhouse-server/preprocessed 链接,使其与配置一致。#4205 (proller)
  • 在启用未定义行为 sanitizer 时修复了 fuzz 测试:为 quantile*Weighted 函数族添加了参数类型检查。#4145 (alexey-milovidov)
  • 使 START REPLICATED SENDS 命令能够启动复制发送。 #4229 (nvartolomei)
  • 修复了在 JOIN ON 子句中出现重复列时导致的 Not found column 错误。#4279 (Artem Zuikov)
  • 现在 /etc/ssl 被用作存放 SSL 证书的默认目录。#4167 (alexey-milovidov)
  • 修复了在字典不可用时重新加载它时发生的崩溃。 #4188 (proller)
  • 修复了 DateDateTime 比较结果不正确的问题。 #4237 (valexey)
  • 修复了在条件运算符(函数 if)的分支中使用 DateDateTime 参数时会产生错误结果的问题。为函数 if 添加了通用实现。#4243 (alexey-milovidov)

ClickHouse Release 19.1.6, 2019-01-24

新特性

  • 表支持为每一列自定义压缩编解码器。 #3899 #4111 (alesapin, Winter Zhang, Anatoly)
  • 新增压缩编解码器 Delta#4052 (alesapin)
  • 允许使用 ALTER 修改压缩编解码器。 #4054 (alesapin)
  • 为兼容 SQL 标准,新增函数 leftrighttrimltrimrtrimtimestampaddtimestampsub#3826 (Ivan Blinkov)
  • 支持向 HDFS 表写入数据,并提供 hdfs 表函数。 #4084 (alesapin)
  • 新增用于在大字符串中搜索多个常量字符串的函数:multiPositionmultiSearchfirstMatch,以及它们的 -UTF8-CaseInsensitive-CaseInsensitiveUTF8 变体。 #4053 (Danila Kutenin)
  • SELECT 查询按分片键过滤时,可跳过未使用的分片(设置项 optimize_skip_unused_shards)。 #3851 (Gleb Kanterov, Ivan)
  • 允许 Kafka 引擎对每个数据块忽略一定数量的解析错误。 #4094 (Ivan)
  • 新增对 CatBoost 多分类模型评估的支持。函数 modelEvaluate 会针对多分类模型返回一个包含各类别原始预测值的元组。libcatboostmodel.so 需要按照 #607 进行构建。 #3959 (KochetovNicolai)
  • 新增函数 filesystemAvailablefilesystemFreefilesystemCapacity#4097 (Boris Granveaud)
  • 新增哈希函数 xxHash64xxHash32#3905 (filimonov)
  • 新增哈希函数 gccMurmurHash(GCC 风格的 Murmur 哈希),其使用与 gcc 相同的哈希种子。 #4000 (sundyli)
  • 新增哈希函数 javaHashhiveHash#3811 (shangshujie365)
  • 新增表函数 remoteSecure。该函数与 remote 类似,但使用安全连接。 #4088 (proller)

实验性特性

  • 添加了对多个 JOIN 仿真的支持(allow_experimental_multiple_joins_emulation 设置)。#3946 (Artem Zuikov)

Bug 修复

  • 默认限制 compiled_expression_cache_size 以降低内存占用。#4041 (alesapin)
  • 修复了一个 Bug,该 Bug 会导致执行 Replicated 表 ALTER 操作的线程以及用于从 ZooKeeper 更新配置的线程发生挂起。#2947 #3891 #3934 (Alex Zatelepin)
  • 修复了在执行分布式 ALTER 任务时的竞态条件。该竞态条件会导致多个副本同时尝试执行该任务,并使除一个副本之外的所有副本因 ZooKeeper 错误而失败。#3904 (Alex Zatelepin)
  • 修复了一个错误:当对 ZooKeeper 的请求超时后,from_zk 配置元素不会被刷新。#2947 #3947 (Alex Zatelepin)
  • 修复 IPv4 子网掩码前缀错误的问题。 #3945 (alesapin)
  • 修复了在极少数情况下由于资源耗尽而无法创建新线程时触发的崩溃(std::terminate)。 #3956 (alexey-milovidov)
  • 修复在执行 remote 表函数时,getStructureOfRemoteTable 使用了错误限制条件的问题。 #4009 (alesapin)
  • 修复 netlink 套接字泄漏问题。它们被放入一个池中却从未被删除,当所有当前套接字都在使用时,每当启动新线程就会创建新的套接字。#4017 (Alex Zatelepin)
  • 修复了在 fork 出 odbc-bridge 子进程后、在从 /proc 读取完所有文件描述符之前就提前关闭 /proc/self/fd 目录的错误。 #4120 (alesapin)
  • 在主键中使用 String 时,修复了从 FixedString 到 UInt 的单调转换问题。 #3870 (Winter Zhang)
  • 修复了整数转换函数单调性计算中的错误。#3921 (alexey-milovidov)
  • 修复了在某些无效参数情况下,arrayEnumerateUniqarrayEnumerateDense 函数出现段错误的问题。 #3909 (alexey-milovidov)
  • 修复 StorageMerge 中的未定义行为(UB)。 #3910 (Amos Bird)
  • 修复了函数 addDayssubtractDays 中的段错误。 #3913 (alexey-milovidov)
  • 修复了一个错误:当以整数参数并使用较大的负 scale 值执行时,函数 roundfloortruncceil 可能返回不正确的结果。 #3914 (alexey-milovidov)
  • 修复了一个由 'kill query sync' 引发并导致 core dump 的缺陷。 #3916 (muVulDeePecker)
  • 修复在复制队列清空后出现的长时间延迟问题。 #3928 #3932 (alesapin)
  • 修复了在向具有 LowCardinality 主键的表中插入数据时内存占用过高的问题。#3955 (KochetovNicolai)
  • 修复了在数组为空时,Native 格式中 LowCardinality 的序列化问题。 #3907 #4011 (KochetovNicolai)
  • 修复了在对单个 LowCardinality 数值列使用 DISTINCT 子句时产生错误结果的问题。 #3895 #4012 (KochetovNicolai)
  • 修复在启用 compile 设置时使用 LowCardinality 键的专用聚合问题。 #3886 (KochetovNicolai)
  • 修复复制表查询中的用户和密码转发问题。 #3957 (alesapin) (小路)
  • 修复了一个极少见的竞态条件问题,该问题可能在重新加载字典的同时列出 Dictionary 数据库中的表时发生。 #3970 (alexey-milovidov)
  • 修复了在将 HAVING 与 ROLLUP 或 CUBE 一起使用时结果不正确的问题。 #3756 #3837 (Sam Chou)
  • 修复了使用 JOIN ON 语法且包含分布式表的查询中的列别名处理。#3980 (Winter Zhang)
  • 修复了 quantileTDigest 内部实现中的错误(由 Artem Vakhrushev 发现)。该错误在 ClickHouse 中从未触发,仅会影响那些直接将 ClickHouse 代码库当作库使用的用户。 #3935 (alexey-milovidov)

改进

  • ALTER TABLE ADD COLUMN 语句中支持 IF NOT EXISTS,并在 DROP/MODIFY/CLEAR/COMMENT COLUMN 中支持 IF EXISTS#3900 (Boris Granveaud)
  • 函数 parseDateTimeBestEffort:支持格式 DD.MM.YYYYDD.MM.YYDD-MM-YYYYDD-Mon-YYYYDD/Month/YYYY 及类似格式。 #3922 (alexey-milovidov)
  • CapnProtoInputStream 现在支持不规则(jagged)结构。 #4063 (Odin Hultgren Van Der Horst)
  • 易用性改进:增加检查,要求服务器进程必须由数据目录所有者启动。如果数据属于非 root 用户,则不允许以 root 用户启动服务器。 #3785 (sergey-v-galtsev)
  • 改进在分析带有 JOIN 的查询时检查必需列的逻辑。 #3930 (Artem Zuikov)
  • 在单个服务器上存在大量 Distributed 表的情况下,降低连接数。 #3726 (Winter Zhang)
  • 为 ODBC 驱动的 WITH TOTALS 查询增加汇总行支持。 #3836 (Maksim Koritckiy)
  • 允许在 if 函数中将 Enum 作为整数使用。 #3875 (Ivan)
  • 新增 low_cardinality_allow_in_native_format 设置。若禁用,则在 Native 格式中不使用 LowCardinality 类型。 #3879 (KochetovNicolai)
  • 从已编译表达式缓存中移除了一些冗余对象,以降低内存使用。 #4042 (alesapin)
  • 增加检查,以确保 SET send_logs_level = 'value' 查询接受的是有效的值。 #3873 (Sabyanin Maxim)
  • 修复了类型转换函数中的数据类型检查。 #3896 (Winter Zhang)

性能改进

  • 添加一个 MergeTree 设置 use_minimalistic_part_header_in_zookeeper。如果启用,Replicated 表会在单个 part znode 中存储紧凑的 part 元数据。这可以显著减少 ZooKeeper 快照大小(尤其是在表包含大量列时)。注意,在启用此设置后,将无法降级到不支持该设置的版本。#3960 (Alex Zatelepin)
  • 为函数 sequenceMatchsequenceCount 添加一个基于 DFA 的实现,用于模式不包含时间条件的情况。#4004 (Léo Ercolanelli)
  • 提升整数序列化的性能。#3968 (Amos Bird)
  • 对 PODArray 进行左侧零填充,使得索引为 -1 的元素始终有效且被清零。它用于无分支的偏移量计算。#3920 (Amos Bird)
  • 回退了导致性能下降的 jemalloc 版本。#4018 (alexey-milovidov)

向后不兼容的更改

  • 移除了未在文档中记录的特性 ALTER MODIFY PRIMARY KEY,因为它已被 ALTER MODIFY ORDER BY 命令取代。#3887 (Alex Zatelepin)
  • 移除函数 shardByHash#3833 (alexey-milovidov)
  • 禁止使用结果类型为 AggregateFunction 的标量子查询。#3865 (Ivan)

构建 / 测试 / 打包改进

  • 新增对 PowerPC(ppc64le)构建的支持。#4132 (Danila Kutenin)
  • 有状态功能测试在公开可用的数据集上运行。 #3969 (alexey-milovidov)
  • 修复了在 Docker 或 systemd-nspawn 环境中,当服务器因出现 bash: /usr/bin/clickhouse-extract-from-config: Operation not permitted 消息而无法启动的问题。#4136 (alexey-milovidov)
  • rdkafka 库更新到 v1.0.0-RC5。使用 cppkafka 替代原生 C 接口。#4025 (Ivan)
  • 更新了 mariadb-client 库。修复了 UBSan 报告的其中一个问题。 #3924 (alexey-milovidov)
  • 针对 UBSan 构建的若干修复。#3926 #3021 #3948 (alexey-milovidov)
  • 为每次提交新增基于 UBSan 构建的测试运行。
  • 为每次提交新增 PVS-Studio 静态分析器运行。
  • 修复了通过 PVS-Studio 发现的缺陷。 #4013 (alexey-milovidov)
  • 修复 glibc 兼容性问题。 #4100 (alexey-milovidov)
  • 将 Docker 镜像升级到 18.10,并为 glibc >= 2.28 添加兼容性文件 #3965 (alesapin)
  • 添加环境变量,以便在用户不想在服务器 Docker 镜像中对目录执行 chown 操作时使用。 #3967 (alesapin)
  • 在 clang 中启用了 -Weverything 中的大部分警告,并启用了 -Wpedantic#3986 (alexey-milovidov)
  • 新增了几项仅在 clang 8 中可用的警告。#3993 (alexey-milovidov)
  • 在进行动态链接时,链接到 libLLVM,而不是分别链接各个 LLVM 库。#3989 (Orivej Desh)
  • 为测试镜像添加了 sanitizer 变量。 #4072 (alesapin)
  • clickhouse-server 的 Debian 软件包将推荐安装 libcap2-bin 软件包,以便使用 setcap 工具设置 capabilities。此步骤是可选的。 #4093 (alexey-milovidov)
  • 优化了编译时间并修复了 include。 #3898 (proller)
  • 新增了哈希函数的性能测试。 #3918 (filimonov)
  • 修复了循环库依赖。#3958 (proller)
  • 在可用内存较低的情况下优化了编译过程。#4030 (proller)
  • 添加了用于复现 jemalloc 性能退化问题的测试脚本。#4036 (alexey-milovidov)
  • 修正了 dbms 下注释和字符串字面量中的拼写错误。 #4122 (maiha)
  • 修正注释中的拼写错误。#4089 (Evgenii Pravda)

2018 年更新日志