2018 年更新日志
ClickHouse 版本 18.16
ClickHouse 版本 18.16.1,2018-12-21
缺陷修复:
改进:
- 新增
low_cardinality_allow_in_native_format设置(默认启用)。当关闭时,LowCardinality 列在 SELECT 查询中会被转换为普通列,在 INSERT 查询中则要求为普通列。#3879
构建改进:
- 修复了在 macOS 和 ARM 平台上的构建问题。
ClickHouse 版本 18.16.0,2018-12-14
新功能:
- 在以半结构化输入格式(
JSONEachRow、TSKV)加载数据时,会为缺失字段计算DEFAULT表达式。该功能可通过insert_sample_with_metadata设置启用。 #3555 ALTER TABLE查询现在支持MODIFY ORDER BY操作,用于在添加或删除表列时修改排序键。这对MergeTree系列中在合并时基于该排序键执行附加任务的表非常有用,例如SummingMergeTree、AggregatingMergeTree等。 #3581 #3755- 对于
MergeTree系列表,现在可以分别指定不同的排序键(ORDER BY)和索引(PRIMARY KEY)。排序键可以比索引更长。 #3581 - 添加了用于向 HDFS 导入和导出数据的
hdfs表函数和HDFS表引擎。 chenxing-xc - 添加了用于处理 base64 的函数:
base64Encode、base64Decode、tryBase64Decode。 Alexander Krasheninnikov - 现在可以通过参数来配置
uniqCombined聚合函数的精度(选择 HyperLogLog 单元的数量)。 #3406 - 添加了
system.contributors表,其中包含在 ClickHouse 中提交过代码的所有人的姓名。 #3452 - 为
ALTER TABLE ... FREEZE查询添加了可省略分区的能力,以便一次性备份所有分区。 #3514 - 添加了
dictGet和dictGetOrDefault函数,它们不需要显式指定返回值类型。类型会根据字典描述自动确定。 Amos Bird - 现在可以在表定义中为列指定注释,并通过
ALTER修改注释。 #3377 - 现在支持读取使用简单键的
Join类型表。 Amos Bird - 现在在创建
Join类型表时,可以指定join_use_nulls、max_rows_in_join、max_bytes_in_join和join_overflow_mode选项。 Amos Bird - 添加了
joinGet函数,使你可以像使用字典一样使用Join类型表。 Amos Bird - 在
system.tables表中添加了partition_key、sorting_key、primary_key和sampling_key列,用于提供关于表键的信息。 #3609 - 在
system.columns表中添加了is_in_partition_key、is_in_sorting_key、is_in_primary_key和is_in_sampling_key列。 #3609 - 在
system.parts表中添加了min_time和max_time列。当分区键是由DateTime列组成的表达式时,这些列会被填充。 Emmanuel Donin de Rosière
Bug 修复:
- 针对
LowCardinality数据类型的修复和性能改进。使用LowCardinality(Nullable(...))执行GROUP BY。获取extremes的值。处理高阶函数。LEFT ARRAY JOIN。分布式GROUP BY。返回Array的函数。执行ORDER BY。向Distributed表写入数据(nicelulu)。为实现Native协议的旧客户端执行的INSERT查询提供向后兼容性。在JOIN中支持LowCardinality。在单一数据流下工作的性能改进。 #3823 #3803 #3799 #3769 #3744 #3681 #3651 #3649 #3641 #3632 #3568 #3523 #3518 - 修复了
select_sequential_consistency选项的行为。此前在启用该设置时,开始向新分区写入数据后,有时会返回不完整的结果。#2863 - 在执行带有
ON CLUSTER的 DDL 查询以及ALTER UPDATE/DELETE时,现在可以正确指定数据库。#3772 #3460 - 在 VIEW 中的子查询会正确指定数据库。 #3521
- 修复了在
VersionedCollapsingMergeTree中将PREWHERE与FINAL联合使用时的一个错误。7167bfd7 - 现在可以使用
KILL QUERY来取消那些尚未开始执行、因等待获取表锁而处于等待状态的查询。#3517 - 修正了在午夜将时钟往回拨时的日期和时间计算(这种情况在伊朗会发生,并且在 1981 到 1983 年间曾在莫斯科发生)。此前,这会导致时间被错误地重置到比实际需要早一天的日期,同时还会导致日期和时间的文本格式输出不正确。#3819
- 修复了在
VIEW和子查询中省略数据库时出现的一些错误。Winter Zhang - 修复了在同时从
MATERIALIZED VIEW读取并删除MATERIALIZED VIEW时,由于未对内部MATERIALIZED VIEW加锁而导致的竞争条件。 #3404 #3694 - 修复了错误:
Lock handler cannot be nullptr.#3689 - 修复了在启用
compile_expressions选项(默认启用)时的查询处理。像now函数这样的非确定性常量表达式不再被展开。#3457 - 修复了在
toDecimal32/64/128函数中使用非常量 scale 参数时导致的崩溃问题。 - 修复了在
input_format_values_interpret_expressions= 1 的情况下,尝试将包含NULL元素的数组以Values格式插入到不带Nullable的Array类型列时出现的错误。 #3487 #3503 - 修复 ZooKeeper 不可用时
DDLWorker持续记录错误日志的问题。8f50c620 - 修复了
quantile*函数在参数类型为Date和DateTime时的返回类型。#3580 - 修复了当
WITH子句仅指定不含表达式的简单别名时的处理。#3570 - 修复了在启用
enable_optimize_predicate_expression时,对包含命名子查询和限定列名的查询的处理。Winter Zhang - 修复了在使用物化视图时出现的
Attempt to attach to nullptr thread group错误。Marek Vavruša - 修复了在向
arrayReverse函数传入某些错误参数时会发生崩溃的问题。 73e3a7b6 - 修复了
extractURLParameter函数中的缓冲区溢出问题。提升了性能。新增了对包含零字节的字符串的正确处理。141e9799 - 修复了
lowerUTF8和upperUTF8函数中固定大小缓冲区溢出的问题。不再允许在FixedString类型参数上执行这些函数。#3662 - 修复了在删除
MergeTree表时出现的一个罕见竞态条件。#3680 - 修复了在从
Buffer表读取数据的同时对目标表执行ALTER或DROP操作时的竞态条件。#3719 - 修复了在超出
max_temporary_non_const_columns限制时发生的段错误。 #3788
改进内容:
- 服务器不会将处理后的配置文件写入
/etc/clickhouse-server/目录,而是将其保存在path指定路径下的preprocessed_configs目录中。这意味着/etc/clickhouse-server/目录对clickhouse用户没有写入权限,从而提高了安全性。 #2443 min_merge_bytes_to_use_direct_io选项默认设置为 10 GiB。对 MergeTree 系列表中生成大块数据部分的合并操作将以O_DIRECT模式执行,从而避免大量页缓存被淘汰。 #3504- 在数据表数量非常多时,加快服务器启动速度。#3398
- 在副本之间的连接中添加了连接池并启用了 HTTP
Keep-Alive。 #3594 - 如果查询语法无效,则在
HTTP接口中返回400 Bad Request状态码(此前会返回500)。31bc680a - 出于兼容性考虑,
join_default_strictness选项默认设置为ALL。120e2cbe - 移除了
re2库中针对无效或复杂正则表达式向stderr输出日志的行为。#3723 - 为
Kafka表引擎新增功能:在开始从 Kafka 读取数据之前检查订阅;为该表提供 kafka_max_block_size 设置。Marek Vavruša cityHash64、farmHash64、metroHash64、sipHash64、halfMD5、murmurHash2_32、murmurHash2_64、murmurHash3_32和murmurHash3_64函数现在适用于任意数量的参数,并且支持以元组形式传入参数。#3451 #3519arrayReverse函数现在适用于任意类型的数组。73e3a7b6- 为
timeSlots函数新增了一个可选参数:用于指定时间槽大小。 Kirill Shvakov - 对于
FULL和RIGHT JOIN,max_block_size设置用于控制来自右表的未匹配数据流。Amos Bird - 在
clickhouse-benchmark和clickhouse-performance-test中新增了--secure命令行参数,用于启用 TLS。 #3688 #3690 - 在
Buffer类型表的结构与目标表结构不匹配时支持类型转换。Vitaly Baranov - 添加了
tcp_keep_alive_timeout选项,用于在连接在指定时间间隔内处于空闲后启用 keep-alive 数据包的发送。#3441 - 当分区键仅包含一列时,
system.parts表中不再对其值使用不必要的引号。 #3652 - 取模函数适用于
Date和DateTime数据类型。#3385 - 为
POWER、LN、LCASE、UCASE、REPLACE、LOCATE、SUBSTR和MID函数添加了同义词(别名)。 #3774 #3763 为与 SQL 标准兼容,部分函数名称现已不区分大小写。为与 SQL 兼容,新增语法糖SUBSTRING(expr FROM start FOR length)。 #3804 - 增加了对与
clickhouse-server可执行代码对应的内存页进行mlock的支持,以防止这些内存页被强制从内存中换出。该功能默认禁用。#3553 - 在启用
min_bytes_to_use_direct_io选项时,从O_DIRECT读取数据的性能有所提升。 #3405 - 在键参数为常量而默认参数为非常量时,提升了
dictGet...OrDefault函数的性能。Amos Bird firstSignificantSubdomain函数现在会处理gov、mil和edu这些顶级域名。Igor Hatarist 提升了性能。#3628- 使用
SYS-V init.d脚本启动clickhouse-server时,可以通过在/etc/default/clickhouse中定义CLICKHOUSE_PROGRAM_ENV来指定自定义环境变量。 Pavlo Bashynskyi - 修正 clickhouse-server 初始化脚本的返回码。 #3516
system.metrics表现在包含VersionInteger指标,system.build_options新增了一行VERSION_INTEGER,其中包含 ClickHouse 版本的数值形式,例如18016000。#3644- 移除了将
Date类型与数字进行比较的支持,以避免出现诸如date = 2018-12-17之类的潜在错误(误省略日期的引号)。 #3687 - 修复了
rowNumberInAllBlocks等有状态函数的行为。它们之前由于从查询分析阶段就开始计数,导致输出结果比预期大 1。 Amos Bird - 如果无法删除
force_restore_data文件,则会显示一条错误信息。Amos Bird
构建改进:
- 更新了
jemalloc库,修复了一个潜在的内存泄漏问题。Amos Bird - 默认启用基于
jemalloc的性能剖析(profiling),以便调试构建。2cc82f5c - 新增在系统仅安装
Docker时运行集成测试的支持。#3650 - 在 SELECT 查询中新增了 fuzz 表达式测试(fuzz expression test)。#3442
- 为提交(commits)增加了压力测试,该测试会并行且以随机顺序执行功能测试,以发现更多竞争条件。#3438
- 改进了在 Docker 镜像中启动 clickhouse-server 的方法。Elghazal Ahmed
- 对于 Docker 镜像,新增了使用
/docker-entrypoint-initdb.d目录中的文件来初始化数据库的支持。Konstantin Lebedev - 修复了在 ARM 上的构建问题。#3709
向后不兼容的变更:
- 移除了将
Date类型与数字进行比较的能力。必须使用显式类型转换,例如应使用= toDate(17883)来代替toDate('2018-12-18') = 17883。#3687
ClickHouse 版本 18.14
ClickHouse 版本 18.14.19,2018-12-19
Bug 修复:
- 修复了一个错误,该错误会导致使用 ODBC 源更新字典时出现问题。#3825,#3829
- 在执行 DDL
ON CLUSTER查询时,现在可以正确指定数据库。#3460 - 修复了在超出
max_temporary_non_const_columns限制时发生的段错误(segfault)。#3788
构建改进:
- 修复了在 ARM 上的构建问题。
ClickHouse 版本 18.14.18,2018-12-04
Bug 修复:
- 修复了在
dictGet...函数中,对于类型为range的字典,当其中一个参数是常量而另一个不是常量时出现的错误。#3751 - 修复了一个错误,该错误会导致在较新版本的 Linux 内核上,Linux 内核日志中打印
netlink: '...': attribute type 1 has an invalid length消息。#3749 - 修复了在
empty函数针对FixedString类型参数时的段错误。Daniel, Dao Quang Minh - 修复了在
max_query_size设置为较大值时的过度内存分配问题(此前会一次性预分配大小为max_query_size字节的内存块)。#3720
构建变更:
- 修复了使用来自操作系统软件包的版本 7 LLVM/Clang 库时的构建问题(这些库用于运行时查询编译)。#3582
ClickHouse 版本 18.14.17,2018-11-30
Bug 修复:
- 修复了 ODBC bridge 进程在主服务器进程退出时没有一同终止的情况。#3642
- 修复了对
Distributed表进行同步插入时,如果插入语句中的列列表与远程表的列列表不同所导致的问题。#3673 - 修复了在删除 MergeTree 表时可能导致崩溃的罕见竞争条件。#3643
- 修复了在创建查询线程失败并返回
Resource temporarily unavailable错误时出现的查询死锁问题。#3643 - 修复了当使用
CREATE AS table语法且在AS table之前指定ENGINE子句时,对ENGINE子句的解析问题(该错误会导致忽略指定的引擎)。#3692
ClickHouse 版本 18.14.15,2018-11-21
Bug 修复:
- 反序列化类型为
Array(String)的列时,对内存块大小的估计偏大,导致出现 “Memory limit exceeded” 错误。问题首次出现在 18.12.13 版本中。#3589
ClickHouse 版本 18.14.14,2018-11-20
Bug 修复:
- 修复了在集群配置为安全(设置
<secure>标志)时的ON CLUSTER查询问题。#3599
构建更改:
- 修复了在 macOS 上使用系统自带 llvm-7 时的构建问题。#3582
ClickHouse Release 18.14.13,2018-11-08
错误修复:
- 修复了
Block structure mismatch in MergingSorted stream错误。#3162 - 修复了在集群配置中启用了安全连接(
<secure>标志)时的ON CLUSTER查询问题。#3465 - 修复了在查询中使用
SAMPLE、PREWHERE和别名列时的错误。#3543 - 修复了在启用
min_bytes_to_use_direct_io设置时出现的罕见unknown compression method错误。3544
性能改进:
- 修复了在 AMD EPYC 处理器上执行时,对 UInt16 或 Date 类型列执行
GROUP BY查询的性能回退问题。Igor Lapko - 修复了处理长字符串的查询的性能回退问题。#3530
构建改进:
ClickHouse Release 18.14.12,2018-11-02
错误修复:
- 修复了在连接两个未命名子查询时的崩溃问题。#3505
- 修复了在查询外部数据库时生成不正确查询语句(带空
WHERE子句)的问题。hotid - 修复了在 ODBC 字典中使用了不正确超时值的问题。Marek Vavruša
ClickHouse Release 18.14.11,2018-10-29
错误修复:
- 修复了在 LIMIT 查询中出现的
Block structure mismatch in UNION stream: different number of columns错误。#2156 - 修复了在合并包含 Nested 结构中数组的表数据时的错误。#3397
- 修复了在关闭
merge_tree_uniform_read_distribution设置时产生错误查询结果的问题(该设置默认开启)。#3429 - 修复了向 Native 格式的 Distributed 表插入数据时的错误。#3411
ClickHouse Release 18.14.10,2018-10-23
- 默认禁用
compile_expressions设置(表达式的 JIT 编译)。#3410 - 默认禁用
enable_optimize_predicate_expression设置。
ClickHouse Release 18.14.9,2018-10-16
新功能:
- 为
GROUP BY子句新增WITH CUBE修饰符(也可使用替代语法GROUP BY CUBE(...))。#3172 - 新增
formatDateTime函数。Alexandr Krasheninnikov - 新增
JDBC表引擎和jdbc表函数(需要安装 clickhouse-jdbc-bridge)。Alexandr Krasheninnikov - 新增用于处理 ISO 周数的函数:
toISOWeek、toISOYear、toStartOfISOYear和toDayOfYear。#3146 - 现在可以为
MySQL和ODBC表使用Nullable列。#3362 - 嵌套数据结构可以在
JSONEachRow格式中读取为嵌套对象。新增input_format_import_nested_json设置。Veloman Yunkan - 插入数据时,许多
MATERIALIZED VIEW支持并行处理。参见parallel_view_processing设置。Marek Vavruša - 新增
SYSTEM FLUSH LOGS查询(强制将日志刷新到query_log等系统表)。#3321 - 现在在声明
Replicated表时,可以使用预定义的database和table宏。#3251 - 新增对以工程记数法(表示十的幂次)读取
Decimal类型值的支持。#3153
实验特性:
改进:
- 显著降低了包含
ORDER BY和LIMIT的查询的内存占用。请参阅max_bytes_before_remerge_sort设置。#3205 - 如果未指定
JOIN类型(如LEFT、INNER等),则默认使用INNER JOIN。 #3147 - 限定星号(如
t1.*)在包含JOIN的查询中可以正确工作。Winter Zhang ODBC表引擎能够根据远程数据库的 SQL 方言正确选择标识符的引用方式。Alexandr Krasheninnikov- 默认启用
compile_expressions设置(对表达式进行 JIT 编译)。 - 修复了同时执行
DROP DATABASE/TABLE IF EXISTS和CREATE DATABASE/TABLE IF NOT EXISTS时的处理逻辑。此前,CREATE DATABASE ... IF NOT EXISTS查询可能会返回错误信息 “File ... already exists”,而CREATE TABLE ... IF NOT EXISTS和DROP TABLE IF EXISTS查询可能会返回 “Table ... is creating or attaching right now”。 #3101 - 在从 MySQL 或 ODBC 表查询时,右侧为常量的 LIKE 和 IN 表达式会被下推到远程服务器。#3182
- 在从 MySQL 和 ODBC 表进行查询时,
WHERE子句中与常量表达式的比较条件会被下推到远程服务器。此前,只有与常量的比较条件才会被下推。 #3182 - 在终端中为
Pretty格式正确计算行宽度,包括包含表意文字(如汉字)的字符串。Amos Bird。 - 在
ALTER UPDATE查询中可以指定ON CLUSTER。 - 提升了以
JSONEachRow格式读取数据时的性能。 #3332 - 为
LENGTH和CHARACTER_LENGTH函数添加了别名以提高兼容性。CONCAT函数不再区分大小写。#3306 - 新增
TIMESTAMP作为DateTime类型的同义名。 #3390 - 在服务器日志中始终会为 query_id 预留空间,即使某条日志记录与查询无关也是如此。这样可以更方便地使用第三方工具解析服务器文本日志。
- 当查询的内存使用量超过下一个整数 GB(千兆字节)阈值时,会被记录到日志中。 #3205
- 针对以下情况添加了兼容模式:使用 Native 协议的客户端库在执行 INSERT 查询时,因错误发送的列数少于服务端期望的列数。使用 clickhouse-cpp 库时可能会出现这种情况。此前,这种情况会导致服务端崩溃。#3171
- 在
clickhouse-copier中的用户自定义 WHERE 表达式里,现在可以使用partition_key别名(用于基于源表分区进行额外过滤)。如果在复制过程中分区方案发生变化但变动幅度较小,这将非常有用。#3166 - 为了在高负载下自动降低数据读取速度,已将
Kafka引擎的工作流程迁移到后台线程池中。Marek Vavruša。 - 支持在
Cap'n'Proto格式中读取类似struct这种结构的Tuple和Nested值。Marek Vavruša firstSignificantSubdomain函数的顶级域名列表现在已包含顶级域名biz。 decaseal- 在外部字典的配置中,
null_value被解释为该数据类型的默认值。#3330 - 为
Decimal添加对intDiv和intDivOrZero函数的支持。b48402e8 - 为
sumMap聚合函数的键新增对Date、DateTime、UUID和Decimal类型的支持。 #3281 - 为外部字典添加对
Decimal数据类型的支持。#3324 - 在
SummingMergeTree表中增加对Decimal数据类型的支持。#3348 - 在
if中为UUID添加了特化支持。 #3366 - 在从
MergeTree表读取数据时,减少了对open和close系统调用的次数。#3283 TRUNCATE TABLE查询可以在任意副本上执行(查询会被转发到 leader 副本)。Kirill Shvakov
缺陷修复:
- 修复了用于
range_hashed字典的Dictionary表中的问题。该错误出现在 18.12.17 版本中。#1702 - 修复了在加载
range_hashed字典时出现的错误(错误信息为Unsupported type Nullable (...))。该错误出现在 18.12.17 版本中。#3362 - 修复了
pointInPolygon函数中的错误,该错误是由于在顶点数量众多且彼此非常接近的多边形上计算时产生的不精确结果累积所致。 #3331 #3341 - 在合并数据部件后,如果生成的部件校验和与其他副本上对同一数据执行相同合并操作所得结果的校验和不同,则会删除此次合并的结果,并从其他副本下载该数据部件(这是预期的行为)。但是在下载该数据部件之后,由于报错提示该部件已存在(因为该数据部件是在合并完成后经过一段延迟才被删除的),导致无法将其加入工作集。这样会引起对同一数据的循环下载尝试。 #3194
- 修复了查询总内存消耗的错误计算(由于计算不正确,
max_memory_usage_for_all_queries设置工作不正常,且MemoryTracking指标的数值不正确)。该错误影响了 18.12.13 版本。Marek Vavruša - 修复了
CREATE TABLE ... ON CLUSTER ... AS SELECT ...的功能。该错误存在于 18.12.13 版本中。#3247 - 修复了在
JOIN仅在远程服务器上执行时,发起查询的服务器仍然对数据结构进行不必要准备的问题。#3340 - 修复了
Kafka引擎中的错误:在开始读取数据时出现异常后可能导致死锁,以及在读取完成后可能出现锁未释放的问题 Marek Vavruša。 - 对于
Kafka表,未传递可选的schema参数(即Cap'n'Proto格式的 schema)。Vojtech Splichal - 如果 ZooKeeper 服务器集群中存在某些服务器,它们接受连接但在完成握手之前立刻关闭连接,ClickHouse 会选择连接另一台服务器。此前,这种情况会产生错误
Cannot read all data. Bytes read: 0. Bytes expected: 4.,并导致服务器无法启动。8218cf3a - 在 ZooKeeper 服务器集群中,如果某些服务器的 DNS 查询返回错误,这些服务器会被忽略。 17b8e209
- 修复了在以
VALUES格式插入数据时(当input_format_values_interpret_expressions = 1时)Date与DateTime之间的类型转换。此前,该转换是在自 Unix 纪元起的天数数值与 Unix 时间戳之间进行的,从而导致了非预期结果。 #3229 - 修复了
Decimal与整数之间的类型转换。 #3211 - 修复了
enable_optimize_predicate_expression设置中的错误。Winter Zhang - 修复了在使用非默认 CSV 分隔符(例如
;)时,CSV 格式中包含浮点数的解析错误 #3155 - 修复了
arrayCumSumNonNegative函数(当累加器小于零时,该函数不会再累加负值)。 Aleksey Studnev - 修复了在使用
PREWHERE时,构建在Distributed表之上的Merge表的工作行为。#3165 - 修复
ALTER UPDATE查询中的错误。 - 修复了 18.12 版本中
odbc表函数出现的错误。 #3197 - 修复了带有
StateArray组合器的聚合函数的行为。 #3188 - 修复了在将
Decimal值除以 0 时导致的崩溃问题。69dd6609 - 更正了使用
Decimal和整数参数的运算结果类型。#3224 - 修复了在
Decimal128类型上执行GROUP BY时出现的段错误。 3359ba06 log_query_threads设置(记录每个查询执行线程的信息)现在只有在log_queries选项(记录查询信息)被设置为 1 时才会生效。由于log_query_threads选项默认启用,即使关闭了查询日志记录,此前仍会记录线程相关信息。#3241- 修复了在分布式执行
quantiles聚合函数时出现的错误(错误信息为Not found column quantile...)。292a8855 - 修复了在集群中同时包含 18.12.17 版本和更早版本服务器时的兼容性问题。对于含有定长和非定长 GROUP BY 键的分布式查询,如果待聚合的数据量很大,返回结果中的数据可能没有被完全聚合(会出现两行不同的记录包含相同的聚合键)。 #3254
- 修复了在
clickhouse-performance-test中处理替换时的问题:当查询只包含测试中声明的部分替换项时,也能被正确处理。#3263 - 修复了在同时使用
FINAL和PREWHERE时出现的错误。#3298 - 修复了在对通过
ALTER添加的列使用PREWHERE时出现的错误。 #3298 - 为
DEFAULT和MATERIALIZED表达式新增检查,用于确保其中不使用arrayJoin。此前,在插入数据时使用arrayJoin会导致错误。#3337 - 为
PREWHERE子句中缺少arrayJoin的情况新增了检查。此前在执行查询时,这会导致出现诸如Size ... does not match或Unknown compression method之类的错误信息。#3357 - 修复了在优化过程中将由一系列相等性判断构成的 AND 链替换为对应的 IN 表达式后,在极少数情况下可能发生的段错误问题。liuyimin-bytedance
- 对
clickhouse-benchmark进行了小幅修正:此前不会向服务器发送客户端信息;现在在关闭时以及用于限制迭代次数时,可以更精确地统计已执行查询的数量。#3351 #3352
不向后兼容的更改:
- 移除了
allow_experimental_decimal_type选项。Decimal数据类型现在可默认使用。#3329
ClickHouse 版本 18.12
ClickHouse 版本 18.12.17,2018-09-16
新特性:
- 在
clickhouse源中实现了invalidate_query(可以通过指定查询来检查外部字典是否需要更新)。 #3126 - 新增支持使用
UInt*、Int*和DateTime数据类型(以及Date类型)作为定义区间边界的range_hashed外部字典键。现在可以使用NULL来表示开区间。 Vasily Nemkov Decimal类型现在支持var*和stddev*聚合函数。 #3129Decimal类型现在支持数学函数(exp、sin等)。 #3129system.part_log表现在包含partition_id列。 #3089
Bug 修复:
Merge现在可以在Distributed表上正确工作。 Winter Zhang- 修复了导致无法在
Ubuntu Precise和更旧版本上运行 ClickHouse 的不兼容问题(对glibc版本的不必要依赖)。该不兼容问题出现在 18.12.13 版本中。 #3130 - 修复了
enable_optimize_predicate_expression设置中的错误。 Winter Zhang - 修复了一个与向后兼容性相关的小问题:当在早于 18.12.13 的版本上运行副本集群,并同时在具有较新版本的服务器上创建新的表副本时,会出现问题(表现为消息
Can not clone replica, because the ... updated to new ClickHouse version,该消息在逻辑上是合理的,但不应该出现)。 #3122
向后不兼容的变更:
enable_optimize_predicate_expression选项现在默认启用(这相当乐观)。如果出现与搜索列名相关的查询分析错误,请将enable_optimize_predicate_expression设为 0。 Winter Zhang
ClickHouse 版本 18.12.14,2018-09-13
新特性:
- 新增对
ALTER UPDATE查询的支持。 #3035 - 新增
allow_ddl选项,用于限制用户对 DDL 查询的访问。 #3104 - 为
MergeTree引擎新增min_merge_bytes_to_use_direct_io选项,允许你为合并的总大小设置阈值(当超过该阈值时,将使用 O_DIRECT 来处理数据分片文件)。 #3117 system.merges系统表现在包含partition_id列。 #3099
改进
Bug 修复:
- 在插入时增加了对
Nested类型字段中各数组大小的一致性检查。#3118 - 修复了使用
ODBC源和hashed存储更新外部字典时的错误。该错误出现在 18.12.13 版本中。 - 修复了从带有
IN条件的查询创建临时表时发生的崩溃问题。Winter Zhang - 修复了用于处理可能包含
NULL元素数组的聚合函数中的错误。Winter Zhang
ClickHouse 版本 18.12.13,2018-09-10
新功能:
- 添加了
DECIMAL(digits, scale)数据类型(Decimal32(scale)、Decimal64(scale)、Decimal128(scale))。要启用该类型,请开启设置allow_experimental_decimal_type。#2846 #2970 #3008 #3047 - 新增用于
GROUP BY的WITH ROLLUP修饰符(另一种语法:GROUP BY ROLLUP(...))。#2948 - 在包含 JOIN 的查询中,星号(*)会按照 SQL 标准展开为所有表中的列列表。可以通过在用户配置级别将
asterisk_left_columns_only设置为 1 来恢复先前的行为。Winter Zhang - 新增对在表函数中使用 JOIN 的支持。 Winter Zhang
- 在 clickhouse-client 中按 Tab 键可进行自动补全。Sergey Shcherbin
- 在 clickhouse-client 中按 Ctrl+C 会清除已输入的查询。#2877
- 新增了
join_default_strictness设置(取值:",'any','all')。这样在使用JOIN时就可以不再显式指定ANY或ALL。 #2982 - 服务器日志中与查询处理相关的每一行都会显示查询 ID。#2482
- 现在可以在 clickhouse-client 中获取查询执行日志(通过
send_logs_level设置)。在分布式查询处理场景中,日志会从所有服务器级联汇聚而来。#2482 - 在执行查询时,
system.query_log和system.processes(SHOW PROCESSLIST)表现在包含所有已更改设置的相关信息(Settings数据的嵌套结构)。新增了log_query_settings设置。 #2482 system.query_log和system.processes表现在会显示参与执行查询的线程数量相关信息(见thread_numbers列)。 #2482- 新增
ProfileEvents计数器,用于统计通过网络进行读写和对磁盘进行读写所花费的时间、网络错误的数量,以及在网络带宽受限时的等待时间。 #2482 - 添加了
ProfileEvents计数器,其中包含来自 rusage 的系统级指标(可用于获取用户空间和内核空间的 CPU 使用情况、缺页错误以及上下文切换次数等信息),以及 taskstats 指标(可用于获取 I/O 等待时间、CPU 等待时间,以及在有/无页缓存情况下读取和写入的数据量等信息)。#2482 ProfileEvents计数器会在全局范围、每个查询以及每个查询的执行线程上生效,从而可以对各个查询的资源消耗进行细粒度的分析。 #2482- 新增了
system.query_thread_log表,其中包含每个查询执行线程的信息。新增了log_query_threads设置。#2482 system.metrics和system.events表现在内置了文档。 #3016- 新增
arrayEnumerateDense函数。Amos Bird - 新增
arrayCumSumNonNegative和arrayDifference函数。Aleksey Studnev - 新增了
retention聚合函数。Sundy Li - 现在,您可以使用加号运算符对聚合函数的状态进行相加(合并),并将聚合函数的状态乘以非负常数。#3062 #3034
- MergeTree 系列中的表现在包含虚拟列
_partition_id。 #3089
实验性特性:
- 新增
LowCardinality(T)数据类型。该数据类型会自动创建一个本地值字典,并允许在不解包该字典的情况下处理数据。#2830 - 新增对 JIT 编译函数的缓存,以及一个用于统计在编译前使用次数的计数器。要对表达式进行 JIT 编译,请启用
compile_expressions设置。#2990 #3077
改进:
- 修复了在存在遗弃副本时复制日志无限累积的问题。为滞后时间较长的副本新增了一种高效的恢复模式。
- 当执行包含多个聚合字段的
GROUP BY操作时,如果其中一个字段为字符串而其他字段为固定长度类型,则提高了性能。 - 在使用
PREWHERE以及将表达式隐式下推到PREWHERE时,性能得到了提升。 - 提升了文本格式(
CSV、TSV)的解析性能。Amos Bird #2980 - 优化了在二进制格式中读取字符串和数组的性能。Amos Bird
- 在单个服务器包含非常大量表的情况下,对
system.tables和system.columns的查询性能得到提升,内存消耗也有所降低。 #2953 - 修复了在大量查询导致错误时的性能问题(在
perf top中可以看到_dl_addr函数,但服务器的 CPU 使用率并不高)。#2938 - 条件会被下推到 View 中(当
enable_optimize_predicate_expression启用时)。Winter Zhang - 改进
UUID数据类型的相关功能。#3074 #2985 UUID数据类型在 The-Alchemist 字典中已受支持。 #2822visitParamExtractRaw函数在嵌套结构中也能正常工作。Winter Zhang- 当启用
input_format_skip_unknown_fields设置时,JSONEachRow格式中的对象字段会被正确忽略。BlahGeek - 对于带有条件的
CASE表达式,现在可以省略ELSE,等同于写ELSE NULL。 #2920 - 现在,在使用 ZooKeeper 时可以配置操作超时时间。urykhy
- 你也可以将
LIMIT n, m中的偏移量写为LIMIT n OFFSET m。#2840 - 你可以使用
SELECT TOP n语法来代替LIMIT。 #2840 - 增大了写入 system 表的队列大小,因此
SystemLog parameter queue is full错误不再那么频繁出现。 windowFunnel聚合函数现在支持符合多个条件的事件。Amos Bird- 可以在
JOIN的USING子句中使用重复的列。#3006 Pretty格式现在对按列宽对齐的列设置了限制。请使用output_format_pretty_max_column_pad_width进行设置。如果某个单元格的值超过该宽度,它仍会完整显示,但表格中的其他单元格将不会变得过宽。 #3003odbc表函数现在允许指定数据库/模式名称。Amos Bird- 新增了对使用在
clickhouse-client配置文件中指定用户名的支持。Vladimir Kozbin ZooKeeperExceptions计数器已被拆分为三个计数器:ZooKeeperUserExceptions、ZooKeeperHardwareExceptions和ZooKeeperOtherExceptions。ALTER DELETE查询同样适用于物化视图。- 在对
ReplicatedMergeTree表定期运行清理线程时增加了随机性,以避免在ReplicatedMergeTree表数量非常多时出现周期性的负载峰值。 - 支持
ATTACH TABLE ... ON CLUSTER查询语句。#3025
缺陷修复:
- 修复了
Dictionary表中的一个问题(会抛出Size of offsets does not match size of column或Unknown compression method异常)。该问题存在于 18.10.3 版本中。#2913 - 修复了在合并
CollapsingMergeTree表时的一个错误:当某个数据分片为空(这些分片会在合并过程中,或在执行ALTER DELETE且所有数据被删除时产生),并且合并使用了vertical算法时会触发该错误。 #3049 - 修复了在对
Memory表执行DROP或TRUNCATE操作时,如果同时有SELECT查询,会触发的竞态问题,该问题可能导致服务器崩溃。此缺陷首次出现在版本 1.1.54388 中。#3038 - 修复了在向
Replicated表插入数据时,如果返回Session is expired错误,可能导致数据丢失的问题(可通过ReplicatedDataLoss指标检测到数据丢失)。该错误出现在版本 1.1.54378 中。#2939 #2949 #2964 - 修复了在执行
JOIN ... ON时出现的段错误。 #3000 - 修复了在查找列名时出现的错误:当
WHERE表达式完全由限定列名组成时(例如WHERE table.column)会触发该错误。 #2994 - 修复了在执行分布式查询时,如果仅从远程服务器请求一个仅由带子查询的 IN 表达式组成的单列,会出现 “Not found column” 错误的问题。#3087
- 修复了在执行分布式查询时,如果某个分片为本地而其他分片为远程,并且触发了将条件下推到
PREWHERE的优化时,会出现Block structure mismatch in UNION stream: different number of columns错误的问题。#2226 #3037 #3055 #3065 #3073 #3090 #3093 - 修复了
pointInPolygon函数在某些非凸多边形情况下的错误。#2910 - 修复了在将
nan与整数比较时结果不正确的问题。#3024 - 修复了
zlib-ng库中的一个错误,该错误在极少数情况下可能会导致段错误(segfault)。 #2854 - 修复了在向包含
AggregateFunction列的表中插入数据时出现的内存泄漏问题:当聚合函数的状态不是简单状态(单独分配内存),且单次插入请求产生多个小数据块时,会发生内存泄漏。 #3084 - 修复了在同时创建和删除同一个
Buffer或MergeTree表时出现的竞态条件。 - 修复了在比较由某些复杂类型(例如元组)构成的元组时可能发生的段错误。 #2989
- 修复了在运行某些
ON CLUSTER查询时可能出现的段错误。Winter Zhang - 修复了
arrayDistinct函数在处理Nullable数组元素时的错误。#2845 #2937 enable_optimize_predicate_expression选项现在也能在包含SELECT *的查询中得到正确支持。Winter Zhang- 修复了在重新初始化 ZooKeeper 会话时发生的段错误(segfault)。 #2917
- 修复了使用 ZooKeeper 时的潜在阻塞问题。
- 修复了在
SummingMergeTree中用于添加嵌套数据结构的错误代码。 - 在为聚合函数状态分配内存时,会正确考虑内存对齐,从而在实现聚合函数状态时可以使用需要对齐的操作。chenxing-xc
安全修复:
- 安全使用 ODBC 数据源。与 ODBC 驱动的交互通过独立的
clickhouse-odbc-bridge进程进行。第三方 ODBC 驱动中的错误不再导致服务器稳定性问题或安全漏洞。#2828 #2879 #2886 #2893 #2921 - 修复了
catBoostPool表函数中文件路径校验不正确的问题。#2894 - 系统表(
tables、databases、parts、columns、parts_columns、merges、mutations、replicas和replication_queue)的内容会根据用户配置的数据库访问权限(allow_databases)进行过滤。Winter Zhang
向后不兼容的变更:
- 在包含 JOIN 的查询中,星号(*)会展开为所有表中的列列表,以符合 SQL 标准。你可以在用户配置级别将
asterisk_left_columns_only设置为 1 以恢复旧行为。
构建变更:
- 现在可以按提交运行大多数集成测试。
- 代码风格检查也可以按提交运行。
- 在 CentOS7/Fedora 上进行构建时,会正确选择
memcpy的实现。Etienne Champetier - 使用 clang 构建时,除了常规的
-Wall -Wextra -Werror,还增加了来自-Weverything的部分警告。#2957 - 调试构建时会使用
jemalloc的调试选项。 - 用于与 ZooKeeper 交互的库接口被声明为抽象。#2950
ClickHouse 版本 18.10
ClickHouse 版本 18.10.3,2018-08-13
新功能:
- 复制现在可以使用 HTTPS。 #2760
- 在现有的
murmurHash2_32之外,新增了函数murmurHash2_64、murmurHash3_32、murmurHash3_64和murmurHash3_128。 #2791 - ClickHouse ODBC 驱动(
ODBCDriver2输出格式)增加了对 Nullable 类型的支持。 #2834 - 在键列中增加了对
UUID的支持。
改进:
- 当从配置文件中删除集群时,可以在不重启服务器的情况下移除这些集群。 #2777
- 当从配置文件中删除外部字典时,可以在不重启服务器的情况下移除这些外部字典。 #2779
- 为
Kafka表引擎添加了对SETTINGS的支持。 Alexander Marshalov - 改进了
UUID数据类型(尚未完成)。 #2618 - 在
SummingMergeTree、CollapsingMergeTree和VersionedCollapsingMergeTree引擎中,支持在合并后产生空部分。 #2815 - 已完成变更(mutation)操作的旧记录会被删除(
ALTER DELETE)。 #2784 - 添加了
system.merge_tree_settings表。 Kirill Shvakov system.tables表现在包含依赖关系列:dependencies_database和dependencies_table。 Winter Zhang- 添加了
max_partition_size_to_drop配置选项。 #2782 - 添加了
output_format_json_escape_forward_slashes选项。 Alexander Bocharov - 添加了
max_fetch_partition_retries_count设置。 #2831 - 添加了
prefer_localhost_replica设置,用于禁用对本地副本的优先选择,并在无需进程间交互的情况下直接访问本地副本。 #2832 quantileExact聚合函数在对空的Float32或Float64集合进行聚合时返回nan。 Sundy Li
错误修复:
- 移除了对 ODBC 连接字符串参数不必要的转义,这会导致无法建立连接。该错误出现在 18.6.0 版本中。
- 修复了复制队列中处理
REPLACE PARTITION命令的逻辑。如果针对同一分区有两个REPLACE命令,先前的不正确逻辑可能会导致其中一个命令一直留在复制队列中而未被执行。 #2814 - 修复了在所有数据部分都为空时的合并问题(这些数据部分来源于一次合并,或在执行
ALTER DELETE且所有数据都被删除时产生)。该问题出现在 18.1.0 版本中。 #2930 - 修复了并发执行
Set或Join时的错误。 Amos Bird - 修复了在子查询中,如果其中一个
SELECT查询包含重复列名,UNION ALL查询会触发Block structure mismatch in UNION stream: different number of columns错误的问题。 Winter Zhang - 修复了在连接到 MySQL 服务器时,如果发生异常会导致内存泄漏的问题。
- 修复了在查询出错时 clickhouse-client 返回码不正确的问题。
- 修复了包含 DISTINCT 的物化视图行为不正确的问题。 #2795
向后不兼容的更改
- 移除了对 Distributed 表执行 CHECK TABLE 查询的支持。
构建更改:
- 更换了内存分配器:现在使用
jemalloc代替tcmalloc。在某些场景下,性能提升可达 20%。然而,也有一些查询的性能下降最多达 20%。在部分场景中,内存占用大约降低了 10%,同时稳定性得到提升。在高并发负载下,用户态和内核态的 CPU 使用率仅略有增加。 #2773 - 使用子模块中的 libressl。 #1983 #2807
- 使用子模块中的 unixodbc。 #2789
- 使用子模块中的 mariadb-connector-c。 #2785
- 将依赖测试数据可用性的功能测试文件添加到仓库中(目前尚未包含测试数据本身)。
ClickHouse Release 18.6
ClickHouse Release 18.6.0, 2018-08-02
新特性:
- 为 JOIN ON 语法添加了对 ON 表达式的支持:
JOIN ON Expr([table.]column ...) = Expr([table.]column, ...) [AND Expr([table.]column, ...) = Expr([table.]column, ...) ...]表达式必须是由 AND 运算符连接的等式链。等式两侧都可以是针对其中一张表列的任意表达式。对于右表,支持使用完全限定的列名(table.name、database.table.name、table_alias.name、subquery_alias.name)。#2742 - 复制支持启用 HTTPS。#2760
改进:
- 服务器会向客户端传递其版本的补丁版本号组件。关于补丁版本组件的数据可在
system.processes和query_log中获取。#2646
ClickHouse 版本 18.5
ClickHouse 版本 18.5.1,2018-07-31
新增功能:
- 新增了哈希函数
murmurHash2_32#2756。
改进:
Bug 修复:
- 修复了在启动副本时可能出现的一个错误 #2759。
ClickHouse 发布 18.4
ClickHouse 发布 18.4.0,2018-07-28
新功能:
- 新增以下系统表:
formats、data_type_families、aggregate_function_combinators、table_functions、table_engines、collations#2721。 - 新增支持在
remote或cluster table function的参数位置使用表函数替代表 #2708。 - 在复制协议中支持
HTTP Basic认证 #2727。 has函数现在允许在Enum值数组中查找数值 Maxim Khrisanfov。- 支持在从
Kafka读取时添加任意消息分隔符 Amos Bird。
改进:
ALTER TABLE t DELETE WHERE查询不会重写未被 WHERE 条件影响到的数据 part #2694。- 对于
ReplicatedMergeTree表,use_minimalistic_checksums_in_zookeeper选项现在默认启用。该设置在 1.1.54378 版本(2018-04-16)中添加。早于 1.1.54378 的版本不再支持安装。 - 支持运行带有
ON CLUSTER的KILL和OPTIMIZE查询 Winter Zhang。
Bug 修复:
- 修复了在使用 IN 表达式进行聚合时出现的错误
Column ... is not under an aggregate function and not in GROUP BY。该 Bug 出现在 18.1.0 版本中。(bbdd780b) - 修复了
windowFunnel聚合函数中的一个 Bug Winter Zhang。 - 修复了
anyHeavy聚合函数中的一个 Bug (a2101df2) - 修复了在使用
countArray()聚合函数时导致服务器崩溃的问题。
向后不兼容的更改:
Kafka引擎的参数由Kafka(kafka_broker_list, kafka_topic_list, kafka_group_name, kafka_format[, kafka_schema, kafka_num_consumers])修改为Kafka(kafka_broker_list, kafka_topic_list, kafka_group_name, kafka_format[, kafka_row_delimiter, kafka_schema, kafka_num_consumers])。如果你的表使用了kafka_schema或kafka_num_consumers参数,你必须手动编辑元数据文件path/metadata/database/table.sql,并添加kafka_row_delimiter参数,其值设为''。
ClickHouse 版本 18.1
ClickHouse 版本 18.1.0,2018-07-23
新功能:
- 支持在非副本 MergeTree 表上执行
ALTER TABLE t DELETE WHERE查询(#2634)。 - 为
uniq*系列聚合函数提供对任意类型的支持(#2010)。 - 为比较运算符提供对任意类型的支持(#2026)。
users.xml文件允许以10.0.0.1/255.255.255.0格式设置子网掩码。这对于在中间包含零的 IPv6 网络使用掩码是必需的(#2637)。- 新增
arrayDistinct函数(#2670)。 - SummingMergeTree 引擎现在可以处理 AggregateFunction 类型的列(Constantin S. Pan)。
改进:
- 更改了发布版本的版本号方案。现在第一部分包含发布年份(公元,莫斯科时区,减去 2000),第二部分包含重大变更的编号(大多数发布都会增加),第三部分为补丁版本号。除非在变更日志中另有说明,否则各版本之间仍然保持向后兼容。
- 提升了将浮点数转换为字符串的速度(Amos Bird)。
- 如果在插入过程中由于解析错误跳过了一些行(在启用
input_allow_errors_num和input_allow_errors_ratio设置时可能发生),现在会在服务器日志中写入被跳过的行数(Leonardo Cecchi)。
Bug 修复:
- 修复了临时表上的 TRUNCATE 命令问题(Amos Bird)。
- 修复了 ZooKeeper 客户端库中,在读取响应时发生网络错误时可能出现的罕见死锁问题(c315200)。
- 修复了在执行 CAST 到 Nullable 类型时的一个错误(#1322)。
- 修复了在区间边界重合时
maxIntersection()函数返回结果不正确的问题(Michael Furmur)。 - 修复了函数参数中 OR 表达式链的不正确转换问题(chenxing-xc)。
- 修复了在另一个子查询内部包含
IN (subquery)表达式的查询出现性能下降的问题(#2571)。 - 修复了在分布式查询中,当使用的
CAST函数不是大写形式时,不同版本服务器之间的不兼容问题(fe8c4d6)。 - 为向外部 DBMS 发送的查询补充了缺失的标识符引号(#2635)。
向后不兼容变更:
- 将包含数字零的字符串转换为 DateTime 不再生效。示例:
SELECT toDateTime('0')。这也是在表中DateTime DEFAULT '0'不起作用的原因,同样<null_value>0</null_value>在字典中也不会生效。解决方法:将0替换为0000-00-00 00:00:00。
ClickHouse 版本 1.1
ClickHouse 版本 1.1.54394,2018-07-12
新功能:
- 新增
histogram聚合函数(Mikhail Surin)。 - 现在可以在不指定分区的情况下,对
ReplicatedMergeTree使用OPTIMIZE TABLE ... FINAL(Amos Bird)。
Bug 修复:
- 修复了在发送和下载复制数据时,用于读写的 socket 超时时间设置得过短(1 秒)的问题。在网络或磁盘存在负载时,这会导致无法下载较大的数据分片(会不断循环重试下载分片)。此错误出现在版本 1.1.54388 中。
- 修复了在 ZooKeeper 中使用 chroot 且向表中插入重复数据块时出现的问题。
has函数现在可以正确处理带有 Nullable 元素的数组(#2115)。- 在分布式查询中使用时,
system.tables表现在可以正常工作。metadata_modification_time和engine_full列现在为非虚拟列。修复了仅从该表中查询这些列时会发生的错误。 - 修复了在插入空数据块后,空的
TinyLog表的行为问题(#2563)。 - 当 ZooKeeper 中节点的值为 NULL 时,
system.zookeeper表可以正常工作。
ClickHouse 版本 1.1.54390,2018-07-06
新功能:
- 现在可以使用
multipart/form-data格式(在query字段中)发送查询,这在为查询处理同时发送外部数据时非常有用(Olga Hvostikova)。 - 新增在读取 CSV 格式数据时启用或禁用对单引号或双引号处理的功能。可以通过
format_csv_allow_single_quotes和format_csv_allow_double_quotes设置进行配置(Amos Bird)。 - 现在对于非复制版的
MergeTree,可以在不指定分区的情况下使用OPTIMIZE TABLE ... FINAL(Amos Bird)。
改进:
- 在可以使用表索引的情况下,改进了使用 IN 运算符时的性能,降低了内存消耗,并实现了对内存消耗的正确跟踪(#2584)。
- 移除了在添加数据分片时多余的校验和检查。这在副本数量很多的情况下非常重要,因为此前总检查次数等于 N^2。
- 为
arrayEnumerateUniq函数新增对Array(Tuple(...))参数的支持(#2573)。 - 为
runningDifference函数新增Nullable支持(#2594)。 - 在表达式数量非常多时,提高了查询分析的性能(#2572)。
- 加快了在
ReplicatedMergeTree表中选择用于合并的数据分片的速度,并加快了 ZooKeeper 会话恢复速度(#2597)。 - 如果缺失
MergeTree表的format_version.txt文件,则会重新创建该文件,这在复制目录结构但不复制文件后再启动 ClickHouse 的场景中是合理的(Ciprian Hacman)。
Bug 修复:
- 修复了在使用 ZooKeeper 时的一个 bug,该 bug 可能导致在重启服务器之前无法恢复表的会话状态和只读状态。
- 修复了在使用 ZooKeeper 时的一个 bug,该 bug 会导致在会话中断时旧节点不会被删除。
- 修复了
quantileTDigest函数在 Float 参数上的一个错误(此 bug 引入于版本 1.1.54388)(Mikhail Surin)。 - 修复了 MergeTree 表索引中的一个 bug:当主键列位于在同一大小的有符号与无符号整数之间进行类型转换的函数内部时会出现问题(#2603)。
- 修复了在使用
macros但其未在配置文件中定义时出现的段错误(segfault)(#2570)。 - 修复了在重新连接客户端时切换到默认数据库的问题(#2583)。
- 修复了在禁用
use_index_for_in_with_subqueries设置时出现的一个 bug。
安全修复:
- 当连接到 MySQL 时,不再允许发送文件(
LOAD DATA LOCAL INFILE)。
ClickHouse Release 1.1.54388, 2018-06-28
新功能:
- 为复制表增加了对
ALTER TABLE t DELETE WHERE查询的支持。新增system.mutations表,用于跟踪此类查询的执行进度。 - 为 *MergeTree 表增加了对
ALTER TABLE t [REPLACE|ATTACH] PARTITION查询的支持。 - 增加了对
TRUNCATE TABLE查询的支持(Winter Zhang)。 - 为复制表增加了若干新的
SYSTEM查询(RESTART REPLICAS、SYNC REPLICA、[STOP|START] [MERGES|FETCHES|SENDS REPLICATED|REPLICATION QUEUES])。 - 增加了向使用 MySQL 引擎的表写入数据的支持,以及相应的表函数(sundy-li)。
- 增加了
url()表函数和URL表引擎(Alexander Sapin)。 - 增加了
windowFunnel聚合函数(sundy-li)。 - 新增字符串函数
startsWith和endsWith(Vadim Plakhtinsky)。 numbers()表函数现在允许指定偏移量(offset)(Winter Zhang)。- 现在可以以交互方式输入
clickhouse-client的密码。 - 服务器日志现在可以发送到 syslog(Alexander Krasheninnikov)。
- 支持为使用共享库作为数据源的字典记录日志(logging)(Alexander Sapin)。
- 支持自定义 CSV 分隔符(Ivan Zhukov)。
- 新增
date_time_input_format设置。如果将此设置切换为'best_effort',则会在多种格式下读取 DateTime 值。 - 新增用于数据脱敏(混淆)的
clickhouse-obfuscator工具。用法示例:发布用于性能测试的数据。
实验性功能:
- 增加了仅在需要时计算
and参数的能力(Anastasia Tsarkova)。 - 对部分表达式现在支持 JIT 编译为原生代码(pyos)。
Bug 修复:
- 对于包含
DISTINCT和ORDER BY的查询,不再出现重复结果。 - 包含
ARRAY JOIN和arrayFilter的查询不再返回不正确的结果。 - 修复了从 Nested 结构中读取数组列时的错误(#2066)。
- 修复了在分析包含类似
HAVING tuple IN (...)的 HAVING 子句的查询时出现的错误。 - 修复了在分析包含递归别名的查询时出现的错误。
- 修复了在从带有 PREWHERE 条件、且该条件过滤掉所有行的 ReplacingMergeTree 中读取数据时出现的错误(#2525)。
- 修复了在 HTTP 接口中使用会话时未应用用户配置文件设置的问题。
- 修复了在 clickhouse-local 中通过命令行参数应用设置的方式。
- ZooKeeper 客户端库现在使用从服务器获取的会话超时时间。
- 修复了 ZooKeeper 客户端库中的一个缺陷,该缺陷会导致客户端等待服务器响应的时间超过超时时间。
- 修复了对带有分区键列条件的查询进行数据分片裁剪时的问题(#2342)。
- 在执行
CLEAR COLUMN IN PARTITION之后,现在可以进行合并操作(#2315)。 - 修复了 ODBC 表函数中的类型映射问题(sundy-li)。
- 修复了对带和不带时区的
DateTime类型进行比较时的问题(Alexander Bocharov)。 - 修复了
CAST运算符的语法解析和格式化。 - 修复了在 Distributed 表引擎上向物化视图插入数据时的问题(Babacar Diassé)。
- 修复了从
Kafka引擎向物化视图写入数据时的竞争条件(Yangkuan Liu)。 - 修复了 remote() 表函数中的 SSRF 问题。
- 修复了
clickhouse-client在多行模式下的退出行为(#2510)。
改进:
- 复制表中的后台任务现在在线程池中执行,而不是在单独的线程中执行(Silviu Caragea)。
- 提高了 LZ4 压缩性能。
- 加快了对包含大量 JOIN 和子查询的查询的分析速度。
- 当网络错误过多时,DNS 缓存现在会自动更新。
- 如果由于物化视图的分片过多导致无法向其中一个物化视图插入数据,则不再执行对主表的插入。
- 纠正了
Query、SelectQuery和InsertQuery事件计数器之间的不一致。 - 当 tuple 类型匹配时,允许使用
tuple IN (SELECT tuple)这种表达式。 - 即使未配置 ZooKeeper,带有复制表的服务器也可以启动。
- 在计算可用 CPU 核心数量时,现在会考虑 cgroups 上的限制(Atri Sharma)。
- 在 systemd 配置文件中为配置目录添加了 chown 操作(Mikhail Shiryaev)。
构建变更:
- 构建时现在可以使用 gcc8 编译器。
- 现在支持从子模块构建 llvm。
- 更新了 librdkafka 库版本至 v0.11.4。
- 现在支持使用系统提供的 libcpuid 库。该库版本已更新至 0.4.0。
- 修复了使用 vectorclass 库进行构建时的问题(Babacar Diassé)。
- CMake 现在默认生成用于 ninja 的文件(与使用
-G Ninja时相同)。 - 现在支持使用 libtinfo 库替代 libtermcap(Georgy Kondratiev)。
- 修复了在 Fedora Rawhide 中的头文件冲突问题(#2520)。
向后不兼容的变更:
- 移除了在
Vertical和Pretty*格式中的转义处理,并删除了VerticalRaw格式。 - 如果在一个分布式查询中同时使用版本为 1.1.54388(或更新)和更早版本的服务器,并且查询中包含
cast(x, 'Type')形式的表达式(未使用AS关键字,且单词cast不是大写),则会抛出类似Not found column cast(0, 'UInt8') in block的异常。解决方案:在整个集群中升级服务器。
ClickHouse Release 1.1.54385, 2018-06-01
Bug Fixes:
- 修复了在某些情况下导致 ZooKeeper 操作被阻塞的错误。
ClickHouse Release 1.1.54383, 2018-05-22
Bug Fixes:
- 修复了当表具有大量副本时复制队列变慢的问题。
ClickHouse Release 1.1.54381, 2018-05-14
Bug Fixes:
- 修复了当 ClickHouse 与 ZooKeeper 服务器的连接丢失时,在 ZooKeeper 中出现节点泄漏的问题。
ClickHouse Release 1.1.54380, 2018-04-21
New Features:
- 新增了表函数
file(path, format, structure)。从/dev/urandom读取字节的示例:ln -s /dev/urandom /var/lib/clickhouse/user_files/randomclickhouse-client -q "SELECT * FROM file('random', 'RowBinary', 'd UInt8') LIMIT 10" ```。
Improvements:
- 子查询可以包裹在
()括号中以增强查询可读性。例如:(SELECT 1) UNION ALL (SELECT 1)。 - 来自
system.processes表的简单SELECT查询不再计入max_concurrent_queries限制。
Bug Fixes:
- 修复了在从
MATERIALIZED VIEW进行查询时IN运算符行为不正确的问题。 - 修复了在
partition_key_column IN (...)这类表达式中按分区索引进行过滤时不正确的问题。 - 修复了在表上执行
REANAME之后,无法在非主副本上执行OPTIMIZE查询的问题。 - 修复了在非主副本上执行
OPTIMIZE或ALTER查询时的授权错误。 - 修复了
KILL QUERY冻结的问题。 - 修复了 ZooKeeper 客户端库中的一个错误,该错误会导致监视(watch)丢失、分布式 DDL 队列冻结,以及在 ZooKeeper 配置中使用非空
chroot前缀时导致复制队列变慢。
Backward Incompatible Changes:
- 移除了对类似
(a, b) IN (SELECT (a, b))表达式的支持(可以改用等价表达式(a, b) IN (SELECT a, b))。在之前的版本中,这些表达式会导致WHERE过滤结果不确定或引发错误。
ClickHouse Release 1.1.54378, 2018-04-16
New Features:
- 日志级别可以在不重启服务器的情况下修改。
- 新增
SHOW CREATE DATABASE查询。 - 可以将
query_id传递给clickhouse-client(elBroom)。 - 新增设置:
max_network_bandwidth_for_all_users。 - 为
MATERIALIZED VIEW新增对ALTER TABLE ... PARTITION ...的支持。 - 在 system 表中新增未压缩形式的数据分片大小信息。
- 为分布式表提供服务器间加密支持(在
<remote_servers>中副本配置里的<secure>1</secure>)。 - 为
ReplicatedMergeTree系列表提供表级别配置,以尽量减少存储在 Zookeeper 中的数据量:use_minimalistic_checksums_in_zookeeper = 1 - 支持配置
clickhouse-client提示符。默认情况下,现在会在提示符中输出服务器名称。服务器的显示名称可以更改,同时它也会在X-ClickHouse-Display-NameHTTP 头中发送(Kirill Shvakov)。 - 对于
Kafka引擎,可以指定多个用逗号分隔的topics(Tobias Adamson)。 - 当查询被
KILL QUERY或replace_running_query停止时,客户端会收到Query was canceled异常,而不是不完整的结果。
Improvements:
ALTER TABLE ... DROP/DETACH PARTITION查询会在复制队列的前面优先执行。- 即使表只有一个数据分片,也可以使用
SELECT ... FINAL和OPTIMIZE ... FINAL。 - 如果
query_log表被手动删除,会实时重新创建该表(Kirill Shvakov)。 lengthUTF8函数运行得更快(zhang2014)。- 在分片数量非常大的情况下,提升了
Distributed表中同步写入(insert_distributed_sync = 1)的性能。 - 服务器从客户端接收
send_timeout和receive_timeout设置,并在连接到客户端时应用它们(应用顺序是反向的:服务器套接字的send_timeout被设置为从客户端接收到的receive_timeout值,反之亦然)。 - 改进了对
Distributed表进行异步插入时的崩溃恢复能力。 countEqual函数的返回类型从UInt32改为UInt64(谢磊)。
Bug Fixes:
- 修复了当表达式左侧为
Nullable时使用IN的错误。 - 当使用包含
IN的元组且元组的部分组件在表索引中时,现在会返回正确结果。 max_execution_time限制现在在分布式查询中可以正确工作。- 修复了在
system.columns表中统计复合列大小时的错误。 - 修复了创建临时表时的错误:
CREATE TEMPORARY TABLE IF NOT EXISTS. - 修复了
StorageKafka中的错误(##2075)。 - 修复了由于某些聚合函数的非法参数导致的服务器崩溃。
- 修复了导致
DETACH DATABASE查询无法停止ReplicatedMergeTree表后台任务的错误。 - 在向聚合型物化视图中插入数据时,
Too many parts状态发生的概率降低了(##2084)。 - 修正了在配置中递归处理替换项的方式,以支持在同一层级上某个替换之后还需要继续进行替换的情况。
- 修正了在创建使用
UNION ALL查询的VIEW时元数据文件中的语法。 SummingMergeTree现在在使用复合键时,可以正确对嵌套数据结构进行求和。- 修复了在为
ReplicatedMergeTree表选择 leader 时可能出现的竞争条件问题。
Build Changes:
- 构建系统支持使用
ninja替代make,并在发布版本构建时默认使用ninja。 - 重命名了软件包:
clickhouse-server-base改为clickhouse-common-static;clickhouse-server-common改为clickhouse-server;clickhouse-common-dbg改为clickhouse-common-static-dbg。安装时请使用clickhouse-server clickhouse-client。为保持向后兼容,仓库中仍会提供旧名称的软件包。
Backward Incompatible Changes:
- 移除了当左侧为数组时对
IN表达式的特殊解释。此前,表达式arr IN (set)被解释为“至少有一个arr元素属于set”。若要在新版本中获得相同的行为,请写为arrayExists(x -> x IN (set), arr)。 - 禁用了 socket 选项
SO_REUSEPORT的错误使用,该选项此前在 Poco 库中被错误地默认启用。请注意,在 Linux 上,已经没有必要同时为监听指定地址::和0.0.0.0—— 只使用::即可,它允许在默认内核配置下同时通过 IPv4 和 IPv6 监听连接。还可以在配置中指定<listen_reuse_port>1</listen_reuse_port>以恢复之前版本的行为。
ClickHouse Release 1.1.54370, 2018-03-16
新功能:
- 新增
system.macros表,并在配置文件更改时自动更新宏。 - 新增
SYSTEM RELOAD CONFIG查询。 - 新增聚合函数
maxIntersections(left_col, right_col),用于返回区间[left; right]之间同时相交区间的最大数量。函数maxIntersectionsPosition(left, right)返回该“最大”区间的起点。(Michael Furmur)。
改进:
- 向
Replicated表插入数据时,对ZooKeeper的请求次数减少(并且大多数用户级错误已从ZooKeeper日志中消失)。 - 新增为数据集创建别名的功能。示例:
WITH (1, 2, 3) AS set SELECT number IN set FROM system.numbers LIMIT 10。
错误修复:
- 修复了针对
Distributed表在从 Merge 表读取数据时出现的Illegal PREWHERE错误。 - 新增修复项,使得可以在仅支持 IPv4 的 Docker 容器中启动 clickhouse-server。
- 修复了在读取系统表
system.parts_columns时的竞争条件。 - 在同步插入到
Distributed表时移除了双重缓冲,这可能会导致连接超时。 - 修复了一个导致在开始执行
SELECT查询前对不可用副本等待时间过长的错误。 - 修复了
system.parts表中的错误日期。 - 修复了在
ZooKeeper集群配置中chroot非空时,无法向Replicated表插入数据的错误。 - 修复了针对空
ORDER BY表的垂直合并算法。 - 恢复了在查询远程表时使用字典的能力,即使这些字典在请求端服务器上不存在。这一功能在版本 1.1.54362 中丢失。
- 恢复了类似
SELECT * FROM remote('server2', default.table) WHERE col IN (SELECT col2 FROM default.table)这类查询的行为,即当IN右侧应使用远程的default.table而不是本地表时的处理方式。该行为在版本 1.1.54358 中被破坏。 - 移除了多余的错误级日志
Not found column ... in block。
ClickHouse Release 1.1.54362, 2018-03-11
新功能:
- 对于空集合(例如
SELECT count(*) FROM table WHERE 0)在没有使用GROUP BY的情况下进行聚合时,现在会返回包含一行的结果,该行中各聚合函数的值为 null,从而符合 SQL 标准。若要恢复旧行为(返回空结果),请将empty_result_for_aggregation_by_empty_set设置为 1。 - 为
UNION ALL添加了类型转换支持。UNION ALL中各个SELECT子句允许使用不同的别名,以符合 SQL 标准。 LIMIT BY子句支持使用任意表达式。此前只能使用SELECT语句产生的列。- 当对主键列构成的表达式元组使用
IN时,会用到MergeTree表的索引。示例:WHERE (UserID, EventDate) IN ((123, '2000-01-01'), ...)(Anastasiya Tsarkova)。 - 新增了
clickhouse-copier工具,用于在集群之间复制和重新分片数据(测试版)。 - 添加了一组一致性哈希函数:
yandexConsistentHash、jumpConsistentHash、sumburConsistentHash。它们可以用作分片键,以在后续的重新分片操作中减少网络通信开销。 - 新增函数:
arrayAny、arrayAll、hasAny、hasAll、arrayIntersect、arrayResize。 - 添加了
arrayCumSum函数(Javi Santana)。 - 添加了
parseDateTimeBestEffort、parseDateTimeBestEffortOrZero和parseDateTimeBestEffortOrNull函数,用于从包含多种可能格式文本的字符串中读取 DateTime。 - 在更新时,可以从外部字典中部分重新加载数据(仅加载其中指定字段的值比上一次加载时该字段的值更大的记录)(Arsen Hakobyan)。
- 新增了
cluster表函数。示例:cluster(cluster_name, db, table)。如果集群名称以标识符形式指定,则remote表函数可以将集群名称作为第一个参数。 remote和cluster表函数可以在INSERT语句中使用。- 在
system.tables表中新增了create_table_query和engine_full虚拟列。metadata_modification_time列也是虚拟列。 - 在
system.tables和system.databases表中新增了data_path和metadata_path列,并在system.parts和system.parts_columns表中新增了path列。 - 在
system.part_log表中新增了关于合并的更多信息。 - 可以为
system.query_log表使用任意分区键(Kirill Shvakov)。 SHOW TABLES查询现在也会显示临时表。在system.tables中新增了临时表以及is_temporary列(zhang2014)。- 添加了
DROP TEMPORARY TABLE和EXISTS TEMPORARY TABLE查询(zhang2014)。 - 支持对临时表使用
SHOW CREATE TABLE命令(zhang2014)。 - 新增了用于内部进程相关设置的
system_profile配置参数。 - 支持在
MongoDB字典中将object_id加载为属性(Pavel Litvinenko)。 - 在从
MongoDB源为外部字典加载数据时,将默认值读取为null(Pavel Litvinenko)。 - 在
Values格式中从不带单引号的 Unix 时间戳中读取DateTime值。 - 当某些副本上不存在所请求的表时,
remote表函数支持故障转移。 - 运行
clickhouse-server时,可以通过命令行参数覆盖配置设置。例如:clickhouse-server -- --logger.level=information。 - 实现了接受
FixedString参数的empty函数:如果字符串完全由空字节组成,则该函数返回 1(zhang2014)。 - 新增
listen_try配置参数,用于在部分地址无法监听时,程序仍不退出并至少监听一个地址(对禁用了 IPv4 或 IPv6 支持的系统非常有用)。 - 新增了
VersionedCollapsingMergeTree表引擎。 - 在
library字典源中增加对行和任意数值类型的支持。 MergeTree表可以在不设置主键的情况下使用(需要指定ORDER BY tuple())。- 如果参数不是
NULL,则可以将Nullable类型CAST成非Nullable类型。 - 可以对
VIEW使用RENAME TABLE语句。 - 已添加
throwIf函数。 - 新增了
odbc_default_field_size选项,用于扩展从 ODBC 源加载的值的最大长度(默认为 1024)。 system.processes表和SHOW PROCESSLIST现在已包含is_cancelled和peak_memory_usage列。
改进:
- 对于
INSERT SELECT查询或SELECT子查询,针对结果设定的限制和配额不再应用于中间数据。 - 在服务器启动时检查
Replicated表状态时,force_restore_data被误触发的次数减少。 - 添加了
allow_distributed_ddl选项。 - 不再允许在
MergeTree表键的表达式中使用非确定性函数。 - 来自
config.d目录的、包含替换项的文件按字母顺序加载。 - 在常量多维数组的某个元素为空数组的情况下,改进了
arrayElement函数的性能。例如:[[1], []][x]。 - 使用包含非常大替换项(例如,非常大的 IP 网络列表)的配置文件时,服务器启动速度现在更快。
- 在运行查询时,表值函数只执行一次。之前,
remote和mysql表值函数会执行同一个查询两次,以从远程服务器获取表结构。 - 采用
MkDocs文档生成器。 - 当尝试删除某个表列,而其他列的
DEFAULT/MATERIALIZED表达式依赖于该列时,会抛出异常(zhang2014)。 - 为
Float数据类型添加了在文本格式中将空行解析为数字 0 的功能。此功能之前可用,但在 1.1.54342 版本中丢失。 Enum值可以在min、max、sum及其他一些函数中使用。在这些情况下,会使用相应的数值。此功能之前可用,但在 1.1.54337 版本中丢失。- 添加了
max_expanded_ast_elements,用于限制在递归展开别名后 AST 的大小。
错误修复:
- 修复了误将不必要列从子查询中删除,或未从包含
UNION ALL的子查询中删除不必要列的情况。 - 修复了
ReplacingMergeTree表合并中的一个错误。 - 修复了
Distributed表中的同步插入(insert_distributed_sync = 1)。 - 修复了在某些对
FULL和RIGHT JOIN的用法中,如果子查询中存在重复列会导致段错误的问题。 - 修复了在某些对
replace_running_query和KILL QUERY的用法中出现段错误的问题。 - 修复了
system.dictionaries表中source和last_exception列的顺序。 - 修复了
DROP DATABASE查询未删除元数据文件的错误。 - 修复了
Dictionary数据库的DROP DATABASE查询。 - 修复了在基数超过 1 亿项时,
uniqHLL12和uniqCombined函数精度偏低的问题(Alex Bocharov)。 - 修复了在
INSERT查询中需要同时计算显式默认表达式时,隐式默认值计算的错误(zhang2014)。 - 修复了在极少数情况下,对
MergeTree表的查询无法完成的问题(chenxing-xc)。 - 修复了当对
Distributed表运行CHECK查询且所有分片都为本地时发生崩溃的问题(chenxing.xc)。 - 修复了使用正则表达式的函数出现轻微性能回归的问题。
- 修复了从复杂表达式创建多维数组时的性能回归问题。
- 修复了可能导致在带有元数据的
.sql文件中出现额外FORMAT段的错误。 - 修复了在尝试删除显式指定表上的
MATERIALIZED VIEW时,仍会应用max_table_size_to_drop限制的错误。 - 修复了与旧客户端的不兼容问题(旧客户端有时会被发送
DateTime('timezone')类型的数据,而它们无法理解该类型)。 - 修复了在读取通过
ALTER添加、但对于旧分区为空的结构的Nested列元素时,当这些列上的条件被下推到PREWHERE时出现的错误。 - 修复了在对
Merge表的查询中,通过虚拟_table列过滤表时的错误。 - 修复了在
Distributed表中使用ALIAS列时的错误。 - 修复了在使用
quantile系列聚合函数的查询中,导致无法进行动态编译的错误。 - 修复了在使用包含大量表的
Merge表,以及使用GLOBAL子查询的极少数情况下,在查询执行流水线中出现的竞争条件。 - 修复了在对多参数聚合函数使用时,将不同大小的数组传递给
arrayReduce函数会导致崩溃的问题。 - 禁止在
MATERIALIZED VIEW中使用带有UNION ALL的查询。 - 修复了在服务器启动时初始化
part_log系统表时的错误(默认情况下,part_log是禁用的)。
向后不兼容的更改:
- 移除了
distributed_ddl_allow_replicated_alter选项。此行为现在默认启用。 - 移除了
strict_insert_defaults设置。如果您在使用此功能,请发送邮件至[email protected]。 - 移除了
UnsortedMergeTree引擎。
ClickHouse Release 1.1.54343, 2018-02-05
- 为在分布式 DDL 查询以及 Distributed 表构造函数中定义集群名称新增了宏的支持:
CREATE TABLE distr ON CLUSTER '{cluster}' (...) ENGINE = Distributed('{cluster}', 'db', 'table')。 - 现在像
SELECT ... FROM table WHERE expr IN (subquery)这样的查询会使用table的索引进行处理。 - 改进了向 Replicated 表插入数据时对重复数据的处理,不再因为重复数据而拖慢复制队列的执行。
ClickHouse Release 1.1.54342, 2018-01-22
该版本包含对上一版本 1.1.54337 的错误修复:
- 修复了 1.1.54337 中的回归问题:如果默认用户只有只读权限,则服务器会以
Cannot create database in readonly mode消息拒绝启动。 - 修复了 1.1.54337 中的回归问题:在使用 systemd 的系统上,不论配置如何,日志总是写入 syslog;watchdog 脚本仍然使用 init.d。
- 修复了 1.1.54337 中的回归问题:Docker 镜像中的默认配置错误。
- 修复了 GraphiteMergeTree 的非确定性行为(可在日志消息
Data after merge is not byte-identical to the data on another replicas中看到该问题)。 - 修复了一个可能在对 Replicated 表执行 OPTIMIZE 查询后导致合并结果不一致的错误(可在日志消息
Part ... intersects the previous part中看到该问题)。 - 当目标表中存在 MATERIALIZED 列时,Buffer 表现在可以正常工作(由 zhang2014 提交)。
- 修复了 NULL 实现中的一个错误。
ClickHouse Release 1.1.54337, 2018-01-18
新功能:
- 在表中增加了对多维数组和元组(
Tuple数据类型)存储的支持。 - 为
DESCRIBE和INSERT查询增加了对表函数的支持。为DESCRIBE增加了对子查询的支持。示例:DESC TABLE remote('host', default.hits);DESC TABLE (SELECT 1);INSERT INTO TABLE FUNCTION remote('host', default.hits)。在INSERT INTO之外,增加了对INSERT INTO TABLE的支持。 - 改进了对时区的支持。
DateTime数据类型可以带上用于在文本格式中解析和格式化的时区注解。示例:DateTime('Asia/Istanbul')。当在针对DateTime参数的函数中指定时区时,返回类型会携带该时区信息,值将按预期显示。 - 新增函数
toTimeZone、timeDiff、toQuarter、toRelativeQuarterNum。toRelativeHour/Minute/Second函数可以接受Date类型的值作为参数。now函数名区分大小写。 - 新增
toStartOfFifteenMinutes函数(Kirill Shvakov)。 - 新增用于格式化查询的
clickhouse format工具。 - 新增
format_schema_path配置参数(Marek Vavruša)。用于指定Cap'n Proto格式的 schema。schema 文件只能位于指定目录中。 - 新增对配置替换(
incl和conf.d)的支持,用于配置外部字典和模型(Pavel Yakunin)。 - 在
system.settings表中新增包含文档说明的列(Kirill Shvakov)。 - 新增
system.parts_columns表,用于提供MergeTree表中每个数据 part 内各列大小的信息。 - 新增
system.models表,用于提供已加载的CatBoost机器学习模型的信息。 - 新增
mysql和odbc表函数以及对应的MySQL和ODBC表引擎,用于访问远程数据库。该功能目前处于 beta 阶段。 - 新增对将
AggregateFunction类型参数传递给groupArray聚合函数的支持(因此可以创建某个聚合函数状态的数组)。 - 移除了对多种聚合函数组合器组合方式的限制。例如,可以使用
avgForEachIf以及avgIfForEach聚合函数,它们具有不同的行为。 - 将
-ForEach聚合函数组合器扩展到多参数聚合函数的场景。 - 新增对
Nullable参数聚合函数的支持,即使函数返回的是非Nullable结果(由 Silviu Caragea 贡献)。示例:groupArray、groupUniqArray、topK。 - 为
clickhouse-client新增max_client_network_bandwidth设置(Kirill Shvakov)。 - 具有
readonly = 2设置的用户被允许操作 TEMPORARY 表(CREATE、DROP、INSERT...)(Kirill Shvakov)。 - 为
Kafka引擎新增了使用多个 consumer 的支持,并扩展了针对Kafka的配置选项(Marek Vavruša)。 - 新增
intExp3和intExp4函数。 - 新增
sumKahan聚合函数。 - 新增
to*Number*OrNull系列函数,其中 Number 为数值类型。 - 新增对
INSERT SELECT查询的WITH子句的支持(作者:zhang2014)。 - 新增设置:
http_connection_timeout、http_send_timeout、http_receive_timeout。这些设置特别用于下载用于复制的数据 part。调整这些设置可以在网络过载时实现更快的故障切换。 - 新增对
Null类型表执行ALTER的支持(Anastasiya Tsarkova)。 - 将
reinterpretAsString函数扩展到所有在内存中连续存储的数据类型。 - 为
clickhouse-local工具新增--silent选项。该选项会阻止在 stderr 中打印查询执行信息。 - 新增对从文本读取
Date类型值的支持,文本格式允许使用一位数字而不是两位数字来表示月份和/或日期(Amos Bird)。
性能优化:
- 提升了聚合函数
min、max、any、anyLast、anyHeavy、argMin、argMax在处理字符串参数时的性能。 - 提升了函数
isInfinite、isFinite、isNaN、roundToExp2的性能。 - 提升了以文本格式解析和格式化
Date和DateTime类型值时的性能。 - 提升了解析浮点数时的性能和精度。
- 在
JOIN的左右两侧存在列名相同但未包含在USING中的列时,降低了内存使用量。 - 通过牺牲一定的数值稳定性,提升了聚合函数
varSamp、varPop、stddevSamp、stddevPop、covarSamp、covarPop、corr的性能。旧版函数可以通过varSampStable、varPopStable、stddevSampStable、stddevPopStable、covarSampStable、covarPopStable、corrStable这些名称继续使用。
Bug 修复:
- 修复了在运行
DROP或DETACH PARTITION查询后进行数据去重的问题。在之前的版本中,删除一个分区并再次插入相同数据不起作用,因为插入的块被视为重复数据。 - 修复了一个可能导致在带有
POPULATE的CREATE MATERIALIZED VIEW查询中,WHERE子句被错误解释的 bug。 - 修复了在
zookeeper_servers配置中使用root_path参数时的 bug。 - 修复了将
Date参数传递给toStartOfDay时出现的非预期结果。 - 修复了
addMonths和subtractMonths函数,以及在结果属于上一年时INTERVAL n MONTH的算术行为。 - 为
UUID数据类型补充了在DISTINCT、JOIN、uniq聚合函数以及外部字典中的缺失支持(Evgeniy Ivanov)。对UUID的支持仍不完整。 - 修复了在行汇总结果为零时
SummingMergeTree的行为。 - 针对
Kafka引擎进行了多项修复(Marek Vavruša)。 - 修复了
Join表引擎的不正确行为(Amos Bird)。 - 修复了在 FreeBSD 和 OS X 上分配器的不正确行为。
extractAll函数现在支持空匹配。- 修复了阻止使用
libressl替代openssl的错误。 - 修复了从临时表执行
CREATE TABLE AS SELECT查询的问题。 - 修复了更新复制队列的非原子性问题。这可能导致副本在服务器重启前一直处于不同步状态。
- 修复了
gcd、lcm和modulo(%运算符)中可能发生的溢出问题(Maks Skorokhod)。 - 现在在更改
umask之后才会创建-preprocessed文件(可以在配置中更改umask)。 - 修复了在使用自定义分区键时,后台数据部件检查(
MergeTreePartChecker)中的 bug。 - 修复了在文本格式中解析元组(
Tuple数据类型的值)的问题。 - 改进了关于传递给
multiIf、array和其他一些函数的不兼容类型的错误信息。 - 重新设计了对
Nullable类型的支持。修复了可能导致服务器崩溃的 bug。几乎修复了所有与NULL支持相关的其他 bug:在 INSERT SELECT 中不正确的类型转换、在 HAVING 和 PREWHERE 中对 Nullable 的支持不足、join_use_nulls模式、作为OR运算符参数的 Nullable 类型等。 - 修复了多个与数据类型内部语义相关的 bug。例如:在
SummingMergeTree中对Enum类型字段不必要的求和;在Pretty格式中Enum类型的对齐等。 - 对复合列的允许组合进行了更严格的检查。
- 修复了在为
FixedString数据类型指定非常大的参数时发生的溢出问题。 - 修复了在通用场景下
topK聚合函数中的 bug。 - 为带有
-Array组合器的 n 元变体聚合函数添加了对参数数组大小相等性的缺失检查。 - 修复了
clickhouse-client中--pager的 bug(作者:ks1322)。 - 修复了
exp10函数的精度问题。 - 修复了
visitParamExtract函数的行为,使其更符合文档描述。 - 修复了在指定错误数据类型时导致的崩溃问题。
- 修复了在所有列都是常量时
DISTINCT的行为。 - 修复了在使用
tupleElement函数且将复杂常量表达式作为元组元素索引时的查询格式化问题。 - 修复了
Dictionary表中range_hashed字典的 bug。 - 修复了导致
FULL和RIGHT JOIN结果中出现多余行的 bug(Amos Bird)。 - 修复了在配置重载期间在
config.d目录中创建和删除临时文件时导致服务器崩溃的问题。 - 修复了
SYSTEM DROP DNS CACHE查询:缓存被清空,但集群节点地址没有被更新的问题。 - 修复了在对物化视图所依赖的表执行
DETACH TABLE之后MATERIALIZED VIEW的行为(Marek Vavruša)。
构建改进:
- 使用
pbuilder工具进行构建。构建过程几乎完全独立于构建主机环境。 - 针对不同的 OS 版本使用同一套构建产物。软件包和二进制文件已被制作得可兼容广泛的 Linux 系统。
- 新增
clickhouse-test软件包,可用于运行功能测试。 - 源代码 tarball 现在可以发布到仓库中,可用于在不使用 GitHub 的情况下重现构建。
- 新增与 Travis CI 的有限集成。由于 Travis 的构建时间限制,仅测试 debug 构建,并且只运行有限子集的测试。
- 在默认构建中新增对
Cap'n'Proto的支持。 - 文档源文件格式从
Restricted Text更改为Markdown。 - 新增对
systemd的支持(Vladimir Smirnov)。由于与某些 OS 镜像不兼容,默认禁用,可手动启用。 - 对于动态代码生成,将
clang和lld嵌入到clickhouse二进制文件中。它们也可以通过clickhouse clang和clickhouse lld调用。 - 从代码中移除了对 GNU 扩展的使用。启用了
-Wextra选项。在使用clang进行构建时,默认使用libc++而不是libstdc++。 - 抽取出
clickhouse_parsers和clickhouse_common_io库,以加快各种工具的构建速度。
向后不兼容的更改:
- 对包含
Nullable列的Log类型表的 marks 格式做了向后不兼容的更改。如果你有这类表,应在启动新版本服务器之前将其转换为TinyLog类型。为此,请在metadata目录中相应的.sql文件里将ENGINE = Log替换为ENGINE = TinyLog。如果你的表中不包含Nullable列,或者你的表类型不是Log,则无需执行任何操作。 - 移除了
experimental_allow_extended_storage_definition_syntax设置。现在该功能默认启用。 - 将
runningIncome函数重命名为runningDifferenceStartingWithFirstvalue以避免混淆。 - 移除了在 FROM 之后直接指定且没有表时使用的
FROM ARRAY JOIN arr语法(Amos Bird)。 - 移除了仅用于演示目的的
BlockTabSeparated格式。 - 更改了聚合函数
varSamp、varPop、stddevSamp、stddevPop、covarSamp、covarPop、corr的状态格式。如果你在表中存储了这些聚合函数的状态(使用AggregateFunction数据类型或带有相应状态的物化视图),请写信至 [email protected]。 - 在之前的服务器版本中存在一个未在文档中说明的功能:如果一个聚合函数依赖于参数,在
AggregateFunction数据类型中仍可以在未指定参数的情况下使用它。示例:AggregateFunction(quantiles, UInt64)而不是AggregateFunction(quantiles(0.5, 0.9), UInt64)。该功能已丢失。尽管它未被文档化,我们计划在未来的版本中再次支持它。 - Enum 数据类型不能用于 min/max 聚合函数。该能力将在下一个版本中恢复。
升级时请注意:
- 在集群上执行滚动更新时,当部分副本运行旧版本 ClickHouse、部分副本运行新版本时,复制会暂时停止,并且日志中会出现
unknown parameter 'shard'消息。在集群的所有副本都更新之后,复制将继续。 - 如果集群服务器上运行着不同版本的 ClickHouse,则使用以下函数的分布式查询可能会产生不正确的结果:
varSamp、varPop、stddevSamp、stddevPop、covarSamp、covarPop、corr。你应当更新所有集群节点。