2017 年变更日志
ClickHouse 版本 1.1.54327,2017-12-21
此版本包含对先前版本 1.1.54318 的错误修复
- 修复了复制中可能导致数据丢失的竞争条件错误。此问题影响版本 1.1.54310 和 1.1.54318。如果您将这些版本之一与 Replicated 表一起使用,强烈建议更新。此问题在警告消息中显示,例如
Part ... from own log does not exist.
即使您在日志中没有看到这些消息,此问题也相关。
ClickHouse 版本 1.1.54318,2017-11-30
此版本包含对先前版本 1.1.54310 的错误修复
- 修复了 SummingMergeTree 引擎中合并期间不正确的行删除
- 修复了未复制的 MergeTree 引擎中的内存泄漏
- 修复了 MergeTree 引擎中频繁插入导致的性能下降
- 修复了导致复制队列停止运行的问题
- 修复了服务器日志的轮换和归档
ClickHouse 版本 1.1.54310,2017-11-01
新功能:
- MergeTree 系列表引擎的自定义分区键。
- Kafka 表引擎。
- 添加了加载 CatBoost 模型并将其应用于 ClickHouse 中存储的数据的支持。
- 添加了对具有非整数 UTC 偏移量时区的支持。
- 添加了对时间间隔进行算术运算的支持。
- Date 和 DateTime 类型的值范围扩展到 2105 年。
- 添加了
CREATE MATERIALIZED VIEW x TO y
查询(指定用于存储物化视图数据的现有表)。 - 添加了不带参数的
ATTACH TABLE
查询。 - 在 SummingMergeTree 表中,将以 -Map 结尾的 Nested 列的处理逻辑提取到 sumMap 聚合函数中。您现在可以显式指定此类列。
- IP trie 字典的最大大小增加到 128M 条目。
- 添加了 getSizeOfEnumType 函数。
- 添加了 sumWithOverflow 聚合函数。
- 添加了对 Cap’n Proto 输入格式的支持。
- 现在,您可以在使用 zstd 算法时自定义压缩级别。
向后不兼容的更改:
- 不允许创建引擎不是 Memory 的临时表。
- 不允许显式创建引擎为 View 或 MaterializedView 的表。
- 在表创建期间,新的检查会验证抽样键表达式是否包含在主键中。
错误修复:
- 修复了同步插入 Distributed 表时的挂起。
- 修复了 Replicated 表中部件的非原子添加和删除。
- 插入到物化视图中的数据不再进行不必要的重复数据删除。
- 对 Distributed 表执行查询,如果本地副本滞后且远程副本不可用,则不再导致错误。
- 用户不再需要对
default
数据库的访问权限即可创建临时表。 - 修复了在不带参数指定 Array 类型时崩溃的问题。
- 修复了包含服务器日志的磁盘卷已满时挂起的问题。
- 修复了 Unix 纪元第一周的 toRelativeWeekNum 函数中的溢出。
构建改进:
- 更新了几个第三方库(特别是 Poco)并将其转换为 git 子模块。
ClickHouse 版本 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
正确更新用户 - 正确处理可执行字典返回非零响应代码的情况。
ClickHouse 版本 1.1.54292,2017-09-20
新功能:
- 添加了
pointInPolygon
函数,用于处理坐标平面上的坐标。 - 添加了
sumMap
聚合函数,用于计算数组的总和,类似于SummingMergeTree
。 - 添加了
trunc
函数。提高了舍入函数(round
、floor
、ceil
、roundToExp2
)的性能,并纠正了它们的工作逻辑。更改了分数和负数的roundToExp2
函数的逻辑。 - ClickHouse 可执行文件现在对 libc 版本的依赖性降低。同一 ClickHouse 可执行文件可以在各种 Linux 系统上运行。当使用编译后的查询时(使用设置
compile = 1
,默认情况下不使用),仍然存在依赖性。 - 减少了查询动态编译所需的时间。
错误修复:
- 修复了有时会生成
part ... intersects previous part
消息并削弱副本一致性的错误。 - 修复了在 ZooKeeper 在关闭期间不可用时导致服务器锁定的错误。
- 删除了恢复副本时过多的日志记录。
- 修复了 UNION ALL 实现中的错误。
- 修复了当块中的第一列具有 Array 类型时 concat 函数中发生的错误。
- 现在,进度在 system.merges 表中正确显示。
ClickHouse 版本 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 中旧节点的过程。以前,如果插入非常频繁,旧节点有时无法删除,这导致服务器关闭速度缓慢等问题。
- 修复了在选择 ZooKeeper 连接主机时的随机化问题。
- 修复了如果副本是 localhost,则在分布式查询中排除滞后副本的问题。
- 修复了在
Nested
结构的元素上运行ALTER MODIFY
后,ReplicatedMergeTree
表中的数据部分可能损坏的错误。 - 修复了可能导致 SELECT 查询“挂起”的错误。
- 改进了分布式 DDL 查询。
- 修复了查询
CREATE TABLE ... AS <materialized view>
。 - 解决了
Buffer
表的ALTER ... CLEAR COLUMN IN PARTITION
查询中的死锁。 - 修复了使用
JSONEachRow
和TSKV
格式时Enum
的无效默认值(0 而不是最小值)。 - 解决了使用带有
executable
源的字典时出现僵尸进程的问题。 - 修复了 HEAD 查询的段错误。
改进了 ClickHouse 的开发和组装工作流程:
- 您可以使用
pbuilder
构建 ClickHouse。 - 您可以使用
libc++
而不是libstdc++
在 Linux 上进行构建。 - 添加了使用静态代码分析工具的说明:
Coverage
、clang-tidy
、cppcheck
。
升级时请注意:
- 现在 MergeTree 设置
max_bytes_to_merge_at_max_space_in_pool
(要合并的数据部分的最大总大小,以字节为单位)的默认值更高:已从 100 GiB 增加到 150 GiB。这可能会导致服务器升级后运行大型合并,这可能会导致磁盘子系统上的负载增加。如果服务器上的可用空间少于正在运行的合并总量的两倍,这将导致所有其他合并停止运行,包括小型数据部分的合并。因此,INSERT 查询将失败并显示消息“Merges are processing significantly slower than inserts.”。使用SELECT * FROM system.merges
查询来监视情况。您还可以检查system.metrics
表或 Graphite 中的DiskSpaceReservedForMerge
指标。您无需执行任何操作来修复此问题,因为一旦大型合并完成,该问题将自行解决。如果您发现这是不可接受的,则可以恢复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>
并重启服务器。
ClickHouse 版本 1.1.54284,2017-08-29
- 这是先前 1.1.54282 版本的错误修复版本。它修复了 ZooKeeper 中 parts 目录中的泄漏。
ClickHouse 版本 1.1.54282,2017-08-23
此版本包含对先前版本 1.1.54276 的错误修复
- 修复了插入 Distributed 表时
DB::Exception: Assertion violation: !_path.empty()
的问题。 - 修复了如果输入数据以“;”开头,则在 RowBinary 格式中插入时解析的问题。
- 某些聚合函数(例如
groupArray()
)在运行时编译期间的错误。
ClickHouse 版本 1.1.54276,2017-08-16
新功能:
- 为 SELECT 查询添加了可选的 WITH 部分。查询示例:
WITH 1+1 AS a SELECT a, a*a
- 可以在 Distributed 表中同步执行 INSERT:只有在所有分片上都保存了所有数据后才返回 OK。这通过设置 insert_distributed_sync=1 激活。
- 添加了 UUID 数据类型,用于处理 16 字节的标识符。
- 添加了 CHAR、FLOAT 和其他类型的别名,以与 Tableau 兼容。
- 添加了 toYYYYMM、toYYYYMMDD 和 toYYYYMMDDhhmmss 函数,用于将时间转换为数字。
- 您可以使用 IP 地址(与主机名一起)来标识集群 DDL 查询的服务器。
- 在函数
substring(str, pos, len)
中添加了对非常量参数和负偏移量的支持。 - 为
groupArray(max_size)(column)
聚合函数添加了 max_size 参数,并优化了其性能。
主要更改:
- 安全改进:所有服务器文件都以 0640 权限创建(可以通过
<umask>
配置参数更改)。 - 改进了语法无效查询的错误消息。
- 显著降低了内存消耗,并提高了合并 MergeTree 数据大型部分时的性能。
- 显著提高了 ReplacingMergeTree 引擎的数据合并性能。
- 通过组合多个源插入,提高了来自 Distributed 表的异步插入的性能。要启用此功能,请使用设置 distributed_directory_monitor_batch_inserts=1。
向后不兼容的更改:
- 更改了数组的
groupArray(array_column)
函数的聚合状态的二进制格式。
完整的更改列表:
- 添加了
output_format_json_quote_denormals
设置,该设置允许在 JSON 格式中输出 nan 和 inf 值。 - 优化了从 Distributed 表读取时流的分配。
- 如果值未更改,则可以在只读模式下配置设置。
- 添加了检索 MergeTree 引擎的非整数粒度的能力,以便满足 preferred_block_size_bytes 设置中指定的块大小限制。目的是减少 RAM 的消耗并提高处理来自具有大型列的表的查询时的缓存局部性。
- 有效使用包含类似
toStartOfHour(x)
表达式的索引,用于类似toStartOfHour(x) op сonstexpr
的条件。 - 为 MergeTree 引擎添加了新设置(config.xml 中的 merge_tree 部分)
- replicated_deduplication_window_seconds 设置 Replicated 表中允许重复数据删除插入的秒数。
- cleanup_delay_period 设置启动清理以删除过时数据的频率。
- replicated_can_become_leader 可以阻止副本成为领导者(并分配合并)。
- 加速了清理以从 ZooKeeper 中删除过时数据。
- 集群 DDL 查询的多个改进和修复。特别值得关注的是新的设置 distributed_ddl_task_timeout,它限制了等待集群中服务器响应的时间。如果 ddl 请求未在所有主机上执行,则响应将包含超时错误,并且请求将在异步模式下执行。
- 改进了服务器日志中堆栈跟踪的显示。
- 为压缩方法添加了“none”值。
- 您可以在 config.xml 中使用多个 dictionaries_config 部分。
- 可以通过文件系统中的套接字连接到 MySQL。
- system.parts 表有一个新列,其中包含有关标记大小(以字节为单位)的信息。
错误修复:
- 使用 Merge 表的 Distributed 表现在可以正确处理对
_table
字段具有条件的 SELECT 查询。 - 修复了检查数据部分时 ReplicatedMergeTree 中罕见的竞争条件。
- 修复了启动服务器时“领导者选举”上可能发生的冻结。
- 当使用数据源的本地副本时,忽略了 max_replica_delay_for_distributed_queries 设置。这已得到修复。
- 修复了尝试清除不存在的列时
ALTER TABLE CLEAR COLUMN IN PARTITION
的不正确行为。 - 修复了在 multiIf 函数中使用空数组或字符串时的异常。
- 修复了反序列化 Native 格式时过多的内存分配。
- 修复了 Trie 字典的不正确的自动更新。
- 修复了在使用 SAMPLE 时从 Merge 表运行带有 GROUP BY 子句的查询时的异常。
- 修复了使用 distributed_aggregation_memory_efficient=1 时 GROUP BY 崩溃的问题。
- 现在,您可以在 IN 和 JOIN 的右侧指定 database.table。
- 使用了过多的线程进行并行聚合。这已得到修复。
- 修复了“if”函数如何与 FixedString 参数一起工作。
- SELECT 从权重为 0 的分片的 Distributed 表中错误地工作。这已得到修复。
- 运行
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 的并行构建现在更快了。
ClickHouse 版本 1.1.54245, 2017-07-04
新功能:
- 分布式 DDL (例如,
CREATE TABLE ON CLUSTER
) - 复制查询
ALTER TABLE CLEAR COLUMN IN PARTITION.
- Dictionary 表的引擎(以表的形式访问字典数据)。
- Dictionary 数据库引擎(这种类型的数据库会自动为所有连接的外部字典提供 Dictionary 表)。
- 您可以通过向源发送请求来检查字典的更新。
- 限定列名
- 使用双引号引用标识符。
- HTTP 接口中的会话。
- Replicated 表的 OPTIMIZE 查询不仅可以在 leader 上运行。
向后不兼容的更改:
- 移除 SET GLOBAL。
细微更改:
- 现在,在触发警报后,日志会打印完整的堆栈跟踪。
- 放宽了启动时损坏/额外数据部分的数量验证(误报太多)。
Bug 修复:
- 修复了插入 Distributed 表时坏连接“卡住”的问题。
- GLOBAL IN 现在可以用于来自 Merge 表的查询,该查询查看 Distributed 表。
- 在 Google Compute Engine 虚拟机上检测到不正确的内核数。 此问题已修复。
- 缓存的外部字典的可执行源的工作方式的更改。
- 修复了包含空字符的字符串的比较。
- 修复了 Float32 主键字段与常量的比较。
- 之前,对字段大小的错误估计可能导致过大的分配。
- 修复了在使用 ALTER 添加到表的 Nullable 列时查询崩溃的问题。
- 修复了当按 Nullable 列排序且行数小于 LIMIT 时崩溃的问题。
- 修复了由仅包含常量值的 ORDER BY 子查询。
- 之前,Replicated 表在 DROP TABLE 失败后可能保持无效状态。
- 空结果的标量子查询的别名不再丢失。
- 现在,如果 .so 文件损坏,使用编译的查询不会因错误而失败。