ClickHouse 版本发布 18.16
ClickHouse 版本发布 18.16.1,2018-12-21
缺陷修复:
改进:
- 新增了
low_cardinality_allow_in_native_format设置 (默认启用) 。禁用后,SELECT 查询中的 LowCardinality 列会被转换为普通列,而 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 提交过 commit 的人员姓名。#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
缺陷修复
- 针对
LowCardinality数据类型的修复与性能改进。对使用LowCardinality(Nullable(...))的GROUP BY的改进。获取extremes的值。高阶函数的处理。LEFT ARRAY JOIN。DistributedGROUP BY。返回Array的函数。ORDER BY的执行。向Distributed表写入 (nicelulu) 。兼容通过实现Native协议的旧客户端发起的INSERT查询。JOIN对LowCardinality的支持。单个 stream 下的性能提升。#3823 #3803 #3799 #3769 #3744 #3681 #3651 #3649 #3641 #3632 #3568 #3523 #3518 - 修复了
select_sequential_consistency选项的行为。此前,启用此设置后,在开始向新分区写入时,有时会返回不完整的结果。#2863 - 执行 DDL
ON CLUSTER查询和ALTER UPDATE/DELETE时,能够正确指定数据库。#3772 #3460 - 已正确为 VIEW 中的子查询指定数据库。#3521
- 修复了
VersionedCollapsingMergeTree在配合FINAL使用PREWHERE时的一个 bug。7167bfd7 - 现在,你可以使用
KILL QUERY来取消那些因等待表锁而尚未开始执行的查询。#3517 - 修正了在时钟于午夜回拨时日期和时间计算出错的问题 (这种情况会发生在伊朗,也曾在 1981 年至 1983 年间发生于莫斯科) 。此前,这会导致时间被重置到比实际需要提前一天,还会造成文本格式中的日期和时间格式不正确。#3819
- 修复了某些
VIEW和子查询省略 database 时出现的错误。Winter Zhang - 修复了一个竞态条件:由于未对内部
MATERIALIZED VIEW加锁,在同时读取和删除MATERIALIZED VIEW时会出现该问题。#3404 #3694 - 修复了
Lock handler cannot be nullptr.错误。#3689 - 在启用
compile_expressions选项时 (默认启用) ,修复了查询处理中的问题。像now函数这样的非确定性常量表达式将不再被展开。#3457 - 修复了在
toDecimal32/64/128函数中将非常量标度指定为参数时发生的崩溃。 - 修复了一个错误:在
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 - 修复了使用 materialized views 时出现的
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 家族的表,在合并生成大型 parts 时,将以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函数现已支持任意数量的参数,以及 Tuple 形式的参数。#3451 #3519arrayReverse函数现在支持任意类型的数组。73e3a7b6- 新增了一个可选参数:
timeSlots函数的时间槽大小。Kirill Shvakov - 对于
FULL和RIGHT JOIN,max_block_size设置用于处理右侧表中未 join 数据的 stream。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 标准,部分函数名现已不区分大小写。新增了语法糖SUBSTRING(expr FROM start FOR length),以兼容 SQL。#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- 通过在
/etc/default/clickhouse中定义CLICKHOUSE_PROGRAM_ENV,可使用SYS-V init.d脚本在启动clickhouse-server时指定自定义环境变量。 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的性能分析,以便用于调试构建。2cc82f5c - 新增了在系统仅安装
Docker时运行集成测试的能力。#3650 - 在 SELECT 查询中新增了 fuzz expression 测试。#3442
- 新增了一个针对提交的压力测试,该测试会以并行且随机的顺序执行功能测试,以检测更多竞态条件。#3438
- 改进了在 Docker 镜像中启动 clickhouse-server 的方法。Elghazal Ahmed
- 针对 Docker 镜像,新增了支持使用
/docker-entrypoint-initdb.d目录中的文件初始化数据库。Konstantin Lebedev - 修复了 ARM 平台上的构建问题。#3709
向后不兼容的变更:
- 已移除
Date类型与数值比较的功能。不再支持toDate('2018-12-18') = 17883这种写法,必须显式进行类型转换:= toDate(17883)#3687
ClickHouse 18.14 版本发布
ClickHouse 版本发布 18.14.19,2018-12-19
缺陷修复:
- 修复了一个错误,该错误会导致使用 ODBC 数据源 更新字典时出现问题。#3825, #3829
- 执行 DDL
ON CLUSTERqueries 时,会正确指定 database。#3460 - 修复了超出
max_temporary_non_const_columns限制时发生段错误的问题。#3788
构建改进:
- 修复了 ARM 平台上的构建问题。
ClickHouse 版本发布 18.14.18,2018-12-04
缺陷修复:
- 修复了
dictGet...函数在range类型字典中的错误:当一个参数为常量而另一个不是常量时会出现该问题。#3751 - 修复了一个错误,该错误会导致消息
netlink: '...': attribute type 1 has an invalid length被打印到 Linux 内核日志中,并且仅在较新的 Linux 内核版本上出现。#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
缺陷修复:
- 修复了 ODBC bridge 进程未随主 server 进程一同终止的情况。#3642
- 修复了向
Distributed表同步 insert 时,列列表与远程表的列列表不一致的问题。#3673 - 修复了 drop MergeTree 表时可能导致崩溃的罕见竞态条件。#3643
- 修复了在创建查询线程失败并出现
Resource temporarily unavailable错误时发生的查询死锁问题。#3643 - 修复了在使用
CREATE AS table语法且ENGINEclause 位于AS table之前时,对ENGINEclause 的 parsing 问题 (该错误会导致忽略已指定的 engine) 。#3692
ClickHouse 版本 18.14.15,2018-11-21
缺陷修复:
- 在反序列化类型为
Array(String)的列时,内存块大小被高估,从而导致出现“Memory limit exceeded”错误。该问题出现在 18.12.13 版本中。#3589
ClickHouse 版本发布 18.14.14,2018-11-20
错误修复:
- 修复了在将集群配置为安全模式 (标志为
<secure>) 时,ON CLUSTER查询出现的问题。#3599
构建变更:
- 修复了相关问题 (系统中的 llvm-7、macOS) #3582
ClickHouse 版本发布 18.14.13,2018-11-08
缺陷修复:
- 修复了
MergingSorted stream中的Block structure mismatch错误。#3162 - 修复了在 cluster 配置中启用安全连接 (
<secure>标志) 时,ON CLUSTERqueries 的问题。#3465 - 修复了在 queries 中使用
SAMPLE、PREWHERE和别名列时出现的错误。#3543 - 修复了启用
min_bytes_to_use_direct_iosetting 时偶尔出现的unknown compression method错误。3544
性能改进:
- 修复了在 AMD EPYC 处理器上执行时,对 UInt16 或 Date 类型列进行
GROUP BY的查询出现的性能回退问题。Igor Lapko - 修复了处理长字符串的查询出现的性能回退问题。#3530
构建改进:
ClickHouse 版本发布 18.14.12,发布于 2018-11-02
缺陷修复:
- 修复了连接两个未命名子查询时发生崩溃的问题。#3505
- 修复了查询外部数据库时会生成错误查询 (
WHERE子句为空) 的问题。hotid - 修复了 ODBC 字典中使用错误超时值的问题。Marek Vavruša
ClickHouse 版本发布 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 format 向 Distributed 表执行插入操作时发生的错误。#3411
ClickHouse 版本发布 18.14.10,2018-10-23
compile_expressions设置 (表达式的 JIT 编译) 默认禁用。#3410enable_optimize_predicate_expression设置默认禁用。
ClickHouse 版本发布 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 - 增加了以工程计数法 (表示 10 的幂) 读取
Decimal类型值的能力。#3153
Experimental 功能:
改进:
- 显著减少了带有
ORDER BY和LIMIT的查询的内存占用。请参见max_bytes_before_remerge_sort设置。#3205 - 如果省略
JOIN(LEFT、INNER等) ,则默认为INNER JOIN。#3147 - 带限定符的星号在包含
JOIN的查询中可正常工作。Winter Zhang ODBC表引擎能够根据远程数据库的 SQL 方言,正确选择标识符的引用方式。Alexandr Krasheninnikovcompile_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。 ON CLUSTER可用于ALTER UPDATE查询。JSONEachRow格式数据的读取性能得到提升。#3332- 为提高兼容性,添加了
LENGTH和CHARACTER_LENGTH函数的同义词。CONCAT函数不再区分大小写。#3306 - 为
DateTime类型新增了TIMESTAMP同义词。#3390 - 即使某条日志与查询无关,服务器日志中也始终会为 query_id 预留位置。这让第三方工具更容易解析服务器文本日志。
- 当查询的内存占用超过下一个整数 GB 阈值时,就会被记入日志。#3205
- 新增了兼容模式,用于处理以下情况:使用 Native 协议的客户端库误将列数发送得少于服务器对 INSERT 查询的预期。使用 clickhouse-cpp 库时可能会出现这种情况。此前,这种情况会导致服务器崩溃。#3171
- 现在,在
clickhouse-copier中用户自定义的WHERE表达式里,可以使用partition_key别名 (用于按源表分区进行额外过滤) 。如果复制过程中分区方案有所变化,但变动不大,这会很有用。#3166 Kafka引擎的工作流程已转移到后台线程池中,以便在高负载情况下自动降低数据读取速度。Marek Vavruša。- 支持读取
Cap'n'Proto format中类似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函数中的错误:对于彼此距离很近且顶点数量较多的 Polygon,计算误差会不断累积,导致该问题发生。#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仅在远程服务器上执行,发起查询的服务器仍会对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格式插入数据时Date与DateTime之间的类型转换问题 (当input_format_values_interpret_expressions = 1时) 。此前,转换是在 Unix 纪元中的天数值与 Unix 时间戳之间进行的,因此会导致非预期结果。#3229 - 修正了
Decimal与整数之间的类型转换问题。#3211 - 修复了
enable_optimize_predicate_expression设置中的错误。Winter Zhang - 修复了在使用非默认 CSV 分隔符 (如
;) 时,CSV 格式中浮点数的解析错误 #3155 - 修复了
arrayCumSumNonNegative函数 (当累加器小于零时,不会累加负值) 。 Aleksey Studnev - 修复了使用
PREWHERE时,位于Distributed表之上的Merge表的工作机制问题。#3165 - 修复了
ALTER UPDATE查询中的错误。 - 修复了
odbc表函数在 18.12 版本中出现的错误。#3197 - 修复了带有
StateArray组合器的 aggregate function 的运行问题。#3188 - 修复了
Decimal值除以零时导致的崩溃。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 版本及更早版本的 server 组成的 cluster 一起工作时的兼容性问题。对于
GROUP BY键同时包含定长和非定长字段的 distributed queries,如果需要进行 aggregation 的 data 量很大,返回的 data 并不总是会被完全 aggregation (两条不同的行包含相同的 aggregation 键) 。#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
缺陷修复:
Merge现在已可在 分布式表 上正常工作。Winter Zhang- 修复了一处兼容性问题 (对
glibc版本的不必要依赖) ;此前因此无法在Ubuntu Precise及更早版本上运行 ClickHouse。该兼容性问题出现在 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选项,用于设置 merge 总大小的阈值 (超过该阈值时,数据分区片段文件将通过 O_DIRECT 处理) 。#3117 system.merges系统表现已包含partition_id列。#3099
改进
缺陷修复:
- 插入时,新增了对
Nested类型字段中各数组元素大小的检查。#3118 - 修复了使用
ODBCsource 和hashed存储的外部字典在更新时出现的错误。该错误出现在 18.12.13 版本中。 - 修复了根据带有
IN条件的查询创建临时表时发生的崩溃问题。Winter Zhang - 修复了可包含
NULL元素的数组在 aggregate functions 中的错误。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 的系统指标 (可用于获取 userspace 和内核态的 CPU 使用情况、缺页以及上下文切换等信息) ,以及 taskstats 指标 (可用于获取 I/O 等待时间、CPU 等待时间,以及读取和写入的数据量信息,包括使用和不使用 page cache 的情况) 。#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
Experimental 功能:
- 新增
LowCardinality(T)数据类型。该数据类型会自动创建值的本地字典,并支持在不解包字典的情况下处理数据。#2830 - 新增 JIT 编译函数缓存,以及一个用于统计触发编译前使用次数的计数器。要对 expression 进行 JIT 编译,请启用
compile_expressions设置。#2990 #3077
改进:
- 修复了存在废弃副本时复制日志无限积累的问题。为长时间落后的副本新增了有效的恢复模式。
- 改进了在多个聚合字段中一个为 String、其余为定长类型时
GROUP BY的性能。 - 使用
PREWHERE以及将表达式隐式移至PREWHERE时,性能有所提升。 - 提升了文本格式 (
CSV、TSV) 的解析性能。Amos Bird #2980 - 提升了在二进制格式下读取字符串和数组的性能。Amos Bird
- 当单个服务器上的表数量非常多时,提升了对
system.tables和system.columns的查询性能,并降低了内存占用。#2953 - 修复了这样一种情况下的性能问题:大量会导致错误的查询流可能引发该问题 (在
perf top中可以看到_dl_addr函数,但 server 并未占用太多 CPU) 。#2938 - 条件会被转换到视图中 (启用
enable_optimize_predicate_expression时) 。Winter Zhang - 增强了
UUID数据类型的功能。#3074 #2985 - 在 The-Alchemist 字典中已支持
UUID数据类型。#2822 visitParamExtractRaw函数可正确处理嵌套结构。Winter Zhang- 启用
input_format_skip_unknown_fields设置后,JSONEachRow格式中的对象字段将被正确跳过。BlahGeek - 对于带条件的
CASE表达式,现在可以省略ELSE,其效果等同于ELSE NULL。#2920 - 现在使用 ZooKeeper 时也可以配置操作 timeout 了。urykhy
- 你可以把
LIMIT n, m中的偏移量写成LIMIT n OFFSET m。#2840 - 你可以使用
SELECT TOP n语法来替代LIMIT。#2840 - 增大了写入系统表的队列大小,从而降低了出现
SystemLog parameter queue is full错误的频率。 windowFunnel聚合函数现已支持同时满足多个条件的事件。Amos Bird- 在
JOIN的USING子句中可使用重复列。#3006 Pretty格式现在对按宽度进行列对齐设置了上限。请使用output_format_pretty_max_column_pad_width设置。如果某个值过宽,仍会完整显示,但表中的其他单元格不会变得过宽。#3003odbc表函数现在支持指定 database/schema 名称。Amos Bird- 新增了可使用
clickhouse-client配置文件中指定用户名的功能。Vladimir Kozbin ZooKeeperExceptions计数器已细分为三个计数器:ZooKeeperUserExceptions、ZooKeeperHardwareExceptions和ZooKeeperOtherExceptions。ALTER DELETE查询也适用于 materialized view。- 在定期运行
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可能出现的竞态条件,该问题可能导致 server 崩溃。此 bug 出现在 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函数在某些非凸 Polygon 情况下的错误。#2910 - 修复了
nan与整数比较时结果错误的问题。#3024 - 修复了
zlib-ng库中的一个错误,该错误在极少数情况下可能会导致段错误。#2854 - 修复了一个内存泄漏问题:向包含
AggregateFunction列的表插入数据时,如果聚合函数的状态不是简单状态 (即需要单独分配内存) ,且单次插入请求会产生多个小块,就会出现该问题。#3084 - 修复了同时创建和删除同一个
Buffer或MergeTree表时的竞态条件。 - 修复了在比较由某些复杂类型 (如元组) 构成的元组时可能发生段错误的问题。#2989
- 修复了运行某些
ON CLUSTER查询时可能发生段错误的问题。Winter Zhang - 修复了
arrayDistinct函数处理Nullable数组元素时的一个错误。#2845 #2937 enable_optimize_predicate_expression选项现在已可正确支持使用SELECT *的情况。Winter Zhang- 修复了重新初始化 ZooKeeper 会话时的段错误。#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 driver (
ODBCDriver2output format) 现已支持 Nullable 类型。#2834 - 键列现已支持
UUID。
改进:
- 从配置文件中删除集群后,无需重启服务器即可将其移除。#2777
- 从配置文件中移除外部字典后,无需重启服务器即可将其删除。#2779
- 为
Kafka表引擎新增了对SETTINGS的支持。Alexander Marshalov - 改进了
UUID数据类型 (尚未完成) 。#2618 SummingMergeTree、CollapsingMergeTree和VersionedCollapsingMergeTree引擎现已支持合并后产生的空 parts。#2815- 已删除已完成 mutations 的旧记录 (
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 connection string 参数不必要的转义,此前这会导致无法建立连接。该错误出现在 18.6.0 版本中。
- 修复了复制队列中处理
REPLACE PARTITION命令的逻辑。如果同一分区有两个REPLACE命令,错误的逻辑可能导致其中一个一直留在复制队列中而未被执行。#2814 - 修复了在所有数据分区片段都为空时的 merge 缺陷 (即由 merge 或
ALTER DELETE生成的片段,如果所有数据都已被删除) 。该缺陷出现在 18.1.0 版本中。#2930 - 修复了并发使用
Set或Join时的错误。Amos Bird - 修复了在子查询内部的
UNION ALL查询中,如果某个SELECT查询包含重复列名时出现的Block structure mismatch in UNION stream: different number of columns错误。Winter Zhang - 修复了连接到 MySQL 服务器时,如果发生异常会导致内存泄漏的问题。
- 修复了发生查询错误时 clickhouse-client 返回码不正确的问题。
- 修复了包含 DISTINCT 的 materialized view 行为不正确的问题。#2795
向后不兼容的变更
- 已移除对分布式表执行 CHECK TABLE 查询的支持。
构建变更:
- 已更换内存分配器:现已使用
jemalloc替代tcmalloc。在某些场景下,速度最高可提升 20%。不过,也有一些查询的速度最多下降了 20%。在某些场景下,内存占用减少了约 10%,同时稳定性有所提升。在高竞争负载下,userspace 和系统态中的 CPU 使用率仅略有增加。#2773 - 使用子模块中的 libressl。#1983 #2807
- 使用子模块中的 unixodbc。#2789
- 使用子模块中的 mariadb-connector-c。#2785
- 向 repository 中添加了依赖测试数据可用性的功能测试文件 (暂不包含测试数据本身) 。
ClickHouse 18.6 版本发布
ClickHouse 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。
改进:
缺陷修复:
- 修复了启动副本时可能出现的一个问题 #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 条件影响的数据分区片段 #2694。ReplicatedMergeTree表的use_minimalistic_checksums_in_zookeeper选项默认启用。此设置于 2018-04-16 在 1.1.54378 版本中添加。早于 1.1.54378 的版本已无法再安装。- 支持运行指定
ON CLUSTER的KILL和OPTIMIZE查询 Winter Zhang。
缺陷修复:
- 修复了对带有 IN 表达式的聚合进行处理时出现的错误
Column ... is not under an aggregate function and not in GROUP BY。该缺陷出现在 18.1.0 版本中。(bbdd780b) - 修复了
windowFunnel聚合函数中的一个缺陷,Winter Zhang。 - 修复了
anyHeavy聚合函数中的一个缺陷 (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) 。- 比较 Operators 现已支持任意 types (#2026) 。
users.xml文件允许以10.0.0.1/255.255.255.0格式设置子网掩码。这对于在中间包含零的 IPv6 网络中使用掩码是必需的 (#2637) 。- 新增了
arrayDistinct函数 (#2670) 。 - SummingMergeTree engine 现在可以处理 AggregateFunction 类型的列 (Constantin S. Pan) 。
改进:
- 发布版本的编号方案已调整。现在,第一部分表示发布年份 (公元纪年,莫斯科时区,减去 2000) ,第二部分表示重大变更的版本号 (大多数版本都会递增) ,第三部分为补丁版本。除非更新日志中另有说明,各版本仍保持向后兼容。
- 浮点数转换为字符串的速度更快 (Amos Bird) 。
- 如果在
insert过程中因解析错误跳过了某些行 (启用input_allow_errors_num和input_allow_errors_ratio设置时可能会出现这种情况) ,现在会将跳过的行数写入服务器日志 (Leonardo Cecchi) 。
问题修复:
- 修复了临时表上的 TRUNCATE 命令 (Amos Bird) 。
- 修复了 ZooKeeper 客户端库中的一个罕见死锁问题,该问题会在读取响应时发生网络错误时出现 (c315200) 。
- 修复了 CAST 为 Nullable 类型时出现的错误 (#1322) 。
- 修复了在时间间隔边界重合时,
maxIntersection()函数返回结果不正确的问题 (Michael Furmur) 。 - 修复了函数参数中 OR 表达式链转换错误的问题 (chenxing-xc) 。
- 修复了在另一个子查询中包含
IN (subquery)表达式的查询出现性能下降的问题 (#2571) 。 - 修复了在分布式查询中,不同版本服务器之间使用非全大写
CAST函数时的不兼容问题 (fe8c4d6) 。 - 为发往外部 DBMS 的查询补上了缺失的标识符引号 (#2635) 。
不向后兼容的变更:
- 将包含数字 0 的字符串转换为 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) 。
缺陷修复:
- 修复了在发送和下载 replicated 数据时,套接字读写超时时间过短 (1 秒) 的问题;在网络或磁盘有负载时,这会导致无法下载较大的 parts (从而反复循环尝试下载 parts) 。该错误出现在 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 读取数据时启用或禁用对单引号和双引号处理的功能。你可以通过
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) 。
缺陷修复:
- 修复了使用 ZooKeeper 时的一个问题,该问题可能导致在重启服务器之前无法恢复会话和表的只读状态。
- 修复了使用 ZooKeeper 时的一个问题,该问题可能导致会话中断时旧节点不会被删除。
- 修复了
quantileTDigest函数处理 Float 参数时的一个错误 (该问题是在 1.1.54388 版本中引入的) (Mikhail Surin)。 - 修复了 MergeTree 表索引中的一个问题:当主键列位于同位宽有符号整数与无符号整数之间的类型转换函数内时,会触发该问题 (#2603) 。
- 修复了在使用
macros但其未在配置文件中定义时发生的段错误 (#2570) 。 - 修复了客户端重新连接时切换到默认数据库的问题 (#2583) 。
- 修复了禁用
use_index_for_in_with_subqueries设置时出现的一个问题。
安全修复:
- 连接到 MySQL 时,已无法再发送文件 (
LOAD DATA LOCAL INFILE) 。
ClickHouse 发行版 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 engine 的表写入数据的能力,以及相应的表函数 (sundy-li) 。
- 新增了
url()表函数和URL表引擎 (Alexander Sapin) 。 - 新增了
windowFunnel聚合函数 (sundy-li) 。 - 新增了用于字符串的
startsWith和endsWith函数 (Vadim Plakhtinsky) 。 numbers()表函数现在允许指定偏移量 (Winter Zhang) 。- 现在可以以交互方式输入
clickhouse-client的密码。 - 现在可以将服务器日志发送到 syslog (Alexander Krasheninnikov) 。
- 支持为使用共享库源的字典启用日志 (Alexander Sapin) 。
- 支持自定义 CSV 分隔符 (Ivan Zhukov)
- 新增了
date_time_input_format设置。如果将此设置切换为'best_effort',则可以按多种格式读取 DateTime 值。 - 新增了用于数据混淆的
clickhouse-obfuscator实用工具。使用示例:发布性能测试中使用的数据。
Experimental 功能:
- 新增了仅在需要时计算
and参数的能力 (Anastasia Tsarkova) - 现在某些表达式支持 JIT 编译为原生代码 (pyos) 。
缺陷修复:
- 带有
DISTINCT和ORDER BY的查询不再出现重复结果。 - 带有
ARRAY JOIN和arrayFilter的查询不再返回错误结果。 - 修复了从 Nested 结构中读取数组列时的错误 (#2066) 。
- 修复了分析包含
HAVING tuple IN (...)这类 HAVING 子句的查询时的错误。 - 修复了分析带有递归别名的查询时的错误。
- 修复了从 ReplacingMergeTree 读取数据时,PREWHERE 中的条件过滤掉所有行而导致的错误 (#2525) 。
- 在 HTTP 接口中使用会话时,用户 profile 设置未生效。
- 修复了 clickhouse-local 中通过命令行参数应用设置的方式。
- ZooKeeper 客户端库现在会使用从 server 接收到的 session timeout。
- 修复了 ZooKeeper 客户端库中的一个缺陷:当客户端等待 server 响应的时间超过 timeout 时会出错。
- 修复了对分区键列带条件的查询进行 parts 剪枝时的问题 (#2342) 。
- 现在在
CLEAR COLUMN IN PARTITION之后可以进行 merges 了 (#2315) 。 - 已修复 ODBC 表函数中的类型映射问题 (sundy-li) 。
- 已修复带和不带 time zone 的
DateTime的类型比较问题 (Alexander Bocharov) 。 - 修复了
CAST运算符的语法解析和格式化问题。 - 修复了向 Distributed 表引擎的 materialized view 插入数据时的问题 (Babacar Diassé) 。
- 修复了将数据从
Kafka引擎 写入 materialized views 时的竞态条件 (Yangkuan Liu) 。 - 修复了 remote() 表函数中的 SSRF 问题。
- 修复了
clickhouse-client在多行模式下的退出行为 (#2510) 。
改进:
- 复制表中的后台任务现在会在线程池中执行,而不再为每个任务单独创建线程 (Silviu Caragea) 。
- 提升了 LZ4 压缩性能。
- 包含大量 JOIN 和子查询的查询,分析速度更快了。
- 现在,当网络错误过多时,DNS 缓存会自动更新。
- 如果某个 materialized view 因 parts 过多而无法执行 insert,则表 insert 也不会再继续。
- 修正了事件计数器
Query、SelectQuery和InsertQuery之间的不一致。 - 现在允许使用
tuple IN (SELECT tuple)这样的表达式,前提是 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 版本 (或更高版本) 和更旧版本的 server,并且该查询包含不带
AS关键字且未将cast写成大写的cast(x, 'Type')表达式,则会抛出类似Not found column cast(0, 'UInt8') in block的异常。解决方案:更新整个 cluster 中的 server。
ClickHouse 发行版 1.1.54385,2018-06-01
缺陷修复:
- 修复了一个在某些情况下会导致 ZooKeeper 操作被阻塞的错误。
ClickHouse 版本 1.1.54383,2018-05-22
缺陷修复:
- 修复了在表拥有大量副本时复制队列变慢的问题。
ClickHouse 1.1.54381 版本,2018-05-14
缺陷修复:
- 修复了在 ClickHouse 与 ZooKeeper 服务器断开连接时,ZooKeeper 中节点泄漏的问题。
ClickHouse 版本 1.1.54380,2018-04-21
新功能:
- 新增了表函数
file(path, format, structure)。以下示例展示了如何从/dev/urandom读取字节:ln -s /dev/urandom /var/lib/clickhouse/user_files/random``clickhouse-client -q "SELECT * FROM file('random', 'RowBinary', 'd UInt8') LIMIT 10".
改进:
- 子查询可以用
()括起来,以提高查询的可读性。例如:(SELECT 1) UNION ALL (SELECT 1)。 - 从
system.processes表发起的简单SELECT查询不计入max_concurrent_queries限制。
缺陷修复:
- 修复了从
MATERIALIZED VIEW查询时,IN运算符行为异常的问题。 - 修复了在
partition_key_column IN (...)这类表达式中,按分区索引过滤不正确的问题。 - 修复了在对表执行过
REANAME后,无法在非 leader 副本上执行OPTIMIZE查询的问题。 - 修复了在非 leader 副本上执行
OPTIMIZE或ALTER查询时发生的授权错误。 - 修复了
KILL QUERY卡住的问题。 - 修复了 ZooKeeper 客户端库中的一个错误:如果在 ZooKeeper 配置中使用非空的
chrootprefix`,会导致 watches 丢失、分布式 DDL 队列卡住,以及复制队列变慢。
向后不兼容的变更:
- 移除了对
(a, b) IN (SELECT (a, b))这类表达式的支持 (你可以使用等价表达式(a, b) IN (SELECT a, b)) 。在之前的版本中,这些表达式会导致WHERE过滤结果不确定,或引发错误。
ClickHouse 版本 1.1.54378,2018-04-16
新功能:
- 无需重启服务器即可更改日志级别。
- 新增
SHOW CREATE DATABASE查询。 - 可向
clickhouse-client传递query_id(elBroom) 。 - 新设置:
max_network_bandwidth_for_all_users。 - 为
MATERIALIZED VIEW新增了对ALTER TABLE ... PARTITION ...的支持。 - 在系统表中新增了数据分区片段未压缩大小的信息。
- 分布式表现已支持服务器间加密 (在
<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异常,而不是不完整的结果。
改进:
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(谢磊) 。
缺陷修复:
- 修复了当表达式左侧为
Nullable时IN的错误。 - 现在,在某些 Tuple 元素位于表索引中时,使用 Tuple 配合
IN可返回正确结果。 max_execution_time限制现在可在分布式查询中正确生效。- 修复了在
system.columns表中计算复合列大小时的错误。 - 修复了创建临时表
CREATE TEMPORARY TABLE IF NOT EXISTS.时的错误。 - 修复了
StorageKafka中的错误 (##2075) - 修复了某些聚合函数的无效参数导致服务器崩溃的问题。
- 修复了导致
DETACH DATABASE查询无法停止ReplicatedMergeTree表后台任务的错误。 - 向聚合 materialized view 插入数据时,不太容易出现
parts 过多状态 (##2084) 。 - 修正了配置中替换的递归处理:如果同一级别上的一个替换后还需要跟另一个替换,现在可正确处理。
- 修正了创建使用
UNION ALL查询的VIEW时元数据文件中的语法。 SummingMergeTree现在可以对具有复合键的嵌套数据结构正确求和。- 修复了为
ReplicatedMergeTree表选择 leader 时可能出现竞态条件的问题。
构建变更:
- 构建现已支持使用
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。旧名称的软件包仍会在仓库中保留,以保持向后兼容。
向后不兼容的变更:
- 移除了在左侧指定数组时对 IN 表达式的特殊解释。此前,表达式
arr IN (set)会被解释为“arr中至少有一个元素属于set”。如需在新版本中实现相同的行为,请写成arrayExists(x -> x IN (set), arr)。 - 禁用了对套接字选项
SO_REUSEPORT的错误用法;此前该选项在 Poco 库中被错误地默认启用。请注意,在 Linux 上,监听时不再需要同时指定地址::和0.0.0.0—— 只需使用::,即可同时监听 IPv4 和 IPv6 连接 (在默认内核配置下) 。你也可以通过在配置中指定<listen_reuse_port>1</listen_reuse_port>,恢复为以前版本的行为。
ClickHouse 版本 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.
缺陷修复:
- 修复了从 Merge 表读取
Distributed表时出现的Illegal PREWHERE错误。 - 添加了修复,使 clickhouse-server 可以在仅支持 IPv4 的 Docker 容器中启动。
- 修复了读取系统表
system.parts_columns时的竞态条件。 - 移除了向
Distributed表同步 insert 时的双重缓冲,该问题可能导致连接超时。 - 修复了一个 bug:在开始执行
SELECT查询之前,等待不可用副本的时间过长。 - 修复了
system.parts表中的错误日期。 - 修复了一个 bug:如果
ZooKeeper集群的 configuration 中chroot非空,则无法向Replicated表 insert 数据。 - 修复了空
ORDER BY表的纵向 merge 算法。 - 恢复了在查询远程表时使用字典的能力,即使这些字典在请求方 server 上不存在。此功能在 1.1.54362 版本中丢失。
- 恢复了如下查询的行为:
SELECT * FROM remote('server2', default.table) WHERE col IN (SELECT col2 FROM default.table),即当IN右侧应使用远程default.table而不是本地表时的行为。此行为在 1.1.54358 版本中被破坏。 - 移除了多余的 error 级别日志
Not found column ... in block。
ClickHouse 版本 1.1.54362,2018-03-11
新功能:
- 对于空集在不使用
GROUP BY的情况下进行聚合 (例如SELECT count(*) FROM table WHERE 0) ,现在会返回一条包含一行结果的记录,其中聚合函数的值为 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工具 (Beta) 。 - 新增了一致性哈希函数:
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_tryconfiguration 参数:如果某些监听地址无法绑定,也不会退出,而是继续监听至少一个可用地址 (对禁用了 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) 。 - 新增了在文本格式中将空行解析为数字 0 (适用于
Float数据类型) 的能力。该功能此前可用,但在 1.1.54342 版本中丢失了。 Enum值现在可用于min、max、sum等部分函数。在这些情况下,使用的是其对应的数值。该功能此前可用,但在 1.1.54337 版本中丢失了。- 新增
max_expanded_ast_elements,用于限制递归展开别名后 AST 的大小。
缺陷修复:
- 修复了错误地从子查询中删除不必要列,或未从包含
UNION ALL的子查询中删除这些列的情况。 - 修复了
ReplacingMergeTree表在 merge 过程中的一个 bug。 - 修复了
Distributed表中的同步插入问题 (insert_distributed_sync = 1) 。 - 修复了在某些使用
FULL和RIGHT JOIN且子查询中存在重复列的情况下发生的段错误。 - 修复了在某些使用
replace_running_query和KILL QUERY的情况下发生的段错误。 - 修复了
system.dictionaries表中source和last_exception列的顺序问题。 - 修复了
DROP DATABASE查询未删除元数据文件的 bug。 - 修复了用于
Dictionary数据库的DROP DATABASE查询。 - 修复了
uniqHLL12和uniqCombined函数在基数超过 1 亿时精度过低的问题 (Alex Bocharov) 。 - 修复了在
INSERT查询中需要同时计算显式默认表达式时,隐式默认值的计算问题 (zhang2014) 。 - 修复了对
MergeTree表的查询在极少数情况下无法完成的问题 (chenxing-xc) 。 - 修复了当所有分片都是本地分片时,对
Distributed表执行CHECK查询会崩溃的问题 (chenxing.xc) 。 - 修复了使用正则表达式的函数出现的轻微性能回退问题。
- 修复了从复杂表达式创建多维数组时的性能回退问题。
- 修复了一个可能导致包含元数据的
.sql文件中出现额外FORMAT段的 bug。 - 修复了一个 bug:尝试删除引用显式指定表的
MATERIALIZED VIEW时,会错误应用max_table_size_to_drop限制。 - 修复了与旧客户端不兼容的问题 (旧客户端有时会收到
DateTime('timezone')类型的数据,而它们无法识别该类型) 。 - 修复了这样一个 bug:读取通过
ALTER添加到结构中的Nested列元素时,如果这些列在旧分区中为空,且这些列的条件被移到PREWHERE,就会出错。 - 修复了查询
Merge表时通过虚拟_table列过滤表的 bug。 - 修复了在
Distributed表中使用ALIAS列时的 bug。 - 修复了一个导致包含
quantile家族聚合函数的查询无法进行动态编译的 bug。 - 修复了查询执行流水线中的一个竞态条件:在极少数情况下,使用包含大量表的
Merge表以及使用GLOBAL子查询时会触发该问题。 - 修复了在向
arrayReduce函数传入不同大小的数组,并使用来自多个参数的聚合函数时发生的崩溃。 - 禁止在
MATERIALIZED VIEW中使用包含UNION ALL的查询。 - 修复了 server 启动时初始化
part_log系统表过程中发生的错误 (默认情况下,part_log是禁用的) 。
向后不兼容的变更:
- 已移除
distributed_ddl_allow_replicated_alter选项。该行为现已默认启用。 - 已移除
strict_insert_defaults设置。如果你此前使用过此功能,请发送邮件至feedback@clickhouse.com。 - 已移除
UnsortedMergeTree引擎。
版本 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 表插入时对重复数据的处理,因此不再拖慢复制队列的执行。
版本 1.1.54342, 2018-01-22
- 修复了 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中看到这一问题) 。 - 修复了一个可能导致在对复制表执行 OPTIMIZE 查询后出现合并操作不一致的错误 (你可能会在日志消息
Part ... intersects the previous part中看到这一问题) 。 - 当目标表中存在 MATERIALIZED 列时,Buffer 表现在可以正常工作了 (由 zhang2014 提供) 。
- 修复了 NULL 实现中的一个错误。
版本 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表中每个数据分区片段的列大小信息。 - 新增
system.models表,其中包含已加载的CatBoost机器学习模型信息。 - 新增
mysql和odbc表函数,以及相应的MySQL和ODBC表引擎,用于访问远程数据库。此功能目前处于 Beta 阶段。 - 新增支持向
groupArray聚合函数传递AggregateFunction类型的参数 (因此可以创建某个聚合函数状态的数组) 。 - 移除了对各种聚合函数组合器组合方式的限制。例如,现在既可以使用
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引擎中使用多个消费者。还扩展了Kafka的配置选项 (Marek Vavruša) 。 - 新增
intExp3和intExp4函数。 - 新增
sumKahan聚合函数。 - 新增 to * Number* OrNull 函数,其中 * Number* 为数值类型。
- 新增对
INSERT SELECT查询中WITH子句的支持 (author: zhang2014) 。 - 新增设置:
http_connection_timeout、http_send_timeout、http_receive_timeout。这些设置尤其用于在复制过程中下载数据分区片段。在网络过载时,调整这些设置可以实现更快的故障转移。 - 新增对
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这些名称。
缺陷修复:
- 修复了运行
DROP或DETACH PARTITION查询后数据去重的问题。在此前的版本中,删除某个分区后再次插入相同数据会失效,因为已插入的块会被视为重复。 - 修复了一个 bug:对于带有
POPULATE的CREATE MATERIALIZED VIEW查询,WHERE子句可能会被错误解析。 - 修复了
zookeeper_servers配置中root_path参数的使用问题。 - 修复了向
toStartOfDay传入Date参数时会产生意外结果的问题。 - 修复了
addMonths和subtractMonths函数,以及在结果落入上一年时INTERVAL n MONTH的运算问题。 - 为
DISTINCT、JOIN、uniq聚合函数以及外部字典补上了此前缺失的UUID数据类型支持 (Evgeniy Ivanov) 。不过,对UUID的支持仍不完整。 - 修复了
SummingMergeTree在行求和结果为零时的行为问题。 - 对
Kafka引擎进行了多项修复 (Marek Vavruša) 。 - 修复了
Join表引擎的错误行为 (Amos Bird) 。 - 修复了 FreeBSD 和 OS X 下分配器的异常行为。
extractAll函数现在支持空匹配。- 修复了一个阻止使用
libressl替代openssl的错误。 - 修复了从临时表执行
CREATE TABLE AS SELECT查询时的问题。 - 修复了更新复制队列时缺乏原子性的问题。这可能导致副本在 server 重启前一直处于不同步状态。
- 修复了
gcd、lcm和modulo(%运算符) 中可能发生的溢出问题 (Maks Skorokhod) 。 - 现在会在更改
umask后创建-preprocessed文件 (umask可在配置中修改) 。 - 修复了使用自定义 partition key 时,后台检查分片 (
MergeTreePartChecker) 中的一个 bug。 - 修复了文本格式中 tuple (即
Tuple数据类型的值) 的解析问题。 - 改进了向
multiIf、array及其他一些函数传入不兼容类型时的错误信息。 - 重新设计了对
Nullable类型的支持。修复了可能导致 server 崩溃的 bug。还修复了几乎所有其他与NULL支持相关的 bug:包括 INSERT SELECT 中错误的类型转换、HAVING 和 PREWHERE 中对 Nullable 的支持不足、join_use_nulls模式,以及将 Nullable 类型作为OR运算符参数等问题。 - 修复了多种与数据类型内部语义相关的 bug。例如:
SummingMergeTree中对Enum类型字段的不必要求和;Pretty格式中Enum类型的对齐问题,等等。 - 对复合列允许组合的检查更加严格。
- 修复了为
FixedString数据类型指定极大参数时发生的溢出问题。 - 修复了
topK聚合函数在通用场景下的一个 bug。 - 为带有
-Array组合器的聚合函数 n 元变体参数补上了此前缺失的数组长度相等性检查。 - 修复了
clickhouse-client中--pager的一个 bug (author: ks1322) 。 - 修复了
exp10函数的精度问题。 - 修复了
visitParamExtract函数的行为,使其更符合文档说明。 - 修复了指定错误数据类型时发生崩溃的问题。
- 修复了所有列都为常量时
DISTINCT的行为。 - 修复了在将复杂常量表达式用作 tuple 元素索引时,使用
tupleElement函数的查询格式化问题。 - 修复了
range_hashed字典的Dictionary表中的一个 bug。 - 修复了一个会导致
FULL和RIGHT JOIN结果中出现过多行的 bug (Amos Bird) 。 - 修复了配置重载期间,在
config.d目录中创建和删除临时 File 时导致的 server 崩溃问题。 - 修复了
SYSTEM DROP DNS CACHE查询:缓存虽已 flush,但 cluster 节点地址未更新。 - 修复了在对视图底层表执行
DETACH TABLE后MATERIALIZED VIEW的行为 (Marek Vavruša) 。
构建改进:
- 使用
pbuilder工具进行构建。构建过程几乎完全不依赖构建主机环境。 - 单次构建可用于不同的操作系统版本。软件包和二进制文件已兼容广泛的 Linux 系统。
- 新增
clickhouse-test软件包,可用于运行功能测试。 - 源代码 tarball 现在可以发布到代码仓库,无需使用 GitHub 也能复现构建。
- 新增了与 Travis CI 的有限集成。由于 Travis 的构建时间受限,因此仅测试 debug 构建,并且只运行部分测试。
- 在默认构建中新增了对
Cap'n'Proto的支持。 - 将文档源文件的格式从
Restricted Text改为Markdown。 - 新增了对
systemd的支持 (Vladimir Smirnov) 。由于与某些操作系统镜像不兼容,默认禁用,但可手动启用。 - 为支持动态代码生成,
clang和lld被嵌入到clickhousebinary 中。它们也可以通过clickhouse clang和clickhouse lld调用。 - 从代码中移除了对 GNU 扩展的使用。启用了
-Wextra选项。使用clang构建时,默认使用libc++而非libstdc++。 - 将
clickhouse_parsers和clickhouse_common_io库拆分出来,以加快各种工具的构建速度。
向后不兼容的变更:
- 包含
Nullable列的Log类型表,其标记格式发生了向后不兼容的更改。如果你有这类表,应在启动新 server 版本之前将其转换为TinyLog类型。为此,请在metadata目录中对应的.sql文件里,将ENGINE = Log替换为ENGINE = TinyLog。如果你的表不包含Nullable列,或者表的类型不是Log,则无需进行任何操作。 - 移除了
experimental_allow_extended_storage_definition_syntaxsetting。现在该 feature 默认启用。 - 为避免混淆,
runningIncome函数已重命名为runningDifferenceStartingWithFirstvalue。 - 移除了
FROM ARRAY JOIN arr语法;这种写法是在 FROM 后没有表且直接指定 ARRAY JOIN 时使用的 (Amos Bird) 。 - 移除了仅用于演示的
BlockTabSeparatedformat。 - 更改了 aggregate functions
varSamp、varPop、stddevSamp、stddevPop、covarSamp、covarPop、corr的状态格式。如果你在表中存储了这些 aggregate functions 的状态 (使用AggregateFunctiondata type,或使用带有相应状态的 materialized views) ,请发送邮件至 feedback@clickhouse.com。 - 在之前的 server 版本中,有一个未文档化的功能:如果某个 aggregate function 依赖参数,你仍然可以在 AggregateFunction data type 中不带参数地指定它。Example:
AggregateFunction(quantiles, UInt64),而不是AggregateFunction(quantiles(0.5, 0.9), UInt64)。该功能现已失效。尽管它未被文档记录,我们计划在未来的版本中再次支持它。 - 枚举 data types 不能用于 min/max aggregate functions。此能力将在下一个版本中恢复。
升级时请注意:
- 对集群执行滚动更新时,当部分副本运行旧版 ClickHouse、部分副本运行新版 ClickHouse 时,复制会暂时停止,并且日志中会出现
unknown parameter 'shard'消息。待集群中所有副本均完成更新后,复制会继续。 - 如果集群中的服务器运行的是不同版本的 ClickHouse,则使用以下函数的分布式查询可能会产生错误结果:
varSamp,varPop,stddevSamp,stddevPop,covarSamp,covarPop,corr。你应更新集群中的所有节点。