发行版 1.1.54327, 2017-12-21
- 修复了复制过程中可能出现的竞态条件缺陷,该问题可能导致数据丢失。此问题影响 1.1.54310 和 1.1.54318 版本。如果你使用的是这两个版本之一,且使用了复制表,强烈建议升级。该问题会在日志中显示为类似
Part ... from own log does not exist.的警告消息。即使你没有在日志中看到这些消息,此问题仍然存在。
发行版 1.1.54318, 2017-11-30
- 修复了 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 Down时clickhouse-client崩溃的问题。 - 修复了对包含
GLOBAL IN和UNION 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 DICTIONARY、SYSTEM RELOAD DICTIONARIES、SYSTEM DROP DNS CACHE、SYSTEM SHUTDOWN、SYSTEM KILL。 - 新增用于处理数组的函数:
concat、arraySlice、arrayPushBack、arrayPushFront、arrayPopBack、arrayPopFront。 - 为 ZooKeeper 配置新增了
root和identity参数,从而可以在同一个 ZooKeeper 集群上隔离不同用户。 - 新增聚合函数
groupBitAnd、groupBitOr和groupBitXor(为保持兼容性,也可使用BIT_AND、BIT_OR和BIT_XOR这些名称) 。 - 外部字典可通过在文件系统中指定套接字从 MySQL 加载。
- 外部字典支持通过 SSL 从 MySQL 加载 (
ssl_cert、ssl_key、ssl_ca参数) 。 - 新增
max_network_bandwidth_for_user设置,用于限制每个用户查询的总带宽占用。 - 支持对临时表执行
DROP TABLE。 - 支持从
CSV和JSONEachRow格式中读取 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查询的死锁问题。 - 修复了在使用
JSONEachRow和TSKV格式时,Enum的默认值无效的问题 (为 0 而非最小值) 。 - 解决了在使用带有
executablesource 的字典时出现僵尸进程的问题。 - 修复了 HEAD 查询的段错误问题。
改进了 ClickHouse 的开发与构建工作流程:
- 你可以使用
pbuilder来构建 ClickHouse。 - 在 Linux 上构建时,你可以使用
libc++代替libstdc++。 - 新增了使用静态代码分析工具的说明:
Coverage、clang-tidy、cppcheck。
升级时请注意:
- 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
- 修复了向 分布式表 插入数据时出现的
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_denormalssetting,可在 JSON 格式中输出 nan 和 inf 值。 - 优化了从 分布式表 读取时的 stream 分配。
- 如果值不发生变化,则可在只读模式下配置 Settings。
- 新增了读取 MergeTree 引擎非整数粒度的能力,以满足
preferred_block_size_bytessetting 中指定的块大小限制。这样做的目的是在处理包含大列的表查询时减少 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 文件损坏也不会因报错而失败。