跳转到主要内容

发行版 1.1.54327, 2017-12-21

此版本包含对上一版本 1.1.54318 的缺陷修复:
  • 修复了复制过程中可能出现的竞态条件缺陷,该问题可能导致数据丢失。此问题影响 1.1.54310 和 1.1.54318 版本。如果你使用的是这两个版本之一,且使用了复制表,强烈建议升级。该问题会在日志中显示为类似 Part ... from own log does not exist. 的警告消息。即使你没有在日志中看到这些消息,此问题仍然存在。

发行版 1.1.54318, 2017-11-30

此版本包含对上一版本 1.1.54310 的错误修复:
  • 修复了 SummingMergeTree 引擎在合并期间错误删除行的问题
  • 修复了非复制 MergeTree 引擎中的内存泄漏问题
  • 修复了 MergeTree 引擎在频繁插入时的性能下降问题
  • 修复了导致复制队列停止运行的问题
  • 修复了服务器日志的轮转和归档问题

发行版 1.1.54310,2017-11-01

新功能:

  • MergeTree 家族表引擎现已支持自定义分区键。
  • Kafka 表引擎。
  • 新增对加载 CatBoost 模型并将其应用于存储在 ClickHouse 中的数据的支持。
  • 新增对相对于 UTC 存在非整数偏移时区的支持。
  • 新增对时间间隔算术运算的支持。
  • Date 和 DateTime 类型的取值范围已扩展至 2105 年。
  • 新增 CREATE MATERIALIZED VIEW x TO y 查询 (指定使用现有表来存储 materialized view 的数据) 。
  • 新增不带参数的 ATTACH TABLE 查询。
  • 在 SummingMergeTree 表中,名称以 -Map 结尾的 Nested 列的处理逻辑已提取到 sumMap 聚合函数中。现在可以显式指定这类列。
  • IP trie 字典的最大大小已增加到 1.28 亿条目。
  • 新增 getSizeOfEnumType 函数。
  • 新增 sumWithOverflow 聚合函数。
  • 新增对 Cap’n Proto 输入格式的支持。
  • 现在使用 zstd 算法时可以自定义压缩级别。

向后不兼容的变更:

  • 不允许创建使用 Memory 以外引擎的临时表。
  • 不允许显式创建使用 View 或 MaterializedView 引擎的表。
  • 在创建表时,新增了一项检查,用于验证采样键表达式是否包含在主键中。

缺陷修复:

  • 修复了同步向 分布式表 插入数据时发生卡住的问题。
  • 修复了复制表中添加和删除 parts 时的非原子性问题。
  • 插入到 materialized view 中的数据不再经过不必要的去重。
  • 当本地副本落后且远程副本不可用时,对 分布式表 执行查询不再报错。
  • 现在创建临时表时不再需要具备对 default 数据库的访问权限。
  • 修复了在不带参数的情况下指定 Array 类型时发生崩溃的问题。
  • 修复了当存放服务器日志的磁盘卷已满时发生卡住的问题。
  • 修复了 toRelativeWeekNum 函数在 Unix 纪元第一周发生溢出的问题。

构建改进:

  • 更新了多个第三方库 (尤其是 Poco) ,并将它们改为 git 子模块。

发行版 1.1.54304,2017-10-19

新功能:

  • 原生协议中的 TLS 支持 (要启用此功能,请在 config.xml 中设置 tcp_ssl_port) 。

缺陷修复:

  • 现在,针对复制表的 ALTER 会尽快开始执行。
  • 修复了在设置 preferred_block_size_bytes=0. 时读取数据发生崩溃的问题。
  • 修复了按下 Page Downclickhouse-client 崩溃的问题。
  • 修复了对包含 GLOBAL INUNION ALL 的某些复杂查询的解析错误。
  • FREEZE PARTITION 现在始终以原子方式执行。
  • 空的 POST 请求现在会返回状态码为 411 的响应。
  • 修复了对 CAST(1 AS Nullable(UInt8)). 这类表达式的解析错误。
  • 修复了从 MergeTree 表中读取 Array(Nullable(String)) 列时出现的错误。
  • 修复了解析诸如 SELECT dummy AS dummy, dummy AS b 之类的查询时发生崩溃的问题。
  • 即使 users.xml 无效,也能正确更新用户。
  • 修复了当可执行字典返回非零响应码时的处理错误。

发行版 1.1.54292,2017-09-20

新功能:

  • 新增了 pointInPolygon 函数,用于处理坐标平面上的坐标点。
  • 新增了 sumMap 聚合函数,用于计算数组的总和,类似于 SummingMergeTree
  • 新增了 trunc 函数。提升了舍入函数 (round, floor, ceil, roundToExp2) 的性能,并修正了其实现逻辑。修改了 roundToExp2 函数对分数和负数的处理逻辑。
  • ClickHouse 可执行文件现在对 libc 版本的依赖更低了。同一个 ClickHouse 可执行文件可以在多种 Linux 系统上运行。使用编译查询时仍然存在依赖 (设置 compile = 1,默认情况下不会启用) 。
  • 缩短了查询动态编译所需的时间。

Bug Fixes:

  • 修复了一个错误:该错误有时会产生 part ... intersects previous part 消息,并削弱副本一致性。
  • 修复了一个错误:如果在关闭期间 ZooKeeper 不可用,server 会锁死。
  • 删除了恢复副本时产生的过多日志。
  • 修复了 UNION ALL 实现中的一个错误。
  • 修复了 concat 函数中的一个错误:如果块中的第一列是 Array 类型,就会触发该错误。
  • 现在 Progress 会在 system.merges 表中正确显示。

发行版 1.1.54289,2017-09-13

新功能:

  • 新增用于服务器管理的 SYSTEM 查询:SYSTEM RELOAD DICTIONARYSYSTEM RELOAD DICTIONARIESSYSTEM DROP DNS CACHESYSTEM SHUTDOWNSYSTEM KILL
  • 新增用于处理数组的函数:concatarraySlicearrayPushBackarrayPushFrontarrayPopBackarrayPopFront
  • 为 ZooKeeper 配置新增了 rootidentity 参数,从而可以在同一个 ZooKeeper 集群上隔离不同用户。
  • 新增聚合函数 groupBitAndgroupBitOrgroupBitXor (为保持兼容性,也可使用 BIT_ANDBIT_ORBIT_XOR 这些名称) 。
  • 外部字典可通过在文件系统中指定套接字从 MySQL 加载。
  • 外部字典支持通过 SSL 从 MySQL 加载 (ssl_certssl_keyssl_ca 参数) 。
  • 新增 max_network_bandwidth_for_user 设置,用于限制每个用户查询的总带宽占用。
  • 支持对临时表执行 DROP TABLE
  • 支持从 CSVJSONEachRow 格式中读取 Unix 时间戳格式的 DateTime 值。
  • 在分布式查询中,落后的副本现在默认会被排除 (默认阈值为 5 分钟) 。
  • ALTER 期间使用 FIFO 锁:ALTER 查询不会因持续运行的查询而被无限期阻塞。
  • 可在配置文件中设置 umask
  • 提升了带 DISTINCT 的查询性能。

缺陷修复:

  • 改进了在 ZooKeeper 中删除旧节点的流程。此前,如果 insert 非常频繁,旧节点有时不会被删除,这会导致 server 关闭缓慢等问题。
  • 修复了为连接 ZooKeeper 选择主机时随机化处理的问题。
  • 修复了在分布式查询中,当副本为 localhost 时未排除落后副本的问题。
  • 修复了一个错误:对 Nested 结构中的某个元素执行 ALTER MODIFY 后,ReplicatedMergeTree 表中的数据分区片段可能会损坏。
  • 修复了可能导致 SELECT 查询“卡住”的错误。
  • 改进了分布式 DDL 查询。
  • 修复了查询 CREATE TABLE ... AS <materialized view>
  • 解决了 Buffer 表中 ALTER ... CLEAR COLUMN IN PARTITION 查询的死锁问题。
  • 修复了在使用 JSONEachRowTSKV 格式时,Enum 的默认值无效的问题 (为 0 而非最小值) 。
  • 解决了在使用带有 executable source 的字典时出现僵尸进程的问题。
  • 修复了 HEAD 查询的段错误问题。

改进了 ClickHouse 的开发与构建工作流程:

  • 你可以使用 pbuilder 来构建 ClickHouse。
  • 在 Linux 上构建时,你可以使用 libc++ 代替 libstdc++
  • 新增了使用静态代码分析工具的说明:Coverageclang-tidycppcheck

升级时请注意:

  • MergeTree 设置 max_bytes_to_merge_at_max_space_in_pool 现在的默认值更高了 (要合并的数据分区片段的最大总大小,单位为字节) :已从 100 GiB 提高到 150 GiB。这可能会导致服务器升级后运行大型 merge,从而增加磁盘子系统的负载。如果服务器上的可用空闲空间小于正在运行的 merge 总量的两倍,所有其他 merge 都会停止运行,包括小型数据分区片段的 merge。因此,INSERT 查询将失败,并显示消息 “Merges are processing significantly slower than inserts.”。请使用 SELECT * FROM system.merges 查询来监控这一情况。你还可以检查 system.metrics 表中的 DiskSpaceReservedForMerge 指标,或在 Graphite 中查看。你无需采取任何措施来修复此问题,因为大型 merge 完成后,此问题会自行解决。如果你认为这无法接受,可以将 max_bytes_to_merge_at_max_space_in_pool 设置恢复为之前的值。为此,请进入 config.xml 中的 <merge_tree> 部分,设置 <merge_tree>``<max_bytes_to_merge_at_max_space_in_pool>107374182400</max_bytes_to_merge_at_max_space_in_pool>,然后重启服务器。

发行版 1.1.54284, 2017-08-29

  • 这是对之前 1.1.54282 版本的错误修复发布,修复了 ZooKeeper 中 parts 目录泄漏的问题。

发行版 1.1.54282,2017-08-23

此版本包含对上一版本 1.1.54276 的错误修复:
  • 修复了向 分布式表 插入数据时出现的 DB::Exception: Assertion violation: !_path.empty()
  • 修复了使用 RowBinary format 插入时,如果输入数据以 ; 开头会导致的解析问题。
  • 修复了某些聚合函数 (例如 groupArray()) 在运行时编译期间出现的错误。

发行版 1.1.54276,2017-08-16

新功能:

  • 为 SELECT 查询新增了可选的 WITH 部分。示例查询:WITH 1+1 AS a SELECT a, a*a
  • 现在可以在 分布式表 中同步执行 INSERT:只有当所有数据都已保存到全部分片后,才会返回 OK。可通过设置 insert_distributed_sync=1 启用。
  • 新增了 UUID 数据类型,用于处理 16 字节标识符。
  • 为兼容 Tableau,新增了 CHAR、FLOAT 及其他类型的别名。
  • 新增了 toYYYYMM、toYYYYMMDD 和 toYYYYMMDDhhmmss 函数,用于将时间转换为数字。
  • 现在可以使用 IP 地址 (连同主机名) 来标识参与集群 DDL 查询的服务器。
  • 函数 substring(str, pos, len). 现已支持非常量参数和负偏移量。
  • groupArray(max_size)(column) 聚合函数新增了 max_size 参数,并优化了其性能。

主要变更:

  • 安全性改进:所有 server 文件均以 0640 权限创建 (可通过 <umask> 配置参数更改) 。
  • 改进了语法无效的查询的错误消息。
  • 在合并大块 MergeTree 数据时,显著降低了内存消耗并提升了性能。
  • 显著提升了 ReplacingMergeTree 引擎的数据合并性能。
  • 通过合并多个源插入,显著提升了来自 分布式表 的异步插入性能。要启用此功能,请使用设置 distributed_directory_monitor_batch_inserts=1。

向后不兼容的更改:

  • 更改了数组 groupArray(array_column) 函数聚合状态的二进制格式。

完整变更列表:

  • 新增了 output_format_json_quote_denormals setting,可在 JSON 格式中输出 nan 和 inf 值。
  • 优化了从 分布式表 读取时的 stream 分配。
  • 如果值不发生变化,则可在只读模式下配置 Settings。
  • 新增了读取 MergeTree 引擎非整数粒度的能力,以满足 preferred_block_size_bytes setting 中指定的块大小限制。这样做的目的是在处理包含大列的表查询时减少 RAM 占用,并提高缓存局部性。
  • 提高了对包含 toStartOfHour(x) 这类 expression 的索引的利用效率,适用于 toStartOfHour(x) op сonstexpr. 这类 conditions。
  • 为 MergeTree 引擎新增了 settings (config.xml 中的 merge_tree 部分) :
    • replicated_deduplication_window_seconds 设置 Replicated 表中 inserts 去重允许的秒数。
    • cleanup_delay_period 设置启动清理以移除过期数据的频率。
    • replicated_can_become_leader 可阻止副本成为 leader (以及分配 merges) 。
  • 加快了从 ZooKeeper 中清理过期数据的速度。
  • 对集群 DDL queries 进行了多项改进和修复。其中尤其值得关注的是新 setting distributed_ddl_task_timeout,它限制等待 cluster 中 server 响应的时间。如果某个 ddl request 尚未在所有主机上执行,响应将包含 timeout error,并且该请求会以 async mode 执行。
  • 改进了 server logs 中堆栈跟踪的显示效果。
  • 为压缩方法新增了 "none" 值。
  • 可以在 config.xml 中使用多个 dictionaries_config 段。
  • 现在可以通过文件系统中的套接字连接到 MySQL。
  • system.parts 表新增了一列,提供 marks 大小 (以字节为单位) 的信息。

缺陷修复:

  • 使用 Merge 表的分布式表现在能够正确处理对 _table 字段带条件的 SELECT 查询。
  • 修复了 ReplicatedMergeTree 在检查数据分区片段时一种罕见的竞态条件。
  • 修复了服务器启动时在“leader 选举”过程中可能卡住的问题。
  • 使用数据源的本地副本时,max_replica_delay_for_distributed_queries 设置此前会被忽略。现已修复。
  • 修复了在尝试清理不存在的列时,ALTER TABLE CLEAR COLUMN IN PARTITION 的错误行为。
  • 修复了在使用空数组或空字符串时 multiIf 函数中的异常。
  • 修复了反序列化 Native format 时内存分配过多的问题。
  • 修复了 Trie 字典自动更新不正确的问题。
  • 修复了在使用 SAMPLE 时,从 Merge 表执行带有 GROUP BY 子句的查询时出现的异常。
  • 修复了在使用 distributed_aggregation_memory_efficient=1 时 GROUP BY 崩溃的问题。
  • 现在可以在 IN 和 JOIN 的右侧指定 database.table。
  • 并行 aggregation 使用了过多线程。现已修复。
  • 修复了 “if” 函数处理 FixedString 参数时的错误行为。
  • 对于权重为 0 的分片,从 分布式表 执行 SELECT 的行为此前不正确。现已修复。
  • CREATE VIEW IF EXISTS 不再导致崩溃。
  • 修复了在设置 input_format_skip_unknown_fields=1 且存在负数时的错误行为。
  • 修复了当字典中存在无效数据时,dictGetHierarchy() 函数中的无限循环问题。
  • 修复了在 IN 或 JOIN 子句中使用带子查询的分布式查询和 Merge 表时出现的 Syntax error: unexpected (...) 错误。
  • 修复了对 Dictionary 表的 SELECT 查询解释不正确的问题。
  • 修复了在 IN 和 JOIN 子句中使用超过 20 亿个元素的数组时出现的 “Cannot mremap” 错误。
  • 修复了以 MySQL 作为源的字典的故障转移问题。

改进了 ClickHouse 的开发与构建工作流程:

  • 可在 Arcadia 中完成构建。
  • 可以使用 gcc 7 编译 ClickHouse。
  • 现在,使用 ccache+distcc 进行并行构建的速度更快。

发行版 1.1.54245,2017-07-04

新功能:

  • 分布式 DDL (例如 CREATE TABLE ON CLUSTER)
  • 支持复制执行的查询 ALTER TABLE CLEAR COLUMN IN PARTITION.
  • 用于字典表的引擎 (以表的形式访问字典数据) 。
  • 字典数据库引擎 (这种类型的数据库会自动为所有已连接的外部字典提供字典表) 。
  • 你可以通过向数据源发送请求来检查字典是否有更新。
  • 带限定符的列名
  • 使用双引号引用标识符。
  • HTTP 接口中的会话。
  • 针对 Replicated 表的 OPTIMIZE 查询不仅可以在 leader 上运行。

向后不兼容的更改:

  • 已移除 SET GLOBAL。

次要更改:

  • 现在,告警触发后,日志会打印完整的堆栈跟踪信息。
  • 放宽了启动时对损坏/多余数据分区片段数量的校验 (此前误报过多) 。

缺陷修复:

  • 修复了向分布式表插入数据时错误连接“卡住”的问题。
  • 现在,来自 Merge 表且访问分布式表的查询也支持 GLOBAL IN 了。
  • 修复了 Google Compute Engine 虚拟机上 CPU 核心数检测错误的问题。
  • 调整了 cached external dictionaries 的 executable source 的工作机制。
  • 修复了包含空字符的字符串比较问题。
  • 修复了 Float32 主键字段与常量比较时的问题。
  • 此前,对 field 大小的错误估算可能导致分配过多内存。
  • 修复了查询通过 ALTER 添加到表中的 Nullable 列时发生崩溃的问题。
  • 修复了按 Nullable 列排序时,在行数少于 LIMIT 的情况下发生崩溃的问题。
  • 修复了仅由常量值组成的 ORDER BY 子查询的问题。
  • 此前,Replicated 表在 DROP TABLE 失败后可能会一直处于无效状态。
  • 结果为空的 scalar 子查询的别名不再丢失。
  • 现在,使用了编译的查询即使 .so 文件损坏也不会因报错而失败。
最后修改于 2026年6月10日