跳到主要内容
跳到主要内容
编辑此页

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 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 正确更新用户
  • 正确处理可执行字典返回非零响应代码的情况。

ClickHouse 版本 1.1.54292,2017-09-20

新功能:

  • 添加了 pointInPolygon 函数,用于处理坐标平面上的坐标。
  • 添加了 sumMap 聚合函数,用于计算数组的总和,类似于 SummingMergeTree
  • 添加了 trunc 函数。提高了舍入函数(roundfloorceilroundToExp2)的性能,并纠正了它们的工作逻辑。更改了分数和负数的 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 DICTIONARYSYSTEM RELOAD DICTIONARIESSYSTEM DROP DNS CACHESYSTEM SHUTDOWNSYSTEM KILL
  • 添加了用于处理数组的函数:concatarraySlicearrayPushBackarrayPushFrontarrayPopBackarrayPopFront
  • 为 ZooKeeper 配置添加了 rootidentity 参数。这允许您在同一 ZooKeeper 集群上隔离各个用户。
  • 添加了聚合函数 groupBitAndgroupBitOrgroupBitXor(为了兼容性,它们也可以使用名称 BIT_ANDBIT_ORBIT_XOR)。
  • 可以通过在文件系统中指定套接字从 MySQL 加载外部字典。
  • 可以通过 SSL 从 MySQL 加载外部字典 (ssl_cert, ssl_key, ssl_ca 参数)。
  • 添加了 max_network_bandwidth_for_user 设置,以限制每个用户的查询的总体带宽使用。
  • 支持临时表的 DROP TABLE
  • 支持从 CSVJSONEachRow 格式读取 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 查询中的死锁。
  • 修复了使用 JSONEachRowTSKV 格式时 Enum 的无效默认值(0 而不是最小值)。
  • 解决了使用带有 executable 源的字典时出现僵尸进程的问题。
  • 修复了 HEAD 查询的段错误。

改进了 ClickHouse 的开发和组装工作流程:

  • 您可以使用 pbuilder 构建 ClickHouse。
  • 您可以使用 libc++ 而不是 libstdc++ 在 Linux 上进行构建。
  • 添加了使用静态代码分析工具的说明:Coverageclang-tidycppcheck

升级时请注意:

  • 现在 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 文件损坏,使用编译的查询不会因错误而失败。