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

2018 年更新日志

ClickHouse 版本 18.16

ClickHouse 版本 18.16.1,2018-12-21

缺陷修复:

  • 修复了一个导致使用 ODBC 源更新字典时出现问题的错误。#3825#3829
  • 聚合函数的 JIT 编译现在可以与 LowCardinality 列正常配合工作。#3838

改进:

  • 新增 low_cardinality_allow_in_native_format 设置(默认启用)。当关闭时,LowCardinality 列在 SELECT 查询中会被转换为普通列,在 INSERT 查询中则要求为普通列。#3879

构建改进:

  • 修复了在 macOS 和 ARM 平台上的构建问题。

ClickHouse 版本 18.16.0,2018-12-14

新功能:

  • 在以半结构化输入格式(JSONEachRowTSKV)加载数据时,会为缺失字段计算 DEFAULT 表达式。该功能可通过 insert_sample_with_metadata 设置启用。 #3555
  • ALTER TABLE 查询现在支持 MODIFY ORDER BY 操作,用于在添加或删除表列时修改排序键。这对 MergeTree 系列中在合并时基于该排序键执行附加任务的表非常有用,例如 SummingMergeTreeAggregatingMergeTree 等。 #3581 #3755
  • 对于 MergeTree 系列表,现在可以分别指定不同的排序键(ORDER BY)和索引(PRIMARY KEY)。排序键可以比索引更长。 #3581
  • 添加了用于向 HDFS 导入和导出数据的 hdfs 表函数和 HDFS 表引擎。 chenxing-xc
  • 添加了用于处理 base64 的函数:base64Encodebase64DecodetryBase64DecodeAlexander Krasheninnikov
  • 现在可以通过参数来配置 uniqCombined 聚合函数的精度(选择 HyperLogLog 单元的数量)。 #3406
  • 添加了 system.contributors 表,其中包含在 ClickHouse 中提交过代码的所有人的姓名。 #3452
  • ALTER TABLE ... FREEZE 查询添加了可省略分区的能力,以便一次性备份所有分区。 #3514
  • 添加了 dictGetdictGetOrDefault 函数,它们不需要显式指定返回值类型。类型会根据字典描述自动确定。 Amos Bird
  • 现在可以在表定义中为列指定注释,并通过 ALTER 修改注释。 #3377
  • 现在支持读取使用简单键的 Join 类型表。 Amos Bird
  • 现在在创建 Join 类型表时,可以指定 join_use_nullsmax_rows_in_joinmax_bytes_in_joinjoin_overflow_mode 选项。 Amos Bird
  • 添加了 joinGet 函数,使你可以像使用字典一样使用 Join 类型表。 Amos Bird
  • system.tables 表中添加了 partition_keysorting_keyprimary_keysampling_key 列,用于提供关于表键的信息。 #3609
  • system.columns 表中添加了 is_in_partition_keyis_in_sorting_keyis_in_primary_keyis_in_sampling_key 列。 #3609
  • system.parts 表中添加了 min_timemax_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 中将 PREWHEREFINAL 联合使用时的一个错误。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 格式插入到不带 NullableArray 类型列时出现的错误。 #3487 #3503
  • 修复 ZooKeeper 不可用时 DDLWorker 持续记录错误日志的问题。8f50c620
  • 修复了 quantile* 函数在参数类型为 DateDateTime 时的返回类型。#3580
  • 修复了当 WITH 子句仅指定不含表达式的简单别名时的处理。#3570
  • 修复了在启用 enable_optimize_predicate_expression 时,对包含命名子查询和限定列名的查询的处理。Winter Zhang
  • 修复了在使用物化视图时出现的 Attempt to attach to nullptr thread group 错误。Marek Vavruša
  • 修复了在向 arrayReverse 函数传入某些错误参数时会发生崩溃的问题。 73e3a7b6
  • 修复了 extractURLParameter 函数中的缓冲区溢出问题。提升了性能。新增了对包含零字节的字符串的正确处理。141e9799
  • 修复了 lowerUTF8upperUTF8 函数中固定大小缓冲区溢出的问题。不再允许在 FixedString 类型参数上执行这些函数。#3662
  • 修复了在删除 MergeTree 表时出现的一个罕见竞态条件。#3680
  • 修复了在从 Buffer 表读取数据的同时对目标表执行 ALTERDROP 操作时的竞态条件。#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 选项默认设置为 ALL120e2cbe
  • 移除了 re2 库中针对无效或复杂正则表达式向 stderr 输出日志的行为。#3723
  • Kafka 表引擎新增功能:在开始从 Kafka 读取数据之前检查订阅;为该表提供 kafka_max_block_size 设置。Marek Vavruša
  • cityHash64farmHash64metroHash64sipHash64halfMD5murmurHash2_32murmurHash2_64murmurHash3_32murmurHash3_64 函数现在适用于任意数量的参数,并且支持以元组形式传入参数。#3451 #3519
  • arrayReverse 函数现在适用于任意类型的数组。73e3a7b6
  • timeSlots 函数新增了一个可选参数:用于指定时间槽大小。 Kirill Shvakov
  • 对于 FULLRIGHT JOINmax_block_size 设置用于控制来自右表的未匹配数据流。Amos Bird
  • clickhouse-benchmarkclickhouse-performance-test 中新增了 --secure 命令行参数,用于启用 TLS。 #3688 #3690
  • Buffer 类型表的结构与目标表结构不匹配时支持类型转换。Vitaly Baranov
  • 添加了 tcp_keep_alive_timeout 选项,用于在连接在指定时间间隔内处于空闲后启用 keep-alive 数据包的发送。#3441
  • 当分区键仅包含一列时,system.parts 表中不再对其值使用不必要的引号。 #3652
  • 取模函数适用于 DateDateTime 数据类型。#3385
  • POWERLNLCASEUCASEREPLACELOCATESUBSTRMID 函数添加了同义词(别名)。 #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 函数现在会处理 govmiledu 这些顶级域名。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
  • 修复了在查询中使用 SAMPLEPREWHERE 和别名列时的错误。#3543
  • 修复了在启用 min_bytes_to_use_direct_io 设置时出现的罕见 unknown compression method 错误。3544

性能改进:

  • 修复了在 AMD EPYC 处理器上执行时,对 UInt16 或 Date 类型列执行 GROUP BY 查询的性能回退问题。Igor Lapko
  • 修复了处理长字符串的查询的性能回退问题。#3530

构建改进:

  • 对简化 Arcadia 构建进行了改进。#3475, #3535

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 周数的函数:toISOWeektoISOYeartoStartOfISOYeartoDayOfYear#3146
  • 现在可以为 MySQLODBC 表使用 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 表时,可以使用预定义的 databasetable 宏。#3251
  • 新增对以工程记数法(表示十的幂次)读取 Decimal 类型值的支持。#3153

实验特性:

  • 针对 LowCardinality 数据类型的 GROUP BY 子句进行了优化。#3138
  • 针对 LowCardinality 数据类型的表达式计算进行了优化。#3200

改进:

  • 显著降低了包含 ORDER BYLIMIT 的查询的内存占用。请参阅 max_bytes_before_remerge_sort 设置。#3205
  • 如果未指定 JOIN 类型(如 LEFTINNER 等),则默认使用 INNER JOIN#3147
  • 限定星号(如 t1.*)在包含 JOIN 的查询中可以正确工作。Winter Zhang
  • ODBC 表引擎能够根据远程数据库的 SQL 方言正确选择标识符的引用方式。Alexandr Krasheninnikov
  • 默认启用 compile_expressions 设置(对表达式进行 JIT 编译)。
  • 修复了同时执行 DROP DATABASE/TABLE IF EXISTSCREATE DATABASE/TABLE IF NOT EXISTS 时的处理逻辑。此前,CREATE DATABASE ... IF NOT EXISTS 查询可能会返回错误信息 “File ... already exists”,而 CREATE TABLE ... IF NOT EXISTSDROP 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
  • LENGTHCHARACTER_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 这种结构的 TupleNested 值。Marek Vavruša
  • firstSignificantSubdomain 函数的顶级域名列表现在已包含顶级域名 bizdecaseal
  • 在外部字典的配置中,null_value 被解释为该数据类型的默认值。#3330
  • Decimal 添加对 intDivintDivOrZero 函数的支持。b48402e8
  • sumMap 聚合函数的键新增对 DateDateTimeUUIDDecimal 类型的支持。 #3281
  • 为外部字典添加对 Decimal 数据类型的支持。#3324
  • SummingMergeTree 表中增加对 Decimal 数据类型的支持。#3348
  • if 中为 UUID 添加了特化支持。 #3366
  • 在从 MergeTree 表读取数据时,减少了对 openclose 系统调用的次数。#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 时)DateDateTime 之间的类型转换。此前,该转换是在自 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
  • 修复了在同时使用 FINALPREWHERE 时出现的错误。#3298
  • 修复了在对通过 ALTER 添加的列使用 PREWHERE 时出现的错误。 #3298
  • DEFAULTMATERIALIZED 表达式新增检查,用于确保其中不使用 arrayJoin。此前,在插入数据时使用 arrayJoin 会导致错误。#3337
  • PREWHERE 子句中缺少 arrayJoin 的情况新增了检查。此前在执行查询时,这会导致出现诸如 Size ... does not matchUnknown 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* 聚合函数。 #3129
  • Decimal 类型现在支持数学函数(expsin 等)。 #3129
  • system.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

改进

  • 如果数据分片在变更期间保持不变,则不会被副本下载。 #3103
  • 使用 clickhouse-client 时,设置名称现在支持自动补全。 #3106

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 BYWITH 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 时就可以不再显式指定 ANYALL#2982
  • 服务器日志中与查询处理相关的每一行都会显示查询 ID。#2482
  • 现在可以在 clickhouse-client 中获取查询执行日志(通过 send_logs_level 设置)。在分布式查询处理场景中,日志会从所有服务器级联汇聚而来。#2482
  • 在执行查询时,system.query_logsystem.processesSHOW PROCESSLIST)表现在包含所有已更改设置的相关信息(Settings 数据的嵌套结构)。新增了 log_query_settings 设置。 #2482
  • system.query_logsystem.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.metricssystem.events 表现在内置了文档。 #3016
  • 新增 arrayEnumerateDense 函数。Amos Bird
  • 新增 arrayCumSumNonNegativearrayDifference 函数。Aleksey Studnev
  • 新增了 retention 聚合函数。Sundy Li
  • 现在,您可以使用加号运算符对聚合函数的状态进行相加(合并),并将聚合函数的状态乘以非负常数。#3062 #3034
  • MergeTree 系列中的表现在包含虚拟列 _partition_id#3089

实验性特性:

  • 新增 LowCardinality(T) 数据类型。该数据类型会自动创建一个本地值字典,并允许在不解包该字典的情况下处理数据。#2830
  • 新增对 JIT 编译函数的缓存,以及一个用于统计在编译前使用次数的计数器。要对表达式进行 JIT 编译,请启用 compile_expressions 设置。#2990 #3077

改进:

  • 修复了在存在遗弃副本时复制日志无限累积的问题。为滞后时间较长的副本新增了一种高效的恢复模式。
  • 当执行包含多个聚合字段的 GROUP BY 操作时,如果其中一个字段为字符串而其他字段为固定长度类型,则提高了性能。
  • 在使用 PREWHERE 以及将表达式隐式下推到 PREWHERE 时,性能得到了提升。
  • 提升了文本格式(CSVTSV)的解析性能。Amos Bird #2980
  • 优化了在二进制格式中读取字符串和数组的性能。Amos Bird
  • 在单个服务器包含非常大量表的情况下,对 system.tablessystem.columns 的查询性能得到提升,内存消耗也有所降低。 #2953
  • 修复了在大量查询导致错误时的性能问题(在 perf top 中可以看到 _dl_addr 函数,但服务器的 CPU 使用率并不高)。#2938
  • 条件会被下推到 View 中(当 enable_optimize_predicate_expression 启用时)。Winter Zhang
  • 改进 UUID 数据类型的相关功能。#3074 #2985
  • UUID 数据类型在 The-Alchemist 字典中已受支持。 #2822
  • visitParamExtractRaw 函数在嵌套结构中也能正常工作。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
  • 可以在 JOINUSING 子句中使用重复的列。#3006
  • Pretty 格式现在对按列宽对齐的列设置了限制。请使用 output_format_pretty_max_column_pad_width 进行设置。如果某个单元格的值超过该宽度,它仍会完整显示,但表格中的其他单元格将不会变得过宽。 #3003
  • odbc 表函数现在允许指定数据库/模式名称。Amos Bird
  • 新增了对使用在 clickhouse-client 配置文件中指定用户名的支持。Vladimir Kozbin
  • ZooKeeperExceptions 计数器已被拆分为三个计数器:ZooKeeperUserExceptionsZooKeeperHardwareExceptionsZooKeeperOtherExceptions
  • ALTER DELETE 查询同样适用于物化视图。
  • 在对 ReplicatedMergeTree 表定期运行清理线程时增加了随机性,以避免在 ReplicatedMergeTree 表数量非常多时出现周期性的负载峰值。
  • 支持 ATTACH TABLE ... ON CLUSTER 查询语句。#3025

缺陷修复:

  • 修复了 Dictionary 表中的一个问题(会抛出 Size of offsets does not match size of columnUnknown compression method 异常)。该问题存在于 18.10.3 版本中。#2913
  • 修复了在合并 CollapsingMergeTree 表时的一个错误:当某个数据分片为空(这些分片会在合并过程中,或在执行 ALTER DELETE 且所有数据被删除时产生),并且合并使用了 vertical 算法时会触发该错误。 #3049
  • 修复了在对 Memory 表执行 DROPTRUNCATE 操作时,如果同时有 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
  • 修复了在同时创建和删除同一个 BufferMergeTree 表时出现的竞态条件。
  • 修复了在比较由某些复杂类型(例如元组)构成的元组时可能发生的段错误。 #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
  • 系统表(tablesdatabasespartscolumnsparts_columnsmergesmutationsreplicasreplication_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_64murmurHash3_32murmurHash3_64murmurHash3_128#2791
  • ClickHouse ODBC 驱动(ODBCDriver2 输出格式)增加了对 Nullable 类型的支持。 #2834
  • 在键列中增加了对 UUID 的支持。

改进:

  • 当从配置文件中删除集群时,可以在不重启服务器的情况下移除这些集群。 #2777
  • 当从配置文件中删除外部字典时,可以在不重启服务器的情况下移除这些外部字典。 #2779
  • Kafka 表引擎添加了对 SETTINGS 的支持。 Alexander Marshalov
  • 改进了 UUID 数据类型(尚未完成)。 #2618
  • SummingMergeTreeCollapsingMergeTreeVersionedCollapsingMergeTree 引擎中,支持在合并后产生空部分。 #2815
  • 已完成变更(mutation)操作的旧记录会被删除(ALTER DELETE)。 #2784
  • 添加了 system.merge_tree_settings 表。 Kirill Shvakov
  • system.tables 表现在包含依赖关系列:dependencies_databasedependencies_tableWinter 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 聚合函数在对空的 Float32Float64 集合进行聚合时返回 nanSundy Li

错误修复:

  • 移除了对 ODBC 连接字符串参数不必要的转义,这会导致无法建立连接。该错误出现在 18.6.0 版本中。
  • 修复了复制队列中处理 REPLACE PARTITION 命令的逻辑。如果针对同一分区有两个 REPLACE 命令,先前的不正确逻辑可能会导致其中一个命令一直留在复制队列中而未被执行。 #2814
  • 修复了在所有数据部分都为空时的合并问题(这些数据部分来源于一次合并,或在执行 ALTER DELETE 且所有数据都被删除时产生)。该问题出现在 18.1.0 版本中。 #2930
  • 修复了并发执行 SetJoin 时的错误。 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.namedatabase.table.nametable_alias.namesubquery_alias.name)。#2742
  • 复制支持启用 HTTPS。#2760

改进:

  • 服务器会向客户端传递其版本的补丁版本号组件。关于补丁版本组件的数据可在 system.processesquery_log 中获取。#2646

ClickHouse 版本 18.5

ClickHouse 版本 18.5.1,2018-07-31

新增功能:

  • 新增了哈希函数 murmurHash2_32 #2756

改进:

  • 现在可以使用 from_env 属性 #2741 从环境变量中为配置文件设置值。
  • 新增了不区分大小写的 coalesceifNullnullIf 函数版本 #2752

Bug 修复:

  • 修复了在启动副本时可能出现的一个错误 #2759

ClickHouse 发布 18.4

ClickHouse 发布 18.4.0,2018-07-28

新功能:

  • 新增以下系统表:formatsdata_type_familiesaggregate_function_combinatorstable_functionstable_enginescollations #2721
  • 新增支持在 remotecluster 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 CLUSTERKILLOPTIMIZE 查询 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_schemakafka_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_numinput_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 ... FINALAmos Bird)。

Bug 修复:

  • 修复了在发送和下载复制数据时,用于读写的 socket 超时时间设置得过短(1 秒)的问题。在网络或磁盘存在负载时,这会导致无法下载较大的数据分片(会不断循环重试下载分片)。此错误出现在版本 1.1.54388 中。
  • 修复了在 ZooKeeper 中使用 chroot 且向表中插入重复数据块时出现的问题。
  • has 函数现在可以正确处理带有 Nullable 元素的数组(#2115)。
  • 在分布式查询中使用时,system.tables 表现在可以正常工作。metadata_modification_timeengine_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_quotesformat_csv_allow_double_quotes 设置进行配置(Amos Bird)。
  • 现在对于非复制版的 MergeTree,可以在不指定分区的情况下使用 OPTIMIZE TABLE ... FINALAmos 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 REPLICASSYNC REPLICA[STOP|START] [MERGES|FETCHES|SENDS REPLICATED|REPLICATION QUEUES])。
  • 增加了向使用 MySQL 引擎的表写入数据的支持,以及相应的表函数(sundy-li)。
  • 增加了 url() 表函数和 URL 表引擎(Alexander Sapin)。
  • 增加了 windowFunnel 聚合函数(sundy-li)。
  • 新增字符串函数 startsWithendsWithVadim 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 修复:

  • 对于包含 DISTINCTORDER BY 的查询,不再出现重复结果。
  • 包含 ARRAY JOINarrayFilter 的查询不再返回不正确的结果。
  • 修复了从 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 缓存现在会自动更新。
  • 如果由于物化视图的分片过多导致无法向其中一个物化视图插入数据,则不再执行对主表的插入。
  • 纠正了 QuerySelectQueryInsertQuery 事件计数器之间的不一致。
  • 当 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)。

向后不兼容的变更:

  • 移除了在 VerticalPretty* 格式中的转义处理,并删除了 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 查询的问题。
  • 修复了在非主副本上执行 OPTIMIZEALTER 查询时的授权错误。
  • 修复了 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-Name HTTP 头中发送(Kirill Shvakov)。
  • 对于 Kafka 引擎,可以指定多个用逗号分隔的 topics(Tobias Adamson)。
  • 当查询被 KILL QUERYreplace_running_query 停止时,客户端会收到 Query was canceled 异常,而不是不完整的结果。

Improvements:

  • ALTER TABLE ... DROP/DETACH PARTITION 查询会在复制队列的前面优先执行。
  • 即使表只有一个数据分片,也可以使用 SELECT ... FINALOPTIMIZE ... FINAL
  • 如果 query_log 表被手动删除,会实时重新创建该表(Kirill Shvakov)。
  • lengthUTF8 函数运行得更快(zhang2014)。
  • 在分片数量非常大的情况下,提升了 Distributed 表中同步写入(insert_distributed_sync = 1)的性能。
  • 服务器从客户端接收 send_timeoutreceive_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-staticclickhouse-server-common 改为 clickhouse-serverclickhouse-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 工具,用于在集群之间复制和重新分片数据(测试版)。
  • 添加了一组一致性哈希函数:yandexConsistentHashjumpConsistentHashsumburConsistentHash。它们可以用作分片键,以在后续的重新分片操作中减少网络通信开销。
  • 新增函数:arrayAnyarrayAllhasAnyhasAllarrayIntersectarrayResize
  • 添加了 arrayCumSum 函数(Javi Santana)。
  • 添加了 parseDateTimeBestEffortparseDateTimeBestEffortOrZeroparseDateTimeBestEffortOrNull 函数,用于从包含多种可能格式文本的字符串中读取 DateTime。
  • 在更新时,可以从外部字典中部分重新加载数据(仅加载其中指定字段的值比上一次加载时该字段的值更大的记录)(Arsen Hakobyan)。
  • 新增了 cluster 表函数。示例:cluster(cluster_name, db, table)。如果集群名称以标识符形式指定,则 remote 表函数可以将集群名称作为第一个参数。
  • remotecluster 表函数可以在 INSERT 语句中使用。
  • system.tables 表中新增了 create_table_queryengine_full 虚拟列。metadata_modification_time 列也是虚拟列。
  • system.tablessystem.databases 表中新增了 data_pathmetadata_path 列,并在 system.partssystem.parts_columns 表中新增了 path 列。
  • system.part_log 表中新增了关于合并的更多信息。
  • 可以为 system.query_log 表使用任意分区键(Kirill Shvakov)。
  • SHOW TABLES 查询现在也会显示临时表。在 system.tables 中新增了临时表以及 is_temporary 列(zhang2014)。
  • 添加了 DROP TEMPORARY TABLEEXISTS 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_cancelledpeak_memory_usage 列。

改进:

  • 对于 INSERT SELECT 查询或 SELECT 子查询,针对结果设定的限制和配额不再应用于中间数据。
  • 在服务器启动时检查 Replicated 表状态时,force_restore_data 被误触发的次数减少。
  • 添加了 allow_distributed_ddl 选项。
  • 不再允许在 MergeTree 表键的表达式中使用非确定性函数。
  • 来自 config.d 目录的、包含替换项的文件按字母顺序加载。
  • 在常量多维数组的某个元素为空数组的情况下,改进了 arrayElement 函数的性能。例如:[[1], []][x]
  • 使用包含非常大替换项(例如,非常大的 IP 网络列表)的配置文件时,服务器启动速度现在更快。
  • 在运行查询时,表值函数只执行一次。之前,remotemysql 表值函数会执行同一个查询两次,以从远程服务器获取表结构。
  • 采用 MkDocs 文档生成器。
  • 当尝试删除某个表列,而其他列的 DEFAULT/MATERIALIZED 表达式依赖于该列时,会抛出异常(zhang2014)。
  • Float 数据类型添加了在文本格式中将空行解析为数字 0 的功能。此功能之前可用,但在 1.1.54342 版本中丢失。
  • Enum 值可以在 minmaxsum 及其他一些函数中使用。在这些情况下,会使用相应的数值。此功能之前可用,但在 1.1.54337 版本中丢失。
  • 添加了 max_expanded_ast_elements,用于限制在递归展开别名后 AST 的大小。

错误修复:

  • 修复了误将不必要列从子查询中删除,或未从包含 UNION ALL 的子查询中删除不必要列的情况。
  • 修复了 ReplacingMergeTree 表合并中的一个错误。
  • 修复了 Distributed 表中的同步插入(insert_distributed_sync = 1)。
  • 修复了在某些对 FULLRIGHT JOIN 的用法中,如果子查询中存在重复列会导致段错误的问题。
  • 修复了在某些对 replace_running_queryKILL QUERY 的用法中出现段错误的问题。
  • 修复了 system.dictionaries 表中 sourcelast_exception 列的顺序。
  • 修复了 DROP DATABASE 查询未删除元数据文件的错误。
  • 修复了 Dictionary 数据库的 DROP DATABASE 查询。
  • 修复了在基数超过 1 亿项时,uniqHLL12uniqCombined 函数精度偏低的问题(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 数据类型)存储的支持。
  • DESCRIBEINSERT 查询增加了对表函数的支持。为 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 参数的函数中指定时区时,返回类型会携带该时区信息,值将按预期显示。
  • 新增函数 toTimeZonetimeDifftoQuartertoRelativeQuarterNumtoRelativeHour/Minute/Second 函数可以接受 Date 类型的值作为参数。now 函数名区分大小写。
  • 新增 toStartOfFifteenMinutes 函数(Kirill Shvakov)。
  • 新增用于格式化查询的 clickhouse format 工具。
  • 新增 format_schema_path 配置参数(Marek Vavruša)。用于指定 Cap'n Proto 格式的 schema。schema 文件只能位于指定目录中。
  • 新增对配置替换(inclconf.d)的支持,用于配置外部字典和模型(Pavel Yakunin)。
  • system.settings 表中新增包含文档说明的列(Kirill Shvakov)。
  • 新增 system.parts_columns 表,用于提供 MergeTree 表中每个数据 part 内各列大小的信息。
  • 新增 system.models 表,用于提供已加载的 CatBoost 机器学习模型的信息。
  • 新增 mysqlodbc 表函数以及对应的 MySQLODBC 表引擎,用于访问远程数据库。该功能目前处于 beta 阶段。
  • 新增对将 AggregateFunction 类型参数传递给 groupArray 聚合函数的支持(因此可以创建某个聚合函数状态的数组)。
  • 移除了对多种聚合函数组合器组合方式的限制。例如,可以使用 avgForEachIf 以及 avgIfForEach 聚合函数,它们具有不同的行为。
  • -ForEach 聚合函数组合器扩展到多参数聚合函数的场景。
  • 新增对 Nullable 参数聚合函数的支持,即使函数返回的是非 Nullable 结果(由 Silviu Caragea 贡献)。示例:groupArraygroupUniqArraytopK
  • clickhouse-client 新增 max_client_network_bandwidth 设置(Kirill Shvakov)。
  • 具有 readonly = 2 设置的用户被允许操作 TEMPORARY 表(CREATE、DROP、INSERT...)(Kirill Shvakov)。
  • Kafka 引擎新增了使用多个 consumer 的支持,并扩展了针对 Kafka 的配置选项(Marek Vavruša)。
  • 新增 intExp3intExp4 函数。
  • 新增 sumKahan 聚合函数。
  • 新增 to*Number*OrNull 系列函数,其中 Number 为数值类型。
  • 新增对 INSERT SELECT 查询的 WITH 子句的支持(作者:zhang2014)。
  • 新增设置:http_connection_timeouthttp_send_timeouthttp_receive_timeout。这些设置特别用于下载用于复制的数据 part。调整这些设置可以在网络过载时实现更快的故障切换。
  • 新增对 Null 类型表执行 ALTER 的支持(Anastasiya Tsarkova)。
  • reinterpretAsString 函数扩展到所有在内存中连续存储的数据类型。
  • clickhouse-local 工具新增 --silent 选项。该选项会阻止在 stderr 中打印查询执行信息。
  • 新增对从文本读取 Date 类型值的支持,文本格式允许使用一位数字而不是两位数字来表示月份和/或日期(Amos Bird)。

性能优化:

  • 提升了聚合函数 minmaxanyanyLastanyHeavyargMinargMax 在处理字符串参数时的性能。
  • 提升了函数 isInfiniteisFiniteisNaNroundToExp2 的性能。
  • 提升了以文本格式解析和格式化 DateDateTime 类型值时的性能。
  • 提升了解析浮点数时的性能和精度。
  • JOIN 的左右两侧存在列名相同但未包含在 USING 中的列时,降低了内存使用量。
  • 通过牺牲一定的数值稳定性,提升了聚合函数 varSampvarPopstddevSampstddevPopcovarSampcovarPopcorr 的性能。旧版函数可以通过 varSampStablevarPopStablestddevSampStablestddevPopStablecovarSampStablecovarPopStablecorrStable 这些名称继续使用。

Bug 修复:

  • 修复了在运行 DROPDETACH PARTITION 查询后进行数据去重的问题。在之前的版本中,删除一个分区并再次插入相同数据不起作用,因为插入的块被视为重复数据。
  • 修复了一个可能导致在带有 POPULATECREATE MATERIALIZED VIEW 查询中,WHERE 子句被错误解释的 bug。
  • 修复了在 zookeeper_servers 配置中使用 root_path 参数时的 bug。
  • 修复了将 Date 参数传递给 toStartOfDay 时出现的非预期结果。
  • 修复了 addMonthssubtractMonths 函数,以及在结果属于上一年时 INTERVAL n MONTH 的算术行为。
  • UUID 数据类型补充了在 DISTINCTJOINuniq 聚合函数以及外部字典中的缺失支持(Evgeniy Ivanov)。对 UUID 的支持仍不完整。
  • 修复了在行汇总结果为零时 SummingMergeTree 的行为。
  • 针对 Kafka 引擎进行了多项修复(Marek Vavruša)。
  • 修复了 Join 表引擎的不正确行为(Amos Bird)。
  • 修复了在 FreeBSD 和 OS X 上分配器的不正确行为。
  • extractAll 函数现在支持空匹配。
  • 修复了阻止使用 libressl 替代 openssl 的错误。
  • 修复了从临时表执行 CREATE TABLE AS SELECT 查询的问题。
  • 修复了更新复制队列的非原子性问题。这可能导致副本在服务器重启前一直处于不同步状态。
  • 修复了 gcdlcmmodulo% 运算符)中可能发生的溢出问题(Maks Skorokhod)。
  • 现在在更改 umask 之后才会创建 -preprocessed 文件(可以在配置中更改 umask)。
  • 修复了在使用自定义分区键时,后台数据部件检查(MergeTreePartChecker)中的 bug。
  • 修复了在文本格式中解析元组(Tuple 数据类型的值)的问题。
  • 改进了关于传递给 multiIfarray 和其他一些函数的不兼容类型的错误信息。
  • 重新设计了对 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。
  • 修复了导致 FULLRIGHT 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 镜像不兼容,默认禁用,可手动启用。
  • 对于动态代码生成,将 clanglld 嵌入到 clickhouse 二进制文件中。它们也可以通过 clickhouse clangclickhouse lld 调用。
  • 从代码中移除了对 GNU 扩展的使用。启用了 -Wextra 选项。在使用 clang 进行构建时,默认使用 libc++ 而不是 libstdc++
  • 抽取出 clickhouse_parsersclickhouse_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 格式。
  • 更改了聚合函数 varSampvarPopstddevSampstddevPopcovarSampcovarPopcorr 的状态格式。如果你在表中存储了这些聚合函数的状态(使用 AggregateFunction 数据类型或带有相应状态的物化视图),请写信至 [email protected]
  • 在之前的服务器版本中存在一个未在文档中说明的功能:如果一个聚合函数依赖于参数,在 AggregateFunction 数据类型中仍可以在未指定参数的情况下使用它。示例:AggregateFunction(quantiles, UInt64) 而不是 AggregateFunction(quantiles(0.5, 0.9), UInt64)。该功能已丢失。尽管它未被文档化,我们计划在未来的版本中再次支持它。
  • Enum 数据类型不能用于 min/max 聚合函数。该能力将在下一个版本中恢复。

升级时请注意:

  • 在集群上执行滚动更新时,当部分副本运行旧版本 ClickHouse、部分副本运行新版本时,复制会暂时停止,并且日志中会出现 unknown parameter 'shard' 消息。在集群的所有副本都更新之后,复制将继续。
  • 如果集群服务器上运行着不同版本的 ClickHouse,则使用以下函数的分布式查询可能会产生不正确的结果:varSampvarPopstddevSampstddevPopcovarSampcovarPopcorr。你应当更新所有集群节点。

2017 年变更日志