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

2020 变更日志

ClickHouse 20.12 版本

ClickHouse v20.12.5.14-stable 发布,2020-12-28

Bug 修复

  • 在合并期间禁用使用 AIO 写入,因为这在极其罕见的情况下可能导致合并过程中主键列数据损坏。 #18481 (alesapin)。
  • 修复在对类型为 Nullable(String) 的参数执行 toType(...) 函数(toDatetoUInt32 等)时出现的 value is too short 错误。现在此类函数在解析错误时返回 NULL,而不是抛出异常。修复 #7673#18445 (tavplubix)。
  • 限制从宽部件到紧凑部件的合并。在垂直合并的情况下,这会导致生成损坏的结果部件。 #18381 (Anton Popov)。
  • 修复填充表 system.settings_profile_elements 的问题。此 PR 修复了 #18231#18379 (Vitaly Baranov)。
  • 修复在使用两级聚合时,带有组合器 Distinct 的聚合函数可能发生的崩溃。修复 #17682#18365 (Anton Popov)。
  • 修复查询 MODIFY COLUMN ... REMOVE TTL 实际上没有移除列 TTL 的错误。 #18130 (alesapin)。

构建/测试/打包改进

ClickHouse v20.12.4.5-stable 发布,2020-12-24

Bug 修复

  • 修复了在具有双栈 IPv4/IPv6 的机器上,服务器无法访问 clickhouse-odbc-bridge 进程的问题;修复了在使用格式错误的查询执行 ODBC 字典更新时可能导致崩溃的问题;可能修复了 #14489#18278Denis Glazachev)。
  • 修复了 Enum 和 Int 类型之间键值比较的问题。修复了 #17989#18214Amos Bird)。
  • 修复了在 MaterializeMySQL 数据库引擎中唯一键转换导致崩溃的问题。修复了 #18186 并修复了 #16372#18211Winter Zhang)。
  • 修复了在解析 S3 URL 时出现 std::out_of_range: basic_string 的问题。#18059Vladimir Chebotarev)。
  • 修复了某些表无法从 MySQL 同步到 ClickHouse 的问题,该问题是由于 MaterializeMySQL 不支持转换 MySQL 前缀索引导致的。修复了 #15187 并修复了 #17912#17944Winter Zhang)。
  • 修复了当查询包含 ARRAY JOIN 时,查询优化可能产生错误结果的问题。#17887sundyli)。
  • 修复了 topK 聚合函数中可能发生的段错误。关闭了 #17404#17845Maksim Kita)。
  • 修复了服务器以守护进程模式运行时 system.stack_trace 表为空的问题。#17630Amos Bird)。

ClickHouse release v20.12.3.3-stable, 2020-12-13

不向后兼容的变更

  • 默认启用 use_compact_format_in_distributed_parts_names(具体说明参见文档)。#16728Azat Khuzhin)。
  • 在创建使用 File 引擎的表时,在 SETTINGS 子句中接受与文件格式相关的用户设置(例如 format_csv_delimiter),并在所有 INSERTSELECT 中使用这些设置。在当前用户会话中更改的文件格式设置,或在 DML 查询自身的 SETTINGS 子句中指定的设置,将不再影响该查询。#16591Alexander Kuzmenkov)。

新特性

  • 添加对 *.xz 压缩/解压缩的支持。这使得可以在 file() 函数中使用 *.xz。修复了 #8828#16578Abi Palagashvili)。
  • 引入查询 ALTER TABLE ... DROP|DETACH PART 'part_name'#15511nvartolomei)。
  • 新增 ALTER UPDATE/DELETE IN PARTITION 语法。#13403Vladimir Chebotarev)。
  • 允许在使用 JSON 输入/输出格式时,将命名元组格式化为 JSON 对象,由 output_format_json_named_tuples_as_objects 设置控制,默认禁用。#17175Alexander Kuzmenkov)。
  • 默认情况下,允许在 TSV 和 CSV 格式中以其 ID(枚举值编号)形式输入枚举值。#16834Kruglov Pavel)。
  • 为 Nullable、LowCardinality、Array 和 Tuple(其嵌套类型为 String)添加 COLLATE 支持。同时重构 ColumnString.cpp 中与排序规则相关的代码。#16273Kruglov Pavel)。
  • 新增 tcpPort 函数,用于返回该服务器监听的 TCP 端口。#17134Ivan)。
  • 添加新的数学函数:acoshasinhatan2atanhcoshhypotlog1psinh#16636Konstantin Malanchev)。
  • 支持在不同副本之间分配合并任务。引入 execute_merges_on_single_replica_time_threshold MergeTree 设置。#16424filimonov)。
  • 添加设置 aggregate_functions_null_for_empty 以实现 SQL 标准兼容性。该选项会重写查询中的所有聚合函数,为它们添加 -OrNull 后缀。实现了 10273#16123flynn)。
  • 更新了 DateTime、DateTime64 的解析,以接受字符串形式的 Date 字面量格式。#16040Maksim Kita)。
  • 现在可以在 clickhouse-client 中使用 --history_file 参数修改历史文件路径。#15960Maksim Kita)。

Bug 修复

  • 修复了一个在极少数情况下会导致服务器停止接受连接的问题。#17542 (Amos Bird)。
  • 修复了在 Windows Subsystem for Linux 上运行的 ClickHouse 中,对 Atomic 数据库执行 RENAME 查询时出现的 Function not implemented 错误。修复了 #17661#17664tavplubix)。
  • 如果禁用了 in_memory_parts_enable_wal,则不要从 WAL 恢复数据分片。 #17802 (detailyang)。
  • 修正 MergeTreeWriterSettings 中将 max_compress_block_size 误初始化为 min_compress_block_size 的问题。 #17833 (flynn).
  • 关于可删除的最大表大小的异常消息显示不正确。 #17764 (alexey-milovidov).
  • 修复了在向 Distributed 表插入数据时因空间不足可能导致的段错误问题。 #17737 (tavplubix).
  • 修复了 ClickHouse 无法重新建立与 MySQL 服务器连接的问题。 #17681 (Alexander Kazakov)。
  • 在执行 ON CLUSTER 查询时,如果 pool_size > 1,由于竞争条件,可能会错误地判断集群是否为环形(交叉)复制集群。该问题已修复。 #17640 (tavplubix).
  • 对于 MergeTree 表,现在可以在后台日志中记录 fmt::v7::format_error 异常。此更改修复了 #17613#17615alexey-milovidov)。
  • 当在交互模式下使用 clickhouse-client 运行多行查询时,单行注释会被错误地扩展到整个查询的末尾。修复了 #13654#17565alexey-milovidov)。
  • 修复了当相应的 mutation 在其他副本上被终止时,ALTER 查询发生挂起的问题。修复 #16953#17499alesapin)。
  • 修复 ClickHouse 低估 mark 缓存大小的问题。当存在大量包含标记(mark)的小文件时,可能会发生这种情况。#17496 (alesapin)。
  • 修复在启用设置 optimize_redundant_functions_in_order_byORDER BY 的问题。 #17471 (Anton Popov).
  • 修复由于不正确的优化导致在 DISTINCT 之后仍可能出现的重复数据。修复了 #17294#17296li chengxiang)。#17439Nikolai Kochetov)。
  • 修复从包含 LowCardinality 类型的 JOIN 表读取时发生的崩溃。修复 #17228#17397Nikolai Kochetov)。
  • 修复 toInt256(inf) 引发的栈溢出问题。Int256 目前属于实验性功能。已关闭 #17235#17257flynn)。
  • 修复在带有 LIMIT 的 Distributed 查询中可能记录的 Unexpected packet Data received from client 错误。#17254 (Azat Khuzhin).
  • 修复在子查询中存在常量列时的 set 索引失效问题。此修复解决了 #17246#17249Amos Bird)。
  • 修复在索引比较双方类型不同时可能出现错误索引分析的问题。此更改修复了 #17122#17145Amos Bird)。
  • 修复了会导致崩溃的 ColumnConst 比较问题。已修复 #17088#17135Amos Bird)。
  • 针对 MaterializeMySQL(实验性功能)进行了多项修复,修复了 #16923#15883,以及在修改 MySQL binlog_checksum 时导致的 MaterializeMySQL SYNC 失败问题。#17091 (Winter Zhang).
  • 修复一个问题:在非主节点的 ReplicatedMergeTree 表上执行 ON CLUSTER 查询时,可能会一直处于挂起状态。 #17089 (alesapin).
  • 修复了在执行 CREATE TABLE ... AS some_table 查询时的崩溃问题,该问题会在 some_table 通过 AS table_function() 创建时触发。修复 #16944#17072tavplubix)。
  • 函数 fuzzBits 存在未完成实现的缺陷,相关 Issue:#16980#17051hexiaoting)。
  • 修复当 CFA 寄存器为 RAX 时 LLVM 的 libunwind 行为异常的问题。这是 bug,位于 LLVM 的 libunwind 中。我们已经为此 bug 提供了变通方案。#17046alexey-milovidov)。
  • 避免对在执行过程中可能被取消的远程查询产生不必要的网络错误,例如带有 LIMIT 的查询。#17006 (Azat Khuzhin).
  • 修复在仅包含 OFFSET 的查询中 optimize_distributed_group_by_sharding_key 设置(默认禁用)的行为。#16996 (Azat Khuzhin)。
  • 修复在 Distributed 表之上创建的 Merge 表执行 JOIN 时的问题。 #16993 (Azat Khuzhin).
  • 修复从 double 转换为大整数(128、256 位)时结果错误的问题。大整数支持仍为实验性功能。#16986 (Mike)。
  • 修复在执行 ALTER TABLE ... MODIFY COLUMN ... NewType 期间,如果有对正在修改的列带有 WHERE 表达式的 SELECT 查询,且该 ALTER 尚未完成时,可能导致服务器崩溃的问题。#16968 (Amos Bird)。
  • clickhouse-git-import 中的 blame 信息计算不正确。#16959 (alexey-milovidov)。
  • 修复基于单调函数的 ORDER BY 优化问题。修复 #16107#16956Anton Popov)。
  • 修复在启用 optimize_aggregators_of_group_by_keys 设置并使用 JOIN 时对 GROUP BY 的优化问题。解决了 #12604#16951Anton Popov)。
  • 修复可能导致在带有 ORDER BY 的查询中出现 Illegal type of argument 错误的问题。修复 #16580#16928Nikolai Kochetov)。
  • 修复 InterpreterShowAccessQuery 中的异常代码。#16866 (tavplubix)。
  • 防止在使用函数 timeSeriesGroupSum 时导致 ClickHouse 服务器崩溃。该函数已在较新的 ClickHouse 版本中移除。#16865filimonov)。
  • 修复在启用 query profiler 且 ClickHouse 安装在某些 glibc 版本(据称其对部分函数的异步展开表存在问题)的操作系统上时出现的罕见静默崩溃问题。修复了 #15301。修复了 #13098#16846alexey-milovidov)。
  • 修复在未传入任何参数时使用 any 导致的崩溃。对应 #16803。cc @azat。#16826Amos Bird)。
  • 如果在将表元数据写入磁盘时无法分配内存,可能会写出损坏的元数据文件。#16772alexey-milovidov)。
  • 修复使用分区谓词时的简单查询优化问题。#16767 (Azat Khuzhin).
  • 修复在启用 transform_null_in 设置时,IN 运算符在多列和元组上的行为。修复了 #15310#16722Anton Popov)。
  • 通过 MySQL 协议执行的 INSERT 查询现在会返回受影响的行数。之前 ClickHouse 始终返回 0;该问题已修复。修复了 #16605#16715Winter Zhang)。
  • 修复在使用带有 'if' 后缀的聚合函数时发生的远程查询失败问题。修复 #16574#16231 #16610Winter Zhang)。
  • 修复由于 select_sequential_consistency 导致的在优化后的简单 count 查询以及 system.tables 上出现的不一致行为。#16309 (Hao Chen)。

改进

  • 在经过 TTL、变更(mutation)或折叠合并算法清理后,移除空数据部分。 #16895 (Anton Popov)。
  • 为 Distributed 表的异步发送启用目录的紧凑格式:参数 use_compact_format_in_distributed_parts_names 的默认值为 1。#16788 (Azat Khuzhin)。
  • 如果没有数据写入 S3,则中止分段上传。#16840 (Pavel Kovalenko)。
  • 在发生错误时重新解析 format_avro_schema_registry_url 的 IP。#16985filimonov)。
  • 在 system.distribution_queue 中对 data_path 中的密码进行掩码处理。 #16727 (Azat Khuzhin).
  • 当使用列转换器替换不存在的列时抛出错误。 #16183 (hexiaoting).
  • 当没有足够的内存让所有线程同时工作时,关闭并行解析。此外,当有人尝试插入极其庞大的行(> min_chunk_bytes_for_parallel_parsing)时,可能会出现类似 "Memory limit exceeded" 的异常,因为每个要解析的片段都必须是一组相互独立的字符串(一个或多个)。 #16721 (Nikita Mikhaylov)。
  • 安装脚本应始终在配置目录中创建子目录。此更改仅适用于使用自定义配置的 Docker 构建。#16936 (filimonov).
  • 修正 JSONEachRow、JSONCompactEachRow 和 RegexpRow 输入格式中错误信息的语法。#17205 (nico piderman).
  • SOURCE(CLICKHOUSE(...))hostport 参数默认设置为当前实例,并将 user 的默认值设置为 'default'#16997 (vdimir)。
  • 在执行 ATTACH/DETACH TABLE <DICTIONARY> 时抛出一条更具说明性的错误信息。在此 PR 之前,detach table <dict> 虽然可以执行,但会导致内存中的元数据格式不正确。#16885 (Amos Bird)。
  • 新增 cutToFirstSignificantSubdomainWithWWW()。#16845 (Azat Khuzhin).
  • 在提供错误配置(缺少 metric_log.collect_interval_milliseconds)时,服务器将拒绝启动并抛出异常信息。 #16815 (Ivan).
  • 在未配置分布式 DDL 的情况下提供更清晰的异常消息。修复了 #5075#16769Nikita Mikhaylov)。
  • 可用性改进:当在 CREATE TABLE 查询中将 CODEC 表达式放错位置时,在语法错误消息中提供更有用的建议。修复了 #12493#16768alexey-milovidov)。
  • 在 Distributed 引擎启动时,删除用于异步 INSERT 的空目录。#16729 (Azat Khuzhin)。
  • 针对通过 nginx 服务器作为代理访问 S3 的变通方案。Nginx 目前不接受路径为空的 URL,例如 http://domain.com?delete,但原生 aws-sdk-cpp 会生成这种 URL。该提交改用打过补丁的 aws-sdk-cpp 版本,在这种情况下会生成以 "/" 作为路径的 URL,例如 http://domain.com/?delete#16709 (ianton-ru)。
  • 允许 reinterpretAs* 函数用于位宽相同的整数和浮点数。实现了 16640#16657flynn)。
  • 现在,可以在 config.xml 中修改 <auxiliary_zookeepers> 配置,并在无需重启服务器的情况下重新加载。#16627 (Amos Bird)。
  • 在通过 HTTPS 连接远程资源时支持 SNI,从而可以连接到要求使用 SNI 的 Cloudflare 服务器。修复了 #10055#16252alexey-milovidov)。
  • 支持连接到需要 SNI 的 clickhouse-server 安全端点。当 clickhouse-server 通过 TLS 代理对外提供服务时,可以实现这一点。#16938 (filimonov)。
  • 修复在创建物化视图循环时可能出现的栈溢出问题。修复了 #15732#16048alexey-milovidov)。
  • 简化 MergeTree 表引擎系列的后台任务处理实现。对用户而言不应有任何可见变化。 #15983 (alesapin).
  • 改进了 MaterializeMySQL(实验性特性)。当 MySQL 同步用户的权限配置错误时,抛出异常以提示所需的同步权限。#15977 (TCeason).
  • indexOf() 改为使用 BloomFilter。 #14977 (achimbab)。

性能改进

  • 使用 Floyd-Rivest 算法,它是最适合 ClickHouse 局部排序场景的算法。基准测试见 https://github.com/danlark1/miniselect这里#16825Danila Kutenin)。
  • 现在 ReplicatedMergeTree 引擎家族为副本拉取使用单独的线程池。线程池的大小由设置 background_fetches_pool_size 限制,可通过重启服务器进行调整。该设置的默认值为 3,这意味着最大并行拉取数量为 3(并且可以充分利用 10G 网络)。修复 #520。#16390alesapin)。
  • 修复了 quantileTDigest 状态不受控增长的问题。#16680hrissan)。
  • EXPLAIN 中增加 VIEW 子查询描述。为 VIEW 启用 LIMIT 下推优化。将 Distributed 的本地副本添加到查询计划中。#14936Nikolai Kochetov)。
  • 修复在 max_threads > 0ORDER BY 中存在表达式时 optimize_read_in_order/optimize_aggregation_in_order 的问题。#16637Azat Khuzhin)。
  • 修复在大量 MergeTree 表之上的 Merge 表读取性能问题。修复 #7748#16988Anton Popov)。
  • 现在我们可以在精确匹配的情况下安全地进行分区裁剪。一个有用的场景:假设表按 intHash64(x) % 100 分区,并且查询中的条件也是对 intHash64(x) % 100 的原样表达,而不是对 x 本身。#16253Amos Bird)。

实验特性

  • 新增 EmbeddedRocksDB 表引擎(可用于字典)。#15073sundyli)。

构建 / 测试 / 打包改进

ClickHouse 版本 20.11

ClickHouse 版本 v20.11.7.16-stable,2021-03-02

改进

  • 在 clickhouse-server 镜像中,将 clickhouse 用户及用户组的 uid/gid 明确设置为固定值(101)。 #19096 (filimonov)。

Bug 修复

  • BloomFilter 索引崩溃问题修复。修复了 #19757#19884Maksim Kita)。
  • 在启用 system.text_log 时可能发生死锁。此修复解决了 #19874#19875alexey-milovidov)。
  • 在之前的版本中,函数 arrayEnumerateUniq 的非常规参数可能会导致崩溃或陷入无限循环。此更改解决了 #19787 中提出的问题。#19788alexey-milovidov)。
  • 修复在对算术类型与字符串类型进行精确比较时出现的栈溢出问题。#19773 (tavplubix)。
  • 修复 bitmapAndnot 函数中的段错误。对应修复 #19668#19713Maksim Kita)。
  • 某些使用大整数的函数可能会导致段错误。大整数目前为实验性特性。此更改关闭了 #19667#19672alexey-milovidov)。
  • 修复函数 neighborLowCardinality 参数上的错误结果。解决了 #10333#19617Nikolai Kochetov)。
  • 修复在断开连接后 ConnectionCompressedWriteBuffer 的 use-after-free 错误。#19599 (Azat Khuzhin).
  • DROP/DETACH TABLE table ON CLUSTER cluster SYNC 查询可能会卡住的问题已修复。修复了 #19568#19572tavplubix)。
  • 修复 CREATE DICTIONARY 查询中的 id 表达式问题。#19571 (Maksim Kita).
  • 修复在 merge_tree_min_rows_for_concurrent_read/merge_tree_min_bytes_for_concurrent_read=0/UINT64_MAX 时出现的 SIGSEGV 段错误。 #19528 (Azat Khuzhin).
  • 如果使用特意构造的参数调用 addMonth 函数,在读取内存时可能发生缓冲区溢出。此更改修复了 #19441#19413#19472alexey-milovidov)。
  • 如果某个文件中出现空数据块,则将分布式批次标记为损坏。 #19449 (Azat Khuzhin).
  • 修复 Uber H3 库中可能存在的缓冲区溢出问题。参见 https://github.com/uber/h3/issues/392。此更改关闭了 #19219#19383alexey-milovidov)。
  • 修复 system.parts 表的 state 列(由于顺序不正确,在查询该列时会触发 LOGICAL_ERROR 错误)。 #19346 (Azat Khuzhin).
  • 修复错误 Cannot convert column now64() because it is constant but values of constants are different in source and result。作为对 #7156 的后续修复。#19316Nikolai Kochetov)。
  • 修复一个错误:并发执行 ALTERDROP 查询在处理 ReplicatedMergeTree 表时可能导致挂起。#19237 (alesapin).
  • 修复以 ORC 格式读取文件时出现的无限循环读取问题(该问题在 #10580 中引入)。修复了 #19095#19134Nikolai Kochetov)。
  • 修复了一个启动时的 bug:当 ClickHouse 无法从 LowCardinality(Nullable(...)) 读取压缩编解码器并抛出异常 Attempt to read after EOF 时会出错。修复了 #18340#19101alesapin)。
  • 修复了通过 HTTP 接口使用 TemplateCustomSeparated 格式插入数据时出现的 There is no checkpoint 错误,修复了 #19021#19072 (tavplubix)。
  • 限制对采用旧语法创建的 MergeTree 表执行 MODIFY TTL 查询。之前这些查询虽然会成功执行,但实际上不起任何作用。#19064Anton Popov)。
  • 确保 groupUniqArray 对 Enum 类型的参数返回正确的类型。此更改解决了 #17875#19019alexey-milovidov)。
  • 修复在将 ignore 函数配合 LowCardinality 参数使用时可能出现的 Expected single dictionary argument for function 错误。修复了 #14275#19016Nikolai Kochetov)。
  • 修复了向使用 TinyLog 引擎的表中插入 LowCardinality 列时出现的问题。对应修复 #18629#19010Nikolai Kochetov)。
  • 禁用 optimize_move_functions_out_of_any,因为该优化在某些情况下并不正确。关闭了 #18051。关闭了 #18973#18981alexey-milovidov)。
  • 修复了在关闭过程中极少见的死锁。 #18977 (tavplubix).
  • 修复对包含某些转义文本的 mutation(例如 ALTER ... UPDATE e = CAST('foo', 'Enum8(\'foo\' = 1'))进行处理时的错误序列化问题。修复了 #18878#18944alesapin)。
  • ATTACH PARTITION 应重置 mutation。 #18804#18935 (fastio)。
  • 修复 clickhouse-local 在关闭时可能出现的挂起问题。修复了 #18891#18893alexey-milovidov)。
  • 修复 *If 组合子在与一元函数及 Nullable 类型一起使用时的问题。#18806 (Azat Khuzhin)。
  • 如果全局将 network_compression_method 设置为非默认值,服务器可能会拒绝异步分布式 INSERT。此更改修复了 #18741#18776alexey-milovidov)。
  • 修复了在尝试将类型为 Nullable(String)NULL CASTNullable(Decimal(P, S)) 时出现的 Attempt to read after eof 错误。现在当无法从可为空字符串中解析出 decimal 时,CAST 函数会返回 NULL。修复了 #7690#18718Winter Zhang)。
  • 修复 Logger 参数数量不匹配的问题。 #18717 (sundyli).
  • 添加对 FixedString 数据类型的支持。从 MySQL 向 ClickHouse 复制数据时,会遇到异常 “Code: 50, e.displayText() = DB::Exception: Unsupported type FixedString(1)”。此补丁修复了缺陷 #18450,同时也修复了 #6556#18553awesomeleo)。
  • 修复在包含 RIGHTFULL JOIN 的子查询之后使用 ORDER BY 时可能出现的 Pipeline stuck 错误。#18550Nikolai Kochetov)。
  • 修复了一个 bug,该 bug 可能导致在终止对应 mutation 后 ALTER 查询挂起。由线程 fuzzer 发现。#18518 (alesapin)。
  • 在合并过程中禁用基于 AIO 的写入,因为在极其罕见的情况下,它可能在合并期间导致主键列数据损坏。 #18481 (alesapin).
  • 在分析阶段,如果无法计算结果,则禁用对子查询的常量折叠。 #18446 (Azat Khuzhin).
  • 修复了在执行 toType(...) 函数(toDatetoUInt32 等)且参数类型为 Nullable(String) 时出现的 value is too short 错误。现在此类函数在解析出错时会返回 NULL,而不是抛出异常。修复了 #7673#18445tavplubix)。
  • 限制从 wide 分片到 compact 分片的合并。在进行 vertical merge 时,这会导致生成的结果分片损坏。#18381 (Anton Popov).
  • 修复向表 system.settings_profile_elements 填充数据时的问题。此 PR 修复了 #18231#18379Vitaly Baranov)。
  • 修复对包含常量参数的二元函数的索引分析错误,该问题会导致查询结果不正确。此修复对应 #18364#18373Amos Bird)。
  • 修复在使用两级聚合时,带有 Distinct 组合器的聚合函数中可能发生的崩溃问题。修复了 #17682#18365Anton Popov)。
  • 现在,即使只能从该 table 中选择一列,SELECT count() FROM table 也可以执行。此 PR 修复了 #10639#18233Vitaly Baranov)。
  • SELECT JOIN 现在要求对每个参与 JOIN 的表都具备 SELECT 权限。此 PR 修复了 #17654#18232Vitaly Baranov)。
  • 修复了在发生读取退避(日志中出现消息 <Debug> MergeTreeReadPool: Will lower number of threads)时,从 MergeTree* 表读取可能导致查询结果不完整的问题。该问题最初在 #16423 中引入。本次修复解决了 #18137 中的问题。#18216Nikolai Kochetov)。
  • 修复在执行 MODIFY COLUMN ... REMOVE TTL 查询时未真正移除列 TTL 的错误。#18130alesapin)。
  • 通过谓词优化器修复非确定性函数。这修复了 #17244#17273Winter Zhang)。
  • 在执行 MOVEREPLACE PARTITION 之后,或者在少数情况下执行 DETACHDROP PARTITION 之后,变更操作可能会因为等待某个不存在的 part 而挂起。该问题已修复。#15537 (tavplubix)。

构建/测试/打包改进

ClickHouse 发布 v20.11.6.6-stable,2020-12-24

缺陷修复

  • 修复了在具备 IPv4/IPv6 双栈的机器上,服务器无法访问 clickhouse-odbc-bridge 进程的问题,并修复了使用格式错误的查询执行 ODBC 字典更新时以及/或更新过程导致崩溃时出现的问题。这可能解决了 #14489#18278Denis Glazachev)。
  • 修复了 Enum 与 Int 类型之间的键比较问题,解决了 #17989#18214Amos Bird)。
  • 修复了 MaterializeMySQL 数据库引擎中唯一键转换时发生的崩溃问题。此修复解决了 #18186,并同时修复了 #16372#18211Winter Zhang)。
  • 修复了在解析 S3 URL 时出现的 std::out_of_range: basic_string 异常。#18059Vladimir Chebotarev)。
  • 修复了由于 MaterializeMySQL 不支持转换 MySQL 前缀索引而导致部分表无法从 MySQL 同步到 ClickHouse 的问题。此更改修复了 #15187#17912#17944Winter Zhang)。
  • 修复了当查询包含 ARRAY JOIN 时,查询优化产生错误结果的问题。#17887 (sundyli).
  • 修复了可能导致 topK 聚合函数出现段错误的问题。已关闭 #17404#17845Maksim Kita)。
  • in_memory_parts_enable_wal 被禁用时,不从 WAL 恢复数据片段。#17802 (detailyang)。
  • 修复了 ClickHouse 无法重新建立与 MySQL 服务器连接时出现的问题。 #17681 (Alexander Kazakov).
  • 修复了在使用分区谓词时 optimize_trivial_count_query 行为不一致的问题。 #17644 (Azat Khuzhin).
  • 修复了服务器以守护进程模式运行时 system.stack_trace 表为空的问题。#17630 (Amos Bird)。
  • 修复了在 MergeTree 表中后台可能记录异常 fmt::v7::format_error 的问题。此修复解决了 #17613#17615alexey-milovidov)。
  • 修复了在交互模式下使用 clickhouse-client 执行多行查询时的行为,此前单行注释会被错误地延伸至整个查询的末尾。修复了 #13654#17565alexey-milovidov)。
  • 修复了在极少数情况下服务器可能停止接受连接的问题。 #17542 (alexey-milovidov).
  • 修复了当相应的 mutation 在其他副本上被终止时 ALTER 查询会挂起的问题。此修复对应 #16953#17499alesapin)。
  • 修复了 ClickHouse 对标记缓存大小估算不足的问题。当存在大量包含标记的小文件时,可能会出现这种情况。 #17496 (alesapin).
  • 修复在启用设置 optimize_redundant_functions_in_order_byORDER BY 的处理问题。#17471 (Anton Popov).
  • 修复了由于不正确的优化导致在执行 DISTINCT 后仍可能出现的重复行问题。修复了 #17294#17296li chengxiang)。#17439Nikolai Kochetov)。
  • 修复了从包含 LowCardinality 类型的 JOIN 表读取数据时发生的崩溃问题。此修复解决了 #17228#17397Nikolai Kochetov)。
  • 修复了在子查询中存在 const 列时 set 索引失效的问题。修复了 #17246#17249Amos Bird)。
  • 修复了在索引比较两侧的类型不同时可能产生的错误索引分析问题。此修复对应 #17122#17145Amos Bird)。
  • 修复了会导致崩溃的 ColumnConst 比较问题。已解决 #17088#17135Amos Bird)。
  • 修复了一个问题:在非 leader 的 ReplicatedMergeTree 表上执行 ON CLUSTER 查询时,可能会导致查询一直处于挂起状态。 #17089 (alesapin).
  • 修复了 fuzzBits 函数中由 fuzzer 发现的 bug,解决了 #16980#17051hexiaoting)。
  • 避免对在执行期间可能被取消的远程查询(例如包含 LIMIT 的查询)产生不必要的网络错误。#17006 (Azat Khuzhin)。
  • 修复了从 double 类型转换为大整数(128、256 位)时结果错误的问题。 #16986 (Mike).
  • 在出错时重新解析 format_avro_schema_registry_url 的 IP。#16985filimonov)。
  • 修复了在执行 ALTER TABLE ... MODIFY COLUMN ... NewType 期间,当某个 SELECT 在正在被修改的列上带有 WHERE 表达式且该 ALTER 尚未完成时可能导致服务器崩溃的问题。 #16968 (Amos Bird).
  • clickhouse-git-import 中的 blame 信息未被正确计算。#16959 (alexey-milovidov)。
  • 修复了使用单调函数的 ORDER BY 优化。修复了 #16107#16956Anton Popov)。
  • 修复了在启用 optimize_aggregators_of_group_by_keys 设置且存在 JOIN 时,GROUP BY 的优化问题。此更改修复了 #12604#16951Anton Popov)。
  • 安装脚本应始终在配置目录中创建子目录。这仅与使用自定义配置的 Docker 构建相关。#16936 (filimonov)。
  • 修复了在包含 ORDER BY 的查询中可能出现的 Illegal type of argument 错误。此更改修复了 #16580#16928Nikolai Kochetov)。
  • 如果没有向 WriteBufferFromS3 写入任何数据,则中止分段上传。 #16840 (Pavel Kovalenko).
  • 修复了在未传入任何参数时调用 any 会导致崩溃的问题。此修复解决了 #16803#16826Amos Bird)。
  • 修复了通过 MySQL 协议执行 INSERT 查询时,ClickHouse 之前总是返回 0 而非受影响行数的问题。此更改修复了 #16605#16715Winter Zhang)。
  • 修复了 TDigest 的无法控制的增长问题。 #16680 (hrissan).
  • 修复了在 Aggregate 函数中使用后缀 if 时导致远程查询失败的问题。该修复解决了 #16574#16231#16610 中报告的问题(Winter Zhang)。
  • 修复了由于 select_sequential_consistency 导致的优化后的简单计数查询与 system.tables 表之间的行为不一致问题。#16309Hao Chen)。
  • 在使用 ColumnTransformer 替换不存在的列时,现在会抛出错误。 #16183 (hexiaoting).

ClickHouse 发行版 v20.11.3.3-stable,2020-11-13

Bug Fix

  • 修复了在启用查询分析器,并且 ClickHouse 安装在使用某些函数的异步展开表(unwind tables)被认为已损坏的 glibc 版本的操作系统上时,极少数情况下会出现的静默崩溃问题。修复了 #15301。修复了 #13098#16846alexey-milovidov)。

ClickHouse 发行版 v20.11.2.1,2020-11-11

不向后兼容的变更

  • 如果在 distributed_ddl 配置节中指定了某个 profile,那么该 profile 可能会在服务器启动时覆盖 default profile 的设置。该问题已修复,现在分布式 DDL 查询的设置不会再影响全局服务器设置。#16635tavplubix)。
  • 限制在键(Sorting key、Primary key、Partition key 等)中使用不可比较的数据类型(如 AggregateFunction)。#16601alesapin)。
  • 移除 ANALYZEAST 查询,并将设置项 enable_debug_queries 标记为废弃,因为它现在已经成为全功能 EXPLAIN 查询的一部分。#16536Ivan)。
  • 聚合函数 boundingRatiorankCorrretentiontimeSeriesGroupSumtimeSeriesGroupRateSumwindowFunnel 被错误地实现为大小写不敏感。现在它们的名称已按设计改为区分大小写。只有那些在 SQL 标准中指定的函数、为与其他 DBMS 兼容而提供的函数,或与这些函数类似的函数才应该是大小写不敏感的。#16407alexey-milovidov)。
  • 使 rankCorr 函数在数据不足时返回 NaN #16124#16135hexiaoting)。
  • 当从早于 20.5 的版本升级时,如果执行滚动更新,且集群中同时包含大于等于 20.5 和小于 20.5 的版本,如果在存在较新版本的情况下重启旧版本的 ClickHouse 节点,并启动了旧版本,可能会导致 Part ... intersects previous part 错误。为防止该错误,应先在所有集群节点上安装新的 clickhouse-server 软件包,然后再进行重启(这样,当 clickhouse-server 重启时,将以新版本启动)。

新特性

  • 增加了对将 LDAP 用作本地不存在的用户目录的支持。#12736 (Denis Glazachev)。
  • 新增 system.replicated_fetches 表,用于显示当前正在运行的后台拉取操作。 #16428 (alesapin)。
  • 新增 date_time_output_format 设置。#15845 (Maksim Kita)。
  • 为 ClickHouse 添加了一个基础的 Web UI。 #16158 (alexey-milovidov).
  • 允许一次性读写单个 protobuf 消息(不带长度分隔符)。 #15199 (filimonov).
  • 新增了对 OpenTelemetry 的初始支持。ClickHouse 现在可以通过 Native 和 HTTP 协议接收 OpenTelemetry traceparent 请求头,并在某些情况下将其向下游传递。已执行查询的 trace span 会保存到 system.opentelemetry_span_log 表中。#14195 (Alexander Kuzmenkov)。
  • 允许在 CREATE TABLE 查询的列列表中指定主键,以提高与其他 SQL 方言的兼容性。#15823 (Maksim Kita).
  • 在包含 ORDER BY 子句的 SELECT 查询中实现 OFFSET offset_row_count {ROW | ROWS} FETCH {FIRST | NEXT} fetch_row_count {ROW | ROWS} {ONLY | WITH TIES}。这是在 SQL 标准中指定 LIMIT 的方式。#15855hexiaoting)。
  • errorCodeToName 函数 —— 返回错误码对应的名称(用于分析 query_log 等)。system.errors 表 —— 显示每种错误发生的次数(遵循 system_events_show_zero_values)。#16438 (Azat Khuzhin)。
  • 新增了函数 untuple,这是一种特殊函数,可以通过展开具名元组向 SELECT 列表中引入新的列。#16242 (Nikolai Kochetov, Amos Bird)。
  • 现在我们可以通过查询参数传递标识符。这些参数可以作为表对象或列使用。#16594Amos Bird)。
  • 为 MergeTree BloomFilter 索引新增了对大整数(UInt256、Int128、Int256)和 UUID 数据类型的支持。大整数类型为实验性特性。#16642Maksim Kita)。
  • 添加 farmFingerprint64 函数(非加密的字符串哈希)。#16570 (Jacob Hayes)。
  • 添加 log_queries_min_query_duration_ms,只有执行时间超过该设置值的查询才会写入 query_log/query_thread_log(类似于 MySQL 中的 slow_query_log)。 #16529 (Azat Khuzhin)。
  • 支持基于 Alpine 构建 Docker 镜像。使用来自 Ubuntu 20.04 的预编译二进制文件和 glibc 组件。#16479 (filimonov)。
  • 新增 toUUIDOrNulltoUUIDOrZero 类型转换函数。 #16337 (Maksim Kita)。
  • 添加 max_concurrent_queries_for_all_users 设置,使用场景参见 #6636#16154nvartolomei)。
  • 为 clickhouse-client 添加一个新选项 print_query_id。它允许使用客户端当前生成的查询 ID 来生成任意字符串,并在 clickhouse-client 中默认打印查询 ID。#15809 (Amos Bird)。
  • 添加 tidlogTrace 函数。这修复了问题 #9434#15803flynn)。
  • 添加函数 formatReadableTimeDelta,用于将时间差格式化为更易读的字符串……#15497Filipe Caixeta)。
  • 为多磁盘配置中的卷新增了 disable_merges 选项。#13956 (Vladimir Chebotarev)。

实验性特性

  • 新增函数 encryptaes_encrypt_mysqldecryptaes_decrypt_mysql。这些函数当前执行较慢,因此被视为实验性特性。 #11844 (Vasily Nemkov).

Bug 修复

  • system.distribution_queue 中 data_path 的密码进行掩码处理。 #16727 (Azat Khuzhin).
  • 修复在启用 transform_null_in 设置时,对多列和元组使用 IN 运算符的问题。修复了 #15310#16722Anton Popov)。
  • 如果被查询的表未启用采样,max_parallel_replicas 设置会工作不正确。该修复解决了 #5733#16675alexey-milovidov)。
  • 修复在 max_threads > 0 且 ORDER BY 中包含表达式时 optimize_read_in_order / optimize_aggregation_in_order 的问题。#16637 (Azat Khuzhin).
  • 计算 DEFAULT 表达式时可能会发生名称冲突(尽管这种情况几乎不可能出现)。这修复了 #9359#16612alexey-milovidov)。
  • 修正 query_thread_log.query_duration_ms 的单位。#16563 (Azat Khuzhin)。
  • 修复在使用 MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL 引擎时的一个问题。MaterializeMySQL 是一个实验性功能。#16504 (TCeason)。
  • round 函数配合 Decimal 特殊构造的参数会导致出现整数除零错误。此修复解决了 #13338#16451alexey-milovidov)。
  • 修复 Distributed 表的 DROP TABLE(与 INSERT 并发时存在竞争条件)。 #16409 (Azat Khuzhin).
  • 修复复制队列中超大条目的处理。在表结构极其庞大(接近 1 MB)时,ALTER 查询中可能会出现超大条目。此修复解决了 #16307 的问题。#16332alexey-milovidov)。
  • 修复了这样一种不一致的行为:当用于过滤的集合尚未创建时,返回数据的部分内容可能会被丢弃。 #16308 (Nikita Mikhaylov).
  • 修复 sharding_key 中对 dictGet 的使用(以及类似场景,例如函数上下文被持久保存时)。 #16205 (Azat Khuzhin)。
  • 修复了在使用 clickhouse-local 执行 OPTIMIZE 命令时抛出的异常。修复了 #16076#16192filimonov)。
  • 修复了 #15780 引入的回归问题,例如 indexOf([1, 2, 3], toLowCardinality(1)) 现在被禁止,但本不应如此。#16038Mike)。
  • 修复与 MySQL 数据库相关的 bug。当作为数据库引擎使用的 MySQL 服务器宕机时,一些查询会抛出异常,因为它们会尝试从已停用的服务器获取表,而这是不必要的。比如,查询 SELECT ... FROM system.parts 应该只针对 MergeTree 表起作用,完全不应访问 MySQL 数据库。#16032Kruglov Pavel)。
  • 现在,当使用 ALTER MODIFY COLUMN ... DEFAULT ... 且其默认值与列类型不兼容时,将抛出异常。修复了 #15854#15858alesapin)。
  • 修复了 IPv4CIDRToRange/IPv6CIDRToRange 函数,使其能够接受常量 IP 列值。 #15856 (vladimir-golovchenko)。

改进

  • INTERVAL '1 hour' 视为等同于 INTERVAL 1 HOUR,从而与 Postgres 等系统兼容。修复了 #15637#15978flynn)。
  • 在 CSV、TSV 和 JSON 输入格式中支持根据其数值 ID 解析枚举值。#15685 (vivarum)。
  • 针对 JBOD 架构和 MergeTree 存储改进了读取任务调度。新增设置项 read_backoff_min_concurrency,用于作为读取线程数量的下限值。#16423 (Amos Bird)。
  • Avro 格式补充对 LowCardinality 的支持。#16521Mike)。
  • 用于在通过 Nginx 服务器作为代理使用 S3 时的变通方案。Nginx 目前不接受路径为空的 URL(例如 http://domain.com?delete),但原生 aws-sdk-cpp 会生成这种 URL。此提交使用了打过补丁的 aws-sdk-cpp 版本,在这种情况下会生成以 "/" 作为路径的 URL,例如 http://domain.com/?delete#16814ianton-ru)。
  • 针对输入数据解析错误提供更完善的诊断信息。现在会在 Cannot read all data 错误中提供行号。 #16644 (alexey-milovidov).
  • 使 minMapmaxMap 的行为更符合预期。现在结果中不会再跳过零值。修复了 #16087#16631Ildus Kurbangaliev)。
  • 改进了在运行时更新 ZooKeeper 配置的方式。 #16630 (sundyli).
  • 尽可能早地应用 SETTINGS 子句,从而允许在查询中修改更多设置。修复了 #3178#16619alexey-milovidov)。
  • 现在 event_time_microseconds 字段使用 Decimal64 类型而不是 UInt64 类型进行存储。#16617 (Nikita Mikhaylov)。
  • 现在可以在 APPLY 列转换器中使用参数化函数。#16589 (Amos Bird)。
  • 改进了用于清理 Atomic 数据库中已删除表数据的后台任务的调度方式。如果表实际上没有数据目录,Atomic 数据库将不会为该表数据目录创建损坏的符号链接。 #16584 (tavplubix).
  • WITH 子句(CTE)中的子查询可以通过名称引用同一 WITH 子句中先前的子查询。#16575 (Amos Bird)。
  • 将 current_database 添加到 system.query_thread_log 中。 #16558 (Azat Khuzhin).
  • 允许将当前实例中已提交或已过期的分片(parts)拉取到 detached 目录中。在从另一个集群迁移表并进行 N 对 1 分片映射时非常有用。这也与当前的 fetchPartition 实现保持一致。#16538 (Amos Bird)。
  • RabbitMQ 进行了多项改进:修复了 #16263 中的缺陷;尽量缩短了事件循环的存活时间;新增了更高效的队列设置。#16426Kseniia Sumarokova)。
  • 修复 quantileDeterministic 函数中的调试断言。在先前版本中,它还可能导致通过网络传输的数据量最多增加两倍,尽管并不存在实际错误。此更改修复了 #15683#16410alexey-milovidov)。
  • 添加 TablesToDropQueueSize 指标。其值等于处于等待后台数据清理状态的已删除表的数量。#16364 (tavplubix)。
  • 当客户端断开连接时提供了更好的诊断信息。在之前的版本中,Attempt to read after EOFBroken pipe 异常会记录在服务器日志中。在新版本中,这被替换为一条信息级日志:Client has dropped the connection, cancel the query.#16329 (alexey-milovidov)。
  • 为 Set/Join 表引擎增加对 total_rows/total_bytes(来自 system.tables)的支持。#16306Azat Khuzhin)。
  • 现在可以在 MergeTree 表引擎系列中只指定 PRIMARY KEY 而不指定 ORDER BY。已关闭 #15591#16284alesapin)。
  • 如果系统中没有 tmp 目录(chroot、配置错误等),clickhouse-local 会在当前目录下创建一个临时子目录。#16280 (filimonov)。
  • 新增对将嵌套数据类型(如命名元组)用作子类型的支持。修复 #15587#16262Ivan)。
  • DROP DATABASE 语句增加对 database_atomic_wait_for_drop_and_detach_synchronously/NO DELAY/SYNC 的支持。#16127 (Azat Khuzhin)。
  • 添加 allow_nondeterministic_optimize_skip_unused_shards(允许在分片键中使用非确定性函数,如 rand()dictGet())。#16105 (Azat Khuzhin)。
  • 修复通过 HTTP 发起的查询的 memory_profiler_step/max_untracked_memory(包含测试)。修复这样一个问题:即便在 XML 配置中全局调整该值也无效,因为这些设置根本不会被应用,只会使用默认值(4MB),如此处所示。修复 HTTP 查询最顶层根 ThreadStatus 的 query_id(通过在读取 query_id 之后初始化 QueryScope)。#16101Azat Khuzhin)。
  • 现在,无论集群配置中的 <internal_replication> 设置为何值,都可以执行 ALTER ... ON CLUSTER 查询。#16075 (alesapin).
  • 修复一个罕见问题:clickhouse-client 在加载自动补全建议时,退出过程中可能异常退出。此更改修复了 #16035#16047alexey-milovidov)。
  • 为使用复杂键的 Redis 字典添加对 cache 布局的支持。#15985 (Anton Popov).
  • 修复在错误配置(connections_with_failover_max_tries 设置为 0)情况下出现的查询挂起(无限循环)问题。#15876 (Azat Khuzhin).
  • 将部分日志消息的级别从 information 调整为 debug,从而避免在每次查询时都输出 information 级别的消息。解决了 #5293#15816alexey-milovidov)。
  • 移除 MemoryTrackingInBackground* 指标,从而避免得到可能具有误导性的结果。修复了 #15684#15813alexey-milovidov)。
  • zookeeper-dump-tree 工具添加重连功能。#15711 (alexey-milovidov)。
  • 允许在 CREATE TABLE table AS table_function(...) 查询中显式指定列的列表。修复 #9249#14214#14295tavplubix)。

性能改进

  • SELECT FINAL 中不要跨分区合并数据片段(parts)。#15938 (Kruglov Pavel)。
  • 提升 -OrNull-OrDefault 聚合函数的性能。#16661 (alexey-milovidov)。
  • 提升 quantileMerge 的性能。在之前的版本中,它的速度非常慢。此变更关闭 #1463#16643 (alexey-milovidov)。
  • 略微提升逻辑函数的性能。#16347 (alexey-milovidov)。
  • 改进 MergeTree 表引擎中合并任务分配的性能。对用户而言应当是透明的。#16191 (alesapin)。
  • 通过预先分配哈希表,加速 hashed/sparse_hashed 字典的加载。#15454 (Azat Khuzhin)。
  • 现在 trivial count 优化变得稍微不那么简单。包含精确分区表达式的谓词也可以被优化。此变更还修复了在 max_parallel_replicas > 1 时返回错误计数的 #11092#15074 (Amos Bird)。

构建/测试/打包改进

  • 为无状态测试添加不稳定性检查。它会在合并之前预先检测出潜在的不稳定功能测试。#16238 (alesapin).
  • croaring 使用合适的版本,而不是使用 amalgamation。#16285 (sundyli).
  • 改进针对 ya.make 构建系统(Arcadia)的构建文件生成。#16700 (alexey-milovidov).
  • MaterializeMySQL 数据库引擎添加 MySQL BinLog 文件检查工具。MaterializeMySQL 是一个实验性特性。#16223 (Winter Zhang).
  • 检查非可执行文件上的可执行位。人们经常会在 Windows 下不小心提交带可执行位的文件。#15843 (alexey-milovidov).
  • 检查头文件中是否包含 #pragma once#15818 (alexey-milovidov).
  • 修复 libhdfs3 中不规范的代码风格 &vector[idx]。这修复了 libcxx 的调试构建。另见 https://github.com/ClickHouse-Extras/libhdfs3/pull/8#15815 (Amos Bird).
  • 修复在 Mac OS 上构建某个杂项示例工具的问题。需要注意的是,我们在 CI 中并不会在 Mac OS 上构建示例(只构建 ClickHouse 二进制),因此它再次出问题几乎是迟早的事。这修复了 #15804#15808 (alexey-milovidov).
  • 简化 Sys/V init 脚本。#14135 (alexey-milovidov).
  • db_generator 中添加 boost::program_options 以提升其易用性。此更改关闭了 #15940#15973 (Nikita Mikhaylov).

ClickHouse 版本 20.10

ClickHouse 版本 v20.10.7.4-stable,2020-12-24

Bug 修复

  • 修复了在具有 IPv4/IPv6 双栈的机器上,服务器无法访问 clickhouse-odbc-bridge 进程的问题,并修复了在使用格式错误的查询执行 ODBC 字典更新时出现的问题(可能导致崩溃)。这可能关闭了 #14489#18278Denis Glazachev)。
  • 修复 Enum 和 Int 类型之间的键比较问题,解决了 #17989#18214Amos Bird)。
  • 修复了 MaterializeMySQL 数据库引擎中在唯一键转换时发生的崩溃。此更改修复了 #18186#16372#18211Winter Zhang)。
  • 修复了解析 S3 URL 时出现的 std::out_of_range: basic_string 异常。#18059 (Vladimir Chebotarev)。
  • 修复了由于 MaterializeMySQL 不支持转换 MySQL 前缀索引而导致部分表无法从 MySQL 同步到 ClickHouse 的问题。本次修复解决了 #15187#17912#17944Winter Zhang)。
  • 修复 topK 聚合函数中可能导致段错误的问题,从而关闭了 #17404#17845Maksim Kita)。
  • in_memory_parts_enable_wal 被禁用时,不要从 WAL 中恢复数据分片。 #17802 (detailyang).
  • 修复了 ClickHouse 无法重新建立与 MySQL 服务器连接时出现的问题。#17681 (Alexander Kazakov)。
  • 修复了在服务器以守护进程模式运行时 system.stack_trace 表为空的问题。#17630 (Amos Bird)。
  • 修复了在交互模式下使用 clickhouse-client 执行多行查询时,单行注释被错误地延伸到整个查询结尾的问题。此修复解决了 #13654#17565alexey-milovidov)。
  • 修复了一个问题:在极少数情况下,服务器可能会停止接受连接。 #17542 (alexey-milovidov).
  • 修复了在对应的 mutation 在不同副本上被终止时,ALTER 查询会挂起的问题。此修复解决了 #16953#17499alesapin)。
  • 修复了 ClickHouse 低估 mark 缓存大小的 bug。当存在大量体积很小且包含 mark 的文件时,可能会发生这种情况。#17496 (alesapin)。
  • 修复了在启用设置 optimize_redundant_functions_in_order_by 时的 ORDER BY 问题。 #17471 (Anton Popov).
  • 修复了因不正确的优化导致在 DISTINCT 之后仍可能出现的重复数据问题。修复了 #17294#17296li chengxiang)。#17439Nikolai Kochetov)。
  • 修复了从包含 LowCardinality 类型的 JOIN 表中读取数据时发生崩溃的问题。这修复了 #17228#17397Nikolai Kochetov)。
  • 修复了在子查询中存在 const 列时 set 索引失效的问题,解决了 #17246#17249Amos Bird)。
  • 修复了 ColumnConst 比较导致的崩溃问题。此修复解决了 #17088#17135Amos Bird)。
  • 修复了在非 leader 副本上的 ReplicatedMergeTree 表中执行 ON CLUSTER 查询时可能会永久挂起的问题。#17089 (alesapin)。
  • 修复了模糊测试器在 fuzzBits 函数中发现的 bug。这一更改修复了 #16980#17051hexiaoting)。
  • 避免在执行过程中可能被取消的远程查询(例如带有 LIMIT 的查询)出现不必要的网络错误。#17006 (Azat Khuzhin).
  • 修复了在将 double 转换为大整数(128 位、256 位)时结果错误的问题。#16986 (Mike).
  • 在出现错误时重新解析 format_avro_schema_registry_url 的 IP 地址。#16985 (filimonov)。
  • 修复了在执行 ALTER TABLE ... MODIFY COLUMN ... NewType 时,如果存在针对正在被修改的列并带有 WHERE 条件的 SELECT 查询,而该 ALTER 尚未完成时可能导致服务器崩溃的问题。#16968 (Amos Bird)。
  • clickhouse-git-import 中的 blame 信息计算不正确。#16959 (alexey-milovidov)。
  • 修复了在单调函数场景下的 ORDER BY 优化问题。修复了 #16107#16956Anton Popov)。
  • 修复在启用设置 optimize_aggregators_of_group_by_keys 且包含 JOIN 时的 GROUP BY 优化问题。此修复解决了 #12604#16951Anton Popov)。
  • 安装脚本现在会始终在配置目录中创建子目录。此更改仅影响使用自定义配置的 Docker 构建。#16936 (filimonov)。
  • 修复在包含 ORDER BY 的查询中可能出现的 Illegal type of argument 错误。此更改修复了 #16580#16928Nikolai Kochetov)。
  • 如果未向 WriteBufferFromS3 写入任何数据,则中止分段上传(multipart upload)。 #16840 (Pavel Kovalenko).
  • 修复了在调用 any 且未传入任何参数时导致的崩溃问题。这修复了 #16803#16826Amos Bird)。
  • 修复了通过 MySQL 协议执行 INSERT 查询时,ClickHouse 先前总是返回 0 而不是返回受影响行数的问题。此修复对应 #16605#16715Winter Zhang)。
  • 修复了 TDigest 的失控增长问题。#16680 (hrissan)。
  • 修复了在聚合函数中使用后缀 if 时远程查询失败的问题。该修复解决了 #16574#16231#16610Winter Zhang)。

ClickHouse 发布 v20.10.4.1-stable,2020-11-13

Bug 修复

  • 修复在开启查询分析器且 ClickHouse 安装在某些 glibc 版本(据推测这些版本对部分函数的异步展开表存在问题)的操作系统上时出现的罕见静默崩溃问题。修复了 #15301。修复了 #13098#16846alexey-milovidov)。
  • 修复在启用 transform_null_in 设置时,对多列和元组使用 IN 运算符的问题。修复了 #15310#16722Anton Popov)。
  • 修复在 max_threads>0ORDER BY 中包含表达式时,optimize_read_in_order / optimize_aggregation_in_order 的问题。#16637Azat Khuzhin)。
  • 现在在从输入解析 AVRO 时,会从类型中移除 LowCardinality。修复了 #16188#16521Mike)。
  • 修复在使用 MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL 引擎,且在 MySQL Slave 上启用 slave_parallel_worker 时元数据快速增长的问题,通过正确缩减 GTID 集合加以解决。修复了 #15951#16504TCeason)。
  • 修复 Distributed 表的 DROP TABLE 与 INSERT 之间存在竞争条件的问题。#16409Azat Khuzhin)。
  • 修复复制队列中处理超大记录的问题。如果表结构极大(接近 1 MB),则在 ALTER 查询中可能会出现非常大的记录。修复了 #16307#16332alexey-milovidov)。
  • 修复与 MySQL 数据库相关的 bug。当用作数据库引擎的 MySQL 服务器宕机时,一些查询会抛出异常,因为它们尝试从已失效的服务器获取表,而这其实没有必要。例如,查询 SELECT ... FROM system.parts 只应操作 MergeTree 表,完全不应访问 MySQL 数据库。#16032Kruglov Pavel)。

改进

ClickHouse 发布 v20.10.3.30,2020-10-28

向后不兼容变更

  • multiple_joins_rewriter_version 标记为过时,移除第一版 joins 重写器。#15472 (Artem Zuikov).
  • format_regexp_escaping_rule 设置(与 Regexp 格式相关)的默认值更改为 Raw(表示将整个子模式作为一个值读取),以使行为更符合用户预期。#15426 (alexey-milovidov).
  • 在 SQL 中增加对嵌套多行注释 /* comment /* comment */ */ 的支持。这符合 SQL 标准。#14655 (alexey-milovidov).
  • 为 MergeTree 增加设置(max_replicated_merges_with_ttl_in_queuemax_number_of_merges_with_ttl_in_pool),用于控制后台池和复制队列中带 TTL 的合并数量。此更改仅在你使用删除 TTL(delete TTL)时才会与旧版本不兼容。否则,复制仍将保持兼容。如果你一次性更新所有分片副本,或者在完成所有副本更新前执行 SYSTEM STOP TTL MERGES,即可避免兼容性问题。如果在复制队列中出现不兼容的条目,首先执行 SYSTEM STOP TTL MERGES,然后对分配了不兼容 TTL 合并的分区执行 ALTER TABLE ... DETACH PARTITION ...。之后在单个副本上将其重新附加。#14490 (alesapin).
  • 当从 20.5 之前的版本升级并执行滚动更新时,如果集群中同时存在大于等于 20.5 和小于 20.5 的版本节点,在存在新版本节点的情况下重启旧版本的 ClickHouse 节点并启动旧版本,可能会导致 Part ... intersects previous part 错误。为防止该错误,首先在所有集群节点上安装新的 clickhouse-server 软件包,然后再执行重启(也就是说,当 clickhouse-server 被重启时,它将以新版本启动)。

新特性

  • 后台数据重新压缩。为 MergeTree 表引擎系列新增支持指定 TTL ... RECOMPRESS codec_name 的能力。#14494 (alesapin).
  • 添加并行 quorum 插入。这解决了 #15601#15601Latysheva Alexandra)。
  • 用于进一步强化数据持久性的设置。适用于非复制部署。#11948 (Anton Popov)。
  • 当一个重复的数据块被写入某个副本节点,而该副本本地尚不存在该数据块(尚未从其他副本拉取)时,不要忽略它,而是应写入本地,以达到与成功完成复制相同的效果。 #11684 (alexey-milovidov).
  • 现在我们支持在查询上下文中使用 WITH <identifier> AS (subquery) ... 来引入具名子查询。此更改关闭了 #2416。此更改还关闭了 #4967#14771Amos Bird)。
  • 引入 enable_global_with_statement 设置,它会将第一个 SELECT 查询的 WITH 子句传播到同一层级的其他 SELECT 查询,并使 WITH 子句中的别名对子查询可见。 #15451 (Amos Bird)。
  • 安全的集群间查询执行(使用 initial_user 作为当前查询用户)。 #13156 (Azat Khuzhin). #15551 (Azat Khuzhin).
  • 新增了删除列属性和表 TTL 的功能。引入了查询 ALTER TABLE MODIFY COLUMN col_name REMOVE what_to_removeALTER TABLE REMOVE TTL。这两种操作都很轻量级,并且只在元数据层面执行。#14742 (alesapin)。
  • 添加了 RawBLOB 格式。用于在没有任何转义和分隔符的情况下输入或输出单个值。由此关闭了 #15349#15364alexey-milovidov)。
  • 添加 reinterpretAsUUID 函数,用于将大端序字节串转换为 UUID。 #15480 (Alexander Kuzmenkov).
  • 实现 force_data_skipping_indices 设置。#15642 (Azat Khuzhin).
  • 添加设置 output_format_pretty_row_numbers,用于在 Pretty 格式中为结果添加行号。此更改解决了 #15350#15443flynn)。
  • 添加了查询混淆工具。这使得可以共享更多查询,以便进行更充分的测试。关闭了 #15268#15321alexey-milovidov)。
  • 新增表函数 null('structure')#14797 (vxider).
  • 新增了 formatReadableQuantity 函数。该函数可以将较大的数字格式化为更易读的形式。#14725 (Artem Hnilov)。
  • 添加 LineAsString 格式,它接受由换行符分隔的一系列行,并将每一行整体解析为一个单独的 String 字段。#14703 (Nikita Mikhaylov),#13846 (hexiaoting).
  • 新增 JSONStrings 格式,用于将数据输出为字符串数组。#14333 (hcz)。
  • Regexp 格式新增对 "Raw" 列格式的支持。它允许直接整体提取子模式,而无需任何转义规则。#15363 (alexey-milovidov)。
  • 允许为 TSV 输出格式配置可自定义的 NULL 表示。该功能由设置项 output_format_tsv_null_representation 控制,默认值为 \N。由此关闭了 #9375。请注意,该设置仅影响输出格式,而 \NTSV 输入格式中唯一支持的 NULL 表示。#14586Kruglov Pavel)。
  • MaterializeMySQL 添加对 Decimal 数据类型的支持。MaterializeMySQL 是一个实验性功能。#14535 (Winter Zhang)。
  • 新增功能:SHOW DATABASES LIKE 'xxx'#14521 (hexiaoting).
  • 新增脚本,用于将任意 Git 仓库导入到 ClickHouse 作为示例数据集。#14471alexey-milovidov)。
  • 现在,在列列表中与列转换器一起使用时,INSERT 语句可以包含星号(及其变体)。 #14453 (Amos Bird)。
  • 为分布式查询新增查询复杂度限制参数 max_rows_to_read_leafmax_bytes_to_read_leaf,用于限制在叶节点上读取的最大行数/字节数。该限制仅适用于本地读取操作,不包括根节点上的最终合并阶段。#14221 (Roman Khavronenko)。
  • 允许用户在配置文件的 <replicated_merge_tree> 部分为 ReplicatedMergeTree* 存储指定设置。其工作方式与 <merge_tree> 部分类似。对于 ReplicatedMergeTree* 存储,会同时应用来自 <merge_tree><replicated_merge_tree> 的设置,但 <replicated_merge_tree> 中的设置优先级更高。新增 system.replicated_merge_tree_settings 表。#13573 (Amos Bird)。
  • 新增 mapPopulateSeries 函数。 #13166 (Ildus Kurbangaliev).
  • 支持 MySQL 类型:decimal(映射为 ClickHouse Decimal)以及具备子秒级精度的 datetime(映射为 DateTime64)。#11512Vasily Nemkov)。
  • system.text_logsystem.trace_logsystem.query_logsystem.query_thread_log 表中新增 event_time_microseconds 字段。#14760Bharat Nallan)。
  • event_time_microseconds 添加到 system.asynchronous_metric_logsystem.metric_log 表。#14514Bharat Nallan)。
  • query_start_time_microseconds 字段添加到 system.query_logsystem.query_thread_log 表中。#14252Bharat Nallan)。

Bug 修复

  • 修复在忽略限制时可能出现的内存过度分配问题。修复了 #14560#16206alexey-milovidov)。
  • 修复 executable 字典源挂起的问题。在早期版本中,当使用某些格式(例如 JSONEachRow)时,在子进程至少输出一些内容之前,数据不会被馈送给该子进程。此更改关闭了 #1697。此更改关闭了 #2455#14525alexey-milovidov)。
  • 修复在函数 dictGet 抛出异常时出现的重复释放内存问题。如果字典在加载时发生错误,就可能触发该问题。#16429 (Nikolai Kochetov)。
  • 修复在使用 totals/rollup/cube 修饰符以及对 GROUP BY 键应用 min/max 函数时的 GROUP BY 行为问题。修复了 #16393#16397Anton Popov)。
  • 修复在 prefer_localhost_replica=0 且启用 internal_replication 时异步 Distributed INSERT 的问题。#16358 (Azat Khuzhin).
  • 修复了 TwoLevelStringHashTable 实现中的一个非常严重的错误,可能导致内存泄漏。#16264 (Amos Bird)。
  • 修复在某些 lambda 中错误聚合时出现的段错误(segfault)。 #16082 (Anton Popov).
  • 修复在 ReplicatedVersionedCollapsingMergeTree 中执行 ALTER MODIFY ... ORDER BY 查询时出现卡住的问题。此修复解决了 #15980#16011alesapin)。
  • MaterializeMySQL(实验性功能):修复排序规则名称和字符集名称解析器,并支持字符串类型的 length = 0#16008 (Winter Zhang).
  • 允许对键为复杂类型的字典使用 direct 布局。#16007 (Anton Popov)。
  • 修复在副本空闲一段时间后发生复制错误时会导致副本挂起 5–10 分钟的问题。 #15987 (filimonov).
  • 修复在向物化视图插入数据或从中查询的同时并发删除其目标表时(针对 Atomic 数据库引擎)可能出现的罕见段错误。 #15984 (tavplubix).
  • 修复了设置配置文件解析时的歧义:CREATE USER ... SETTINGS profile readonly 现在被解释为使用名为 readonly 的配置文件,而不是名为 profile 且带有只读约束的设置。这修复了 #15628#15982Vitaly Baranov)。
  • MaterializeMySQL(实验功能):修复在创建数据库失败时出现的崩溃问题。 #15954 (Winter Zhang)。
  • 修复了在并发重命名表时(针对 Atomic 数据库引擎),DROP TABLE IF EXISTSTable ... does not exist 错误导致失败的问题。修复了在对多个表并发执行某些 DDL 查询(例如 DROP DATABASERENAME TABLE)时出现的罕见死锁问题。修复了在并发执行 DROP/DETACH TABLE 时,DROP/DETACH DATABASETable ... does not exist 错误导致失败的问题。 #15934 (tavplubix)。
  • 修复了在查询 Distributed 表且查询包含 WHEREPREWHEREGLOBAL IN 时错误返回空结果的问题。修复了 #15792#15933Nikolai Kochetov)。
  • 修复 #12513:在重新分析查询时,具有相同别名的差分表达式处理不一致的问题。#15886Winter Zhang)。
  • 修复 RBAC 实现中极少数情况下可能发生的死锁问题。 #15875 (Vitaly Baranov).
  • 修复在执行 ALTER MODIFY COLUMN 查询后运行的 SELECT ... ORDER BY DESC 查询中出现的 Block structure mismatch 异常,解决了 #15800#15852alesapin)。
  • MaterializeMySQL(实验性功能):修复 select count() 结果不准确的问题。#15767 (tavplubix).
  • 修复了一些仅查询虚拟列时的情况。之前可能会抛出 Not found column _nothing in block 异常。修复了 #12298#15756Anton Popov)。
  • 修复在 Atomic 数据库中删除带有内部表的物化视图时的问题(由于对该物化视图的内部表执行递归 DROP TABLE,导致工作线程挂起,进而阻塞所有后续的 DROP TABLE 操作)。#15743 (Azat Khuzhin).
  • 如果第一次尝试失败,现在支持将数据分片移动到另一个磁盘/卷。 #15723 (Pavel Kovalenko).
  • 修复在向 MATERIALIZED VIEW 插入时,如果 MV 的查询包含 ARRAY JOIN,可能出现的 Cannot find column 错误。 #15717 (Nikolai Kochetov).
  • 修正了 max_replicated_logs_to_keep 默认值过低的问题,该问题可能导致副本过于频繁地丢失。通过选择最新的副本作为克隆源,改进丢失副本的恢复过程。同时,对丢失副本上的旧 part 不再执行删除操作,而是将其分离(detach)。 #15701 (tavplubix).
  • 修复基于 MySQL 的字典和表中罕见的竞态条件。#15686 (alesapin)。
  • 修复 AMQP-CPP 中(无害的)竞态条件。#15667alesapin)。
  • 修复在从与目标表结构不同的 Buffer 表读取数据时出现的错误 Cannot add simple transform to empty Pipe。当目标表对查询返回空结果集时,会触发该问题。修复了 #15529#15662Nikolai Kochetov)。
  • 在向基于 S3 的 MergeTree 表插入数据时实现了正确的错误处理。基于 S3 的 MergeTree 是一个试验性功能。#15657Pavel Kovalenko)。
  • 修复了 S3 表函数中的一个缺陷:来自 URL 的区域没有被应用到 S3 客户端配置中。#15646Vladimir Chebotarev)。
  • 修正了查询计划中 ReadFromStorage 步骤所使用资源的析构顺序。在极少数情况下,这可能会导致崩溃。可能与 #15610 相关。#15645Nikolai Kochetov)。
  • 在分离只读表时减去 ReadonlyReplica 指标的计数。#15592 (sundyli).
  • 修复了在 VALUESLIMITIN 运算符右侧使用 JSON* 函数的结果时出现的 Element ... is not a constant expression 错误。#15589 (tavplubix)。
  • 当发生异常时,查询将更快结束,并会取消在远程副本上的执行。#15578 (Azat Khuzhin).
  • 避免出现错误消息 Could not calculate available disk space (statvfs), errno: 4, strerror: Interrupted system call 的可能性。此更改修复了 #15541#15557alexey-milovidov)。
  • 修复在发起端不存在该数据库时,使用 IN 和 Distributed 表的查询中出现的 Database &lt;db&gt; does not exist. 错误。#15538Artem Zuikov)。
  • 在执行 MOVEREPLACE PARTITION 后,或者在极少数情况下执行 DETACHDROP PARTITION 后,mutation 可能会因为等待某个不存在的 part 而一直卡住。此问题已修复。 #15537 (tavplubix).
  • 修复一个错误:当执行使用相同模式的 LIKE 后,ILIKE 运算符变为区分大小写的问题。 #15536 (alesapin)。
  • 修复在选择数据中不存在的列时出现的 Missing columns 错误,这些列依赖于其他同样不存在于数据中的列。修复了 #15530#15532alesapin)。
  • 当仅向 ReplicatedMergeTree 传入一个参数时抛出错误,而不是忽略该参数。#15516 (nvartolomei)。
  • 修复 DDLWorker 中事件订阅的 Bug,该问题在极少数情况下可能导致 ON CLUSTER 查询挂起。此问题引入于 #13450#15477alesapin)。
  • boundingRatio 聚合函数的第二个参数类型错误时,会正确报告错误信息。#15407 (detailyang)。
  • 修复 #15365:使用 MySQL 引擎执行 ATTACH 数据库操作时抛出异常(因缺少查询上下文)。#15384Winter Zhang)。
  • 修复在 SELECT 查询中多次使用列转换器时的处理问题。 #15378 (Amos Bird)。
  • 修复了 S3 存储中的压缩。#15376Vladimir Chebotarev)。
  • 修复一个错误:执行 SELECT toStartOfDay(today()) 等查询时,会因为 time_zone 参数为空而失败。 #15319 (Bharat Nallan).
  • 修复在重命名 MergeTree 表以及后台清理过程中出现的竞态条件。#15304 (alesapin).
  • 修复在启用系统日志时,服务器启动期间出现的罕见竞态条件。 #15300 (alesapin).
  • 修复了在对同一 MySQL 引擎表包含大量子查询时导致查询挂起的问题。此前,如果一个查询中对同一 MySQL 表的子查询数量超过 16 个,查询会一直挂起。#15299Anton Popov)。
  • 修复 QueryLog 中的 MSan 报告。字段 memory_usage 可能会使用未初始化的内存。#15258 (alexey-milovidov)。
  • 修复在对 Merge 表执行包含 JOIN 的查询时,GROUP BY 中出现 'Unknown identifier' 错误的问题。 #15242 (Artem Zuikov).
  • 修复在使用 joinGet 配合 LowCardinality 类型时导致实例崩溃的问题。已修复 #15214#15220Amos Bird)。
  • 修复表引擎 Buffer 中的一个 bug,该 bug 会导致在执行 ALTER 查询后无法向 Buffer 插入具有新结构的数据。修复了 #15117#15192alesapin)。
  • 在 MySQL 列定义报文中调整 Decimal 字段大小。 #15152 (maqroll).
  • 修复了在 join_algorithm='auto' 中出现的 Data compressed with different methods 错误。在 join_algorithm='partial_merge' 中保持左表连接键的数据类型为 LowCardinality。 #15088 (Artem Zuikov).
  • 更新 jemalloc,使用亲和性掩码修复 percpu_arena#15035 (Azat Khuzhin)。#14957 (Azat Khuzhin)。
  • 我们已经在 String 和 FixedString 之间使用了填充比较(https://github.com/ClickHouse/ClickHouse/blob/master/src/Functions/FunctionsComparison.h#L333)。此 PR 将相同的逻辑应用于字段比较,从而纠正了将 FixedString 用作主键时的使用方式。此更改修复了 #14908#15033Amos Bird)。
  • 如果以精心构造的参数调用函数 bar,可能会发生缓冲区溢出。此更改修复了 #13926#15028alexey-milovidov)。
  • 修复了在 macOS 上通过 Docker 运行 clickhouse-server 时,在 Atomic 数据库中执行 DDL 查询语句时出现的 Cannot rename ... errno: 22, strerror: Invalid argument 错误。#15024tavplubix)。
  • 修复在使用 join&#95;algorith=&#39;auto&#39; 的 RIGHT 或 FULL JOIN 时,当内存超出限制且需要将 HashJoin 替换为 MergeJoin 时发生的崩溃。#15002 (Artem Zuikov)。
  • 现在,设置项 number_of_free_entries_in_pool_to_execute_mutationnumber_of_free_entries_in_pool_to_lower_max_size_of_merge 可以设置为与 background_pool_size 相同的值。#14975alesapin)。
  • 修复了在子查询包含 finalizeAggregation 函数时谓词下推无法生效的问题。修复了 #14847#14937filimonov)。
  • 按逻辑 CPU 核心在 system.asynchronous_metrics 中公开 CPU 频率。这修复了 #14923#14924Alexander Kuzmenkov)。
  • MaterializeMySQL(实验功能):修复 .metadata.tmp File exists 错误。#14898 (Winter Zhang).
  • 修复了在某些调用 extractAllGroups 函数时可能触发 “Memory limit exceeded” 错误的问题。此修复对应 #13383#14889alexey-milovidov)。
  • 修复在尝试使用文件描述符向 StorageFile 执行 INSERT 时发生的 SIGSEGV。 #14887 (Azat Khuzhin).
  • 修复了 cache 字典中的段错误问题 #14837#14879Nikita Mikhaylov)。
  • MaterializeMySQL(实验性特性):修复了在解析 MySQL binlog 事件时的一个问题,该问题会在 MaterializeMySQL 数据库引擎中导致 Attempt to read after EOFPacket payload is not fully read 错误。#14852 (Winter Zhang)。
  • 修复 SELECT 查询中的一个罕见错误:当被查询的列具有依赖于另一列的 DEFAULT 表达式,而该另一列同样定义了 DEFAULT,且既未出现在查询中也不存在于磁盘上时,会触发此错误。部分修复 #14531#14845alesapin)。
  • 修复了一个问题:当需要从 ZooKeeper 获取配置文件(使用 from_zk include 选项)时,服务器在启动过程中与 ZooKeeper 通信可能会卡住。此修复解决了 #14814#14843Alexander Kuzmenkov)。
  • 修复在对带符号类型执行收缩式 Int -> Int 类型转换时的错误单调性检测。该问题可能导致查询结果不正确。此缺陷在 #14513 中被发现。#14783Amos Bird)。
  • Replace 列转换器应使用克隆后的 AST 来替换标识符。这修复了 #14695#14734Amos Bird)。
  • 修复在执行 ALTER ... MODIFY QUERY 时,物化视图元数据中默认数据库名称缺失的问题。#14664 (tavplubix).
  • 修复在 ALTER UPDATE 变更操作中,当赋值表达式包含 Nullable 列且使用常量值(例如 UPDATE x = 42)时,会导致列中出现错误值或触发段错误(segfault)的问题。修复了 #13634#14045#14646alesapin)。
  • 修复由于结果列的小数位数(scale)设置错误而导致的 Decimal 乘法结果不正确的问题。 #14603 (Artem Zuikov).
  • 修复在 Nullable 类型的 LowCardinality 上使用 has 函数的问题。 #14591 (Mike).
  • 在为 StorageReplicatedMergeTree 引擎执行 CreateQuery 时,如果发生 Zookeeper 异常,则清理数据目录。#14563Bharat Nallan)。
  • 修复带有组合器 -Resample 的函数中的罕见段错误,该问题可能在使用非常大的参数导致溢出时被触发。#14562 (Anton Popov).
  • 修复了在将 Nullable(String) 转换为 Enum 时出现的一个 bug。该问题由 #12745 引入,本次修复解决了 #14435#14530Amos Bird)。
  • 修正了 Nullable 列的错误排序顺序,解决了 #14344#14495Nikita Mikhaylov)。
  • 修复 currentDatabase() 函数无法在 ON CLUSTER DDL 查询中使用的问题。#14211 (Winter Zhang)。
  • MaterializeMySQL(实验性功能):修复了 MaterializeMySQL 数据库引擎中的 Packet payload is not fully read 错误。#14696BohuTANG)。

改进

  • 为新建数据库默认启用 Atomic 数据库引擎。#15003tavplubix)。
  • 添加对为具有子类型的列指定专用编码(如 DeltaT64 等)的支持。实现了 #12551,修复了 #11397#4609#15089alesapin)。
  • ZooKeeper 配置的动态重新加载。 #14678 (sundyli).
  • 现在,无论集群配置中的 <internal_replication> 如何设置,都允许执行 ALTER ... ON CLUSTER 查询。#16075 (alesapin)。
  • 现在 joinGet 支持多键查找。延续自 #12418#13015Amos Bird)。
  • Atomic 数据库中,如果为 DROP/DETACH TABLE 指定了 NO DELAYSYNC,则会等待该操作真正完成。#15448 (tavplubix)。
  • 现在可以通过 ALTER 查询更改 VersionedCollapsingMergeTree 的版本列类型。#15442alesapin)。
  • 在创建副本表时,在 zookeeper_path 中展开 {database}{table}{uuid} 宏。如果在服务器重启后可能导致 zookeeper_path 出错,则不允许执行 RENAME TABLE。修复 #6917#15348tavplubix)。
  • 函数 now 现在允许带有时区的参数。这解决了 15264 问题。#15285flynn)。
  • 在执行完 /docker-entrypoint-initdb.d/ 中的所有脚本之前,不允许与 ClickHouse 服务器建立连接。#15244 (Aleksei Kozharin)。
  • EXPLAIN PLAN 查询中新增了 optimize 设置。若启用,将在查询计划层面应用优化。默认开启。#15201 (Nikolai Kochetov)。
  • 为 CAST 参数个数不正确的情况提供了合适的异常消息。此更改关闭了 #13992#15029alexey-milovidov)。
  • 新增选项,可在插入数据部分时禁用 TTL 移动。#15000Pavel Kovalenko)。
  • 在执行 mutation 时忽略键约束。没有这个 PR,当 force_index_by_date = 1force_primary_key = 1 时将无法执行 mutation。#14973 (Amos Bird)。
  • 允许在前一次删除尝试因 ZooKeeper 会话过期而失败后删除 Replicated 表。此更改修复了 #11891#14926alexey-milovidov)。
  • 修复了在分布式表上运行带 SETTINGS 子句的 SELECT 时错误触发设置约束违规的问题。 #14876 (Amos Bird).
  • 提供 load_balancing_first_offset 查询设置项,以明确指定第一个副本是哪一个。它与 FIRST_OR_RANDOM 负载均衡策略配合使用,从而控制各副本的工作负载。#14867Amos Bird)。
  • EXPLAIN 结果中显示 SETJOIN 的子查询。#14856 (Nikolai Kochetov).
  • 允许在 Distributed 存储中使用多卷存储配置。#14839Pavel Kovalenko)。
  • 基于同一个 timespec 构造 query_start_timequery_start_time_microseconds#14831 (Bharat Nallan)。
  • 支持禁用 StorageJoinStorageSet 的持久化,该功能通过设置 disable_set_and_join_persistency 来控制。此 PR 解决了问题 #6318#14776vxider)。
  • 现在可以使用 COLUMNS 包裹一组列,并在其后对这些列应用列转换器。 #14775 (Amos Bird).
  • system.merges 表中添加 merge_algorithm,以改进对合并操作的检查。#14705 (Amos Bird)。
  • 修复由 ZooKeeper exists 监听导致的潜在内存泄漏。#14693 (hustnn).
  • 允许并行执行分布式 DDL。 #14684 (Azat Khuzhin).
  • 添加 QueryMemoryLimitExceeded 事件计数器。解决了 #14589#14647fastio)。
  • 修复查询格式中的一些尾随空白字符。#14595Azat Khuzhin)。
  • ClickHouse 对 partition expr 和 key expr 的处理方式不同。Partition expr 用于构造包含相关列的 minmax 索引,而 primary key expr 则作为表达式存储。有时用户会在较粗粒度上对表进行分区,比如使用 partition by i / 1000。然而,二元运算符并不是单调的,而这个 PR 试图修复这一问题,也可能对其他使用场景有所帮助。#14513Amos Bird)。
  • DiskS3 添加跳过访问检查的选项。s3 磁盘是一个实验性功能。#14497Pavel Kovalenko)。
  • 在存在正在进行的 S3 请求时,加快服务器关闭速度。#14496 (Pavel Kovalenko).
  • SYSTEM RELOAD CONFIG 现在如果重新加载失败会抛出异常,并继续使用原先的 users.xml。后台的周期性重新加载如果失败也会继续使用原先的 users.xml。#14492Vitaly Baranov)。
  • clickhouse-client 的脚本模式中,对于使用 VALUES 格式内联数据的 INSERT 语句,除换行符外,现在还支持使用分号作为数据结束符。关闭 #12288#13192Alexander Kuzmenkov)。
  • 在 compact parts 中支持自定义编解码器。#12183 (Anton Popov)。

性能改进

  • 默认为小数据部分启用 compact parts。这将使频繁插入的处理效率提升(约 4 到 100 倍)。#11913alexey-milovidov)。
  • 提升 quantileTDigest 的性能。这修复了 #2668#15542Kruglov Pavel)。
  • 大幅降低 AggregatingInOrderTransform/optimize_aggregation_in_order 的内存使用。#15543Azat Khuzhin)。
  • 提升 256 位乘法的速度。#15418Artem Zuikov)。
  • 通过使用 (u)int64_t 作为宽整数的基础类型提升 256 位类型的性能。原先的宽整数使用 8 位类型作为基础。#14859Artem Zuikov)。
  • 显式使用临时磁盘存储纵向合并的临时数据。#15639Grigory Pervakov)。
  • 使用单个 S3 DeleteObjects 请求替代循环中多个 DeleteObject 请求。没有任何功能性变更,因此可由现有测试(如 integration/test_log_family_s3)覆盖。#15238ianton-ru)。
  • 修复 DateTime <op> DateTime 错误选择较慢通用实现的问题。这修复了 #15153#15178Amos Bird)。
  • 提升 FixedString 类型作为 GROUP BY 键时的性能。#15034Amos Bird)。
  • 在启动 clickhouse-server 时只对代码段执行 mlock。在之前的版本中,所有映射区域都会锁定在内存中,包括调试信息。调试信息通常被拆分到单独文件中,但如果没有拆分,会额外导致 2–3 GiB 的内存占用。#14929alexey-milovidov)。
  • 由于启用了链接时优化(link time optimization),ClickHouse 二进制文件体积进一步减小。

构建/测试/打包改进

  • 现在我们使用 clang-11 来构建生产环境中的 ClickHouse。#15239 (alesapin)。
  • 现在我们在 CI 中使用 clang-11 构建 ClickHouse。#14846alesapin)。
  • 将二进制构建(Linux、Darwin、AArch64、FreeDSD)改为使用 clang-11 进行编译。 #15622 (Ilya Yatsishin).
  • 现在所有测试镜像都使用 llvm-symbolizer-11#15069 (alesapin)。
  • 支持使用 llvm-11 进行构建。 #15366 (alexey-milovidov).
  • clang-tidy-10 改为使用 clang-tidy-11#14922alexey-milovidov)。
  • 默认使用 LLVM 的实验性 Pass 管理器。#15608 (Danila Kutenin)。
  • 不允许任何 C++ 翻译单元的构建耗时超过 10 分钟或占用内存超过 10 GB。此更改修复了 #14925#15060alexey-milovidov)。
  • 通过将测试运行与性能分析运行拆分,使性能测试更加稳定且更具代表性。 #15027 (alexey-milovidov).
  • 尝试让性能测试更加可靠。通过在进程运行时动态使用 madvise 将可执行内存重新映射为透明大页来实现 —— 这可以减少 iTLB 未命中次数,而这正是性能测试不稳定性的主要原因。#14685 (alexey-milovidov)。
  • 转换为 Python 3,关闭 #14886#15007Azat Khuzhin)。
  • 在功能测试中,如果服务器未能响应,则尽早使测试失败。此更改关闭了 #15262#15267alexey-milovidov)。
  • 支持在没有配置文件的情况下运行 AArch64 版本的 clickhouse-server。这方便了对 #15174 的处理。#15266alexey-milovidov)。
  • 改进 CI Docker 镜像:移除 ZooKeeper,使用单一脚本安装测试配置。 #15215 (alesapin).
  • 修复快速测试脚本中 CMake 选项传递的问题。修复了 #14711 中的错误。#15155alesapin)。
  • 添加了一个脚本,通过单个命令即可进行硬件基准测试。 #15115 (alexey-milovidov).
  • 将大型测试 test_dictionaries_all_layouts_and_sources 拆分为多个较小的测试。#15110 (Nikita Mikhaylov)。
  • 可能修复了在带有 AVX-512 的服务器上 base64 中的 MSan 报告问题。修复了 #14006#15030alexey-milovidov)。
  • 在所有集成测试 *.py 文件中对代码进行重新格式化和清理。 #14864 (Bharat Nallan).
  • 修复在 CI 中发现的 MaterializeMySQL 空事务不稳定的测试用例。#14854Winter Zhang)。
  • 尝试稍微加快构建速度。#14808 (alexey-milovidov)。
  • 通过移除未使用的头文件,略微提升构建速度。 #14714 (alexey-milovidov).
  • 修复 OSX 上的构建失败问题。#14761Winter Zhang)。
  • 如果在操作系统中找到 ccache,则在 CMake 中默认启用它。 #14575 (alesapin).
  • 在 ClickHouse 仓库中管理 CI 构建配置。#14547 (alesapin)。
  • 在 CMake 文件中: - 将部分选项描述移到了上方的注释中。 - 在 option 的默认值中,将 0 替换为 OFF,1 替换为 ON。 - 为这些选项补充了一些描述和指向文档的链接。 - 替换了 FUZZER 选项(已有另一个选项 ENABLE_FUZZING,它也启用相同的功能)。 - 移除了 ENABLE_GTEST_LIBRARY 选项,因为已经有 ENABLE_TESTS。 完整说明详见 PR: #14711Mike)。
  • 将二进制体积再缩小一些(调试版本约 50 MB)。#14555 (Artem Zuikov)。
  • 在 ConfigProcessor 中使用 std::filesystem::path 连接文件路径。#14558 (Bharat Nallan).
  • 修复在使用负大整数调用 bitShiftLeft() 时触发的调试断言问题。 #14697 (Artem Zuikov).

ClickHouse 发布 20.9

ClickHouse v20.9.7.11-stable 发布,2020-12-07

性能改进

  • 修复了在大量 MergeTree 表之上构建的 Merge 表的读取性能问题。修复 #7748#16988Anton Popov)。

Bug 修复

  • 在禁用 in_memory_parts_enable_wal 时,不再从 WAL 中恢复数据分片。#17802 (detailyang)。
  • 修复了在向 Distributed 表插入数据时因空间不足而导致的段错误问题。#17737 (tavplubix).
  • 修复了 ClickHouse 无法重新建立与 MySQL 服务器连接的问题。 #17681 (Alexander Kazakov).
  • 修复了在 Windows Subsystem for Linux 上运行 ClickHouse 时,在 Atomic 数据库中执行 RENAME 查询出现的 Function not implemented 错误。修复 #17661#17664tavplubix)。
  • 在交互模式下使用 clickhouse-client 执行多行查询时,单行注释会被错误地扩展到整个查询的末尾。该修复解决了 #13654#17565alexey-milovidov)。
  • 修复在极少数情况下服务器可能会停止接受连接请求的问题。 #17542 (alexey-milovidov).
  • 修复当对应的 mutation 在其他副本上被终止时导致 ALTER 查询挂起的问题。修复了 #16953#17499alesapin)。
  • 修复 ClickHouse 低估 mark 缓存大小的问题。当存在大量带有 mark 的小文件时,可能会出现该问题。#17496 (alesapin)。
  • 修复在启用设置 optimize_redundant_functions_in_order_by 时的 ORDER BY 行为。 #17471 (Anton Popov)。
  • 修复由于错误优化导致在 DISTINCT 之后可能出现的重复数据。修复了 #17294#17296li chengxiang)。#17439Nikolai Kochetov)。
  • 修复从带有 LowCardinality 类型的 JOIN 表读取数据时发生的崩溃,对应修复了 #17228#17397Nikolai Kochetov)。
  • 修复当子查询中存在常量列时 set 索引失效的问题。此修复对应 #17246#17249Amos Bird)。
  • 修复 ColumnConst 比较导致的崩溃问题。该修复解决了 #17088#17135Amos Bird)。
  • 修复了在执行 CREATE TABLE ... AS some_table 查询且 some_table 是通过 AS table_function() 创建时发生的崩溃问题,解决了 #16944#17072tavplubix)。
  • 修复 fuzzBits 函数中的缺陷,相关 issue:#16980#17051hexiaoting)。
  • 避免在执行过程中可能被取消的远程查询(例如带有 LIMIT 子句的查询)中出现不必要的网络错误。 #17006 (Azat Khuzhin).
  • TODO。 #16866 (tavplubix).
  • 通过 MySQL 协议对 INSERT 查询返回受影响的行数。此前 ClickHouse 一直返回 0,现已修复。修复 #16605#16715Winter Zhang)。

构建/测试/打包改进

  • 将内置时区数据更新到版本 2020d(同时将 cctz 更新到最新的 master)。#17204filimonov)。

ClickHouse 发布 v20.9.6.14-stable,2020-11-20

改进

  • 支持连接到需要 SNI 的 clickhouse-server 安全端点。当 clickhouse-server 部署在 TLS 代理之后时可以使用该功能。#16938filimonov)。
  • 条件聚合函数(例如:avgIfsumIfmaxIf)在没有匹配行且参数为可空类型时应返回 NULL#13964Winter Zhang)。

错误修复

  • 修复在非 leader 副本上的 ReplicatedMergeTree 表执行 ON CLUSTER 查询可能永远挂起的错误。#17089alesapin)。
  • 在发生错误时重新解析 format_avro_schema_registry_url 的 IP。#16985filimonov)。
  • 修复在执行 ALTER TABLE ... MODIFY COLUMN ... NewType 之后,当 SELECT 对正在修改的列包含 WHERE 表达式且表结构变更尚未完成时可能导致服务器崩溃的问题。#16968Amos Bird)。
  • 安装脚本应始终在配置文件夹中创建子目录。这仅与使用自定义配置的 Docker 构建相关。#16936filimonov)。
  • 修复在包含 ORDER BY 的查询中可能出现的 Illegal type of argument 错误。修复 #16580#16928Nikolai Kochetov)。
  • 如果没有数据写入 WriteBufferFromS3,则中止分段上传(multipart upload)。#16840Pavel Kovalenko)。
  • 修复在不带任何参数使用 any 时发生的崩溃。这针对 #16803,cc @azat。#16826Amos Bird)。
  • 修复在启用 transform_null_in 设置时,多列和元组上的 IN 运算符的行为。修复 #15310#16722Anton Popov)。
  • 修复在 max_threads>0ORDER BY 中存在表达式时,optimize_read_in_order / optimize_aggregation_in_order 的问题。#16637Azat Khuzhin)。
  • 修复 #16574#16231,解决在使用带 if 后缀的聚合函数时远程查询失败的问题。#16610Winter Zhang)。
  • 在出现异常时更快结束查询。如果发生异常,则取消在远程副本上的执行。#15578Azat Khuzhin)。

ClickHouse 发布 v20.9.5.5-stable,2020-11-13

Bug Fix

  • 修复在开启查询分析器且 ClickHouse 安装在使用 glibc 某个版本的操作系统上时出现的罕见静默崩溃问题,该版本的 glibc(据推测)在某些函数的异步展开表上存在损坏。修复了 #15301。修复了 #13098#16846alexey-milovidov)。
  • 现在在从输入解析 AVRO 数据时,会从类型中移除 LowCardinality。修复了 #16188#16521Mike)。
  • 修复在使用 MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL 引擎,并在 MySQL Slave 上启用 slave_parallel_worker 时元数据快速增长的问题,通过正确收缩 GTID 集来解决。修复了 #15951#16504TCeason)。
  • 修复 Distributed 表的 DROP TABLE 与 INSERT 存在竞争条件的问题。#16409Azat Khuzhin)。
  • 修复在复制队列中处理非常大的记录时的问题。如果表结构极其庞大(接近 1 MB),则在 ALTER 查询中可能会出现非常大的记录。修复了 #16307#16332alexey-milovidov)。
  • 修复一处不一致行为:当用于过滤的集合未被创建时,返回数据的部分结果可能会被丢弃。#16308Nikita Mikhaylov)。
  • 修复与 MySQL 数据库相关的 bug。当作为数据库引擎的 MySQL 服务器宕机时,一些查询会抛出异常,因为它们尝试从已停用的服务器获取表,而这并非必要。例如,查询 SELECT ... FROM system.parts 只应处理 MergeTree 表,完全不应访问 MySQL 数据库。#16032Kruglov Pavel)。

ClickHouse 发布 v20.9.4.76-stable(2020-10-29)

Bug Fix

  • 修复在函数 dictGet 中发生异常时出现的 double free 问题。如果字典在加载时发生错误,就有可能触发该问题。#16429 (Nikolai Kochetov)。
  • 修复在使用 totals/rollup/cube 修饰符并对 GROUP BY 键应用 min/max 函数时的 GROUP BY 行为。修复了 #16393#16397Anton Popov)。
  • 修复在 prefer_localhost_replica=0 且启用 internal_replication 时异步 Distributed INSERT 的问题。#16358 (Azat Khuzhin).
  • 修复了 TwoLevelStringHashTable 实现中一段严重错误的代码,可能会导致内存泄漏。我很惊讶这个 bug 居然一直没被发现…… #16264 (Amos Bird).
  • 修复了在不受限制约束的情况下可能发生内存过量分配的问题。关联问题:#14560。关联拉取请求:#16206alexey-milovidov)。
  • 修复在 ReplicatedVersionedCollapsingMergeTree 中执行 ALTER MODIFY ... ORDER BY 查询时出现的挂起问题。对应修复:#15980#16011alesapin)。
  • 修复 COLLATE 名称和字符集名称的解析,并为字符串类型支持 length = 0#16008 (Winter Zhang).
  • 允许在具有复杂键的字典中使用 direct 布局。 #16007 (Anton Popov).
  • 在空闲一段时间后发生复制错误时,防止副本挂起 5–10 分钟。 #15987 (filimonov).
  • 修复在向 MaterializedView 插入数据或从中查询数据的同时并发删除其目标表时出现的罕见段错误(适用于 Atomic 数据库引擎)。#15984 (tavplubix).
  • 修复设置配置文件解析中的歧义:CREATE USER ... SETTINGS profile readonly 现在被解释为使用名为 readonly 的配置文件,而不是名为 profile 且带有 readonly 约束的设置。此更改修复了 #15628#15982Vitaly Baranov)。
  • 修复在创建数据库失败时发生的崩溃。#15954 (Winter Zhang)。
  • 修复了在并发重命名表时(针对 Atomic 数据库引擎),DROP TABLE IF EXISTS 失败并报错 Table ... does not exist 的问题。修复了在对多个表并发执行某些 DDL 查询(如 DROP DATABASERENAME TABLE)时出现的罕见死锁问题。修复了在并发执行 DROP/DETACH TABLE 时,DROP/DETACH DATABASE 失败并报错 Table ... does not exist 的问题。#15934 (tavplubix)。
  • 修复了从 Distributed 表执行包含 WHEREPREWHEREGLOBAL IN 的查询时错误返回空结果的问题。修复了 #15792#15933Nikolai Kochetov)。
  • 修复 RBAC 中潜在的死锁问题。#15875 (Vitaly Baranov).
  • 修复在执行 ALTER MODIFY COLUMN 查询之后再执行 SELECT ... ORDER BY DESC 查询时会出现的异常 Block structure mismatch。此更改修复了 #15800#15852alesapin)。
  • 修复 MaterializeMySQL 中 select count() 结果不准确的问题。 #15767 (tavplubix)。
  • 修复了某些仅选择虚拟列的查询。此前可能会抛出 Not found column _nothing in block 异常。修复了 #12298#15756Anton Popov)。
  • 修正了 max_replicated_logs_to_keep 设置的默认值过低的问题,这可能会导致副本过于频繁丢失。通过选择最新的副本作为克隆源,改进了丢失副本的恢复过程。同时,对于丢失副本中的旧 part,不再删除,而是将其分离(detach)。#15701 (tavplubix).
  • 修复在从与目标表结构不同的 Buffer 表读取数据时发生的错误 Cannot add simple transform to empty Pipe。当目标表对查询返回空结果时,可能会出现此问题。修复了 #15529#15662Nikolai Kochetov)。
  • 修复了 S3 表函数中使用通配符的错误:从 URL 解析出的区域未应用到 S3 客户端配置中。#15646Vladimir Chebotarev)。
  • 在分离只读表时将 ReadonlyReplica 指标减一。修复了 #15598#15592sundyli)。
  • 当仅向 ReplicatedMergeTree 传递单个参数时抛出错误,而不是忽略该参数。#15516 (nvartolomei).

改进

  • 现在允许执行 ALTER ... ON CLUSTER 查询,而不受集群配置中 <internal_replication> 设置的影响。#16075 (alesapin)。
  • 在创建表时,会在 ReplicatedMergeTree 参数中展开 {database}{table}{uuid} 宏。#16160 (tavplubix)。

ClickHouse 发布 v20.9.3.45-stable (2020-10-09)

Bug 修复

  • 修复在向 MATERIALIZED VIEW 插入数据且 MV 的查询中包含 ARRAY JOIN 时可能出现的 Cannot find column 错误。 #15717 (Nikolai Kochetov).
  • 修复 AMQP-CPP 中的竞态条件。#15667 (alesapin)。
  • 修复查询计划中 ReadFromStorage 步骤的资源析构顺序。在极少数情况下,这可能会导致崩溃。可能与 #15610 相关。#15645Nikolai Kochetov)。
  • 修复了在 VALUESLIMITIN 运算符右侧使用 JSON* 函数的结果时出现的 Element ... is not a constant expression 错误。#15589 (tavplubix).
  • 避免出现错误消息 Could not calculate available disk space (statvfs), errno: 4, strerror: Interrupted system call。此更改修复了 #15541#15557 (alexey-milovidov)。
  • 大幅减少 AggregatingInOrderTransform/optimize_aggregation_in_order 的内存占用。#15543 (Azat Khuzhin).
  • 在执行 MOVEREPLACE PARTITION 后,变更可能会在等待某个不存在的数据分片时挂起;在极少数情况下,此问题也可能在执行 DETACHDROP PARTITION 后出现。该问题已修复。#15537 (tavplubix).
  • 修复一个 bug:在执行了使用相同模式的 LIKE 之后,ILIKE 运算符不再大小写不敏感(变为区分大小写)的问题。 #15536 (alesapin).
  • 修复在选择数据中不存在的列且其依赖的其他列也同样不存在时出现的 Missing columns 错误。修复了 #15530#15532alesapin)。
  • 修复 DDLWorker 中的事件订阅问题,该问题在极少数情况下可能导致 ON CLUSTER 查询挂起。问题引入于 #13450#15477alesapin)。
  • boundingRatio 聚合函数的第二个参数类型不正确时,能够正确报告错误。 #15407 (detailyang).
  • 修复在执行 SELECT toStartOfDay(today()) 等查询时,由于 time_zone 参数为空而报错导致查询失败的问题。#15319Bharat Nallan)。
  • 修复在重命名 MergeTree 表和后台清理期间出现的竞态条件。#15304 (alesapin)。
  • 修复在启用 system.logs 时,服务器启动过程中可能出现的罕见竞争条件。#15300 (alesapin)。
  • 修复 QueryLog 中的 MSan 报告。字段 memory_usage 可能会读取未初始化的内存。#15258 (alexey-milovidov).
  • 修复在使用 joinGet 配合 LowCardinality 类型时导致实例崩溃的问题。修复了 #15214#15220Amos Bird)。
  • 修复表引擎 Buffer 中的一个 Bug,该 Bug 会导致在执行 ALTER 查询后,无法向 Buffer 插入具有新结构的数据。修复了 #15117#15192alesapin)。
  • 调整 MySQL 列定义报文中的 decimals 字段长度。 #15152 (maqroll).
  • 修复了在 macOS 上通过 Docker 运行 clickhouse-server 时,在 Atomic 数据库中执行 DDL 查询会出现 Cannot rename ... errno: 22, strerror: Invalid argument 错误的问题。#15024tavplubix)。
  • 修复了当子查询包含 finalizeAggregation 函数时谓词下推不起作用的问题。修复 #14847#14937filimonov)。
  • 修复了一个问题:当配置文件需要通过 from_zk include 选项从 ZooKeeper 获取时,服务器在启动时与 ZooKeeper 通信可能会卡住。此修复对应 #14814#14843Alexander Kuzmenkov)。

改进

  • 现在可以通过 ALTER 语句更改 VersionedCollapsingMergeTree 的版本列类型。 #15442 (alesapin).

ClickHouse 发布版本 v20.9.2.20,2020-09-22

向后不兼容变更

  • 从早于 20.5 的版本升级时,如果执行滚动更新,并且集群同时包含 20.5 或更高版本以及低于 20.5 的版本,那么在重启旧版本的 ClickHouse 节点、并且在存在较新版本节点的情况下启动旧版本时,可能会导致 Part ... intersects previous part 错误。为防止出现此错误,应先在集群的所有节点上安装较新的 clickhouse-server 软件包,然后再执行重启(即当 clickhouse-server 被重启时,它将以新版本启动)。

新功能

  • 新增列转换器 EXCEPTREPLACEAPPLY,可应用于所选列列表(在 *COLUMNS(...) 之后)。例如,可以编写 SELECT * EXCEPT(URL) REPLACE(number + 1 AS number)。另一个示例:select * apply(length) apply(max) from wide_string_table,用于找出所有字符串列的最大长度。 #14233 (Amos Bird).
  • 新增聚合函数 rankCorr,用于计算秩相关系数。 #11769 (antikvist) #14411 (Nikita Mikhaylov).
  • 新增表函数 view,可将子查询转换为一个表对象。这有助于在不同位置传递查询。例如,它可以用于 remote/cluster 表函数中。 #12567 (Amos Bird).

Bug 修复

  • 修复在 ALTER UPDATE 变更中,当赋值表达式中包含 Nullable 列且使用常量值(例如 UPDATE x = 42)时,可能导致列中写入错误值或触发段错误的问题。修复了 #13634#14045#14646alesapin)。
  • 修复由于结果列的小数位数错误而导致的 Decimal 乘法结果错误。#14603Artem Zuikov)。
  • 修复了 Nullable 列排序顺序错误的问题。此更改修复了 #14344#14495Nikita Mikhaylov)。
  • 修复了在索引分析时,当主键类型为 FixedString 且与更短的字符串进行比较时出现的不一致比较行为。修复了问题 #14908#15033Amos Bird)。
  • 修复当表包含仅有单个 part 的分区时会导致合并任务分配错误的 bug。 #14444 (alesapin).
  • 如果使用精心构造的参数调用函数 bar,可能会发生缓冲区溢出。此更改修复了 #13926#15028alexey-milovidov)。
  • system.asynchronous_metrics 中发布每个逻辑核心的 CPU 频率。修复了 #14923#14924Alexander Kuzmenkov)。
  • 修复在使用 MaterializeMySQL 数据库引擎时出现的 .metadata.tmp File exists 错误。#14898Winter Zhang)。
  • 修复在某些情况下调用 extractAllGroups 函数可能触发 “Memory limit exceeded” 错误的问题。此修复解决了问题 #13383#14889alexey-milovidov)。
  • 修复在尝试对 StorageFile(fd) 执行 INSERT 时发生的 SIGSEGV。 #14887 (Azat Khuzhin).
  • 修复在执行 SELECT 查询时出现的一种罕见错误:当被查询的列带有依赖于另一列的 DEFAULT 表达式,而该另一列同样带有 DEFAULT,且既未出现在 SELECT 查询中,也不存在于磁盘上时,会触发该错误。部分修复 #14531#14845alesapin)。
  • 修复了对缩窄的有符号类型 Int -> Int 转换的单调性检测错误,这可能导致查询结果错误。该缺陷在 #14513 中被揭示。#14783Amos Bird)。
  • 修复在执行 ALTER ... MODIFY QUERY 时,物化视图元数据中缺失默认数据库名称的问题。#14664 (tavplubix).
  • 修复在涉及 LowCardinality 和 Nullable 类型时,函数 has 可能产生不正确结果的问题。 #14591 (Mike).
  • 在对使用 ReplicatedMergeTree 引擎的表执行 CREATE 查询期间,如遇 ZooKeeper 异常,将清理数据目录。#14563 (Bharat Nallan)。
  • 修复在带有组合器 -Resample 的函数中出现的罕见段错误问题,该问题可能在参数非常大导致溢出时被触发。#14562Anton Popov)。
  • topK 聚合函数中检查数组大小是否溢出。如果没有这个检查,用户可能会发送带有精心构造参数的查询,从而导致服务器崩溃。这解决了 #14452#14467alexey-milovidov)。
  • 将 SysVinit 的 restart/start/stop/reload 操作代理到 systemd(如果使用 systemd)。 #14460 (Azat Khuzhin).
  • PipelineExecutor 内部发生异常时,停止查询执行。这可以防止在极少数情况下出现查询挂起。#14334 #14402 (Nikolai Kochetov).
  • 修复了对使用 AS table_function 创建的表执行 ALTER 查询时发生的崩溃。对应问题 #14212 的修复: #14326alesapin)。
  • 修复在使用 REFRESH 命令的 ALTER LIVE VIEW 查询中出现的异常。LIVE VIEW 仍为实验性特性。#14320 (Bharat Nallan)。
  • 修复在对具有嵌套解释器的查询执行 EXPLAIN PIPELINE graph=1 时的 QueryPlan 生命周期。 #14315 (Azat Khuzhin).
  • 为 SSD 缓存复杂键外部字典增加元组大小检查。修复了 #13981#14313alexey-milovidov)。
  • 不允许在 ALIAS 列类型上使用 CODEC。修复了 #13911#14263Bharat Nallan)。
  • 修复在非全局级别执行 GRANT ALL 语句时的问题。#13987 (Vitaly Baranov)。
  • 修复在 lambda 中捕获 arrayJoin() 时的问题(此前会抛出带有逻辑错误信息的异常)。 #13792 (Azat Khuzhin).

实验性功能

  • 添加了 db-generator 工具,用于根据给定的 SELECT 查询随机生成数据库。当用户只提供了不完整的缺陷报告时,它可以帮助复现问题。#14442 (Nikita Mikhaylov) #10973 (ZeDRoman)。

改进

性能改进

  • 使用 LIMIT/LIMIT BY/ORDER BY 优化带有 GROUP BY sharding_key 的分布式查询(在 optimize_skip_unused_shardsoptimize_distributed_group_by_sharding_key 下)。#10373 (Azat Khuzhin).
  • 并行为多个 JOININ 创建集合。这可以对包含多个不同 IN subquery 表达式的查询带来轻微的性能提升。#14412 (Nikolai Kochetov).
  • 通过为每个消费者提供独立线程来提升 Kafka 引擎性能。为流式引擎(如 Kafka)提供单独的线程池。#13939 (fastio).

构建/测试/打包改进

  • 通过从 Functions 中移除调试信息,减小调试构建的二进制文件大小。这仅对 Yandex 中使用非常老旧链接器的一个内部项目是必需的。#14549 (alexey-milovidov).
  • 为使用 clang 11 进行构建做准备。#14455 (alexey-milovidov).
  • 修复 backport 脚本中的逻辑。在先前版本中,它会对任何 100% 红色的 label 触发,这很奇怪。#14433 (alexey-milovidov).
  • 集成测试使用默认基础配置。所有配置更改都通过 main_configs、user_configs 和 dictionaries 参数等显式指定。#13647 (Ilya Yatsishin).

ClickHouse 发行版 20.8

ClickHouse 发行版 v20.8.12.2-lts,2021-01-16

Bug 修复

  • 修复带一元函数和 Nullable 类型的 *If 组合器。 #18806 (Azat Khuzhin).
  • 限制从宽格式分片合并到紧凑格式分片。在垂直合并时会导致结果分片损坏。 #18381 (Anton Popov).

ClickHouse 发行版 v20.8.11.17-lts,2020-12-25

Bug 修复

  • 在合并期间禁用使用 AIO 的写入,因为这在极少数情况下可能会在合并时导致主键列数据损坏。 #18481 (alesapin).
  • 修复在对类型为 Nullable(String) 的参数执行 toType(...) 函数(toDatetoUInt32 等)时出现的 value is too short 错误。现在此类函数在解析错误时会返回 NULL,而不是抛出异常。修复了 #7673#18445 (tavplubix).
  • 修复在使用两级聚合时,带有 Distinct 组合器的聚合函数中可能发生的崩溃。修复了 #17682#18365 (Anton Popov).

ClickHouse 发行版 v20.8.10.13-lts,2020-12-24

Bug 修复

  • 当使用 logger.size 参数并将其设置为大于 2^32 的数值来配置服务器日志轮转时,日志不会被正确轮转。#17905Alexander Kuzmenkov)。
  • 修复了在 MergeTreeWriterSettings 中使用 min_compress_block_sizemax_compress_block_size 进行不正确初始化的问题。#17833 (flynn)。
  • 修复了 ClickHouse 在无法重新连接 MySQL 服务器时的问题。#17681 (Alexander Kazakov).
  • 修复了在其他副本上对应的 mutation 被 kill 时导致 ALTER 查询挂起的问题。此修复关闭了 #16953#17499alesapin)。
  • 修复了一个 ClickHouse 低估标记缓存大小的问题。当存在大量带有标记的小文件时,可能会触发该问题。 #17496 (alesapin).
  • 修复了在启用设置 optimize_redundant_functions_in_order_byORDER BY 的问题。 #17471 (Anton Popov)。
  • 修复了会导致崩溃的 ColumnConst 比较问题,解决了 #17088#17135Amos Bird)。
  • 修复了一个问题:在非主节点上的 ReplicatedMergeTree 表执行 ON CLUSTER 查询时,查询可能会一直挂起。 #17089 (alesapin).
  • 避免在执行过程中可能被取消的远程查询(例如包含 LIMIT 的查询)产生不必要的网络错误。#17006 (Azat Khuzhin)。
  • 若发生错误,则重新解析 format_avro_schema_registry_url 的 IP 地址。#16985 (filimonov)。
  • 修复了在执行 ALTER TABLE ... MODIFY COLUMN ... NewType 期间,如果有针对正在修改列且带有 WHERE 条件的 SELECT 查询,并且该 ALTER 尚未完成时可能导致服务器崩溃的问题。#16968 (Amos Bird)。
  • 安装脚本应始终在配置目录中创建子目录。此更改仅与使用自定义配置的 Docker 构建相关。#16936 (filimonov)。
  • 修复了在包含 ORDER BY 的查询中可能出现的 Illegal type of argument 错误。修复了 #16580#16928Nikolai Kochetov)。
  • 如果未向 WriteBufferFromS3 写入任何数据,则中止多部分(multipart)上传。 #16840 (Pavel Kovalenko).
  • 修复了在不带任何参数的情况下使用 any 时发生的崩溃。已修复 #16803#16826Amos Bird)。
  • 修复在启用 transform_null_in 设置时,多列和元组上使用 IN 运算符的问题。修复了 #15310#16722Anton Popov)。
  • 修复了在 max_threads &gt; 0 且 ORDER BY 中包含表达式时,optimize_read_in_order/optimize_aggregation_in_order 的行为不一致的问题。#16637 (Azat Khuzhin).
  • 修复了当查询包含 ARRAY JOIN 时,查询优化会产生错误的结果的问题。#17887 (sundyli).
  • 在发生异常时更快结束查询;同时在出现异常时取消在远程副本上的执行。 #15578 (Azat Khuzhin).

ClickHouse 发布 v20.8.6.6-lts,2020-11-13

Bug 修复

  • 修复在启用 query profiler 且 ClickHouse 安装在某些 glibc 版本(被认为在某些函数的异步展开表上存在缺陷)的操作系统上时出现的罕见静默崩溃问题。修复了 #15301。修复了 #13098#16846alexey-milovidov)。
  • 现在在从输入解析 AVRO 时,会从类型中移除 LowCardinality。修复了 #16188#16521Mike)。
  • 修复在使用 MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL 引擎并在 MySQL Slave 上启用 slave_parallel_worker 时元数据快速膨胀的问题,通过正确收缩 GTID 集合予以解决。修复了 #15951#16504TCeason)。
  • 修复 Distributed 表执行 DROP TABLE 时的问题(与 INSERT 存在竞争条件)。#16409Azat Khuzhin)。
  • 修复在复制队列中处理超大记录时的问题。如果表结构极其庞大(接近 1 MB),这些超大记录可能会出现在 ALTER 查询中。修复了 #16307#16332alexey-milovidov)。
  • 修复一种不一致的行为:由于用于过滤的集合未被创建,导致返回数据的一部分可能被丢弃。#16308Nikita Mikhaylov)。
  • 修复 MySQL 数据库相关的 bug。当作为数据库引擎使用的 MySQL 服务器宕机时,一些查询会抛出 Exception,因为它们尝试从已禁用的服务器获取表,而这是不必要的。比如,查询 SELECT ... FROM system.parts 只应处理 MergeTree 表,完全不应访问 MySQL 数据库。#16032Kruglov Pavel)。

ClickHouse 发布 v20.8.5.45-lts,2020-10-29

Bug 修复

  • 修复在函数 dictGet 出现异常时可能发生的 double free 问题。如果在加载字典时发生错误,就可能触发该问题。#16429 (Nikolai Kochetov).
  • 修复了在带有 totals/rollup/cube 修饰符的 GROUP BY 中,对分组键使用 min/max 函数时的行为。修复了 #16393#16397Anton Popov)。
  • 修复在 prefer&#95;localhost&#95;replica=0internal&#95;replication 条件下的异步 Distributed 表 INSERT#16358 (Azat Khuzhin).
  • 修复在使用字符串键进行 GROUP BY 时可能出现的内存泄漏问题,该问题是由 TwoLevelStringHashTable 实现中的错误引起的。#16264 (Amos Bird).
  • 修复了在忽略限制的情况下可能导致内存被过度分配的问题。此更改关闭了 #14560#16206 (alexey-milovidov)。
  • 修复了在 ReplicatedVersionedCollapsingMergeTree 中执行 ALTER MODIFY ... ORDER BY 查询时出现的挂起问题。修复了 #15980#16011alesapin)。
  • 修复排序规则名和字符集名解析器,并支持字符串类型的 length = 0#16008 (Winter Zhang).
  • 支持在包含复杂键的字典中使用直接布局。 #16007 (Anton Popov).
  • 在经过一段时间无活动后发生复制错误时,避免副本挂起长达 5–10 分钟。 #15987 (filimonov).
  • 修复在对 MaterializedView 执行插入或查询操作的同时并发删除其目标表时偶发出现的段错误(适用于 Atomic 数据库引擎)。 #15984 (tavplubix).
  • 修复了设置配置文件解析中的歧义:CREATE USER ... SETTINGS profile readonly 现在被理解为使用名为 readonly 的配置文件,而不是一个名为 profile 且带有 readonly 约束的设置。此更改修复了 #15628#15982Vitaly Baranov)。
  • 修复在创建数据库失败时出现的崩溃。#15954 (Winter Zhang)。
  • 修复了在并发重命名表时(针对 Atomic 数据库引擎),DROP TABLE IF EXISTSTable ... does not exist 错误而失败的问题。修复了在并发对多个表执行某些 DDL 查询(例如 DROP DATABASERENAME TABLE)时出现的罕见死锁问题。修复了在并发执行 DROP/DETACH TABLE 时,DROP/DETACH DATABASETable ... does not exist 而失败的问题。 #15934 (tavplubix).
  • 修复了针对 Distributed 表的查询在包含 WHEREPREWHEREGLOBAL IN 时返回不正确空结果的问题。修复 #15792#15933Nikolai Kochetov)。
  • 修复 RBAC 中潜在的死锁问题。 #15875 (Vitaly Baranov).
  • 修复在执行 ALTER MODIFY COLUMN 查询之后再执行 SELECT ... ORDER BY DESC 查询时可能出现的异常 Block structure mismatch。修复了 #15800#15852alesapin)。
  • 修复了部分仅选择虚拟列的查询。在此前的版本中,这类查询可能会抛出 Not found column _nothing in block 异常。修复了 #12298#15756Anton Popov)。
  • 修复在向 MATERIALIZED VIEW 插入数据时可能出现的 Cannot find column 错误,该错误可能在用于 MV 的查询包含 ARRAY JOIN 时发生。 #15717 (Nikolai Kochetov).
  • 修复了 max_replicated_logs_to_keep 设置默认值过低的问题,该问题可能导致副本过于频繁地丢失。通过选择最新的副本进行克隆,改进丢失副本的恢复流程。此外,不再从丢失副本中移除旧的 part,而是将其分离(detach)。#15701 (tavplubix)。
  • 修复在从与目标表结构不同的 Buffer 表读取时可能出现的错误 Cannot add simple transform to empty Pipe。当目标表对查询返回空结果时会触发该问题。修复了 #15529#15662Nikolai Kochetov)。
  • 修复了 S3 表函数中使用通配符(glob)时的错误:从 URL 中解析的区域未应用到 S3 客户端配置中。#15646 (Vladimir Chebotarev)。
  • 在分离只读表时将 ReadonlyReplica 指标减一。此更改修复了 #15598#15592sundyli)。
  • 当仅向 ReplicatedMergeTree 传递单个参数时,不再忽略该参数,而是抛出错误。#15516 (nvartolomei)。

改进

  • 现在无论集群配置中的 <internal_replication> 设置为何,都允许执行 ALTER ... ON CLUSTER 查询。 #16075 (alesapin).
  • 在创建表时,会在 ReplicatedMergeTree 参数中展开 {database}{table}{uuid} 宏。 #16159 (tavplubix).

ClickHouse 版本 v20.8.4.11-lts,2020-10-09

Bug 修复

  • 修复查询计划中 ReadFromStorage 步骤的资源销毁顺序。这在极少数情况下可能会导致崩溃。可能与 #15610 相关。#15645Nikolai Kochetov)。
  • 修复了在 VALUESLIMITIN 运算符右侧使用 JSON* 函数的结果时出现的 Element ... is not a constant expression 错误。#15589tavplubix)。
  • 防止出现错误消息 Could not calculate available disk space (statvfs), errno: 4, strerror: Interrupted system call。此更改修复了 #15541#15557alexey-milovidov)。
  • 显著降低 AggregatingInOrderTransform/optimize_aggregation_in_order 时的内存使用。#15543 (Azat Khuzhin).
  • 在执行 MOVEREPLACE PARTITION 之后,以及在少数情况下执行 DETACHDROP PARTITION 之后,变更(mutation)可能会因为等待某个不存在的数据分片而一直挂起。该问题已修复。 #15537 (tavplubix).
  • 修复一个错误:当执行了具有相同模式的 LIKE 之后,ILIKE 运算符不再保持大小写不敏感。 #15536 (alesapin).
  • 修复在选择数据中不存在的列,但这些列依赖的其他列也不存在于数据中时出现的 Missing columns 错误。修复了 #15530#15532alesapin)。
  • 修复 DDLWorker 中事件订阅的缺陷,该缺陷在极少数情况下可能导致 ON CLUSTER 查询挂起。此问题引入于 #13450#15477alesapin)。
  • boundingRatio 聚合函数的第二个参数类型错误时,正确报错。 #15407 (detailyang).
  • 修复在重命名 MergeTree 表和执行后台清理时的竞态条件。 #15304 (alesapin).
  • 修复在启用 system.logs 时服务器启动过程中的罕见竞态条件。#15300 (alesapin).
  • 修复 QueryLog 中的 MSan 报告。memory_usage 字段可能会使用未初始化的内存。#15258 (alexey-milovidov)。
  • 修复在使用 joinGet 结合 LowCardinality 类型时实例崩溃的问题。该问题对应的修复为 #15214#15220Amos Bird)。
  • 修复了表引擎 Buffer 中的一个错误,该错误会在执行 ALTER 查询后阻止向 Buffer 中插入具有新结构的数据。问题 #15117 已修复。#15192alesapin)。
  • 在 MySQL 列定义报文中调整小数位数字段大小。 #15152 (maqroll).
  • 我们已经在 StringFixedString 之间使用了补齐比较(https://github.com/ClickHouse/ClickHouse/blob/master/src/Functions/FunctionsComparison.h#L333)。此 PR 将相同的逻辑应用到字段比较中,从而修正了将 FixedString 作为主键时的行为。该修改修复了 #14908#15033Amos Bird)。
  • 如果使用特定构造的参数调用函数 bar,可能会发生缓冲区溢出。本次修复关闭了 #13926#15028alexey-milovidov)。
  • 修复了在 macOS 上通过 Docker 运行 clickhouse-server 时,在 Atomic 数据库中执行 DDL 查询会出现的 Cannot rename ... errno: 22, strerror: Invalid argument 错误。#15024tavplubix)。
  • 现在,number_of_free_entries_in_pool_to_execute_mutationnumber_of_free_entries_in_pool_to_lower_max_size_of_merge 可以设置为与 background_pool_size 相同的值。#14975alesapin)。
  • 修复了当子查询包含 finalizeAggregation 函数时谓词下推无法生效的问题。修复了 #14847#14937filimonov)。
  • system.asynchronous_metrics 中按逻辑 CPU 核心发布 CPU 频率。修复了 #14923#14924Alexander Kuzmenkov)。
  • 修复在使用 MaterializeMySQL 数据库引擎时出现的 .metadata.tmp File exists 错误。#14898Winter Zhang)。
  • 修复了一个问题:当需要从 ZooKeeper 获取配置文件(使用 from_zk include 选项)时,服务器在启动过程中与 ZooKeeper 通信可能会卡死。本次修复解决了 #14814#14843Alexander Kuzmenkov)。
  • 修复对缩窄的有符号类型 Int -> Int 转换的单调性检测错误。该问题可能导致查询结果不正确。该 bug 在 #14513 中被揭示。#14783Amos Bird)。
  • 修正了 Nullable 列的错误排序顺序,从而解决了 #14344#14495Nikita Mikhaylov)。

改进

  • 现在可以通过 ALTER 查询更改 VersionedCollapsingMergeTree 的版本列类型。#15442alesapin)。

ClickHouse 版本 v20.8.3.18-stable,2020-09-18

Bug 修复

  • 修复了在某些调用 extractAllGroups 函数时可能触发“Memory limit exceeded”错误的问题。修复了 #13383#14889alexey-milovidov)。
  • 修复尝试向 StorageFile(fd) 执行 INSERT 时出现的 SIGSEGV(段错误)。#14887Azat Khuzhin)。
  • 修复了 SELECT 查询中的一个罕见错误:当被查询的列具有 DEFAULT 表达式,且该表达式依赖于另一列,而该依赖列同样具有 DEFAULT、未出现在 select 查询中且磁盘上不存在时,会触发该错误。部分修复 #14531#14845alesapin)。
  • 修复在执行 ALTER ... MODIFY QUERY 时,物化视图元数据中缺失默认数据库名的问题。#14664tavplubix)。
  • 修复 ALTER UPDATE 变更在赋值表达式中使用 Nullable 列并赋常量值(如 UPDATE x = 42)时,会导致列中值不正确或发生段错误的问题。修复了 #13634#14045#14646alesapin)。
  • 修复了由于结果列的小数位数(scale)错误而导致 Decimal 乘法结果错误的问题。#14603Artem Zuikov)。
  • 添加了检查逻辑,因为调用 lc->isNullable()ls->getDictionaryPtr()->isNullable() 都不会返回正确的结果。#14591myrrc)。
  • 在 StorageReplicatedMergeTree 引擎的 CreateQuery 过程中发生 Zookeeper 异常时,清理数据目录。#14563Bharat Nallan)。
  • 修复带有组合器 -Resample 的函数中的罕见段错误,该问题可能在使用非常大的参数导致溢出的情况下出现。#14562Anton Popov)。

改进

ClickHouse 版本 v20.8.2.3-stable,2020-09-08

向后不兼容的变更

  • 现在,OPTIMIZE FINAL 查询不会为在创建 TTL 之前添加的 part 重新计算 TTL。请先使用一次 ALTER TABLE ... MATERIALIZE TTL 来为这些 part 计算 TTL,之后 OPTIMIZE FINAL 将会正确评估 TTL。对于 replicated 表,这种行为从未生效过。#14220 (alesapin)。
  • 扩展 parallel_distributed_insert_select 设置,增加一个向本地表执行 INSERT 的选项。该设置的类型从 Bool 改为 UInt64,因此不再支持 falsetrue 值。如果在服务器配置中使用了这些值,服务器将无法启动。请分别将它们替换为 01#14060 (Azat Khuzhin)。
  • 移除对 ODBCDriver 输入/输出格式的支持。该格式已被标记为弃用,曾用于与 ClickHouse ODBC 驱动进行通信,现在早已被 ODBCDriver2 格式取代。修复了 #13629#13847 (hexiaoting)。
  • 当从早于 20.5 的版本升级时,如果执行滚动更新,且集群中同时包含大于等于 20.5 和小于 20.5 的版本,那么如果带有旧版本的 ClickHouse 节点被重启,并且在存在新版本节点的情况下启动了旧版本,可能会导致 Part ... intersects previous part 错误。为防止此错误,请先在集群的所有节点上安装较新的 clickhouse-server 软件包,然后再进行重启(这样,当 clickhouse-server 被重启时,将会以新版本启动)。

新特性

  • 为与 config.xml 中指定设置相对应的列,新增将压缩编解码器指定为 Default 的功能。实现:#9074#14049alesapin)。
  • 在 Kafka 中支持使用 krb5cyrus-sasl 库进行 Kerberos 认证。#12771Ilya Golshtein)。
  • 新增函数 normalizeQuery,用于将字面量、字面量序列以及复杂别名替换为占位符。新增函数 normalizedQueryHash,为相似查询返回相同的 64 位哈希值。这有助于分析查询日志。修复了 #11271#13816alexey-milovidov)。
  • 新增 time_zones 表。#13880Bharat Nallan)。
  • 新增函数 defaultValueOfTypeName,返回给定类型的默认值。#13877hcz)。
  • 新增 countDigits(x) 函数,用于统计整数或 Decimal 列中的十进制数字个数。新增 isDecimalOverflow(d, [p]) 函数,用于检查 Decimal 列中的值是否超出其(或指定的)精度。#14151Artem Zuikov)。
  • 新增 quantileExactLowquantileExactHigh 的实现,并新增相应的别名 medianExactLowmedianExactHigh#13818Bharat Nallan)。
  • 新增 date_trunc 函数,用于将日期/时间值截断到指定的日期/时间部分。#13888Vladimir Golovchenko)。
  • 在主配置中新增可选的 <user_directories> 部分。#13425Vitaly Baranov)。
  • 新增 ALTER SAMPLE BY 语句,允许修改表的 sample 子句。#13280Amos Bird)。
  • 函数 position 现在支持可选参数 start_pos#13237vdimir)。

Bug 修复

  • 修复在交互模式下客户端中进度条覆盖可见数据的问题。此修复解决了 #12562#13369#13584 以及 #12964 的问题。#13691alexey-milovidov)。
  • 修复了在按多列排序时 LowCardinality 列排序顺序不正确的问题。此修复对应 #13958#14223Nikita Mikhaylov)。
  • topK 聚合函数中检查数组大小是否溢出。缺少此检查时,用户可以发送带有精心构造参数的查询,从而导致服务器崩溃。此更改解决了 #14452#14467alexey-milovidov)。
  • 修复了一个 bug:当表中存在仅包含单个 part 的分区时,可能会导致合并任务被错误分配。#14444 (alesapin)。
  • 如果在 PipelineExecutor 本身发生异常,则停止查询执行。这可以防止在极少数情况下出现查询挂起问题。是对 #14334 的延续。#14402 #14334 (Nikolai Kochetov)。
  • 修复了对使用 AS table_function 创建的表执行 ALTER 查询时发生的崩溃问题。修复了 #14212#14326alesapin)。
  • 修复在执行包含 REFRESH 命令的 ALTER LIVE VIEW 查询时发生的异常。Live View 是一项实验性功能。#14320Bharat Nallan)。
  • 修复在 EXPLAIN PIPELINE graph=1 中,带有嵌套 interpreter 的查询的 QueryPlan 生命周期管理问题。 #14315 (Azat Khuzhin).
  • 修复 clickhouse-odbc-bridge 在从某些外部数据源获取 schema 的过程中发生的段错误。此 PR 修复了 #13861#14267Vitaly Baranov)。
  • 修复了在标记包含搜索中由 #12277 引入的崩溃。 #14225Amos Bird)。
  • 修复带命名元组的表的创建。修复了 #13027#14143alexey-milovidov)。
  • 修复幅度最小的负十进制数的格式化问题。此更改修复了 #14111#14119Alexander Kuzmenkov)。
  • 修复 DistributedFilesToInsert 指标(在本不应被清零时却被清零)。 #14095 (Azat Khuzhin).
  • 修复在使用 const 二维数组作为多边形时的 pointInPolygon#14079 (Alexey Ilyukhov)。
  • 修复了 Poco::Exception: no space left on device 额外信息中挂载点错误的问题。 #14050 (tavplubix).
  • 修复在非全局级别执行 GRANT ALL 语句时的问题。#13987 (Vitaly Baranov)。
  • 修复解析器,使其在遇到带有 ENGINECREATE TABLE AS TABLE FUNCTION 语句时予以拒绝。#13940 (hcz)。
  • 在启用 optimize_duplicate_order_by_and_distinct 设置的情况下,修复了在包含 DISTINCT 关键字的 SELECT 查询以及带有 UNION ALL 的子查询中产生错误结果的问题。#13925 (Artem Zuikov).
  • 修复了重命名 Distributed 表时的潜在死锁。 #13922 (tavplubix).
  • 修复在按多列排序时 FixedString 列排序不正确的问题。修复了 #13182#13887Nikolai Kochetov)。
  • 修复在合并使用非默认参数的 topK/topKWeighted 时结果可能不精确的问题。#13817 (Azat Khuzhin).
  • 修复从具有 SET 类型索引的 MergeTree 表读取数据时,与 NULL 比较会失败的问题。此修复解决了 #13686#13793Amos Bird)。
  • 修复在 lambda 中捕获 arrayJoin 导致的 LOGICAL_ERROR。 #13792 (Azat Khuzhin).
  • 在函数 range 中添加步长溢出检查。#13790Azat Khuzhin)。
  • 修复了并发执行 DROP DATABASECREATE TABLE 时出现的 Directory not empty 错误。#13756 (alexey-milovidov).
  • h3KRing 函数添加了范围检查。修复了 #13633#13752alexey-milovidov)。
  • 修复了 DETACH 与后台合并之间的竞态条件,避免数据分片在分离后被“复活”。这是对 #8602 的延续,该改动当时并未真正修复问题,而是引入了一个测试,该测试在极少数情况下会开始失败,从而暴露出这一问题。#13746alexey-milovidov)。
  • 修复在 log_queries_min_type > QUERY_START 时日志中 Settings.Names/Values 的记录。 #13737 (Azat Khuzhin).
  • 修复在 verbose=1 时 /replicas_status 端点返回的状态码。#13722 (javi santana).
  • 修复 clickhouse-server.init 在检查用户和用户组时输出的错误提示信息。#13711 (ylchou).
  • 在启用 optimize_move_functions_out_of_any 设置时,不要将 any(arrayJoin()) 优化为 arrayJoin()。 #13681 (Azat Khuzhin)。
  • 修复在使用 StorageMerge 的 JOIN 且将 enable_optimize_predicate_expression 设置为 1 时发生的崩溃。#13679Artem Zuikov)。
  • 修复错误消息中关于 The value of 'number_of_free_entries_in_pool_to_lower_max_size_of_merge' setting 的拼写错误。 #13678 (alexey-milovidov).
  • 并发执行 ALTER ... REPLACE/MOVE PARTITION ... 查询可能会导致死锁。该问题已修复。 #13626 (tavplubix).
  • 修复了缓存字典在应从源返回已存在的值时,有时却返回默认值的问题。#13624Nikita Mikhaylov)。
  • 修复紧凑部件中二级索引损坏的问题。紧凑部件是实验性功能。#13538 (Anton Popov).
  • 修复了在必须在单个副本上执行的查询中出现的 ON CLUSTER 过早超时问题。修复了 #6704#7228#13361#11884#13450alesapin)。
  • 修复函数 netloc 中的错误代码,从而解决了 #13335#13446alexey-milovidov)。
  • 修复 StorageMemory 中可能存在的竞态条件。 #13416 (Nikolai Kochetov).
  • 修复 HTTP 协议中 TSV/CSVWithNames 格式缺失或多余标题行的问题。此更改修复了 #12504#13343Azat Khuzhin)。
  • 修复从 users.xml 解析行级策略时,在数据库或表名包含点号时的解析问题。解决了 #5779#12527#13199Vitaly Baranov)。
  • 修复在连接曾经中断后对 redis 字典的访问问题。此问题可能发生在使用 cachedirect 字典布局时。#13082 (Anton Popov).
  • 在使用 ClickHouseDictionarySource 查询远程表时,删除了错误的鉴权访问检查。#12756 (sundyli).
  • 在某些情况下正确区分子查询,以支持公共子表达式消除。 #8333#8367 (Amos Bird)。

改进

  • 不允许在 ALIAS 类型的列上使用 CODEC。修复了 #13911#14263Bharat Nallan)。
  • 在等待字典更新完成时,使用 query_wait_timeout_milliseconds 设置中指定的超时时间,而不是使用硬编码值。#14105 (Nikita Mikhaylov).
  • 添加设置 min_index_granularity_bytes,用于防止在无意间创建 index_granularity_bytes 设置值过低的表。#14139 (Bharat Nallan)。
  • 现在可以从使用不同 ZooKeeper 实例的集群中获取分区:ALTER TABLE table_name FETCH PARTITION partition_expr FROM 'zk-name:/path-in-zookeeper'。这对于将数据迁移到新集群非常有用。#14155Amos Bird)。
  • 如果 Memory 表是由大量非常小的块组成(这种情况不太可能),其性能会略有提升。构思者:Mark Papadakis。关闭了 #14043#14056alexey-milovidov)。
  • 条件聚合函数(例如:avgIfsumIfmaxIf)在没有匹配行且使用可为空参数时应返回 NULL#13964 (Winter Zhang).
  • 将 -Resample 组合器中的 limit 提高到 1M。 #13947 (Mikhail f. Shiryaev).
  • 修复了 AvroConfluent 格式中的一个错误,该错误在接收到异常小且格式损坏的消息时会导致 Kafka 表引擎停止处理消息。#13941 (Gervasio Varela)。
  • 修复长查询返回的错误类型不正确的问题。此前对于语法正确的长查询,有可能得到除 Max query size exceeded 之外的语法错误。#13928 (Nikolai Kochetov).
  • 改进了 TabSeparated 格式中空值的错误消息。#13906 (jiang tao).
  • 当数组元素类型为 Float32/Float64 时,函数 arrayCompact 将对 NaN 进行按位比较。在之前的版本中,当数组元素类型为 Float32/Float64 时,NaN 总是不相等,而在类型更复杂(例如 Nullable(Float64))时,NaN 又总是相等。此更改解决了 #13857#13868alexey-milovidov)。
  • 修复 lgamma 函数中的数据竞争。该数据竞争仅在 tsan 中被检测到,实际运行中未产生任何副作用。#13842 (Nikolai Kochetov)。
  • 在将数组作为字段进行操作时,为避免出现过慢查询,改为抛出异常。 #13753 (alexey-milovidov).
  • 为 Redis 字典源添加了 requirepass 身份验证支持。#13688 (Ivan Torgashov)。
  • 添加 MergeTree 预写日志(Write-Ahead-Log,WAL)转储工具。WAL 是实验性功能。#13640 (BohuTANG)。
  • 在早期版本中,lcm 函数在使用特别构造的参数调用时,可能会在调试构建中触发断言失败。此更改修复了 #13368#13510alexey-milovidov)。
  • 在更多情况下为 toDate/toDateTime 函数提供单调性信息。单调性信息用于索引分析(更复杂的查询也将能够使用索引)。现在对输入参数的“饱和”处理更加自然,从而带来更好的单调性。#13497Amos Bird)。
  • 为自定义设置支持复合标识符。自定义设置是 ClickHouse 代码库与其他代码库的集成接口(对 ClickHouse 本身没有益处)#13496Vitaly Baranov)。
  • 并行地将数据分片从 DiskLocal 移动到 DiskS3。DiskS3 是一项实验性功能。#13459Pavel Kovalenko)。
  • 默认开启混合粒度 part。 #13449 (alesapin).
  • 在 S3 重定向中正确校验远程主机(与安全相关)。#13404 (Vladimir Chebotarev).
  • QueryTimeMicrosecondsSelectQueryTimeMicrosecondsInsertQueryTimeMicroseconds 添加到 system.events。#13336ianton-ru)。
  • 修复 Decimal 的负指数过大时触发的调试断言问题。修复了 #13188#13228alexey-milovidov)。
  • 为 DiskS3 增加了缓存层(将标记和索引文件缓存到本地磁盘)。DiskS3 是一个实验性功能。 #13076 (Pavel Kovalenko).
  • 修复 readline,使其现在会将历史记录写入文件。#13600 (Amos Bird)。
  • 默认使用 Atomic 引擎创建 system 数据库(为在全局默认启用 Atomic 数据库引擎做准备)。 #13680 (tavplubix).

性能改进

  • 对使用 LowCardinality 的极短查询进行了轻微优化。#14129 (Anton Popov)。
  • 当设置了 max_insert_threads 时,为表引擎 NullMemoryDistributedBuffer 启用并行 INSERT。#14120 (alexey-milovidov)。
  • 在扫描数据片段时,一旦超过 max_rows_to_read 限制就立即失败。此更改的动机是:如果可以明确 max_rows_to_read 已经被超出,则跳过对所有已选数据片段的范围扫描。对于包含大量数据片段的查询,此改动的效果相当明显。#13677 (Roman Khavronenko)。
  • 略微提升按 UInt8/UInt16 键进行聚合时的性能。#13099 (alexey-milovidov)。
  • 针对 Array(LowCardinality(T)) 及右侧为常量参数的场景优化 has()indexOf()countEqual() 函数。#12550 (myrrc)。
  • 对于简单的 INSERT SELECT 查询,自动将 max_threads 设置为 1 或 max_insert_threads,并将 max_block_size 设置为 min_insert_block_size_rows。与 #5907 相关。#12195 (flynn)。

实验特性

  • ClickHouse 可以作为 MySQL 副本工作,由 MaterializeMySQL 数据库引擎实现。实现了 #4006#10851 (Winter Zhang)。
  • 新增 Int128Int256UInt256 类型及其相关函数。使用 Decimal256(精度可达 76 位数字)扩展 Decimal 类型。新类型受设置 allow_experimental_bigint_types 控制。目前性能极其缓慢且表现很差,实现也不完整。请不要使用该特性。#13097 (Artem Zuikov)。

构建/测试/打包改进

  • 添加了 clickhouse install 脚本,当你只有单个二进制文件时非常有用。 #13528 (alexey-milovidov).
  • 允许在无配置的情况下运行 clickhouse 可执行文件。 #13515 (alexey-milovidov).
  • 启用使用 codespell 对代码中的拼写错误进行检查。#13513 #13511 (alexey-milovidov).
  • 在 CI 中启用 ShellCheck 作为 .sh 测试的静态检查工具。此更改关闭了 #13168#13530 #13529alexey-milovidov)。
  • 添加一个 CMake 选项,使在配置失败时终止配置而不是自动重新配置,并默认启用该选项。#13687 (Konstantin)。
  • 通过 system.build_options 中的 TZDATA_VERSION 暴露嵌入式 tzdata 的版本。#13648 (filimonov).
  • 在构建过程中改进 system.time_zones 表的生成方式。修复 #14209#14215filimonov)。
  • 使用软件包仓库中最新的 tzdata 来构建 ClickHouse。 #13623 (alexey-milovidov).
  • 在 skip_list.json 中添加对 JS 风格注释的支持。#14159 (alesapin).
  • 确保没有拷贝粘贴而来的 GPL 代码。#13514alexey-milovidov)。
  • 将测试 Docker 镜像切换为以 test-base 为父镜像。 #14167 (Ilya Yatsishin).
  • 在使用 docker-compose 启动集群时添加重试逻辑,并增加 COMPOSE_HTTP_TIMEOUT。#14112 (vzakaznikov)。
  • 在压力测试中启用了 system.text_log,以发现更多 Bug。#13855 (Nikita Mikhaylov).
  • Testflows LDAP 模块:为 openldap4 补全缺失的证书和 dhparam.pem 文件。#13780 (vzakaznikov).
  • ZooKeeper 无法在 CI 环境中的单元测试里可靠工作。从一开始就使用真实的 ZooKeeper 做单元测试来验证与 ZooKeeper 的交互就是一个糟糕的主意(单元测试本就不应该用来验证复杂的分布式系统)。我们已经在为此使用集成测试,而且它们更适合这个目的。#13745 (alexey-milovidov)。
  • 添加了用于风格检查的 Docker 镜像。新增了风格检查,以确保所有 Docker 和 Docker Compose 文件都位于 docker 目录中。#13724 (Ilya Yatsishin).
  • 修复在 macOS 上构建 Cassandra 的问题。#13708Ilya Yatsishin)。
  • 修复共享构建中的链接错误。#13700 (Amos Bird)。
  • 更新 LDAP 用户身份验证套件,以验证其能否与 RBAC 正常配合工作。#13656 (vzakaznikov).
  • contrib/aws 移除了 -DENABLE_CURL_CLIENT#13628 (Vladimir Chebotarev).
  • 增加 ClickHouse 节点的健康检查超时时间,并在发现不健康容器时增加导出 docker-compose 日志的功能。 #13612 (vzakaznikov).
  • 确保 #10977 被标记为无效。#13539Amos Bird)。
  • 跳过来自 robot-clickhouse 的 PR。 #13489 (Nikita Mikhaylov).
  • 将 Dockerfile 从集成测试中移动到 docker/test 目录。docker-compose 文件位于 runner Docker 容器中。Docker 镜像在 CI 中构建,而不是在集成测试中构建。#13448 (Ilya Yatsishin)。

ClickHouse 发行版 20.7

ClickHouse 发行版 v20.7.2.30-stable,2020-08-31

向后不兼容的变更

  • 当函数 modulo(运算符 %)的参数中至少有一个为浮点数时,现在会直接在浮点数上计算除法的余数,而不是将两个参数都转换为整数。这使其行为与大多数 DBMS 保持一致。该行为同样适用于 Date 和 DateTime 数据类型。新增别名 mod。修复了 #7323#12585alexey-milovidov)。
  • 弃用将零值 Date/DateTime 特殊打印为 0000-00-000000-00-00 00:00:00 的行为。#12442alexey-milovidov)。
  • 函数 groupArrayMoving* 之前在分布式查询中无法工作,其结果是在不正确的数据类型下计算的(未提升到最大类型)。函数 groupArrayMovingAvg 返回的是整数,与 avg 函数不一致。此变更修复了 #12568#12622alexey-milovidov)。
  • 为 MergeTree 设置添加合理性检查。如果设置不正确,服务器将拒绝启动或创建表,并向用户输出详细说明。#13153alexey-milovidov)。
  • 防止用户将 background_pool_size 设置为小于 number_of_free_entries_in_pool_to_execute_mutationnumber_of_free_entries_in_pool_to_lower_max_size_of_merge 的值。在这些情况下,ALTER 操作将无法工作,或者合并的最大大小会受到严重限制。现在会抛出异常并解释应如何处理。修复了 #10897#12728alexey-milovidov)。
  • 从早于 20.5 的版本升级时,如果执行滚动更新,并且集群中同时存在大于等于 20.5 和小于 20.5 的版本,当旧版本的 ClickHouse 节点在存在新版本节点的情况下被重启并启动时,可能会导致 Part ... intersects previous part 错误。为避免该错误,应先在所有集群节点上安装新版 clickhouse-server 包,然后再执行重启(即在重启 clickhouse-server 时,应已使用新版本启动)。

新功能

  • 多边形字典类型,为在包含大量多边形(世界地图)的字典中按照坐标查找区域提供高效的“反向地理编码”查询。它使用经过精心优化的递归网格算法,以保持较低的 CPU 与内存占用。#9278 (achulkov2).
  • 为预配置用户添加了 LDAP 认证支持(“Simple Bind” 方法)。#11234 (Denis Glazachev).
  • 引入设置 alter_partition_verbose_result,用于在某些 ALTER TABLE ... PARTITION ... 查询(当前为 ATTACHFREEZE)中输出受影响数据分片的相关信息。修复 #8076#13017 (alesapin).
  • 添加了用于贝叶斯 A/B 测试的 bayesAB 函数。#12327 (achimbab).
  • 添加了 system.crash_log 表,用于收集致命错误的堆栈跟踪。此表在正常情况下应为空。#12316 (alexey-milovidov).
  • 添加了 HTTP 头 X-ClickHouse-DatabaseX-ClickHouse-Format,可用于设置默认数据库与输出格式。#12981 (hcz).
  • SimpleAggregateFunction 添加了对 minMapmaxMap 函数的支持。#12662 (Ildus Kurbangaliev).
  • 添加设置 allow_non_metadata_alters,用于限制执行会修改磁盘上数据的 ALTER 查询。该设置默认禁用。修复 #11547#12635 (alesapin).
  • 添加函数 formatRow,用于通过给定格式将任意表达式转换为字符串。在处理 SQL 输出时非常有用,并且与 columns 函数配合使用时非常灵活。#12574 (Amos Bird).
  • 添加 FROM_UNIXTIME 函数以兼容 MySQL,与 12149 相关。#12484 (flynn).
  • 当启用 allow_nullable_key 表设置时,允许在 MergeTree 表中使用 Nullable 类型作为键。修复 #5319#12433 (Amos Bird).
  • COS 集成。#12386 (fastio).
  • 添加 mapAddmapSubtract 函数,用于对按键映射的数值执行加/减运算。#11735 (Ildus Kurbangaliev).

Bug 修复

  • 修复对必须在单个副本上执行的查询使用 ON CLUSTER 时发生的过早超时问题。修复了 #6704#7228#13361#11884#13450alesapin)。
  • 修复了在标记包含搜索中由 #12277 引入的崩溃。#14225Amos Bird)。
  • 修复外部字典在使用缓存布局时的竞态条件,该问题可能导致服务器崩溃。 #12566 (alesapin).
  • 修复在交互模式下客户端进度条覆盖可见数据的问题。此更改修复了 #12562#13369#13584#12964#13691alexey-milovidov)。
  • 修复了在使用多列 ORDER BY 时,LowCardinality 列排序顺序不正确的问题。此更正修复了 #13958#14223Nikita Mikhaylov)。
  • 移除了硬编码的超时设置,该设置会错误地覆盖 cache-dictionary 的 query_wait_timeout_milliseconds 配置。#14105Nikita Mikhaylov)。
  • 修正了 Poco::Exception: no space left on device 的额外信息中错误的挂载点。#14050 (tavplubix).
  • 修复在启用 optimize_duplicate_order_by_and_distinct 设置时,当子查询也包含 DISTINCT 时,对带有 DISTINCT 关键字的 SELECT 查询进行错误优化的问题。 #13925 (Artem Zuikov).
  • 修复了在重命名 Distributed 表时可能发生的死锁问题。#13922tavplubix)。
  • 修复在使用多个列进行 ORDER BY 时 FixedString 列排序结果不正确的问题。解决了 #13182#13887Nikolai Kochetov)。
  • 修复在使用非默认参数时,topK/topKWeighted 聚合可能导致精度降低的问题。 #13817 (Azat Khuzhin).
  • 修复了从带有 SET 类型索引的 MergeTree 表中读取数据时,与 NULL 比较会失败的问题。此修复解决了 #13686#13793Amos Bird)。
  • 修复函数 range() 中的步长溢出问题。 #13790 (Azat Khuzhin).
  • 修复了在并发执行 DROP DATABASECREATE TABLE 时出现的 Directory not empty 错误。#13756 (alexey-milovidov).
  • h3KRing 函数添加范围检查。这修复了 #13633#13752alexey-milovidov)。
  • 修复 DETACH 与后台合并之间的竞争条件。数据块在分离之后可能会“复活”。这是对 #8602 的后续工作;#8602 并未修复该问题,而是引入了一个测试,该测试在极少数情况下会开始失败,从而暴露出该问题。#13746alexey-milovidov)。
  • 修复在 log_queries_min_type 大于 QUERY_START 时 Settings.Names/Values 日志记录的问题。 #13737 (Azat Khuzhin).
  • 修复 clickhouse-server.init 在检查用户和用户组时输出的不正确消息。#13711 (ylchou).
  • 在启用 optimize_move_functions_out_of_any 时,不要将 any(arrayJoin()) 优化为 arrayJoin()#13681 (Azat Khuzhin)。
  • 修复了并发执行 ALTER ... REPLACE/MOVE PARTITION ... 查询时可能发生的死锁问题。#13626 (tavplubix).
  • 修复了 cache-dictionary 在某些情况下返回默认值而不是从源返回的实际值的问题。#13624 (Nikita Mikhaylov)。
  • 修复紧凑部件中二级索引损坏的问题(紧凑部件是一个实验性特性)。 #13538 (Anton Popov).
  • 修复函数 netloc 中不正确的代码,从而解决了 #13335#13446alexey-milovidov)。
  • 修复 parseDateTimeBestEffort 函数在传入 Unix 时间戳参数时出现的错误。此修复解决了 #13362#13441alexey-milovidov)。
  • 修复比较包含 NULL 元素的元组时使用的无效返回类型。已修复 #12461#13420Nikolai Kochetov)。
  • 修复了在使用 SET optimize_move_functions_out_of_any = 1 且在 any() 内部使用别名时,由错误优化导致查询中出现 aggregate function any(x) is found inside another aggregate function in query 错误的问题。#13419 (Artem Zuikov).
  • 修复 StorageMemory 中可能存在的竞争条件。 #13416 (Nikolai Kochetov).
  • 修复在查询结果为零行时 ArrowParquet 格式出现空输出的问题。进行此更改是因为对于这些格式而言,空输出是无效的。#13399 (hcz)。
  • 修复在 ORDER BY 子句中带有常量列和主键前缀的 SELECT 查询。#13396 (Anton Popov).
  • 修复了 clickhouse-local 中的 PrettyCompactMonoBlock,以及使用 PrettyCompactMonoBlock 时的 extremes/totals 处理。修复了 #7746#13394Azat Khuzhin)。
  • 修复了 system.text_log 中的死锁。#12452 (alexey-milovidov)。这是 #12339 的一部分,并修复了 #12325 问题。#13386 (Nikita Mikhaylov)。
  • 修复了 File(TSVWithNames*)(表头被多次写入),修复了 clickhouse-local --format CSVWithNames*(缺少表头,在 #12197 之后行为异常),修复了零行情况下的 clickhouse-local --format CSVWithNames*(缺少表头)。#13343 (Azat Khuzhin)。
  • 修复函数 groupArrayMovingSum 在反序列化空状态时导致的段错误。修复了 #13339#13341alesapin)。
  • JOIN ON 子句中使用 arrayJoin() 函数时抛出错误。#13330Artem Zuikov)。
  • 修复在 join_use_nulls=1 时发生的 LEFT ASOF JOIN 崩溃问题。#13291 (Artem Zuikov)。
  • 修复在来自延迟副本的查询中可能出现的错误 Totals having transform was already added to pipeline#13290 (Nikolai Kochetov).
  • 如果用户向函数 h3ToChildren 传递了特定构造的参数,服务器可能会崩溃。此更改修复了 #13275#13277alexey-milovidov)。
  • 修复在包含 NaN 值的 Float 类型上调用 uniqExacttopKsumDistinct 等聚合函数时,可能导致性能较低以及结果略有偏差的问题。该问题还会在调试构建中触发断言。此更改修复了 #12491#13254alexey-milovidov)。
  • 修复当主键包含带有单调函数的表达式且查询中包含与类型不同的常量进行比较时,KeyCondition 中的断言错误。此修复解决了 #12465#13251alexey-milovidov)。
  • 对于在函数 roundUpToPowerOfTwoOrZero() 中最高有效位(MSB)已置位的数字,返回传入的数字本身。这样可以防止在数组大小溢出时出现潜在错误。#13234 (Azat Khuzhin)。
  • 修复当 if 函数的条件为可为空的 constexpr 且其值不是字面量 NULL 时的问题。修复了 #12463#13226alexey-milovidov)。
  • 在数组元素为 Nullable 类型且数组下标也为 Nullable 类型的情况下,修复 arrayElement 函数中的断言。此修复对应 #12172#13224alexey-milovidov)。
  • 修复带常量参数的 DateTime64 转换函数。 #13205 (Azat Khuzhin).
  • 修复从 users.xml 解析行策略时在数据库或表名包含点号时的解析问题。修复了 #5779#12527#13199Vitaly Baranov)。
  • 修复在连接被中断后对 redis 字典的访问问题。该问题可能发生在 cachedirect 字典布局中。#13082 (Anton Popov)。
  • 修复在使用函数时的错误索引分析。这可能导致在从 MergeTree 表读取时跳过某些数据分片。修复了 #13060。修复了 #12406#13081Anton Popov)。
  • 修复远程查询中的错误 Cannot convert column because it is constant but values of constants are different in source and result,该错误会在查询范围内是确定性的、但在不同查询之间并不确定的函数(例如 now(), now64(), randConstant())被使用时出现。修复了 #11327#13075Nikolai Kochetov)。
  • 修复了在使用 ORDER BY 元组且 LIMIT 值较小时可能发生的查询崩溃问题。修复了 #12623#13009Nikolai Kochetov)。
  • 修复包含 UNIONJOIN 的查询中出现 Block structure mismatch 错误的问题。修复 #12602#12989Nikolai Kochetov)。
  • 修正了 merge_with_ttl_timeout 逻辑,该逻辑在单个时间区间内有多个分区过期时表现不佳。(由 @excitoon 编写)#12982Alexander Kazakov)。
  • 修复通过 DDL 查询创建的范围哈希字典中列重复的问题。该修复解决了 #10605#12857alesapin)。
  • 修复在本地副本上执行 SELECT 查询时对线程数量的不必要限制。 #12840 (Nikolai Kochetov).
  • 修复一个罕见的错误:当在单个 mutation 中同时执行 ALTER DELETEALTER MODIFY COLUMN 查询时,会导致 count.txt 中记录的行数不正确,进而导致数据 part 中的数据错误。同时修复一个在同时执行 ALTER RENAME COLUMNALTER ADD COLUMN 时出现的小错误。#12760 (alesapin).
  • 使用 clickhouse 作为字典源查询远程表时会使用错误的凭据。#12756 (sundyli)。
  • 修复 CAST(Nullable(String), Enum())#12745 (Azat Khuzhin).
  • 修复在 IN 子句中将大型 tuple 解释为函数时的性能问题。指的是在某些情况下,用户出于某种莫名其妙的原因写成 WHERE x IN tuple(1, 2, ...),而不是 WHERE x IN (1, 2, ...)#12700 (Anton Popov).
  • 修复 input_format_parallel_parsing 的内存跟踪(通过将线程绑定到组)。 #12672 (Azat Khuzhin)。
  • 修复在存在 any(func(<lambda>)) 时错误的优化 optimize_move_functions_out_of_any=1#12664 (Artem Zuikov).
  • 修复了 #10572 中 Bloom 过滤器索引在使用常量表达式时的问题。#12659Winter Zhang)。
  • 修复当 broker 不可用(以及其他情况)时 StorageKafka 中的 SIGSEGV。 #12658 (Azat Khuzhin).
  • 为函数 if 添加对 Array(UUID) 参数的支持,从而修复 #11066#12648alexey-milovidov)。
  • CREATE USER IF NOT EXISTS 在用户已存在时不再抛出异常。修复了 #12507#12646Vitaly Baranov)。
  • 在某些意外情况下(例如对 UInt64 列执行减法操作时),ALTER ... UPDATE 可能会抛出异常 There is no supertype...。此更改修复了 #7306。此更改修复了 #4165#12633alexey-milovidov)。
  • 修复在使用外部排序的查询中可能出现的 Pipeline stuck 错误,对应问题 #12617、PR #12618Nikolai Kochetov)。
  • 修复 OPTIMIZE DEDUPLICATE 中的错误 Output of TreeExecutor is not sorted。修复 #11572#12613Nikolai Kochetov)。
  • 修复在查询优化期间可能导致函数 any 结果的别名丢失的问题。#12593 (Anton Popov).
  • 在执行 DROP TABLE 时删除 Distributed 表中的数据(来自异步 INSERT 的数据块)。 #12556 (Azat Khuzhin).
  • 现在,当文件 checksums.txt 缺失时,ClickHouse 将为数据片段重新计算校验和。该问题自 #9827 起出现。#12545alesapin)。
  • 修复在 enable_mixed_granularity_parts=1 时执行 ALTER DELETE 查询会导致旧分片损坏的问题。修复 #12536#12543alesapin)。
  • 修复了 LIVE VIEW 表中的竞态条件,该问题可能导致数据重复。LIVE VIEW 是一个实验性功能。#12519 (vzakaznikov)。
  • 修复 AggregateFunction(avg, …) 值的二进制格式的向后兼容问题。此修复对应 #12342#12486alexey-milovidov)。
  • 修复在使用字典进行 JOIN 时,当通过字典键的表达式进行连接时发生的崩溃:t JOIN dict ON expr(dict.id) = t.id。在这种情况下禁用字典 JOIN 优化。#12458Artem Zuikov)。
  • 修复在指定非常大的 LIMIT 或 OFFSET 时发生的溢出问题。本次更新修复了 #10470#11372#12427alexey-milovidov)。
  • kafka:修复在批处理中间出现错误消息时发生 SIGSEGV 的问题。 #12302 (Azat Khuzhin).

改进

  • 尽量减少在 ZooKeeper 中保存的日志数量。在存在离线副本且服务器 / 表 / 写入操作较多的情况下,避免 ZooKeeper 节点过度增长。#13100 (alexey-milovidov)。
  • 现在,如果在执行 ALTER 或 mutation 期间发生错误,将把异常转发给客户端。修复了 #11329#12666 (alesapin)。
  • QueryTimeMicrosecondsSelectQueryTimeMicrosecondsInsertQueryTimeMicroseconds 添加到 system.events,并在 system.metrics、processes、query_log 等中提供。#13028ianton-ru)。
  • 已在 system.events 中新增 SelectedRowsSelectedBytes,同时也将它们添加到了 system.metricsprocessesquery_log 等中。#12638 (ianton-ru)。
  • system.query_log 中添加了 current_database 信息。#12652Amos Bird)。
  • 允许使用 TabSeparatedRaw 作为输入格式。#12009 (hcz)。
  • 现在 joinGet 支持多键查询。#12418Amos Bird)。
  • 允许 *Map 聚合函数处理包含 NULL 的 Array。修复了 #13157#13225alexey-milovidov)。
  • 避免在解析 DateTime 值时发生溢出,以免在其时区中得到负的 Unix 时间戳(例如莫斯科时区的 1970-01-01 00:00:00)。改为将其饱和为 0。这修复了 #3470。这修复了 #4172#12443alexey-milovidov)。
  • AvroConfluent:跳过 Kafka 墓碑消息 - 支持跳过损坏的记录 #13203 (Andrew Onyshchuk)。
  • 修复长查询返回错误错误类型的问题。对于正确的查询,有可能得到非 Max query size exceeded 的语法错误。#13928 (Nikolai Kochetov)。
  • 修复 lgamma 函数中的数据竞争问题。该竞争仅在 tsan 中被检测到,实际上没有产生任何副作用。#13842 (Nikolai Kochetov)。
  • 修复 ATTACH/ALTER/CREATE QUOTA 语句中 “Week” 时间间隔的格式化问题。 #13417 (vladimir-golovchenko)。
  • 现在在处理紧凑分片时,遇到损坏分片也会进行报告。紧凑分片是一个实验性功能。#13282 (Amos Bird)。
  • 修复 geohashesInBox 中的断言。此更改修复了 #12554#13229alexey-milovidov)。
  • 修复 parseDateTimeBestEffort 中的断言问题。这修复了 #12649#13227alexey-milovidov)。
  • 在 Processors/PipelineExecutor 中做了一个小优化:在合适的时机跳出循环,因为这样更合理。 #13058 (Mark Papadakis)。
  • 支持在 TRUNCATE 语句中省略 TABLE 关键字。#12653 (Winter Zhang).
  • 修复 explain 查询格式在默认情况下被覆盖的问题。此修复解决了 #12541#12541BohuTANG)。
  • 允许以更标准的方式指定 JOIN 的种类和类型:可以使用 LEFT SEMI JOIN 而不是 SEMI LEFT JOIN。目前两种写法均有效。 #12520 (Artem Zuikov).
  • multiple_joins_rewriter_version 的默认值更改为 2。它启用了新的多表连接重写器,该重写器能够识别列名。#12469 (Artem Zuikov)。
  • 为针对 S3 存储的请求添加多项指标。 #12464 (ianton-ru).
  • 在使用 --secure 参数运行 clickhouse-benchmark 时,改为使用正确的默认安全端口,从而修复了 #11044#12440alexey-milovidov)。
  • LogTinyLogStripeLog 引擎中对插入错误执行回滚。在之前的版本中,插入错误会导致表状态不一致(这是文档中描述的行为,对这些表引擎来说是正常的)。此变更修复了 #12402#12426alexey-milovidov)。
  • Atomic 数据库引擎实现 RENAME DATABASERENAME DICTIONARY —— 添加隐式 {uuid} 宏,可在 ReplicatedMergeTree 的 ZooKeeper 路径中使用。该宏可与 CREATE ... ON CLUSTER ... 查询配合工作。将 show_table_uuid_in_table_create_query_if_not_nil 设置为 true 即可启用。—— 将 ReplicatedMergeTree 引擎参数改为可选,默认使用 /clickhouse/tables/{uuid}/{shard}/{replica}。修复并关闭 #12135。—— 若干小修复。—— 这些更改与先前版本的 Atomic 数据库引擎不向后兼容。之前创建的 Atomic 数据库必须手动转换为新格式。Atomic 数据库是一个实验性特性。#12343 (tavplubix)。
  • AWSAuthV4Signer 拆分为独立的 logger,并从日志消息中移除了多余的 AWSClient: AWSClient#12320 (Vladimir Chebotarev).
  • 改进磁盘访问存储时的异常信息。 #12625 (alesapin).
  • 针对函数 in 在参数个数不合法时提供了更好的异常信息。#12529 (Anton Popov)。
  • 修复与自适应粒度相关的错误消息。 #12624 (alesapin).
  • 修复在 FORMAT 之后解析 SETTINGS 的问题。 #12480 (Azat Khuzhin).
  • 如果 MergeTree 表未包含 ORDER BY 或 PARTITION BY,则可以请求执行 ALTER 以 CLEAR 所有列,但 ALTER 会挂起。已修复 #7941#12382alexey-milovidov)。
  • 避免在每次查询后从历史文件重新加载补全历史(以避免历史记录与其他客户端会话发生重叠)。 #13086 (Azat Khuzhin).

性能改进

  • 某些操作的内存使用量最多可降低一半。#12424 (alexey-milovidov)。
  • 为匹配精确主键范围的查询优化主键查找。#12277 (Ivan Babrou)。
  • 对使用 LowCardinality 的非常短查询做了轻微优化。#14129 (Anton Popov)。
  • 略微提升按 UInt8/UInt16 键聚合时的性能。#13091#13055 (alexey-milovidov)。
  • 在查询计划中(包括子查询内部)下推 LIMIT 步骤。#13016 (Nikolai Kochetov)。
  • 将各个 part 上的主键查找和跳过索引阶段并行化,如 #11564 中所述。#12589 (Ivan Babrou)。
  • set optimize_if_transform_strings_to_enum = 1 时,将函数 "if" 和 "transform" 的 String 类型参数转换为枚举类型。#12515 (Artem Zuikov)。
  • set optimize_monotonous_functions_in_order_by=1 时,在 ORDER BY 中将单调函数替换为其参数。#12467 (Artem Zuikov)。
  • 新增一种 ORDER BY 优化:当 set optimize_redundant_functions_in_order_by = 1 时,将 ORDER BY x, f(x) 重写为 ORDER BY x#12404 (Artem Zuikov)。
  • 当子查询包含 WITH 子句时,允许谓词下推。这修复了 #12293#12663 (Winter Zhang)。
  • 提升从 compact part 读取时的性能。compact part 是一个实验性特性。#12492 (Anton Popov)。
  • 尝试在 DiskS3 中实现流式优化。DiskS3 是一个实验性特性。#12434 (Vladimir Chebotarev)。

构建/测试/打包改进

  • 使用 shellcheck 对 sh 测试脚本进行静态检查(lint)。 #13200 #13207 (alexey-milovidov).
  • 在 GitHub 钩子中添加一个用于为 pull request 设置标签的脚本。#13183alesapin)。
  • 移除部分递归子模块。参见 #13378#13379alexey-milovidov)。
  • 确保所有子模块都指向正确的 URL。是对 #13379 的延续。解决了 #13378#13397alexey-milovidov)。
  • 添加了对用户自定义设置的支持,这些设置可以在查询中访问。当 ClickHouse 引擎被用作其他系统的组件时,需要这一功能。#13013 (Vitaly Baranov).
  • 在 TestFlows 中增加了对 INSERT 权限 RBAC 功能的测试。扩展了参与 SELECT 测试的表范围。新增了与新的表引擎测试相匹配的 Requirements。#13340 (MyroTk)。
  • 修复在压力测试中服务器重启时出现的超时错误。 #13321 (alesapin).
  • 现在 fast test 在等待服务器时会进行重试。#13284 (alesapin)。
  • 函数 materialize()(用于 ClickHouse 测试的函数)在处理 NULL 时将按预期工作——会将其转换为非常量列。#13212 (alexey-milovidov)。
  • 修复在 AArch64 平台上构建 libunwind 时出现的问题。该修复解决了 #13204#13208alexey-milovidov)。
  • 在 zkutil gtest 中增加更多重试以减少测试不稳定性。#13165 (alexey-milovidov).
  • 对 RBAC TestFlows 进行了些小的修复。#13152 (vzakaznikov)。
  • 修复 00960_live_view_watch_events_live.py 测试。#13108vzakaznikov)。
  • 改进文档部署脚本中的缓存清理。#13107 (alesapin)。
  • 将一些孤立的测试重写为 gtest 测试。从测试中移除了无用的头文件。#13073 (Nikita Mikhaylov).
  • 在 TestFlows 中,针对 SELECT 权限的 RBAC 功能添加了测试。#13061Ritaank Tiwari)。
  • 在 fast test 检查阶段重新运行了一些测试。 #12992 (alesapin).
  • 修复 “rdkafka” 库中的 MSan 错误。此更改关闭了 #12990。将 rdkafka 更新到 1.5 版(master 分支)。#12991alexey-milovidov)。
  • 修复在启用 AVX-512 的服务器上运行测试时 base64 中出现的 UBSan 报告。此更改修复了 #12318。作者:@qoega。 #12441alexey-milovidov)。
  • 修复 HDFS 库中的 UBSan 报告问题。此更改关闭了 #12330#12453alexey-milovidov)。
  • 检查是否可以将旧版本的备份恢复到新版本。此更改关闭了 #8979#12959 (alesapin)。
  • 不要在集成测试中构建 helper_container 镜像。应在 CI 中构建 Docker 容器,并在集成测试中使用预先构建好的 helper_container。#12953 (Ilya Yatsishin).
  • 为涉及主键列的 ALTER TABLE CLEAR COLUMN 查询添加测试。#12951alesapin)。
  • 提高了 testflows 测试的超时时间。 #12949 (vzakaznikov).
  • 修复在 Mac OS X 下的测试构建。此更改关闭了 #12767#12772alexey-milovidov)。
  • Connector-ODBC 已更新为 mysql-connector-odbc-8.0.21。#12739 (Ilya Yatsishin)
  • 在 TestFlows 中添加 RBAC 语法测试。#12642 (vzakaznikov)。
  • 改进 TestKeeper 的性能,从而加快大量使用 Replicated 表的测试。#12505 (alexey-milovidov)。
  • 现在我们会检查在运行压力测试之后,服务器是否仍然能够启动。此更改修复了 #12473#12496alesapin)。
  • 将 fmtlib 更新到 master(7.0.1)。#12446alexey-milovidov)。
  • 添加用于快速测试的 Docker 镜像。#12294 (alesapin).
  • 重新设计集成测试的配置路径。#12285 (Ilya Yatsishin)。
  • 添加编译器选项,用于限制栈帧大小,避免过大。这将有助于在栈空间较小的 fiber 中运行代码。#11524 (alexey-milovidov)。
  • 更新 .gitignore 文件。 #13447 (vladimir-golovchenko).

ClickHouse 20.6 版本

ClickHouse v20.6.3.28-stable 版本

向后不兼容变更

  • 从早于 20.5 的版本升级时,如果执行滚动更新,并且集群中同时存在 20.5 及以上版本和 20.5 以下版本的节点,在这种情况下如果重启旧版本的 ClickHouse 节点,并且旧版本在存在新版本的情况下被启动,可能会导致 Part ... intersects previous part 错误。为避免该错误,先在所有集群节点上安装新版的 clickhouse-server 软件包,然后再进行重启(也就是说,当 clickhouse-server 被重启时,它将以新版本启动)。

新功能

Bug 修复

  • 通过使用 SET optimize_move_functions_out_of_any = 1 并在 any() 中使用别名,修复了查询中出现的 aggregate function any(x) is found inside another aggregate function in query 错误。#13419Artem Zuikov)。
  • 修复了 clickhouse-local 中的 PrettyCompactMonoBlock,以及其在 extremes/totals 上的问题。此更改修复了 #7746#13394Azat Khuzhin)。
  • 修复了在从延迟副本执行查询时可能出现的错误 Totals having transform was already added to pipeline#13290 (Nikolai Kochetov).
  • 如果用户向函数 h3ToChildren 传递精心构造的参数,服务器可能会崩溃。该修复解决了问题 #13275#13277alexey-milovidov)。
  • 修复了在包含 NaN 值的 Float 类型上调用 uniqExacttopKsumDistinct 等聚合函数时可能出现的性能较低和结果略有不准确的问题。在调试构建中,这还会触发断言。本次修复解决了 #12491#13254alexey-milovidov)。
  • 修复了当 if 函数的条件是可空的 constexpr 且该条件不是字面量 NULL 时的问题。修复了 #12463#13226alexey-milovidov)。
  • 修复了当数组元素为 Nullable 且数组下标也为 Nullable 时,arrayElement 函数中的断言。此更改修复了 #12172#13224alexey-milovidov)。
  • 修复了带常量参数的 DateTime64 转换函数。 #13205 (Azat Khuzhin).
  • 修复了涉及函数的索引分析错误。在从 MergeTree 表中读取数据时,这可能会导致错误地裁剪数据分片。修复了 #13060。修复了 #12406#13081Anton Popov)。
  • 修复了在远程查询中使用在单次查询范围内是确定性的、但在不同查询之间并非确定性的函数(例如 now(), now64(), randConstant())时出现的错误:Cannot convert column because it is constant but values of constants are different in source and result。修复了 #11327#13075 (Nikolai Kochetov)。
  • 修复了在从本地副本执行 SELECT 查询时对线程数量施加的不必要限制。#12840 (Nikolai Kochetov)。
  • 修复了一个罕见 bug:当将 ALTER DELETEALTER MODIFY COLUMN 查询作为单个 mutation 同时执行时,会导致 count.txt 中的行数不正确,从而导致数据片段(part)中的数据错误。同时还修复了在同时执行 ALTER RENAME COLUMNALTER ADD COLUMN 时出现的一个小 bug。#12760 (alesapin)。
  • 修复 CAST(Nullable(String), Enum())#12745 (Azat Khuzhin).
  • 修复了在处理大型 tuple 时的性能问题,这些 tuple 在 IN 子句中会被解释为函数。也即用户出于某些晦涩原因,将 WHERE x IN (1, 2, ...) 写成 WHERE x IN tuple(1, 2, ...) 的情况。#12700Anton Popov)。
  • 通过将线程附加到线程组,修正了 input_format_parallel_parsing 的内存跟踪。#12672 (Azat Khuzhin).
  • 修复了在 const 表达式下的 Bloom 过滤器索引问题。修复了 #10572#12659Winter Zhang)。
  • 修复了当 broker 不可用(及其他情况)时 StorageKafka 中发生的 SIGSEGV 错误。#12658 (Azat Khuzhin).
  • if 函数增加了对 Array(UUID) 参数的支持。此更改修复了 #11066#12648alexey-milovidov)。
  • CREATE USER IF NOT EXISTS 现在在用户已存在时不会抛出异常。此更改修复了 #12507#12646Vitaly Baranov)。
  • 改进磁盘访问存储中的异常信息。#12625 (alesapin)。
  • 函数 groupArrayMoving* 在分布式查询中无法正常工作。其结果是使用了错误的数据类型计算的(没有提升到最大的类型)。函数 groupArrayMovingAvg 返回的是整数,与 avg 函数的结果不一致。本次修改修复了 #12568#12622 (alexey-milovidov)。
  • 修复了函数 any 缺少别名的问题。 #12593 (Anton Popov).
  • 修复了采用缓存布局的 external dictionaries 中的竞态条件,该问题可能导致服务器崩溃。#12566 (alesapin)。
  • 在执行 DROP TABLE 时删除 Distributed 表的数据(来自异步 INSERT 的数据块)。 #12556 (Azat Khuzhin).
  • 修复了在 enable_mixed_granularity_parts=1 时执行 ALTER DELETE 查询会导致旧 part 损坏的 bug。修复了 #12536#12543alesapin)。
  • 改进了函数 in 在参数个数不合法时抛出的异常信息。#12529 (Anton Popov).
  • 修复实时视图表中的竞争条件,该问题可能导致数据重复。#12519vzakaznikov)。
  • 修复了从 compact parts 读取时的性能问题。 #12492 (Anton Popov).
  • 修复了 AggregateFunction(avg, ...) 值的二进制格式的向后兼容问题。此更改修复了 #12342#12486alexey-milovidov)。
  • 修复 FORMAT 之后解析 SETTINGS 的问题。 #12480 (Azat Khuzhin).
  • 修复了在启用 text_log 时可能出现的死锁。 #12452 (alexey-milovidov)。
  • 修复了在指定非常大的 LIMITOFFSET 时可能发生的溢出问题。此更改修复了 #10470。此更改修复了 #11372#12427alexey-milovidov)。
  • 修复了在使用 StorageMerge 时可能出现的段错误。此更改修复了 #12054#12401tavplubix)。
  • 回退了在 #11079 中引入的变更,以解决 #12098 问题。#12397Mike)。
  • 对 Bloom filter 索引参数增加了额外检查。修复了 #11408#12388alexey-milovidov)。
  • 在对已建立索引的表的 WHERE 条件中使用负数或浮点常量时,避免抛出异常。修复了 #11905#12384alexey-milovidov)。
  • 即使存在依赖的 DEFAULT 表达式,现在也允许对列执行 CLEAR 操作。修复了 #12333#12378alexey-milovidov)。
  • 修复在使用 TOTALS/ROLLUP/CUBE 时,带有 -StateNullable 参数的聚合函数的问题。修复了 #12163 中的问题。#12376alexey-milovidov)。
  • 修正了在不允许使用 RENAME 时,ALTER RENAME COLUMN 查询的错误信息和退出码。修复了 #12301#12303#12335alesapin)。
  • 修复 ReplicatedMergeTreeQueue 中一个极其罕见的竞态条件。#12315 (alexey-milovidov)。
  • 在对非定长类型使用编解码器 DeltaDoubleDelta 时,本应返回错误码为 BAD_ARGUMENTS 的异常,却返回了错误码为 LOGICAL_ERROR 的异常(我们保证不会发生错误码为 LOGICAL_ERROR 的异常)。此更改修复了 #12110#12308alexey-milovidov)。
  • 修复了 WITH FILL 修饰符中列顺序处理不正确的问题。此前未能遵循 ORDER BY 子句中列的顺序。#12306 (Anton Popov).
  • 当存在按虚拟列(例如 Merge 表中的 _table)或按系统表中的索引列(例如在查询 system.tables 时按数据库名过滤)来过滤数据的表达式,并且该表达式返回 Nullable 类型时,避免抛出 “bad cast” 异常。修复了 #12166#12305alexey-milovidov)。
  • 修复了在重命名 TTL 表达式所依赖的列后,TTL 行为异常的问题。 #12304 (Anton Popov).
  • 修复了在 Kafka 引擎中,当批次中部出现错误消息时可能触发的 SIGSEGV 问题。#12302 (Azat Khuzhin).
  • 修复了在更新 DNS 缓存时某些线程可能随机短暂挂起数秒的问题。#12296 (tavplubix)。
  • 修正了设置名称中的拼写错误。 #12292 (alexey-milovidov).
  • TrieDictionary 加载失败时显示错误。#12290 (Vitaly Baranov)。
  • 函数 arrayFill 在处理空数组时行为不正确,可能导致崩溃。此更改修复了 #12263#12279alexey-milovidov)。
  • LowCardinality 类型实现到公共类型的转换。从而可以对包含 LowCardinality 列与其他列的表执行 UNION ALL 操作。修复了 #8212。修复了 #4342#12275alexey-milovidov)。
  • 修复了在请求 S3 存储时达到重定向上限时的处理逻辑。#12256 (ianton-ru)。
  • 修复了在多次连续插入时,StorageFile 中某些特殊类型的头部会被重复写入的行为。该修复解决了 #6155#12197Nikita Mikhaylov)。
  • 修复了在 UInt8 值不为 0 或 1 时的逻辑函数行为。#12196 (Alexander Kazakov).
  • 将 max_memory_usage* 的限制上限定为不超过进程的常驻内存。 #12182 (Azat Khuzhin).
  • 修复在消除 GROUP BY 中的单射函数时对 dictGet 参数的检查。#12179 (Azat Khuzhin).
  • 修复了 SummingMergeTree 引擎在对分区键列求和时的行为。现在如果显式指定的求和列与分区键列有交集,则会抛出异常。此更改修复了 #7867#12173Nikita Mikhaylov)。
  • 如果 ODBC 连接不支持 schema,则不要将字典源的表名拆分成 schema 和表名两个部分。 #12165 (Vitaly Baranov)。
  • 修复了 ALTER DELETE 中的逻辑错误,该错误会在条件求值为 NULL 时误删记录。修复了 #9088。关闭了 #12106#12153alexey-milovidov)。
  • 修复了在存在别名时将查询转换后发送到外部 DBMS(如 MySQL、ODBC)的问题。此更改修复了 #12032#12151alexey-milovidov)。
  • 修复了冗余 ORDER BY 优化中的有问题代码。该缺陷最初在 #10067 中被引入。#12148alexey-milovidov)。
  • 修复了整数除法中的潜在溢出问题,解决了 #12119#12140alexey-milovidov)。
  • 修复了 greatCircleDistancegeoDistance 中可能出现的无限循环问题。此更改解决了 #12117#12137alexey-milovidov)。
  • 规范化对 “pid” 文件的处理。在之前的版本中,如果服务器在未正常关闭的情况下被强制终止,并且存在另一个进程的 pid 与之前运行的服务器相同,则服务器可能会拒绝再次启动。此外,在服务器启动失败时,即使此时还有另一个服务器正在运行,pid 文件也可能被删除。此更改修复了 #3501#12133alexey-milovidov)。
  • 修复了一个导致 ZooKeepeer 中 ReplicatedVersionedCollapsingMergeTree 表元数据不正确的 bug。修复了 #12093#12121alesapin)。
  • 避免在带有 JOIN 或子查询且附加到系统日志(system.query_log、metric_log 等)或附加到底层 engine=Buffer 表的物化视图中出现 “There is no query” 异常。#12120 (filimonov).
  • 修复了使用 ENGINE=Dictionary 且依赖字典的表的依赖处理逻辑。此修复解决了 #10994#10397#12116Vitaly Baranov)。
  • Parquet 格式现已能够正确处理 LowCardinalityLowCardinality(Nullable) 类型。修复了 #12086#8406#12108Nikolai Kochetov)。
  • 修复了由于总线程数限制设置错误而导致带有 UNION 的 SELECT 查询性能问题。修复了 #12030#12103Nikolai Kochetov)。
  • 修复了在使用 -StateResample 组合器时出现的段错误。 #12092 (Anton Popov).
  • 修复了在 system.quey_log 中针对 SELECT 查询时 result_rowsresult_bytes 指标为空的问题,解决了 #11595#12089Nikolai Kochetov)。
  • 修复了在从 VIEW 执行 SELECT 查询时对线程数量的多余限制。修复了 #11937#12085Nikolai Kochetov)。
  • 修复了在执行 DROP TABLE 时 StorageKafka 发生的 SIGSEGV。 #12075 (Azat Khuzhin).
  • 修复了在为 PREWHERE 使用错误类型时可能发生的崩溃,并修复了 #12053#12060#12060Nikolai Kochetov)。
  • 修复了在高阶函数中使用 Tuple(LowCardinality) 参数时出现的 Cannot capture column 错误。对应修复见 #9766#12055Nikolai Kochetov)。
  • 修复了在检查约束时未判断其是否为常量表达式的问题。该修复解决了 #11360#12042alexey-milovidov)。
  • 修复了在调用函数 if 且其参数为不同长度的 FixedString 类型时可能产生错误结果或崩溃的问题。此更改修复了 #11362#12021alexey-milovidov)。

改进

  • 允许以更加标准的方式设置 JOIN 的种类和类型:使用 LEFT SEMI JOIN 而不是 SEMI LEFT JOIN。目前两种写法都正确。#12520Artem Zuikov)。
  • 为 Buffer 引擎添加了 lifetime_rows/lifetime_bytes#12421Azat Khuzhin)。
  • 将详细的异常信息写回客户端,而不是始终返回 MySQL server has gone away#12383BohuTANG)。
  • 允许更改用于打印表格边框的字符集。当前可用的字符集包括:UTF-8、ASCII。通过设置 output_format_pretty_grid_charset 可启用该功能。#12372Sabyanin Maxim)。
  • 支持 MySQL 的 SELECT DATABASE(),并添加了 MySQL 替换查询的集成测试。#9336 #12314BohuTANG)。
  • 为 MySQL 客户端/驱动添加了 KILL QUERY [connection_id],用于取消长时间运行的查询,相关 issue 为 #12038#12152BohuTANG)。
  • formatDateTime 函数中添加了 %g(两位 ISO 年份)和 %G(四位 ISO 年份)占位符替换支持。#12136vivarum)。
  • system.disks 中添加了 type 列。#12115ianton-ru)。
  • 改进了 REVOKE 命令:现在只要求对将被撤销的权限具有 grant/admin 选项。例如,执行 REVOKE ALL ON *.* FROM user1 时,现在不再需要具备带有 grant 选项的完整访问权限。新增命令 REVOKE ALL FROM user1 —— 它会撤销授予 user1 的所有角色。#12083Vitaly Baranov)。
  • load_balancing 添加了副本优先级(用于手动控制负载均衡的优先级)。#11995Azat Khuzhin)。
  • 将 S3 元数据中的路径改为相对路径,从而可以更容易地处理 S3 对象。#11892Vladimir Chebotarev)。

性能改进

  • 通过排序键前缀提升了 ORDER BYGROUP BY 的性能(通过 optimize_aggregation_in_order 设置启用,默认禁用)。#11696Anton Popov)。
  • 当设置 optimize_injective_functions_inside_uniq=1 时,会移除 uniq*() 内部的单射函数。#12337Ruslan Kamalov)。
  • 修复了使用字面量的 IN 运算符不使用索引的问题,该性能退化是在 v19.3 附近引入的。本修复关闭了 #10574#12062nvartolomei)。
  • 为 DiskS3 实现了单 part 上传(实验特性)。#12026Vladimir Chebotarev)。

实验特性

  • MergeTree 系列表中增加了新的内存中 part 格式,用于将数据存储在内存中。part 会在第一次合并时写入磁盘。如果其行数或字节大小低于阈值 min_rows_for_compact_partmin_bytes_for_compact_part,则会以内存格式创建 part。同时提供可选的预写日志(Write-Ahead Log)支持,默认启用,由设置 in_memory_parts_enable_wal 控制。#10697Anton Popov)。

构建/测试/打包改进

  • clickhouse-client 实现基于 AST 的查询模糊测试(fuzzing)模式。最近通过模糊测试发现的问题列表见此标签。其中大部分是通过此工具发现的,另外有少量由 SQLancer 和 00746_sql_fuzzy.pl 发现。#12111 (Alexander Kuzmenkov).
  • 基于 Testflows 框架新增一类测试。#12090 (vzakaznikov).
  • 新增 S3 HTTPS 集成测试。#12412 (Pavel Kovalenko).
  • 在单独的线程中记录 sanitizer trap 消息。这将防止在 thread sanitizer 下出现潜在的死锁。#12313 (alexey-milovidov).
  • 现在功能测试和压力测试可以使用旧版本的 clickhouse-test 脚本运行。#12287 (alesapin).
  • 删除在 orc 构建过程中产生的异常文件创建行为。#12258 (Nikita Mikhaylov).
  • 将通用的 Docker Compose 文件放入集成测试用的 Docker 容器中。#12168 (Ilya Yatsishin).
  • 修复来自 CodeQL 的告警。CodeQL 是我们将与现有的 clang-tidyPVS-Studio 一起使用的另一款静态代码分析器。#12138 (alexey-milovidov).
  • 对 UNBUNDLED 构建进行一些小的 CMake 修复。#12131 (Matwey V. Kornilov).
  • 新增一个不使用任何 Linux 发行版的最小化 Docker 镜像示例。#12126 (alexey-milovidov).
  • clickhouse-server Docker 镜像中升级系统软件包。#12124 (Ivan Blinkov).
  • system.build_options 表中新增 UNBUNDLED 标志。将 clickhouse-test 的跳过列表移至 ClickHouse 仓库中。#12107 (alesapin).
  • 使用 Anchore Container Analysis 安全分析工具对 clickhouse-server Docker 镜像进行定期检查,以发现其中的 CVE,同时确认 Dockerfile 可以成功构建。在 master 分支和针对 Dockerfile 的 pull request 上每天运行。#12102 (Ivan Blinkov).
  • 使用 GitHub CodeQL 安全分析工具进行每日检查,以发现 CWE#12101 (Ivan Blinkov).
  • 在 Dockerfile 中首次执行 apt-get update 之前安装 ca-certificates#12095 (Ivan Blinkov).

ClickHouse 20.5 版发布

ClickHouse v20.5.4.40-stable 版本发布 2020-08-10

缺陷修复

  • 修复了在使用函数时的错误索引分析问题。该问题在从 MergeTree 表读取时可能会导致错误地裁剪数据分片。修复了 #13060。修复了 #12406#13081Anton Popov)。
  • 修复了在从本地副本执行 SELECT 查询时对线程数量的不必要限制。#12840 (Nikolai Kochetov).
  • 修复了在 IN 子句中被解释为函数的大型 tuple 所导致的性能问题。指的是在某些情况下,用户出于某些不明原因将条件写成 WHERE x IN tuple(1, 2, ...),而不是 WHERE x IN (1, 2, ...)#12700 (Anton Popov).
  • 修复了 input&#95;format&#95;parallel&#95;parsing 的内存跟踪问题(通过将线程附加到组中实现)。 #12672 (Azat Khuzhin).
  • 通过 const 表达式修复了布隆过滤器索引,从而修复了 #10572#12659Winter Zhang)。
  • 修复了在 broker 不可用等情况下 StorageKafka 中出现的 SIGSEGV#12658 (Azat Khuzhin).
  • if 函数新增对 Array(UUID) 参数的支持。修复了 #11066#12648alexey-milovidov)。
  • 修复了函数 any 缺少别名的问题。#12593Anton Popov)。
  • 修复了使用缓存布局的外部字典中的竞争条件,该问题可能导致服务器崩溃。 #12566 (alesapin).
  • 在执行 DROP TABLE 时,删除 Distributed 表的数据(来自异步 INSERT 的分块数据)。 #12556 (Azat Khuzhin).
  • 修复了在 enable_mixed_granularity_parts=1 时执行 ALTER DELETE 查询会导致旧的 part 损坏的 bug。修复 #12536#12543alesapin)。
  • 在函数 in 的参数数量不合法时提供更清晰的异常信息。#12529Anton Popov)。
  • 修复了实时视图表中的竞态条件问题,该问题可能导致数据重复。#12519 (vzakaznikov)。
  • 修复从 compact parts 读取时的性能问题。 #12492 (Anton Popov).
  • 修复了 AggregateFunction(avg, ...) 值的二进制格式向后兼容性问题。此修复对应 #12342#12486alexey-milovidov)。
  • 修复了在启用 text_log 时发生的死锁问题。#12452 (alexey-milovidov).
  • 修复了在指定非常大的 LIMIT 或 OFFSET 时出现的溢出问题。解决了 #10470。解决了 #11372#12427alexey-milovidov)。
  • 修复了在使用 StorageMerge 时可能发生的段错误。已关闭 #12054#12401 (tavplubix)。
  • 回滚在 #11079 中引入的更改,以解决 #12098#12397Mike)。
  • 在带索引的表的 WHERE 条件中使用负数或浮点常量时避免抛出异常。修复了 #11905#12384alexey-milovidov)。
  • 允许即使存在依赖该列的 DEFAULT 表达式时也对列执行 CLEAR 操作。修复了 #12333#12378alexey-milovidov)。
  • 修复了在对带有 -StateNullable 参数的聚合函数使用 TOTALS/ROLLUP/CUBE 时的处理问题。此修复对应 #12163#12376alexey-milovidov)。
  • 修复了在 Kafka 引擎中,当一个批次的中间出现错误消息时触发的 SIGSEGV。#12302 (Azat Khuzhin).
  • 修复了在使用 SummingMergeTree 引擎时,从分区键中的列进行求和时的行为。现在如果显式指定的求和列与分区键列有交集,将抛出异常。修复了 #7867#12173Nikita Mikhaylov)。
  • 修复了在存在别名时,将查询转换后发送到外部 DBMS(例如 MySQL、ODBC)的转换逻辑。此修复解决了 #12032#12151alexey-milovidov)。
  • 修复了一个导致 ZooKeepeer 中的 ReplicatedVersionedCollapsingMergeTree 表元数据不正确的 bug。此修复解决了 #12093#12121alesapin)。
  • 修复了在从 VIEW 进行 SELECT 查询时对线程数施加的不必要限制。修复了 #11937#12085Nikolai Kochetov)。
  • 修复了在 join_algorithm=partial_merge 模式下使用 LowCardinality 类型时出现的 JOIN 崩溃问题。#12035 (Artem Zuikov).
  • 修复了在条件中包含 NULL 时 if() 返回错误结果的问题。#11807 (Artem Zuikov).

性能改进

  • 针对带字面量的 IN 运算符未使用索引的问题,修复了在 v19.3 前后引入的性能回归。修复了 #10574#12062nvartolomei)。

构建/测试/打包改进

  • 在 Dockerfile 中首次执行 apt-get update 之前安装 ca-certificates#12095Ivan Blinkov)。

ClickHouse 发布 v20.5.2.7-stable 2020-07-02

向后不兼容更改

  • COUNT(DISTINCT)uniq 聚合函数家族不再返回 Nullable 结果。如果所有传入值都是 NULL,则返回 0。此更改提升了 SQL 兼容性。#11661alexey-milovidov)。
  • 增加了一个检查,用于发现用户级设置被配置在错误位置的情况。用户级设置应在 users.xml 中对应用户配置文件的 <profile> 部分(或默认设置的 <default> 部分)中指定。如果设置错误,服务端会在日志中打印异常消息并拒绝启动。修复了 #9051。如果你想跳过此检查,可以将设置移动到正确位置,或者在 config.xml 中添加 <skip_check_for_incorrect_settings>1</skip_check_for_incorrect_settings>#11449alexey-milovidov)。
  • 默认启用 input_format_with_names_use_header 设置。这会影响 -WithNames-WithNamesAndTypes 输入格式的解析。#10937alexey-milovidov)。
  • 移除 experimental_use_processors 设置。该设置现为默认启用。#10924Nikolai Kochetov)。
  • zstd 更新到 1.4.4。该版本在性能和压缩比方面有一些小幅改进。如果你在同一集群中运行不同 ClickHouse 版本的副本,可能会看到类似 Data after merge is not byte-identical to data on another replicas. 且带有说明的合理错误信息。这些信息是正常的,无需担心。此更改是向后兼容的,但我们仍在变更日志中列出,以便你在看到这些消息时有所参考。#10663alexey-milovidov)。
  • 增加了对无意义编解码器的检查,以及用于控制此检查的 allow_suspicious_codecs 设置。修复了 #4966#10645alexey-milovidov)。
  • 若干 Kafka 设置的默认值发生了变化。参见 #11388
  • 从 20.5 之前的版本升级时,如果执行滚动更新,且集群同时包含大于等于 20.5 和低于 20.5 的版本,当旧版本的 ClickHouse 节点在存在新版本节点的情况下被重启并启动旧版本时,可能会导致 Part ... intersects previous part 错误。为避免该错误,应先在所有集群节点上安装新的 clickhouse-server 软件包,然后再执行重启(也就是说,当 clickhouse-server 重启时,它应当以新版本启动)。

新功能

  • TTL DELETE WHERETTL GROUP BY,用于在表中自动执行数据降采样和汇总。#10537 (expl0si0nn)。
  • 实现 PostgreSQL 传输协议。 #10242 (Movses).
  • 添加了用于 users、roles、grants、settings profiles、quotas、row policies 的系统表;添加了 SHOW USER、SHOW [CURRENT|ENABLED] ROLES、SHOW SETTINGS PROFILES 命令。 #10387 (Vitaly Baranov)。
  • 为 ODBC Table 函数添加写入支持 #10554 (ageraab)。#10901 (tavplubix)。
  • 基于 Linux perf_events 添加查询性能指标(这些指标通过硬件 CPU 计数器和操作系统计数器计算)。此功能是可选的,并且需要为 ClickHouse 可执行文件设置 CAP_SYS_ADMIN#9545 Andrey Skobtsov#11226 (Alexander Kuzmenkov)。
  • 现在 CREATE 查询中的数据类型支持使用 NULLNOT NULL 修饰符。#11057 (Павел Потемкин).
  • 新增 ArrowStream 输入和输出格式。 #11088 (hcz).
  • 支持将 Cassandra 作为外部字典源。#4978favstovol)。
  • 新增了布局 direct,在每次查询时直接从数据源加载所有数据,而不进行存储或缓存。#10622 (Artem Streltsov)。
  • 为字典新增了新的 complex_key_direct 布局,该布局在查询执行期间不会在本地存储任何数据。#10850 (Artem Streltsov)。
  • 添加了对 MySQL 风格全局变量语法的支持(桩实现,stub)。此功能用于实现对 MySQL 协议的兼容性。#11832 (alexey-milovidov)。
  • 使用 replxxclickhouse-client 添加了语法高亮。#11422Tagir Kuskarov)。
  • 已添加 minMapmaxMap 函数。#11603Ildus Kurbangaliev)。
  • 添加 system.asynchronous_metric_log 表,用于记录来自 system.asynchronous_metrics 的历史指标。 #11588 (Alexander Kuzmenkov)。
  • 添加函数 extractAllGroupsHorizontal(haystack, re)extractAllGroupsVertical(haystack, re)#11554Vasily Nemkov)。
  • 添加 SHOW CLUSTER(S) 查询语句。 #11467 (hexiaoting).
  • 添加用于提取网络位置的 netloc 函数,类似于 Python 中 urlparse(url) 结果里的 netloc 字段。 #11356 (Guillaume Tassery)。
  • engine=Kafka 引擎新增 2 个用于访问消息头的虚拟列。 #11283 (filimonov).
  • 为 Kafka 引擎添加 _timestamp_ms 虚拟列(类型为 Nullable(DateTime64(3)))。 #11260 (filimonov).
  • 新增函数 randomFixedString#10866Andrei Nekrashevich)。
  • 添加函数 fuzzBits,用于以给定概率随机翻转字符串中的位。 #11237 (Andrei Nekrashevich)。
  • 允许在比较运算符、IN 和 VALUES 子句中,将数字与常量字符串进行比较。#11647 (alexey-milovidov).
  • 添加 round_robin 负载均衡模式。#11645 (Azat Khuzhin).
  • 新增 cast_keep_nullable 设置。启用后,CAST(something_nullable AS Type) 将返回 Nullable(Type)#11733 (Artem Zuikov).
  • system.columns 表添加了 position 列,并向 system.parts_columns 表添加了 column_position 列。其值为列在表中的序号,从 1 开始计数。修复了 #7744#11655alexey-milovidov)。
  • 为 SYSTEM {FLUSH DISTRIBUTED,STOP/START DISTRIBUTED SEND} 命令添加 ON CLUSTER 支持。#11415 (Azat Khuzhin)。
  • 新增 system.distribution_queue 表。#11394Azat Khuzhin)。
  • 在 Kafka 中支持全部格式设置,在表级别暴露部分设置,并调整默认值以提高性能。 #11388 (filimonov).
  • 新增 port 函数(用于从 URL 中提取端口)。 #11120 (Azat Khuzhin)。
  • 现在 dictGet* 函数可以接受表名。#11050Vitaly Baranov)。
  • 当使用 -n 参数时,clickhouse-format 工具现在能够格式化多条查询语句。#10852Darío)。
  • 现在支持为 DiskS3 配置 proxy-resolver。 #10744 (Pavel Kovalenko).
  • 使 pointInPolygon 能够与非常量多边形一起使用。现在 PointInPolygon 可以将 Array(Array(Tuple(..., ...))) 作为第二个参数,即表示多边形及其孔洞的数组。#10623 (Alexey Ilyukhov) #11421 (Alexey Ilyukhov)。
  • system.parts 中添加了 move_ttl_info,以便查看 move TTL 功能相关信息。 #10591 (Vladimir Chebotarev).
  • 支持通过代理访问 S3。#10576Pavel Kovalenko)。
  • 为数据类型添加 NCHARNVARCHAR 别名。 #11025 (alexey-milovidov).
  • 已解决 #7224:在 system.events 表中新增了 FailedQueryFailedSelectQueryFailedInsertQuery 指标。#11151Nikita Orlov)。
  • system.asynchronous_metrics 中添加更多 jemalloc 统计信息,并确保可以看到这些统计的最新数值。 #11748 (Alexander Kuzmenkov).
  • 支持指定默认的 S3 凭证和自定义认证请求头。 #11134 (Grigory Pervakov).
  • 新增了用于在多种精度下以 Int64 格式导入/导出 DateTime64 的函数:to-/fromUnixTimestamp64Milli/-Micro/-Nano#10923 (Vasily Nemkov).
  • 允许为 MongoDB 字典指定 mongodb:// URI。 #10915 (Alexander Kuzmenkov).
  • OFFSET 关键字现在可以在不带 LIMIT 子句的情况下使用。 #10802 (Guillaume Tassery).
  • 新增了 system.licenses 表。该表包含位于 contrib 目录中的第三方库的许可证信息。此更改解决了 #2890#10795alexey-milovidov)。
  • 新增函数 toStartOfSecond(DateTime64) -> DateTime64,用于将 DateTime64 值的秒以下小数部分清零。 #10722 (Vasily Nemkov).
  • 新增了一种输入格式 JSONAsString,可接受由换行符、空格和/或逗号分隔的一系列 JSON 对象。 #10607 (Kruglov Pavel)。
  • 支持将内存剖析的步长粒度缩小到小于 4 MiB。新增采样内存剖析器,用于捕获随机的内存分配/释放操作。#10598 (alexey-milovidov).
  • SimpleAggregateFunction 现在也支持 sumMap#10000 (Ildus Kurbangaliev)
  • 为分布式表引擎添加对 ALTER RENAME COLUMN 的支持。是对 #10727 的延续。修复 #10747#10887alesapin)。

缺陷修复

  • 修复 Decimal 解析中的 UBSan 报告问题。此更改修复了 #7540#10512alexey-milovidov)。
  • 修复了解析 DateTime64 时可能出现的浮点运算异常问题。从而修复了 #11374#11875alexey-milovidov)。
  • 修复在 PREWHERE 子句中使用 Nullable 列导致的罕见崩溃问题。 #11895 #11608 #11869 (Nikolai Kochetov).
  • 不允许在高阶函数内部使用 arrayJoin。此前这样做会导致协议同步异常。此更改关闭了 #3933#11846alexey-milovidov)。
  • 修复了 FixedString 与常量 String 比较时产生错误结果的问题。此修复对应 #11393。该缺陷首次出现在 20.4 版本中。#11828alexey-milovidov)。
  • 修复在条件包含 NULL 时 if 函数返回错误结果的问题。 #11807 (Artem Zuikov).
  • 修复查询线程数过多的问题。 #11788 (Nikolai Kochetov)。
  • 修复了在 SELECT ... FROM merge_tree_table ... 中使用 WITH <scalar subquery> ... 时出现的 Scalar does not exist 异常 #11621#11767Amos Bird)。
  • 修复类似 SELECT *, xyz.* 这样的查询出现的非预期行为:原本应报错却被执行成功。 #11753 (hexiaoting).
  • 现在在更改元数据期间,将会取消复制数据的拉取操作。#11744 (alesapin)。
  • 在检查是否相等之前先解析存储在 ZooKeeper 中的元数据。#11739 (Azat Khuzhin)。
  • 修复了由于在 Values 输入格式中对复杂字面量进行错误的类型推导而导致的 LOGICAL_ERROR。 #11732 (tavplubix).
  • 修复在常量列上使用 ORDER BY ... WITH FILL 的问题。 #11697 (Anton Popov).
  • 修复 SYSTEM SYNC REPLICA 中极端罕见的竞争条件。如果在创建复制表的同时,来自另一个独立连接的客户端在该表上执行 SYSTEM SYNC REPLICA 命令(这种情况不太可能,因为一般来说另一个客户端应当知道该表正在创建中),则有可能导致空指针解引用。 #11691 (alexey-milovidov).
  • 在与 XDBC bridge 通信时传递合适的超时时间。此前在检查 bridge 存活状态和接收元信息时,超时设置未被正确生效。#11690 (alexey-milovidov).
  • 修复在包含别名的 ORDER BY 子句中使用 LIMIT n WITH TIES 时出现的问题。#11689 (Anton Popov)。
  • 修复在使用并行 FINAL 的 SELECT 查询中可能出现的 Pipeline stuck 问题。修复 #11636#11682Nikolai Kochetov)。
  • 修复了一个会导致 system.mutations 处于错误状态的缺陷。它可能会显示整个 mutation 已经完成,但服务器的复制队列中仍然存在 MUTATE_PART 任务并继续尝试执行它们。此修复对应 #11611#11681alesapin)。
  • 修复 CREATE USER 查询中的语法高亮显示问题。 #11664 (alexey-milovidov).
  • 添加对带有不区分大小写标志的正则表达式的支持。修复了 #11101#11506#11649alexey-milovidov)。
  • 如果启用了行级安全,则移除对 COUNT 查询的简单优化。在之前的版本中,用户得到的是表中记录的总数,而不是过滤后的记录数。此更改修复了 #11352#11644alexey-milovidov)。
  • 修复用于 String 类型的布隆过滤器(数据跳过索引)。 #11638 (Azat Khuzhin).
  • 如果不使用 -q 选项,则不会在启动时创建数据库。#11604 (giordyb)。
  • 修复在从 Buffer 表进行采样读取时出现的 Block structure mismatch 错误。#11602 (Nikolai Kochetov)。
  • 修复在 exception.code() % 256 == 0 时 clickhouse-client 返回的错误退出码。#11601 (filimonov)。
  • 修复在不同副本的 ReplicatedMergeTree 表执行 CREATE/DROP 时出现的竞争条件。如果表未从 ZooKeeper 中完全删除或未成功创建,系统仍然可以继续工作。修复了 #11432#11592alexey-milovidov)。
  • 修复服务器启动时关于“Mark cache size was lowered”的日志消息中的一个小错误。该更改关闭了 #11399#11589alexey-milovidov)。
  • 修复在包含 PREWHERE column in (subquery)ARRAY JOIN 的查询中出现的错误 Size of offsets does not match size of column#11580Nikolai Kochetov)。
  • 修复了 SHOW CREATE TABLE 中罕见的段错误,对应修复 #11490#11579tavplubix)。
  • 已修复:HTTP 会话中的所有查询使用相同的 query_id 的问题。#11578 (tavplubix)。
  • 现在,在检查服务器存活状态时,clickhouse-server 的 Docker 容器将优先使用 IPv6。 #11550 (Ivan Starkov).
  • 修复在启用 min_bytes_to_use_direct_io,并且启用了 PREWHERE 且使用 SAMPLE 或大量线程时,可能出现的 Data compressed with different methods 错误。此修复解决了 #11539#11540alexey-milovidov)。
  • 修复 <node> 的 shard_num/replica_num 设置(此前会导致 use_compact_format_in_distributed_parts_names 失效)。 #11528 (Azat Khuzhin).
  • 修复在 prefer_localhost_replica=0 且未启用 internal_replication 时对 Distributed 表执行异步 INSERT 的问题。 #11527 (Azat Khuzhin)。
  • 修复在使用 -State 函数进行聚合的过程中抛出异常时出现的内存泄漏问题。修复了 #8995#11496alexey-milovidov)。
  • 修复执行 INSERT SELECT FINAL 时出现的 Pipeline stuck 异常:当 SELECT 部分(max_threads>1)有多个数据流,而 INSERT 部分只有一个数据流(max_insert_threads==0)时会触发该问题。#11455 (Azat Khuzhin)。
  • 修复在执行类似 select count() from t, u 查询时返回错误结果的问题。 #11454 (Artem Zuikov).
  • 修正编解码器返回的压缩大小。#11448 (Nikolai Kochetov).
  • 修复当某列使用带有非字面量参数的压缩编解码器时出现的服务器崩溃。修复了 #11365#11431alesapin)。
  • 修复在 MergeTree 关闭时,如果表未成功创建,可能出现的未初始化内存读取问题。#11420 (alexey-milovidov)。
  • 修复对 LowCarinality(T)Nullable(T) 执行 JOIN 时出现的崩溃问题。#11380#11414 (Artem Zuikov)。
  • 修复因错误的 USING 关键字导致的错误码。#11373#11404Artem Zuikov)。
  • 修复了在参数超出纬度/经度范围时的 geohashesInBox#11403Vasily Nemkov)。
  • joinGet() 函数提供更详细的错误信息。#11389 (Artem Zuikov).
  • 修复在使用外部排序和 LIMIT 的查询中可能出现的 Pipeline stuck 错误。修复了 #11359#11366Nikolai Kochetov)。
  • 在 ReplicatedMergeTree 中发送数据部件时移除冗余锁。 #11354 (alesapin).
  • 修复了在多行模式下 clickhouse-client 对 \G(纵向输出)的支持。此更改解决了 #9933#11350alexey-milovidov)。
  • 修复在使用 Lazy 数据库时可能发生的段错误(segfault)。#11348 (alexey-milovidov)。
  • 修复在直接对 Join 表引擎(未使用 JOIN)进行 SELECT 时的崩溃问题以及错误的可空性。#11340 (Artem Zuikov)。
  • 修复 quantilesExactWeightedArray 中的崩溃问题。#11337Nikolai Kochetov)。
  • 现在在执行 ALTER 查询时,会在更改元数据之前先停止合并操作。 #11335 (alesapin).
  • 在设置 parallel_view_processing = 1 时,使对 MATERIALIZED VIEW 的写入重新并行执行。修复了 #10241#11330Nikolai Kochetov)。
  • 修复在提取的 JSON 中的字符串包含不成对的 { 或 [ 时的 visitParamExtractRaw#11318 (Ewout)。
  • 修复 ThreadPool 中极少出现的竞态条件。 #11314 (alexey-milovidov).
  • 修复 clickhouse-copier 中一个无关紧要的数据竞争问题。由集成测试发现。#11313 (alexey-milovidov)。
  • 修复转换过程中可能出现的未初始化内存使用问题。例如:SELECT toIntervalSecond(now64())#11311 (alexey-milovidov)。
  • 修复当表的主键中包含 Array 列,且查询对该列使用 emptynotEmpty 函数进行过滤时,索引分析无法生效的问题。此修复解决了 #11286#11303alexey-milovidov)。
  • 修复一个错误:当查询速度估算不正确时,如果查询被 max_network_bandwidthmax_execution_speedpriority 设置限流,min_execution_speed 的限制可能不起作用或行为不正确。将 timeout_before_checking_execution_speed 的默认值修改为非零值,因为否则 min_execution_speedmax_execution_speed 这两个设置将不会生效。此更改修复了 #11297。此更改修复了 #5732。此更改修复了 #6228。易用性改进:在 clickhouse-client 中避免将异常消息与进度条拼接在一起。#11296alexey-milovidov)。
  • 修复了在使用错误参数调用 SET DEFAULT ROLE 时会发生的崩溃问题。此更改修复了 #10586#11278Vitaly Baranov)。
  • 修复在读取格式不正确的 Protobuf 数据时发生的崩溃问题。修复了 #5957#11203#11258Vitaly Baranov)。
  • 修复了一个问题:当仅存在已过期键时,cache 字典可能返回默认值而不是实际值。此问题仅影响字符串字段。#11233Nikita Mikhaylov)。
  • 修复从内部查询包含常量的 VIEW 读取时出现的错误 Block structure mismatch in QueryPipeline。修复了 #11181#11205Nikolai Kochetov)。
  • 修复可能出现的异常 Invalid status for associated output#11200Nikolai Kochetov)。
  • 现在,如果在 CREATE 语句中定义了 primary.idx,将会对其进行检查。 #11199 (alesapin)。
  • 修复在高阶函数中捕获 Array(Array(LowCardinality)) 类型参数时可能出现的 Cannot capture column 错误。#11185Nikolai Kochetov)。
  • 修复了在键数量超过 1000 时以及在某些后端上可能失败的 S3 通配(globbing)问题。 #11179 (Vladimir Chebotarev)。
  • 如果数据跳过索引依赖于那些会在后台合并过程中被修改的列(对于 SummingMergeTree、AggregatingMergeTree 以及 TTL GROUP BY),则其先前的计算是错误的。此问题已通过将索引计算移动到合并之后来修复,因此索引会基于合并后的数据进行计算。 #11162 (Azat Khuzhin).
  • 修复了在 DROP 使用 Kafka 引擎的表(或在服务器重启期间)时偶尔出现的卡死问题。#11145 (filimonov)。
  • 修复针对简单查询过度预留线程的问题(用于减少线程数量的优化在执行管线(pipeline)更改后部分失效)。#11114 (Azat Khuzhin).
  • 如果最终没有任何内容被提交,则移除 mutation 完成任务中的日志记录。 #11109 (alesapin)。
  • 修复了在更新后且系统日志表结构发生变化时,服务器启动过程中出现的死锁问题。#11106 (alesapin)。
  • 修复了 registerDiskS3 中的内存泄漏。#11074 (Pavel Kovalenko).
  • 修复在 JOIN 与 PREWHERE 一同使用时,或 optimize_move_to_prewhere 将 WHERE 下推为 PREWHERE 时触发的错误 No such name in Block::erase()#11051Artem Zuikov)。
  • 修复了在终止 Kafka 引擎表时可能导致数据丢失的问题。#11048 (filimonov)。
  • 修复了 parseDateTime64BestEffort 参数解析错误。#10925#11038Vasily Nemkov)。
  • 现在可以在单条 ALTER 查询中对同一列同时执行 ADD/DROPRENAME 操作。针对同时使用 MODIFYRENAME 的情况,其异常信息变得更加清晰。部分修复了 #10669#11037 (alesapin)。
  • 修复了 S3 URL 的解析。 #11036 (Vladimir Chebotarev).
  • 在使用 LIMIT 时,修复两级 GROUP BY 的内存跟踪问题。#11022 (Azat Khuzhin).
  • 修复在表未成功创建时,MergeTree 中极少见的潜在 use-after-free 错误。 #10986 (alexey-milovidov).
  • 修复 Atomic 数据库在处理元数据(重命名时使用的相对路径)和数据(符号链接时使用的相对路径)时的问题。 #10980 (Azat Khuzhin).
  • 修复在使用 Atomic 数据库引擎时并发执行 ALTERDROP DATABASE 查询导致服务器崩溃的问题。 #10968 (tavplubix)。
  • 修复 getRawData() 方法中原始数据大小计算错误。 #10964 (Igr).
  • 修复 20.1 及更早版本之间两级聚合的不兼容问题。当发起节点和远程节点上运行的 ClickHouse 版本不同时,且 GROUP BY 结果较大并且聚合按单个 String 字段进行时,会出现该不兼容性。这会导致在结果中针对同一个键出现多行未合并的数据。#10952alexey-milovidov)。
  • 避免通过 DistributedBlockOutputStream 发送未完全写入的文件。 #10940 (Azat Khuzhin).
  • 修复执行 SELECT count(notNullIn(NULL, [])) 时导致的崩溃问题。#10920Nikolai Kochetov)。
  • 修复了在 DROP 使用 Kafka 引擎的表时(或在服务器重启期间)偶发的卡死问题。#10910 (filimonov)。
  • 现在可以在单条语句中执行多个 ALTER RENAME 操作,例如 a TO b, c TO a#10895 (alesapin).
  • 修复了一个可能出现的竞争条件:当多个线程针对同一列从聚合函数状态中获取结果时,可能会触发该问题。我发现它唯一可能发生的情况是:在读取使用 Memory 引擎的表时使用 finalizeAggregation 函数,而该表为 quanite* 函数存储了 AggregateFunction 状态。#10890Nikolai Kochetov)。
  • 修复 Distributed 表中元组的向后兼容性问题。#10889 (Anton Popov)。
  • 修复 StringHashTable 在键不存在时出现的 SIGSEGV。 #10870 (Azat Khuzhin).
  • 修复了在使用 Atomic 引擎的数据库中删除 LiveView 表后,WATCH 出现挂起的问题。 #10859 (tavplubix).
  • 修复了 ReplicatedMergeTree 中的一个问题,该问题可能导致在某个副本变为不活动后,某些带有 OPTIMIZEALTER 查询一直挂起等待该副本。 #10849 (tavplubix).
  • 现在,当参与 CONSTRAINT 表达式的列被重命名时,相应的约束会被更新。修复了 #10844#10847alesapin)。
  • 修复在缓存字典中可能读取未初始化内存的问题。 #10834 (alexey-milovidov).
  • 在 Block::sortColumns() 之后修复列顺序(并添加一个测试,以表明它会影响某些实际用例——Buffer 引擎)。 #10826 (Azat Khuzhin).
  • 修复在未请求为标识符加引号时 ODBC bridge 出现的问题。此更改修复了 #7984#10821alexey-milovidov)。
  • 修复 DateLUT 中 UBSan 和 MSan 报告的问题。 #10798 (alexey-milovidov).
  • 在键条件中使用 src_type,以确保正确的类型转换。修复了 #6287#10791Andrew Onyshchuk)。
  • 移除旧的 libunwind 补丁。https://github.com/ClickHouse-Extras/libunwind/commit/500aa227911bd185a94bfc071d68f4d3b03cb3b1#r39048012 这使我们能够在使用 clang 的构建中禁用 -fno-omit-frame-pointer,平均至少可提升 1% 的性能。#10761Amos Bird)。
  • 修复在跨多个分片时使用浮点权重的 avgWeighted#10758 (Baudouin Giard)。
  • 修复 parallel_view_processing 的行为。现在即使发生异常,针对 MATERIALIZED VIEW(物化视图)的所有插入操作也都应无一例外地完成。修复了 #10241#10757Nikolai Kochetov)。
  • 修复组合器 -OrNull 和 -OrDefault 在与 -State 组合使用时的问题。#10741 (hcz).
  • 修复 generateRandom 在处理嵌套类型时的崩溃问题。已修复 #10583#10734Nikolai Kochetov)。
  • 修复在合并后可能发生的 SummingMergeTreeLowCardinality(FixedString) 键列数据损坏问题。修复了 #10489#10721Nikolai Kochetov)。
  • 修复在同时使用 'FINAL' 修饰符和 'ORDER BY' 优化时,将主键包裹在函数中的用法问题。#10715 (Anton Popov)。
  • 修复函数 h3EdgeAngle 中可能存在的缓冲区溢出问题。#10711 (alexey-milovidov)。
  • 修复总计消失的问题。当查询包含 JOIN 或带有外部 WHERE 条件的子查询时,总计可能会被过滤掉。修复 #10674#10698Nikolai Kochetov)。
  • 修复 HTTP 插入操作的原子性问题。此更改修复了 #9666#10687Andrew Onyshchuk)。
  • 修复在同一查询中多次使用 IN 运算符并传入同一集合的问题。#10686 (Anton Popov).
  • 修复了一个 bug:当 readonly=2cancel_http_readonly_queries_on_client_close=1 时,会导致在客户端关闭时 HTTP 请求被卡住。修复了 #7939#7019#7736#7091#10684tavplubix)。
  • 修正 AggregateTransform 构造函数中的参数顺序。 #10667 (palasonic1).
  • 修正了在启用 distributed_aggregation_memory_efficient 时远程查询无法并行执行的问题。修复 #10655#10664Nikolai Kochetov)。
  • 修复使用 LIMIT 的查询可能返回的行数不正确的问题。修复了 #10566#10709#10660Nikolai Kochetov)。
  • 修复在表包含大量分片时会导致并发 ALTER 操作被锁住的问题。 #10659 (alesapin).
  • 修复当服务器在表启动前就已关闭时,StorageBuffer 中出现的 nullptr 解引用问题。#10641 (alexey-milovidov)。
  • 修复分布式查询中谓词优化(enable_optimize_predicate_expression=1)在带有 HAVING 子句的查询中的行为(即需要在发起查询的服务器上进行过滤的场景),通过保留表达式的顺序(这本身就足以修复问题),并强制聚合器优先使用列名而非索引。修复问题:#10613#11413#10621Azat Khuzhin)。
  • 修复在与 LowCardinality 配合使用时的 optimize_skip_unused_shards 问题。 #10611 (Azat Khuzhin).
  • 修复因服务器启动时发生异常而导致的 StorageBuffer 段错误问题。修复了 #10550#10609tavplubix)。
  • 在执行 SYSTEM DROP DNS CACHE 查询时,同时删除用于检查是否允许用户从某些 IP 地址连接的缓存。#10608 (tavplubix)。
  • 修复了在 MATERIALIZED VIEW 的子查询中,当该查询包含依赖的表时出现的标量结果计算错误的问题。 #10603 (Nikolai Kochetov).
  • 修复了同步变更中条件变量的处理逻辑。在某些情况下,发往该条件变量的信号可能会丢失。 #10588 (Vladimir Chebotarev).
  • 修复在 loadStoredObject() 尚未完成时调用 createDictionary() 可能引发的崩溃问题。 #10587 (Vitaly Baranov)。
  • 修复错误:BloomFilter false positive 必须是 0 到 1 之间的 double 数值 #10551#10569Winter Zhang)。
  • 修复在列 ALIAS 的默认表达式类型与列类型不同时的 SELECT 行为。 #10563 (Azat Khuzhin).
  • 实现了 DateTime64String 值之间的比较(比较方式与 DateTime 相同)。 #10560 (Vasily Nemkov).
  • 修复在将紧凑分片合并到另一个紧凑分片后,在某些情况下可能出现的索引损坏问题。 #10531 (Anton Popov).
  • 默认禁用 GROUP BY sharding_key 优化(optimize_distributed_group_by_sharding_key 已引入且默认关闭,这是由于对分片键(sharding_key)的分析存在一些复杂技巧,例如在分片键中使用 if),并修复其在 WITH ROLLUP/CUBE/TOTALS 中的行为。#10516Azat Khuzhin)。
  • 修复:#10263(在该 PR 之后,通过 INSERT 进行的分布式发送在每次 INSERT 时都会被再次延后)。修复:#8756(该 PR 在满足以下所有条件时会破坏分布式发送(目前来看是不太可能的配置):internal_replication == false、存在多个本地分片(会激活硬链接代码)以及使用 distributed_storage_policy(由于 EXDEV 错误导致 link(2) 调用失败))。#10486Azat Khuzhin)。
  • 修复了与 max_rows_to_sort 限制相关的错误。#10268 (alexey-milovidov)。
  • 对于每次调用任一读取外部字典的函数,仅执行一次字典获取和访问权限检查。#10928 (Vitaly Baranov).

改进

  • 在执行 ALTER MODIFY TTL 查询后,对旧数据应用 TTL。此行为由 materialize_ttl_after_modify 设置控制,且默认启用。#11042 (Anton Popov)。
  • 在解析字符串字面量、VALUES 和各种文本格式中的 C 风格反斜杠转义时(这是对 SQL 标准的扩展,在 ClickHouse 和 MySQL 中被广泛采用),如果遇到未知的转义序列(例如 \%\w),则保留反斜杠,从而使 LIKEmatch 正则表达式的使用更加方便(只需写 name LIKE 'used\_cars' 而不是 name LIKE 'used\\_cars'),同时也提高兼容性。此更改修复了 #10922#11208alexey-milovidov)。
  • 读取 Decimal 值时,会在小数点后截断多余的位数。此行为与 MySQL 和 PostgreSQL 更加兼容。修复了 #10202#11831 (alexey-milovidov)。
  • 如果 ZooKeeper 中的元数据已被删除且已不存在(例如在使用 TestKeeper 进行测试并重启服务器时也会出现这种情况),允许对 replicated 表执行 DROP 操作。即使在与 ZooKeeper 通信时出现错误,也允许对 replicated 表执行 RENAME 操作。修复了 #10720#11652alexey-milovidov)。
  • 略微改进了从字符串读取 Decimal 时的诊断信息。修复了 #10202#11829alexey-milovidov)。
  • 修复信号处理程序中的 sleep 调用问题。此前实际休眠时间少于预期。#11825 (alexey-milovidov)。
  • (仅限 Linux)与操作系统相关的性能指标(CPU 和 I/O)即使在没有 CAP_NET_ADMIN 能力的情况下也可以正常工作。#10544Alexander Kazakov)。
  • hostname 添加为函数 hostName 的别名。该特性由 Yandex.Metrica 的 Victor Tarnavskiy 建议。#11821 (alexey-milovidov).
  • 在跨复制集群中新增了对分布式 DDL(UPDATE/DELETE/DROP PARTITION)的支持。 #11703 (Nikita Mikhaylov).
  • 如果在启动时无法监听某个监听地址(例如在 Docker 环境中不支持 IPv6),则在服务器日志中记录为警告而不是错误。注意,如果服务器无法监听所有列出的地址,它仍会像之前那样拒绝启动。此更改修复了 #4406#11687alexey-milovidov)。
  • Docker 镜像启动时默认创建用户和数据库。 #10637 (Paramtamtam)。
  • 当多行查询被打印到服务器日志时,各行会被拼接在一起。针对多行字符串字面量、标识符和单行注释的情况进行了修正,使其也能正确处理。此更改修复了 #3853#11686alexey-milovidov)。
  • 现在在以下命令中已允许同时指定多个名称:CREATE USER、CREATE ROLE、ALTER USER、SHOW CREATE USER、SHOW GRANTS 等。#11670Vitaly Baranov)。
  • 在跨复制集群中添加对分布式 DDL(UPDATE/DELETE/DROP PARTITION)的支持。 #11508 (frank lee).
  • 如果用户在命令行中为 clickhouse-clientclickhouse-benchmark 显式指定了密码,则会从命令行参数中清除该密码,从而防止通过 ps 等工具泄露密码。#11665 (alexey-milovidov)。
  • 如果 ELF 文件中的调试信息与正在运行的二进制文件不匹配,则不要使用这些调试信息。这样可以避免在堆栈跟踪中打印错误的函数名和源代码位置。此更改修复了 #7514#11657alexey-milovidov)。
  • parseDateTimeBestEffortOrNull / parseDateTimeBestEffortOrZero 函数中,当值未被完全解析时返回 NULL/零。修复了 #7876#11653alexey-milovidov)。
  • 在请求的 URL 中忽略空参数。它们可能在你写 http://localhost:8123/?&a=bhttp://localhost:8123/?a=b&&c=d 时出现。此更改修复了 #10749#11651alexey-milovidov)。
  • 允许将 groupArrayArraygroupUniqArrayArray 作为 SimpleAggregateFunction 使用。 #11650 (Volodymyr Kuznetsov).
  • 在分析其他类型的索引条件时,允许通过隐式转换与常量字符串进行比较。这可能会解决 #11630#11648alexey-milovidov)。
  • https://github.com/ClickHouse/ClickHouse/pull/7572#issuecomment-642815377 支持配置默认的 HTTPHandlers。 #11628 (Winter Zhang).
  • 为 Kafka 引擎增加对更多输入格式的支持。修复过早刷新(flush)的问题。修复当 kafka_num_consumers 大于 topic 中分区数量时的性能问题。#11599 (filimonov).
  • 改进 multiple_joins_rewriter_version=2 逻辑。修复由 lambda 别名引起的未知列错误。#11587 (Artem Zuikov).
  • 在无法解析列定义列表时提供更清晰的异常信息。修复了 #10403#11537alexey-milovidov)。
  • 改进在视图中使用 enable_optimize_predicate_expression=1 时的逻辑。#11513 (Artem Zuikov).
  • 为 Live View 表添加对 PREWHERE 的支持。#11495 (vzakaznikov).
  • 自动更新 DNS 缓存,该缓存用于检查是否允许用户从某个地址进行连接。#11487 (tavplubix).
  • OPTIMIZE FINAL 将会强制执行合并,即使正在进行并发合并操作也是如此。此更改关闭了 #11309#11322#11346alexey-milovidov)。
  • 在 clickhouse-client 中禁止输出已取消查询的结果。在之前的版本中,即使你按下 Ctrl+C 取消查询,结果仍可能继续在终端中打印。此更改修复了 #9473#11342alexey-milovidov)。
  • 现在历史文件会在每次查询后更新,当多个客户端使用同一个历史文件时也不会出现竞争条件。修复了 #9897#11453Tagir Kuskarov)。
  • 改进了在重新加载配置时的日志消息。#11341 (alexey-milovidov)。
  • 在某些情况下,从 clickhouse-clientclickhouse-format 输出的格式化查询中移除末尾的空白字符。#11325 (alexey-milovidov)。
  • 添加设置 "output_format_pretty_max_value_width"。如果值更长,则会被截断,以避免在终端中输出过长的值。修复了 #11140#11324alexey-milovidov)。
  • 在内存映射不足的情况下提供更清晰的异常信息。修复了 #11027#11316alexey-milovidov)。
  • 在 ASOF JOIN 中增加对 (U)Int8、(U)Int16、Date 的支持。 #11301 (Artem Zuikov).
  • 为 Kafka 表增加对 kafka_client_id 参数的支持。同时将 ClickHouse 在与 Kafka 通信时使用的默认 client.id 修改为信息量更大且更易用的值。#11252 (filimonov)。
  • 在发生异常时保留 DistributedFilesToInsert 指标的数值。在之前的版本中,该数值会在我们准备发送某些文件时被设置,但如果发生异常并且仍有一些文件处于待发送状态,该数值为零。现在它与文件系统中处于待发送状态的文件数量相对应。#11220 (alexey-milovidov)。
  • 为诸如 DOUBLE PRECISIONCHAR VARYING 之类的多单词数据类型名称提供支持,以提高 SQL 兼容性。#11214 (Павел Потемкин)。
  • 为部分数据类型提供别名。 #10856 (Павел Потемкин).
  • 查询日志现已默认启用。#11184Ivan Blinkov)。
  • system.users 表以及执行 SHOW CREATE USER 查询时显示身份验证类型。 #11080 (Vitaly Baranov).
  • 在对 Memory 数据库引擎显式执行 DROP DATABASE 时删除数据。修复 #10557#11021tavplubix)。
  • 为 rdkafka 库的内部线程设置线程名称。使 rdkafka 的日志可以输出到服务器日志中。 #10983 (Azat Khuzhin).
  • 支持查询中的 Unicode 空白字符。这在从 Word 或网页复制粘贴查询时很有用。此更改修复了 #10896#10903 (alexey-milovidov)。
  • 允许在函数 tupleElement 中使用较大的 UInt 类型作为索引。#10874hcz)。
  • 在对 Distributed 表执行 INSERT 时遵从 prefer_localhost_replica/load_balancing 设置。 #10867 (Azat Khuzhin).
  • 引入 min_insert_block_size_rows_for_materialized_viewsmin_insert_block_size_bytes_for_materialized_views 设置项。这些设置项与 min_insert_block_size_rowsmin_insert_block_size_bytes 类似,但只应用于插入到 MATERIALIZED VIEW 中的块。它们有助于在向 MV 推送数据时控制块的合并行为,并避免过度的内存占用。#10858 (Azat Khuzhin)。
  • 消除服务器关闭时复制队列抛出的异常。修复了 #10819#10841alesapin)。
  • 确保 varSampvarPop 不会因数值误差返回负值,并且无法从负方差计算 stddevSampstddevPop。此更改修复了 #10532#10829alexey-milovidov)。
  • 改进了 DNS 异常信息。这修复了 #10813#10828alexey-milovidov)。
  • 在发生某些解析错误时,将 HTTP 响应码更改为 400 Bad Request。此修复解决了 #10636 中提出的问题。#10640alexey-milovidov)。
  • 如果 clickhouse-client 版本高于 clickhouse-server,则输出一条消息。 #10627 (alexey-milovidov).
  • INSERT INTO [db.]table WATCH 查询添加了支持。#10498 (vzakaznikov).
  • 允许通过 clickhouse-client 传递 quota_key 参数。此更改关闭了 #10227#10270alexey-milovidov)。

性能优化

  • 允许多个副本并发分配合并、变更、分区删除、移动和替换任务。此更改解决了 #10367#11639 (alexey-milovidov) #11795 (alexey-milovidov)。
  • 基于表排序键对 GROUP BY 进行优化,可通过 optimize_aggregation_in_order 设置启用。#9113 (dimarub2000)。
  • 带有 FINALSELECT 查询会并行执行。新增设置项 max_final_threads 用于限制使用的线程数。#10463 (Nikolai Kochetov)。
  • 在生成小数据块时(并行解析的典型场景),通过使用 INSERT SELECT 或在 clickhouse-client 中执行 INSERT 来提升 INSERT 查询的性能。这修复了 #11275。修复了 CONSTRAINT 对 DEFAULT 字段不生效的问题。这修复了 #11273。修复了 CONSTRAINTS 在 TEMPORARY 表上被忽略的问题。这修复了 #11274#11276alexey-milovidov)。
  • 新增一种优化,可在 SELECT 子句中消除对 GROUP BY 键的 min/max/any 聚合函数,该功能可通过 optimize_aggregators_of_group_by_keys 设置启用。#11667 (xPoSx). #11806 (Azat Khuzhin).
  • 新增了一项优化,会将所有操作从 any 函数中移出,可通过 optimize_move_functions_out_of_any 启用 #11529Ruslan)。
  • 在交互模式下使用 Pretty 格式时,提升 clickhouse-client 的性能。在先前版本中,大量时间可能花在计算 UTF-8 字符串的可见宽度上。此更改关闭了 #11323#11323alexey-milovidov)。
  • 提升了对同时包含 ORDER BYLIMIT 较小(小于 max_block_size)的查询的性能。 #11171 (Albert Kidrachev)。
  • 在运行时检测 CPU,以选择并调度最佳的函数实现。添加对多目标代码生成的支持,从而关闭 #1017#10058DimasKovas)。
  • 默认启用 ClickHouse 二进制文件的 mlock。这将防止在高 IO 负载下 ClickHouse 可执行文件被换出到交换空间中。#11139 (alexey-milovidov).
  • 在不包含 GROUP BY 键的情况下使用 sum 聚合函数进行查询,可使查询运行速度提升数倍。#10992 (alexey-milovidov)。
  • 通过删除部分冗余的数据移动,改进基数排序(用于简单键的 ORDER BY)。#10981Arslan Gumerov)。
  • 在 MergeJoin 中对左表中较大的部分进行排序。将左表的数据块缓存在内存中。新增 partial_merge_join_left_table_buffer_bytes 设置项,用于管理左表数据块缓冲区的大小。#10601 (Artem Zuikov)。
  • 从子查询中移除重复的 ORDER BY 和 DISTINCT,可通过 optimize_duplicate_order_by_and_distinct 启用此优化 #10067Mikhail Malafeev)。
  • 启用 optimize_group_by_function_keys 后,该功能会消除 GROUP BY 子句中对其他键的函数调用 #10051xPoSx)。
  • 新增一种优化机制,将算术运算从聚合函数中提取出来,可通过 optimize_arithmetic_operations_in_aggregate_functions 启用 #10047 (Ruslan)。
  • 使用基于 Poco 的 S3 HTTP 客户端以取代 curl,从而提升 S3 存储和表函数的性能并降低内存占用。#11230 (Pavel Kovalenko)。
  • 修复一个 Kafka 性能问题:与基于限制的重新调度有关,且这些重新调度此前总是会被应用。#11149 (filimonov).
  • 为 jemalloc 启用 percpu_arena:percpu(这将减少由线程池引起的内存碎片)。 #11084 (Azat Khuzhin).
  • 通过 S3 HTTP 客户端读取响应时优化内存使用。#11561Pavel Kovalenko)。
  • 调整默认的 Kafka 设置以提升性能。 #11388 (filimonov).

实验性特性

  • 新增数据类型 Point (Tuple(Float64, Float64)) 和 Polygon (Array(Array(Tuple(Float64, Float64))). #10678 (Alexey Ilyukhov).
  • 新增 hasSubstr 函数,用于在数组中查找子序列。注意:此函数很可能会在不另行通知的情况下被重命名。#11071 (Ryad Zenine).
  • 新增 OpenCL 支持和 bitonic 排序算法,可用于对单列中的整数类型数据进行排序。需要使用编译标志 -DENABLE_OPENCL=1 进行构建。要使用 bitonic 排序算法替代其他算法,需要将设置项 special_sort 设置为 bitonic_sort,并确保 OpenCL 可用。此功能不会提升性能或带来其他改进,仅作为示例和演示用途提供。如果在这一方向上没有进一步开发,此功能很可能会在不久的将来被移除。#10232 (Ri).

构建/测试/打包改进

  • 为程序和实用程序启用 clang-tidy。 #10991 (alexey-milovidov).
  • 移除对 tzdata 的依赖:如果 /usr/share/zoneinfo 目录不存在,不应报错。注意,即使系统中未安装 tzdata,所有时区在 ClickHouse 中仍可正常工作。 #11827 (alexey-milovidov).
  • 添加了基于 MSan 和 UBSan 的压力(“stress”)测试。注意,我们已经有使用 MSan 和 UBSan 的功能测试,而“stress” 测试是另一种类型的测试。#10871 (alexey-milovidov)。
  • 在崩溃信息中打印编译器的构建 ID,这可以让我们更确定是哪一个二进制文件发生了崩溃。新增函数 buildId#11824 (alexey-milovidov)。
  • 添加了一个测试,用于确保在执行 FREEZE 查询后,mutation 仍然可以正常工作。#11820 (alexey-milovidov).
  • 不要在测试名称中包含字符串 “fail”,因为当你在浏览器中按 Ctrl+F 搜索 “fail” 时,这会让查看测试结果变得不太方便。#11817 (alexey-milovidov).
  • 从 HTTPHandlerFactory 中移除未使用的导入。#11660 (Bharat Nallan)。
  • 对 copier 的执行增加了随机采样,以避免出现 Too many simultaneous queries 错误。同时延长了超时时间并降低了出错概率。#11573 (Nikita Mikhaylov)。
  • 修复遗漏的 include。 #11525 (Matwey V. Kornilov).
  • 通过删除旧的示例程序来加快构建速度。同时还发现了一些孤立的功能测试用例。#11486 (alexey-milovidov).
  • 增加 CI 构建使用的 ccache 缓存大小。 #11450 (alesapin).
  • 在 deb 构建中只保留 unit_tests_dbms。 #11429 (Ilya Yatsishin).
  • 将 librdkafka 升级到 1.4.2 版本。 #11256 (filimonov)。
  • 重构 CMake 构建文件。#11390Ivan)。
  • 修复几个不稳定的集成测试。 #11355 (alesapin).
  • 为使用 UBSan 运行的单元测试添加支持。#11345 (alexey-milovidov)。
  • 从集成测试 test_insertion_sync_fails_with_timeout 中移除冗余超时。 #11343 (alesapin)。
  • 改进对 clickhouse-test 中挂起查询的检查。 #11321 (alexey-milovidov).
  • 如果服务器是以调试模式构建或启用了 sanitizers,则发出警告。#11304 (alexey-milovidov).
  • 现在,clickhouse-test 在运行测试之前会先检查服务器是否存活。 #11285 (alesapin)。
  • 修复可能存在偶发性失败的测试 00731_long_merge_tree_select_opened_files.sh。该测试失败频率不高,但我们在使用 ThreadFuzzer 做实验时发现其中存在潜在的竞争条件:#9814 示例参见链接#11270alexey-milovidov)。
  • 如果 curl 调用超时,则在 CI 中重新运行测试。这可能是由于我们的 CI 基础设施中常见的系统挂起(持续 10 秒以上)导致的。此更改修复了 #11267#11268alexey-milovidov)。
  • 由 @donmikel 添加 Join 表引擎的测试。该更改关闭了 #9158#11265alexey-milovidov)。
  • 修复了单元测试中几处不重要的小错误。 #11262 (alesapin).
  • 现在,cctz 库的链接器命令部分将不会再与其他库混在一起或被打乱顺序。#11213 (alesapin).
  • 将 /programs/server 拆分为可执行程序和库。#11186 (Ivan).
  • 改进 protobuf 和 gRPC 的构建脚本。#11172 (Vitaly Baranov)。
  • 启用此前无法运行的性能测试。#11158 (alexey-milovidov).
  • 在启动任何 CH 实例之前,为测试创建 S3 根 bucket。 #11142 (Pavel Kovalenko).
  • 为非常量多边形添加性能测试。 #11141 (alexey-milovidov).
  • 修复 00979_live_view_watch_continuous_aggregates 测试。#11024vzakaznikov)。
  • 新增在集成测试中在 tmpfs 上运行 ZooKeeper 的支持。 #11002 (alesapin).
  • 对 odbc-bridge 的等待使用指数退避机制。之前在我们的 CI 环境中,200 ms 的等待时间不够。#10990 (alexey-milovidov).
  • 修复非确定性测试。#10989alexey-milovidov)。
  • 为外部数据为空的情况添加了测试。#10926alexey-milovidov)。
  • 数据库会在每次测试中重新创建,这样可以更好地隔离各个测试。#10902 (alexey-milovidov).
  • 在列相关代码中添加了更多断言。 #10833 (alexey-milovidov).
  • 与 sanitizers 更好地配合使用。在 sanitizer 失败时的消息中打印 query_id 信息。#10832 (alexey-milovidov)。
  • 修复“Split build smoke test”检查中的明显竞态条件。#10820 (alexey-milovidov).
  • 修复 MergeTreeIndexFullText 中 MSan 的误报。该问题最初出现在 #9968#10801alexey-milovidov)。
  • 为 MariaDB 客户端库添加 MSan 抑制规则。#10800 (alexey-milovidov).
  • GRPC 的 make 无法找到 protobuf 文件,通过在 makefile 中添加正确的路径进行了修复。 #10794 (mnkonkova).
  • 为 base、utils、programs 启用额外警告(-Weverything)。注意,我们已在大部分代码中启用了该选项。#10779 (alexey-milovidov)。
  • #10396 中,对来自库的警告抑制被误设为 public。#10776alexey-milovidov)。
  • 恢复在 #10396 中被误删的补丁。#10774 (alexey-milovidov)。
  • 修复性能测试中的错误,第二部分。 #10773 (alexey-milovidov).
  • 修复性能测试中的错误。 #10766 (alexey-milovidov).
  • 将交叉编译构建更新为使用 clang-10 编译器。#10724Ivan)。
  • 更新 RPM 软件包的安装说明。此修改由 Denis(TG 账号 @ldviolet)提出,并由 Arkady Shejn 实现。#10707alexey-milovidov)。
  • 尝试修复 tests/queries/0_stateless/01246_insert_into_watch_live_view.py 测试。#10670vzakaznikov)。
  • 修复并重新启用 00979_live_view_watch_continuous_aggregates.py 测试用例。#10658 (vzakaznikov).
  • 修复 ASan 压力测试中的 OOM。 #10646 (alexey-milovidov).
  • 修复在迁移到 clang-10 后出现在 HashTable 中的 UBSan 报告(对 nullptr 执行加零操作)。 #10638 (alexey-milovidov)。
  • 在编译时处理 tzdata 的过程中,移除对 ld(bfd)链接器的外部调用。#10634 (alesapin)。
  • 允许使用 lld 链接 blob(资源)。 #10632 (alexey-milovidov).
  • 修复 LZ4 库中 UBSan 报告的问题。#10631alexey-milovidov)。另见 https://github.com/lz4/lz4/issues/857
  • 将 LZ4 更新到最新的开发分支。#10630 (alexey-milovidov)。
  • 添加了自动生成的、包含稳定版本列表的机器可读文件。#10628 (alexey-milovidov)。
  • 修正 capnp::UnalignedFlatArrayMessageReadercapnproto 版本检查。#10618Matwey V. Kornilov)。
  • 在测试中降低内存占用。 #10617 (alexey-milovidov).
  • 修复新 live view 测试中的硬编码超时时间。 #10604 (vzakaznikov).
  • 将 tests/queries/0_stateless/helpers/client.py 中打开客户端的超时时间调大。#10599vzakaznikov)。
  • 为 clang 构建启用 ThinLTO,作为 #10435 的后续工作。#10585Amos Bird)。
  • 添加模糊测试工具并为 OSS-Fuzz 集成做准备。 #10546 (kyprizel).
  • 修复 FreeBSD 下的构建。#10150Ivan)。
  • 为查询测试新增基于 pytest 框架的构建。#10039Ivan)。

ClickHouse 版本 v20.4

ClickHouse 版本 v20.4.8.99-stable 2020-08-10

Bug 修复

  • 修复了当将 Unix 时间戳作为参数传入时,parseDateTimeBestEffort 函数中的错误。该修复解决了 #13362#13441alexey-milovidov)。
  • 修复了在包含 NaN 值的 Float 类型上调用 uniqExacttopKsumDistinct 等类似聚合函数时,可能出现的性能较低和结果略有偏差的问题。该问题还会在调试构建中触发 assert。本修复对应 #12491#13254alexey-milovidov)。
  • 修复了在 if 函数中使用可为空的 constexpr 作为条件且该条件不是字面量 NULL 时的问题。修复了 #12463#13226alexey-milovidov)。
  • 修复了在 arrayElement 函数中,当数组元素为 Nullable 且数组下标也为 Nullable 时触发的断言失败问题。此修复解决了 #12172#13224alexey-milovidov)。
  • 修复了包含函数的错误索引分析问题。该问题在读取 MergeTree 表时可能导致错误地裁剪数据分片。修复了 #13060。修复了 #12406#13081Anton Popov)。
  • 修复了在从本地副本执行 SELECT 查询时对线程数施加的不必要限制。#12840 (Nikolai Kochetov).
  • 修复了在使用 WITH TOTALS 的查询中,数据中可能出现的多余溢出行。#12747 (Nikolai Kochetov).
  • 修复了在 IN 子句中将较大 tuple 解释为函数时的性能问题。出于某种难以理解的原因,用户可能会写成 WHERE x IN tuple(1, 2, ...),而不是 WHERE x IN (1, 2, ...)#12700Anton Popov)。
  • 修复了 input_format_parallel_parsing 的内存追踪问题(通过将线程附加到线程组来实现)。 #12672 (Azat Khuzhin).
  • 修复了 #12293,在子查询包含 WITH 子句时允许进行谓词下推。#12663 (Winter Zhang).
  • 修复了 #10572 中与常量表达式相关的 Bloom Filter 索引问题。#12659Winter Zhang)。
  • 修复了在 broker 不可用等情况下 StorageKafka 中出现的 SIGSEGV 问题。#12658 (Azat Khuzhin).
  • 增加了函数 ifArray(UUID) 参数的支持。修复了 #11066#12648alexey-milovidov)。
  • 修复了采用缓存布局的外部字典中的竞态条件,该问题可能导致服务器崩溃。#12566 (alesapin).
  • 在执行 DROP TABLE 时,现在也会删除 Distributed 表的数据(来自异步 INSERT 的数据块)。 #12556 (Azat Khuzhin).
  • 修复了在 enable_mixed_granularity_parts=1 时执行 ALTER DELETE 查询会导致旧分片损坏的问题。修复了 #12536#12543alesapin)。
  • 改进了函数 in 在参数数量无效时的异常信息。 #12529 (Anton Popov).
  • 修复了从紧凑数据片段读取时的性能问题。#12492 (Anton Popov)。
  • 修复了在使用字典进行 JOIN 时的崩溃问题,当通过字典键的表达式进行连接时会出现该问题:t JOIN dict ON expr(dict.id) = t.id。在这种情况下禁用字典 JOIN 优化。#12458Artem Zuikov)。
  • 修复了使用 StorageMerge 时可能出现的段错误问题。关闭 #12054#12401tavplubix)。
  • 修复了 WITH FILL 修饰符中列顺序不固定的问题。此前不会遵循 ORDER BY 语句中的列顺序。#12306 (Anton Popov).
  • 当存在按虚拟列(例如 Merge 表中的 _table)或系统表中的“索引列”过滤数据的表达式(例如在查询 system.tables 时按数据库名过滤),且该表达式返回 Nullable 类型时,避免触发 “bad cast” 异常。修复了 #12166#12305alexey-milovidov)。
  • 在 TrieDictionary 加载失败时显示错误。#12290 (Vitaly Baranov).
  • 函数 arrayFill 在处理空数组时行为不正确,可能导致崩溃。本次修复解决了 #12263#12279alexey-milovidov)。
  • LowCardinality 类型实现了到共同类型的转换。从而可以对包含 LowCardinality 列以及其他列的表执行 UNION ALL 操作。修复了 #8212。修复了 #4342#12275alexey-milovidov)。
  • 修复了在进行多次连续插入时,StorageFile 中某些特殊类型的 header 被重复写入的问题。此修复解决了 #6155#12197Nikita Mikhaylov)。
  • 修复了 UInt8 类型在取值不为 0 或 1 时的逻辑函数行为。#12196 (Alexander Kazakov)。
  • 将 max_memory_usage* 的上限限定为进程的常驻内存大小。#12182 (Azat Khuzhin).
  • 在 GROUP BY 单射函数消除过程中,修复了对 dictGet 参数的检查。#12179 (Azat Khuzhin).
  • 如果 ODBC 连接不支持 schema,则不要将字典源的表名拆分为 schema 名和表名本身。 #12165 (Vitaly Baranov).
  • 修复了 ALTER DELETE 中的错误逻辑,该逻辑会在条件计算结果为 NULL 时导致记录被删除。此修复解决了 #9088。并关闭了 #12106#12153alexey-milovidov)。
  • 修复了在存在别名时,将查询转换后发送到外部 DBMS(例如 MySQL、ODBC)的逻辑。这修复了 #12032#12151alexey-milovidov)。
  • 修复了整数除法中可能出现的溢出问题。解决了 #12119#12140alexey-milovidov)。
  • 修复了 greatCircleDistancegeoDistance 中潜在的无限循环问题。这修复了 #12117#12137 (alexey-milovidov)。
  • 规范化对 "pid" 文件的处理逻辑。在之前的版本中,如果服务器在未正常关闭的情况下被强制终止,并且存在另一个进程,其 pid 与之前运行的服务器相同,则服务器可能会拒绝启动。此外,即使有另一个服务器正在运行,在服务器启动失败的情况下 pid 文件也可能被删除。此更改修复了 #3501#12133alexey-milovidov)。
  • 修复了依赖字典的 ENGINE=Dictionary 表的处理逻辑。修复了 #10994。修复了 #10397#12116Vitaly Baranov)。
  • 修复了由于设置的线程总数上限错误而导致带有 UNION 的 SELECT 查询性能问题。修复了 #12030#12103Nikolai Kochetov)。
  • 修复了由 -StateResample 组合器导致的段错误。#12092Anton Popov)。
  • 修复了在 system.quey_log 中针对 SELECT 查询时 result_rowsresult_bytes 指标为空的问题。修复了 #11595#12089Nikolai Kochetov)。
  • 修复了从 VIEW 中执行 SELECT 时对线程数量的多余限制。解决了 #11937#12085Nikolai Kochetov)。
  • 修复了在为 PREWHERE 使用错误类型时可能出现的崩溃问题。修复了 #12053#12060#12060Nikolai Kochetov)。
  • 修复了在 LowCardinality 类型下使用函数 defaultValueOfArgumentType 时出现的错误 Expected single dictionary argument for function,对应问题 #11808#12056Nikolai Kochetov)。
  • 修复了在高阶函数使用 Tuple(LowCardinality) 参数时引发的 Cannot capture column 错误。修复了 #9766#12055Nikolai Kochetov)。
  • 在加载数据库时并行解析表的元数据,解决了在表数量较多时服务器启动缓慢的问题。 #12045 (tavplubix).
  • 使 topK 聚合函数在处理 Enum 类型时返回 Enum 类型。修复了 #3740#12043alexey-milovidov)。
  • 修复了约束检查,现在会验证约束是否为常量表达式。这修复了 #11360#12042alexey-milovidov)。
  • 修复了对包含 Nullable 列的元组进行比较时的错误。已修复 #11985#12039Nikolai Kochetov)。
  • 修复了在 allow_introspection_functions=0 时访问权限计算错误的问题。 #12031 (Vitaly Baranov).
  • 修复了在调用函数 if 时,当参数为大小不同的 FixedString 类型时会导致结果不正确和潜在崩溃的问题。此更改修复了 #11362#12021 (alexey-milovidov).
  • 如果查询只返回函数 neighbor 的一个表达式,那么当该函数以偏移量 -9223372036854775808 调用时,可能会返回空结果。此更改修复了 #11367#12019alexey-milovidov)。
  • 修复了在 allow_ddl=0 时访问权限计算的问题。#12015 (Vitaly Baranov).
  • 修复了 generateRandom 中可能导致崩溃的潜在数组大小溢出问题。这修复了 #11371#12013alexey-milovidov)。
  • 修复了潜在的浮点运算异常。此更改关闭了 #11378#12005alexey-milovidov)。
  • 修复了服务器启动时日志消息中错误的配置项名称。#11997alexey-milovidov)。
  • 已修复在 Values 格式中出现的 Query parameter was not set 错误。修复了 #11918#11936tavplubix)。
  • 在查询(参数化查询)中保留替换所使用的别名。修复了 #11914#11916alexey-milovidov)。
  • 修复了从默认存储策略更改为其他策略时未发生数据移动的错误。#11893 (Vladimir Chebotarev).
  • 修复了解析 DateTime64 时可能出现的浮点运算异常。此修复解决了 #11374#11875alexey-milovidov)。
  • 修复了通过 HTTP 接口的内存统计问题(在 wait_end_of_query=1 时影响可能较大)。 #11840 (Azat Khuzhin).
  • 在进行相等性比较之前解析存储在 ZooKeeper 中的元数据。#11739 (Azat Khuzhin).

性能改进

  • 在使用字面量的 IN 运算符时未使用索引,导致在 v19.3 左右引入了性能回归问题。本修复解决了 #10574#12062nvartolomei)。

构建/测试/打包改进

  • 在 Dockerfile 中首次执行 apt-get update 之前安装 ca-certificates#12095Ivan Blinkov)。

ClickHouse 发布 v20.4.6.53-stable 2020-06-25

Bug 修复

  • 修复在 PREWHERE 条件中使用 Nullable 列导致的罕见崩溃问题。作为对 #11608 的后续修复。#11869Nikolai Kochetov)。
  • 不再允许在高阶函数内部使用 arrayJoin。它会导致协议同步出错。此更改关闭了 #3933#11846 (alexey-milovidov)。
  • 修复 FixedString 与常量 String 比较时产生错误结果的问题。此修复对应 #11393。该缺陷首次出现在 20.4 版本中。#11828alexey-milovidov)。
  • 修复 if() 在条件中包含 NULL 时返回结果错误的问题。#11807 (Artem Zuikov).
  • 修复查询线程数过多的问题。#11788 (Nikolai Kochetov)。
  • 修复了诸如 SELECT *, xyz.* 这类查询的异常行为,此前在本应报错的情况下却成功执行。#11753 (hexiaoting)。
  • 现在,在执行元数据 ALTER 操作期间将会取消复制拉取操作。 #11744 (alesapin).
  • 修复了由于在 Values 输入格式中对复杂字面量类型推断错误而导致的 LOGICAL_ERROR。 #11732 (tavplubix).
  • 修复在常量列上使用 ORDER BY ... WITH FILL 的问题。#11697Anton Popov)。
  • 在与 XDBC bridge 通信时正确设置超时时间。此前在检查 bridge 存活状态和接收元信息时未正确应用超时时间。#11690alexey-milovidov)。
  • 修复在与包含别名的 ORDER BY 子句一起使用 LIMIT n WITH TIES 时的问题。#11689 (Anton Popov).
  • 修复导致 system.mutations 状态不正确的错误。该错误可能会导致其显示整个 mutation 已经完成,但服务器的复制队列中仍然存在 MUTATE_PART 任务并继续尝试执行它们。此修复对应 #11611#11681alesapin)。
  • 添加对带有大小写不敏感标志的正则表达式的支持。修复了 #11101#11506#11649 (alexey-milovidov)。
  • 如果启用了行级安全性,则移除对简单计数查询的优化。在之前的版本中,用户获得的是表中记录的总数,而不是过滤后的记录总数。这修复了 #11352#11644alexey-milovidov)。
  • 修复用于 String 类型的 Bloom 过滤器(数据跳过索引)。#11638 (Azat Khuzhin)。
  • 修复在 prewhere 条件中使用 Nullable 列时导致的罕见崩溃。(可能与 #11572 有关)。#11608Nikolai Kochetov)。
  • 修复在从 Buffer 表进行采样读取的查询中出现的 Block structure mismatch 错误。 #11602 (Nikolai Kochetov).
  • 修复在 exception.code() % 256 = 0 时 clickhouse-client 返回的不正确退出码。 #11601 (filimonov).
  • 修复了服务器启动时关于“Mark cache size was lowered”的日志消息中的一个轻微错误。此更改从而关闭了 #11399#11589alexey-milovidov)。
  • 修复在包含 PREWHERE column in (subquery)ARRAY JOIN 的查询中出现的报错 Size of offsets does not match size of column#11580 (Nikolai Kochetov)。
  • 修复了 SHOW CREATE TABLE 中的罕见段错误。修复了 #11490,对应的合并请求为 #11579tavplubix)。
  • HTTP 会话中的所有查询都使用相同的 query_id。已修复该问题。 #11578 (tavplubix).
  • 现在,clickhouse-server Docker 容器在检查服务器是否存活时将优先使用 IPv6。#11550 (Ivan Starkov)。
  • 修复 <node> 的 shard_num/replica_num(此前会导致 use_compact_format_in_distributed_parts_names 失效)。#11528 (Azat Khuzhin)。
  • 修复了可能在删除表时导致异常的竞态条件。这有点棘手,但完全无害。如果你想要详细解释,只需在 Telegram 上给我发个消息即可。 #11523 (alesapin).
  • 修复在使用以 -State 结尾的聚合函数时,如果在聚合过程中抛出异常会导致的内存泄漏问题。此变更修复了 #8995#11496alexey-milovidov)。
  • 如果数据跳过索引依赖的列会在后台合并过程中被修改(适用于 SummingMergeTree、AggregatingMergeTree 以及 TTL GROUP BY),则其计算会不正确。通过将索引计算移动到合并之后(即在合并后的数据上计算索引),已修复此问题。#11162Azat Khuzhin)。
  • 移除旧的 libunwind 补丁。https://github.com/ClickHouse-Extras/libunwind/commit/500aa227911bd185a94bfc071d68f4d3b03cb3b1#r39048012 这使我们能够在 clang 构建中禁用 -fno-omit-frame-pointer 选项,从而平均至少提升 1% 的性能。#10761Amos Bird)。
  • 修复在同时使用 'FINAL' 修饰符和 'ORDER BY' 优化时,对被包装在函数中的主键的使用方式。#10715 (Anton Popov).

构建/测试/打包改进

ClickHouse 版本 v20.4.5.36-stable 2020-06-10

错误修复

  • 修复在启用 min_bytes_to_use_direct_io 且 PREWHERE 处于激活状态,并使用 SAMPLE 或大量线程时可能出现的错误 Data compressed with different methods。此更改修复了 #11539#11540alexey-milovidov)。
  • 修复编解码器返回的压缩大小。 #11448 (Nikolai Kochetov)。
  • 修复当某列使用带有非字面量参数的压缩编解码器时导致的服务器崩溃问题。修复 #11365#11431alesapin)。
  • 修复点为 NaN 时的 pointInPolygon。修复了 #11375#11421Alexey Ilyukhov)。
  • 修复在表未成功创建时,MergeTree 引擎关闭过程中可能出现的未初始化内存读取问题。#11420alexey-milovidov)。
  • 修复了当参数超出纬度/经度范围时的 geohashesInBox。 #11403 (Vasily Nemkov).
  • 修复了可能导致在使用外部排序和 LIMIT 的查询中出现 Pipeline stuck 错误的问题。修复了 #11359#11366Nikolai Kochetov)。
  • 在 ReplicatedMergeTree 中发送数据分片时移除冗余锁。#11354 (alesapin).
  • 修复 clickhouse-client 在多行模式下对 \G(纵向输出)的支持问题。此更改解决了 #9933#11350alexey-milovidov)。
  • 修复在使用 Lazy 数据库时可能出现的段错误。 #11348 (alexey-milovidov).
  • 修复 quantilesExactWeightedArray 中的崩溃问题。#11337 (Nikolai Kochetov)。
  • 现在在执行 ALTER 查询修改元数据之前会先停止合并。#11335 (alesapin)。
  • 在设置 parallel_view_processing = 1 时重新启用对 MATERIALIZED VIEW 的并行写入。修复了 #10241#11330Nikolai Kochetov)。
  • 修复 visitParamExtractRaw 在提取的 JSON 中包含不成对的 { 或 [ 的字符串时出现的问题。 #11318 (Ewout)。
  • 修复 ThreadPool 中极其罕见的竞态条件。 #11314 (alexey-milovidov)。
  • 修复 clickhouse-copier 中一个轻微的数据竞争问题。由集成测试发现。#11313 (alexey-milovidov)。
  • 修复转换中潜在的未初始化内存使用问题。例如:SELECT toIntervalSecond(now64())#11311alexey-milovidov)。
  • 修复了当表的主键中包含 Array 列,且查询使用 emptynotEmpty 函数按该列进行过滤时,索引分析无法工作的问题。此修复对应 #11286#11303alexey-milovidov)。
  • 修复了一个问题:当查询速度估算不正确时,如果查询被 max_network_bandwidthmax_execution_speedpriority 设置限流,min_execution_speed 的限制可能不起作用或工作异常。将 timeout_before_checking_execution_speed 的默认值更改为非零值,否则 min_execution_speedmax_execution_speed 设置将不会生效。修复了 #11297#5732#6228。可用性改进:在 clickhouse-client 中避免将异常信息与进度条拼接。#11296 (alexey-milovidov)。
  • 修复在调用 SET DEFAULT ROLE 时传入错误参数导致的崩溃。此更改修复了 #10586#11278Vitaly Baranov)。
  • 修复读取 Protobuf 格式异常数据时发生的崩溃。修复了 #5957#11203#11258Vitaly Baranov)。
  • 修复了一个 bug:在所有键均已过期时,cache-dictionary 可能返回默认值而不是正确值。此问题仅影响字符串字段。#11233Nikita Mikhaylov)。
  • 修复在从 VIEW 读取且内部查询中包含常量时出现的错误 Block structure mismatch in QueryPipeline。修复了 #11181#11205Nikolai Kochetov)。
  • 修复潜在异常 Invalid status for associated output#11200 (Nikolai Kochetov).
  • 修复在高阶函数中,当捕获的参数为 Array(Array(LowCardinality)) 时可能出现的 Cannot capture column 错误。 #11185 (Nikolai Kochetov).
  • 修复了 S3 通配符匹配(globbing)在键数量超过 1000 且使用某些后端时可能失败的问题。#11179 (Vladimir Chebotarev)。
  • 如果数据跳过索引依赖于在后台合并过程中将被修改的列(对于 SummingMergeTree、AggregatingMergeTree 以及 TTL GROUP BY),则索引会被错误计算。该问题已通过将索引计算移动到合并之后,在合并后的数据上计算索引来修复。 #11162 (Azat Khuzhin).
  • 修复 Kafka 在基于限制进行重新调度时的性能问题,此前这些限制会被无条件应用。#11149 (filimonov).
  • 修复了在对使用 Kafka 引擎的表执行 DROP 操作(或在服务器重启期间)时偶发出现的挂起问题。#11145 (filimonov).
  • 修复针对简单查询过度预留线程的问题(在更改 pipeline 之后部分失效的用于减少线程数的优化)。 #11114 (Azat Khuzhin).
  • 通过保留表达式的顺序(这足以修复该问题),并强制聚合器优先使用列名而不是索引,修复在启用谓词优化(enable_optimize_predicate_expression=1)时、对包含 HAVING 子句的分布式查询(即需要在发起查询的服务器上进行过滤的情况)的处理。修复:#10613#11413#10621Azat Khuzhin)。

构建/测试/打包改进

ClickHouse 发布 v20.4.4.18-stable 2020-05-26

与 v20.4.3.16-stable 相比没有变更。

ClickHouse 发布 v20.4.3.16-stable 2020-05-23

Bug 修复

  • 当没有任何内容被最终确定时,移除了 mutation 完成任务中的日志记录。#11109 (alesapin)。
  • 修复 registerDiskS3 中的内存泄漏。 #11074 (Pavel Kovalenko).
  • 修复了在停止 Kafka 引擎表时可能出现的数据丢失问题。#11048 (filimonov).
  • 修复了 parseDateTime64BestEffort 参数解析错误。#11038 (Vasily Nemkov).
  • 修复了在表未成功创建时,MergeTree 中极少数情况下可能出现的潜在 use-after-free 错误。#10986, #10970 (alexey-milovidov).
  • 修复了 Atomic 数据库的元数据(重命名时使用的相对路径)和数据(符号链接使用的相对路径)的处理方式。#10980 (Azat Khuzhin).
  • 修复了在 Atomic 数据库引擎中并发执行 ALTERDROP DATABASE 查询时可能导致的服务器崩溃问题。#10968 (tavplubix).
  • 修复了 getRawData() 方法中原始数据大小错误的问题。#10964 (Igr).
  • 修复了 20.1 及更早版本之间在两级聚合上的不兼容问题。当在发起节点和远程节点上使用不同版本的 ClickHouse,且 GROUP BY 结果集较大并且聚合是基于单个 String 字段执行时,就会触发该不兼容问题。这会导致结果中同一个键对应多行未合并的记录。#10952 (alexey-milovidov)。
  • 修复了 DistributedBlockOutputStream 发送部分写入的文件的问题。 #10940 (Azat Khuzhin).
  • 修复了在执行 SELECT count(notNullIn(NULL, [])) 时出现的崩溃问题。#10920 (Nikolai Kochetov)。
  • 修复了在对 Kafka 表引擎执行 DROP 操作时(或在服务器重启期间)偶发的挂起问题。 #10910 (filimonov).
  • 修复了类似 a TO b, c TO a 这样的多个 ALTER RENAME 语句无法执行的问题。 #10895 (alesapin).
  • 修复了在针对同一列从多个线程获取聚合函数状态结果时可能出现的竞态条件。这种情况只会在以下场景中发生:当你在读取使用 Memory 引擎、并以 AggregateFunction 存储 quantile* 函数状态的表时调用 finalizeAggregation 函数。#10890Nikolai Kochetov)。
  • 修复了 Distributed 表中元组的向后兼容性问题。 #10889 (Anton Popov).
  • 修复了在 StringHashTable 中查找不存在的键时出现的 SIGSEGV#10870 (Azat Khuzhin).
  • 修复了在从使用 Atomic 引擎的数据库中删除 LiveView 表之后出现的 WATCH 挂起问题。#10859 (tavplubix).
  • 修复了 ReplicatedMergeTree 中的一个缺陷,该缺陷可能会导致某些包含 OPTIMIZEALTER 查询在某个副本变为非活动状态后仍然一直等待该副本,从而发生挂起。#10849 (tavplubix)。
  • 现在,当参与 CONSTRAINT 表达式的列被重命名时,会同步更新相应的约束。修复了 #10844#10847alesapin)。
  • 修复了 cache-dictionary 中可能读取未初始化内存的问题。 #10834 (alexey-milovidov).
  • 在调用 Block::sortColumns() 后修复了列顺序。#10826 (Azat Khuzhin)。
  • 修复了在未请求为标识符添加引号时 ODBC bridge 出现的问题。修复了 #7984#10821alexey-milovidov)。
  • 修复了 DateLUT 中的 UBSanMSan 报告问题。#10798 (alexey-milovidov)。
  • 修正了键条件中的错误类型转换。修复了 #6287#10791Andrew Onyshchuk)。
  • 修复了 parallel_view_processing 的行为。现在,即使发生异常,所有对 MATERIALIZED VIEW 的插入也应无一例外地完成。修复了 #10241#10757 (Nikolai Kochetov)。
  • 修复了在与 -State 组合使用时 -OrNull-OrDefault 组合器的问题。#10741 (hcz)。
  • 修复函数 h3EdgeAngle 中可能发生的缓冲区溢出问题。 #10711 (alexey-milovidov).
  • 修复了在表包含大量数据分片时导致并发 ALTER 操作被锁定的 bug。 #10659 (alesapin).
  • 修复了在服务器在表启动前关闭时,StorageBuffer 中出现的 nullptr 解引用问题。#10641 (alexey-milovidov)。
  • 修复了 optimize_skip_unused_shardsLowCardinality 搭配使用时的问题。 #10611 (Azat Khuzhin).
  • 修复了同步变更中对条件变量的处理。在某些情况下,发往该条件变量的信号可能会丢失。 #10588 (Vladimir Chebotarev).
  • 修复了在 loadStoredObject() 尚未完成时调用 createDictionary() 可能导致的崩溃问题。#10587 (Vitaly Baranov)。
  • 修复了在列 ALIAS 的默认表达式类型与列类型不同情况下的 SELECT 查询。#10563 (Azat Khuzhin)。
  • 实现了 DateTime64String 类型值之间的比较。#10560Vasily Nemkov)。
  • 默认禁用 GROUP BY sharding_key 优化(optimize_distributed_group_by_sharding_key 已经引入且默认关闭,这是由于对 sharding_key 的分析较为棘手,最简单的例子是在 sharding key 中使用 if),并修复其在 WITH ROLLUP/CUBE/TOTALS 下的行为。#10516 (Azat Khuzhin)。
  • 已修复 #10263#10486Azat Khuzhin)。
  • 添加了针对 max_rows_to_sort 设置的测试。#10268 (alexey-milovidov).
  • 为创建 Bloom Filter 索引新增了向后兼容支持。#10551#10569 (Winter Zhang)。

ClickHouse 发行版 v20.4.2.9,2020-05-12

向后不兼容的变更

  • 系统表(例如 system.query_logsystem.trace_logsystem.metric_log)对于大小小于 10 MiB 的数据分片使用紧凑数据分片格式。紧凑数据分片格式自 20.3 版本起开始支持。如果你打算降级到低于 20.3 的版本,需要手动删除 /var/lib/clickhouse/data/system/ 中系统日志表的数据。
  • 当字符串比较涉及 FixedString 且被比较参数长度不同时,比较时将长度较短的字符串视为已经填充至与长度较长字符串相同的长度。这样可以实现 SQL 兼容性,如果我们将 FixedString 数据类型视为对应 SQL 中的 CHAR。此更改修复了 #9272#10363alexey-milovidov
  • 使 SHOW CREATE TABLE 的输出改为多行。现在更易阅读,也更接近 MySQL。#10049Azat Khuzhin
  • 新增设置 validate_polygons,用于 pointInPolygon 函数,默认启用。#9857alexey-milovidov

新功能

  • 增加对从 ClickHouse 到 Zookeeper 的安全连接的支持 #10184 (Konstantin Lebedev)
  • 支持自定义 HTTP 处理器。说明见 #5436#7572Winter Zhang
  • 添加 MessagePack 输入/输出格式。#9889 (Kruglov Pavel)
  • 新增 Regexp 输入格式。 #9196 (Kruglov Pavel)
  • 新增输出格式 Markdown,用于在 Markdown 文档中嵌入表格。#10317 (Kruglov Pavel)
  • 为字典添加了对自定义 settings 部分的支持,并修复了问题 #2829#10137Artem Streltsov
  • CREATE DICTIONARY 的 DDL 查询添加了对自定义设置的支持 #10465Artem Streltsov
  • 新增一个简单的服务器级内存分析器,当服务器内存使用量超过下一个分配阈值时收集内存分配上下文信息。 #10444 (alexey-milovidov)
  • 添加设置 always_fetch_merged_part,用于限制副本自行执行合并,并始终优先从其他副本下载。 #10379 (alesapin)
  • 添加函数 JSONExtractKeysAndValuesRaw,用于从 JSON 对象中提取原始数据 #10378 (hcz)
  • 将操作系统的内存使用情况添加到 system.asynchronous_metrics#10361 (alexey-milovidov)
  • 为函数 leastgreatest 增加了泛型版本。现在它们可以处理任意数量、任意类型的参数。此更改修复了 #4767 #10318alexey-milovidov
  • 现在 ClickHouse 在自身内部控制字典源的超时。向缓存字典配置中新增了两个配置项:strict_max_lifetime_seconds(默认等于 max_lifetime),以及 query_wait_timeout_milliseconds(默认值为一分钟)。第一个配置项在配合 allow_read_expired_keys 设置使用时也很有用(用于禁止读取已经严重过期的键)。#10337 (Nikita Mikhaylov)
  • 添加 log_queries_min_type 参数,用于筛选哪些记录会被写入 query_log #10053 (Azat Khuzhin)
  • 新增函数 isConstant。该函数用于检查其参数是否为常量表达式,并返回 1 或 0。主要用于开发、调试和演示。 #10198 (alexey-milovidov)
  • 添加 joinGetOrNull 函数,在键缺失时返回 NULL,而不是返回默认值。 #10094 (Amos Bird)
  • 如果设置了选项 transform_null_in,则在 IN 运算符中将 NULL 视为等于 NULL#10085 (achimbab)
  • 为 MergeTree 表引擎系列添加 ALTER TABLE ... RENAME COLUMN#9948 (alesapin)
  • 支持并行分布式 INSERT SELECT 语句。 #9759 (vxider)
  • 新增支持在不使用 distributed_group_by_no_merge 时查询 Distributed over Distributed ... #9923 (Azat Khuzhin)
  • 添加函数 arrayReduceInRanges,用于在给定范围内聚合数组元素。#9598 (hcz)
  • 在 Prometheus exporter 中添加 Dictionary 状态信息。 #9622 (Guillaume Tassery)
  • 添加函数 arrayAUC #8698 (taiyang-li)
  • 支持 DROP VIEW 语句,以获得更好的 TPC-H 兼容性。#9831 (Amos Bird)
  • 新增 windowFunnel() 的 'strict_order' 选项 #9773 (achimbab)
  • 支持 DATETIMESTAMP SQL 运算符,例如 SELECT date '2001-01-01' #9691 (Artem Zuikov)

实验特性

  • 新增实验性数据库引擎 Atomic。它支持非阻塞的 DROPRENAME TABLE 查询,以及原子性的 EXCHANGE TABLES t1 AND t2 查询 #7512 (tavplubix)
  • 初步支持基于 S3 的 ReplicatedMergeTree(目前实现方式尚不理想) #10126 (Pavel Kovalenko)

错误修复

  • 修复了在 MATERIALIZED VIEW 的内部查询中包含依赖表时标量结果计算错误的问题 #10603 (Nikolai Kochetov)
  • 修复了一个问题:当 readonly=2cancel_http_readonly_queries_on_client_close=1 时,客户端关闭连接会导致 HTTP 请求卡住。 #10684 (tavplubix)
  • 修复了在服务器启动时抛出异常会导致 StorageBuffer 段错误的问题。修复了 #10550 #10609tavplubix
  • 查询语句 SYSTEM DROP DNS CACHE 现在也会清除用于检查用户是否被允许从特定 IP 地址发起连接的缓存 #10608 (tavplubix)
  • 修复在单个查询中多次对同一集合使用 IN 运算符的情况。修复了 #10539 #10686Anton Popov
  • 修复 generateRandom 在处理嵌套类型时的崩溃问题。修复了 #10583#10734Nikolai Kochetov
  • 修复 SummingMergeTreeLowCardinality(FixedString) 键列在合并后可能出现的数据损坏。修复 #10489#10721Nikolai Kochetov
  • 修复 aggregation_memory_efficient_merge_threads 设置项的逻辑。 #10667 (palasonic1)
  • 修复总计消失的问题。如果查询包含 JOIN 或带有外部 WHERE 条件的子查询,总计可能会被错误过滤掉。修复了 #10674 #10698Nikolai Kochetov
  • 修复在启用 distributed_aggregation_memory_efficient 时远程查询无法并行执行的问题。对应修复 #10655 #10664Nikolai Kochetov
  • 修复在使用 LIMIT 的查询中可能出现的行数不正确问题。对应修复了 #10566#10709#10660Nikolai Kochetov
  • 修复在某些情况下将紧凑部分合并到另一紧凑部分后可能出现的索引损坏问题。 #10531 (Anton Popov)
  • 修复了一种问题:当 mutation 已完成所有 part,却仍然停留在 is_done=0 状态。#10526 (alesapin)
  • 修复在 Unix 纪元起点,对于相对于 UTC 具有小数偏移的时区出现的溢出问题。修复了 #9335#10513alexey-milovidov
  • 改进输入格式的诊断能力。修复了 #10204 #10418tavplubix
  • 修复 simpleLinearRegression() 在处理大整数时的数值溢出 #10474 (hcz)
  • 修复 Distributed 引擎关闭过程中的 use-after-free,避免等待发送所有批次 #10491 (Azat Khuzhin)
  • 向 clickhouse-server Docker 镜像添加 CA 证书 #10476 (filimonov)
  • 修复在使用 addressToLine 函数或 AggregateFunctionState 列时可能出现的罕见无限循环。 #10466 (Alexander Kuzmenkov)
  • 在分布式查询过程中处理 ZooKeeper 的 “no node error” 错误 #10050 (Daniel Chen)
  • 修复了在列的默认值被修改后服务器无法附加表的错误。#10441 (alesapin)
  • 对 ALIAS 列,将默认表达式类型隐式转换为列类型 #10563 (Azat Khuzhin)
  • ATTACH DATABASE 失败时不要删除 metadata 目录 #10442 (Winter Zhang)
  • 避免对系统 tzdata 的依赖。修复在 CentOS 8 上加载 Africa/Casablanca 时区的问题。修复 #10211 #10425 (alexey-milovidov)
  • 修复了在使用 quorum 写入方式插入数据后又删除数据(DROP PARTITION、TTL 等)时出现的一些问题。这些问题会导致 INSERT 操作卡住,或者在 SELECT 查询中抛出误报异常。修复了 #9946 #10188Nikita Mikhaylov
  • 在创建 BloomFilter 索引时,检查参数的数量和类型 #9623 #10431 (Winter Zhang)
  • 优先使用 fallback_to_stale_replicas 而不要使用 skip_unavailable_shards,否则在同时设置了这两个选项且没有最新副本时,查询会失败(来自 @alex-zaitsev 的补丁)#10422 (Azat Khuzhin)
  • 修复了在包含 ARRAY JOIN、ORDER BY 和 LIMIT 的查询中可能返回不完整结果的问题。对应修复为 #10226#10427Vadim Plakhtinskiy
  • 在执行 DETACH/ATTACH 后将数据库名添加到字典名中,以修复 system.dictionaries 表和 SYSTEM RELOAD 查询 #10415 (Azat Khuzhin)
  • 修复处理器流水线中 extremes 可能产生的错误结果。 #10131 (Nikolai Kochetov)
  • 修复在启用 distributed_group_by_no_merge 设置时可能出现的潜在段错误(在 20.3.7.46 中由 #10131 引入)。#10399Nikolai Kochetov
  • 修复 Array(Tuple(...)) 数据类型错误的扁平化处理方式。修复了 #10259 #10390alexey-milovidov
  • 修正 JOIN 内部常量的列名,避免与 JOIN 外部常量的列名发生冲突 #9950 (Alexander Kuzmenkov)
  • 修正 Block::sortColumns() 之后的列顺序 #10826 (Azat Khuzhin)
  • 修复 ConcatProcessor 中在远程查询时可能出现的 Pipeline stuck 错误。 #10381 (Nikolai Kochetov)
  • 不要为聚合预留磁盘空间。修复 #9241 #10375 (Azat Khuzhin)
  • 修复针对那些相对于 UTC 的时区偏移曾在正负之间变更的时区(例如 Pacific/Kiritimati)时,datetime 函数行为错误的问题。修复了 #7202 #10369alexey-milovidov
  • 避免 dictIsIn 函数出现无限循环。修复 #515 #10365 (alexey-milovidov)
  • 默认禁用 GROUP BY sharding_key 优化功能,并修复其在 WITH ROLLUP/CUBE/TOTALS 下的问题 #10516 (Azat Khuzhin)
  • 在检查数据部分时同时检查错误代码,如果错误为“not enough memory”等内存不足类错误,则不要将该数据部分标记为损坏。修复了 #6269 #10364 (alexey-milovidov)
  • 在 system 系统表中显示未加载的字典信息。#10234 (Vitaly Baranov)
  • 修复在表启动前服务器关闭时,StorageBuffer 中的 nullptr 解引用问题。 #10641 (alexey-milovidov)
  • 修复了 ReplicatedMergeTreeDROPOPTIMIZE 之间的竞争条件。如果存在并发的 OPTIMIZE 查询,DROP 可能会在 ZooKeeper 的副本路径中留下垃圾内容。 #10312 (tavplubix)
  • 修复在同时混用逗号 JOIN 和 NAMES JOIN 的查询中出现的 'Logical error: CROSS JOIN has expressions' 错误。解决了 #9910 #10311Artem Zuikov
  • 修复了使用 max_bytes_before_external_group_by 的查询。 #10302 (Artem Zuikov)
  • 修复了解析器在某些情况下对最大递归深度限制处理存在的问题。这修复了 #10283。此修复可能会引入轻微的不兼容变更:通过 clickhouse-client 发送的较长且嵌套较深的查询可能会被拒绝执行,你需要相应地调整 max_query_sizemax_parser_depth 设置。#10295alexey-milovidov
  • 允许在包含多个 JOIN 的查询中使用 count(*)。修复 #9853 #10291 (Artem Zuikov)
  • 修复在使用 max_rows_to_group_bygroup_by_overflow_mode = 'break' 时出现的 Pipeline stuck 错误。 #10279 (Nikolai Kochetov)
  • 修复在使用 DDL 查询创建 range_hashed 字典时出现的 Cannot add column 错误,对应问题 #10093#10235alesapin
  • 修复一个极少发生的异常 Cannot drain connections: cancel first#10239 (Nikolai Kochetov)
  • 修复了一个问题:当用户尝试在 ENGINE = Replicated* 的表上执行 ALTER UPDATE/DELETE 时,ClickHouse 会抛出 "Unknown function lambda." 错误消息。现在用于检查非确定性函数的逻辑已经能够正确处理 lambda 表达式。#10237 (Alexander Kazakov)
  • 修复了在包含 Lazy 引擎的数据库上运行 SELECT ... FROM system.tables 时,可能在 StorageSystemTables 中出现的相对少见的段错误。 #10209 (Alexander Kazakov)
  • 修复在从 system.numberssystem.zeros 等无限数据源读取时,查询本应在 LIMIT 处停止却可能出现无限执行的问题。 #10206 (Nikolai Kochetov)
  • 修复了 Date 类型的 generateRandom 函数。这修复了 #9973。修复了一个边缘情况:向使用旧式分区的 MergeTree 表插入年份为 2106 的日期时,分区名称却被命名为 1970 年的问题。 #10218 (alexey-milovidov)
  • 当 View 的表定义与其 SELECT 查询不一致时,执行类型转换。此更改修复了 #10180#10022#10217alexey-milovidov
  • 修复在解析符合 RFC-2822 的字符串且星期几为星期二或星期四时的 parseDateTimeBestEffort 行为。此修复解决了 #10082 #10214alexey-milovidov
  • 修复 JOIN 内部常量列名可能与 JOIN 外部常量列名冲突的问题。 #10207 (alexey-milovidov)
  • 修复在包含 arrayJoin 函数时(某些场景) move-to-prewhere 优化的问题。这修复了 #10092 #10195alexey-milovidov
  • 修复原生 mysql-connector-java (JDBC) 的 SCRAMBLE 中出现分隔符的错误 #10140 (BohuTANG)
  • 修复在未指定数据库时执行访问检查会默认使用当前数据库的问题。 #10192 (Vitaly Baranov)
  • 修复对包含 compact parts 的表执行 ALTER 操作时出现的问题。 #10130 (Anton Popov)
  • 新增 allow_nondeterministic_mutations 设置,用于放宽在 mutation 中使用非确定性函数时的限制。 #10186 (filimonov)
  • 修复对字典执行的 DROP TABLE #10165 (Azat Khuzhin)
  • 在向 Distributed 表执行 INSERT 时,如果结构不匹配则自动转换数据块 #10135 (Azat Khuzhin)
  • 当按分区键将插入的块拆分为多个 part 时,记录的行数不正确(被记录为所有 part 的总和)。 #10138 (alexey-milovidov)
  • 为 MySQL 数据库引擎增加部分参数检查,并支持标识符参数 #10077 (Winter Zhang)
  • 修正在创建新副本时对 index_granularity_bytes 的错误检查,修复了 #10098#10121 (alesapin)
  • 修复 CHECK TABLE 在包含 skip 索引的表上的查询问题。#10068 (alesapin)
  • 修复嵌套表仅有一个分片时的 Distributed-over-Distributed 问题 #9997 (Azat Khuzhin)
  • 修复在包含 JOINUNION ALL 的查询中可能发生的数据行丢失问题。修复 #9826#10113。 ... #10099Nikolai Kochetov
  • 修复在使用本地 ClickHouse 服务器作为源时字典中的 bug。如果字典中的类型与源中的类型不兼容,可能会导致内存破坏。 #10071 (alesapin)
  • 修复了从旧版本 ClickHouse 升级时,如果不存在 /table/replicas/replica_name/metadata 节点,复制表无法启动的问题。修复了 #10037#10095alesapin
  • 修复错误 Cannot clone block with columns because block has 0 columns ... While executing GroupingAggregatedTransform。该错误会在启用 distributed_aggregation_memory_efficient 设置时出现,当分布式查询从不同分片读取混合了单级和两级聚合的聚合数据时触发。 #10063 (Nikolai Kochetov)
  • 修复启动时附加包含物化视图的数据库失败导致的死锁问题 #10054 (Azat Khuzhin)
  • 修复在对含有尾部零字节的字符串键执行 GROUP BY 时可能发生的段错误(#8636, #8925)。... #10025 (Alexander Kuzmenkov)
  • 修复在别名可能覆盖限定列名时导致分布式查询结果错误的问题。修复了 #9672 #9714 #9972Artem Zuikov
  • 修复 SYSTEM RESTART REPLICAS 中潜在的死锁问题 #9955 (tavplubix)
  • 修正用于远程查询执行的线程数量(自 20.3 起引入的性能回退)。当从 Distributed 表发出的查询在本地和远程分片上同时执行时会出现该问题。修复了 #9965 #9971Nikolai Kochetov
  • 修复了 ATTACH PART 中的 DeleteOnDestroy 逻辑(之前可能会导致已附加的 part 被自动删除),并新增了一些测试 #9410 (Vladimir Chebotarev)
  • 修复一个导致 ON CLUSTER DDL 查询在服务器启动时卡住的问题。#9927 (Gagan Arneja)
  • 修复在对某些数据库执行查询时的某个处理阶段未能获取所需表的错误。修复了 #9699#9949achulkov2
  • 修复在 JOINTOTALS 同时出现时触发的 "Not found column in block" 错误。修复了 #9839 #9939 (Artem Zuikov)
  • 修复在 CREATE USER 命令中对多个主机的解析 #9924 (Vitaly Baranov)
  • 修复 Join 表引擎中的 TRUNCATE 操作(#9917)。#9920Amos Bird
  • 修复 ReplicatedMergeTreedropoptimize 之间的竞争条件。#9901 (alesapin)
  • 在启用 optimize_skip_unused_shards 时修复 Distributed 的 DISTINCT 行为。#9808 (Azat Khuzhin)
  • 修复在 ALTER 语句中出现的 "scalar does not exist" 错误(#9878)。... #9904Amos Bird
  • 修复在 distributed_product_mode=\'local\' 模式下使用限定名称时的错误。修复了 #4756 #9891Artem Zuikov
  • 对于 INSERT 查询,现在分片会将来自发起端的设置限制在自身约束范围内,而不是抛出异常。此修复允许向约束不同的分片发送 INSERT 查询。此更改改进了对 #9447 的修复。#9852Vitaly Baranov
  • 在向 Kafka broker 提交 offset 时增加重试机制,因为如果在 offsets.commit.timeout.ms 指定的时间内 __consumer_offsets 主题没有足够的副本可用,它可能会拒绝提交 #9884 (filimonov)
  • 修复在 WHERE 中使用底层表虚拟列时 Distributed 引擎的行为 #9847 (Azat Khuzhin)
  • 修复了在某些情况下未正确使用函数参数指定时区的问题。 #9574 (Vasily Nemkov)
  • 修复在分布式表上执行同时包含 PREWHERE 和 WHERE 的查询且设置 distributed_product_mode = 'local' 时会出现的“具有相同别名的不同表达式”错误。#9871 (Artem Zuikov)
  • 修复在具有复合主键的表上执行变更时的过度内存消耗问题。这修复了 #9850#9860 (alesapin)
  • 修复根据设置 allow_introspection_functions 计算自省函数权限的逻辑。#9840 (Vitaly Baranov)
  • 修复在使用和不使用 Processors 时的 max_distributed_connections #9673 (Azat Khuzhin)
  • 在客户端修复了可能出现的异常 Got 0 in totals chunk, expected 1。该问题会在包含 JOIN 的查询中出现,当右表没有任何行时触发。示例:select * from system.one t1 join system.one t2 on t1.dummy = t2.dummy limit 0 FORMAT TabSeparated;。修复了 #9777。... #9823 (Nikolai Kochetov)
  • 修复在包含表列表之外(例如在 WHERE 子句中)使用 COMMA JOIN 的子查询时出现的 'COMMA to CROSS JOIN rewriter is not enabled or cannot rewrite query' 错误。修复了 #9782 #9830Artem Zuikov
  • 修复在设置 optimize_skip_unused_shards 时,由于键的表达式无法转换为其字段类型而导致的服务器崩溃问题 #9804 (Azat Khuzhin)
  • 修复 splitByString 中空字符串处理。#9767 (hcz)
  • 修复在 compact parts 上执行 ALTER TABLE DELETE COLUMN 时出错的问题。#9779 (alesapin)
  • 修复了通过 HTTP(使用 processors 管线)执行查询时 rows_before_limit_at_least 缺失的问题。修复了 #9730 #9757Nikolai Kochetov
  • 修复 ALTER 查询(mutation)中内存占用过多的问题。此修复解决了 #9533#9670#9754alesapin
  • 修复可能导致永久出现“Cannot schedule a task”错误的问题。#9154 (Azat Khuzhin)
  • 修复外部字典 DDL 中反引号转义的缺陷。修复了 #9619#9734 (alesapin)
  • 修复了 text_log 中的数据竞争问题,但它不会导致任何实际故障。#9726 (alexey-milovidov)
  • 修复复制中的一个错误:当用户在上一版本中执行过 mutation 操作时,会导致复制无法进行。此更改修复了 #9645#9652 (alesapin)
  • 修复了 sumKahansumWithOverflow 的内部函数名称错误。这会在远程查询中使用这些函数时导致异常。#9636 (Azat Khuzhin)
  • 新增设置 use_compact_format_in_distributed_parts_names,允许在对 Distributed 表执行 INSERT 查询时,以更紧凑的格式写入文件。此更改修复了 #9647#9653alesapin
  • 修复在 JOIN 键列中使用 LowCardinality 时的 RIGHT 和 FULL JOIN。 #9610 (Artem Zuikov)
  • 修复 MergeTreeRangeReader 中可能出现的异常 Size of filter does not match size of columnInvalid number of rows in Chunk。这些异常可能在某些执行 PREWHERE 的场景下触发。 #9612 (Anton Popov)
  • 允许对启用了内部复制的 Distributed 表执行 ALTER ON CLUSTER。修复了 #3268 #9617shinoi2
  • 修复了这样一个问题:在编写 time + 1 这类简单算术表达式时,时区不会被保留(与 time + INTERVAL 1 SECOND 这样的表达式相比)。此变更修复了 #5743 #9323alexey-milovidov

改进

  • 在比较 DateTime 与字符串字面量时使用时区信息。此更改修复了 #5206#10515alexey-milovidov
  • 当无法从文本输入格式解析 Decimal 值时,打印详细诊断信息。 #10205 (alexey-milovidov)
  • 为分布式/缓冲调度池添加任务/内存指标 #10449 (Azat Khuzhin)
  • 在 clickhouse-local 和 HTTP 接口中,对于 SELECT DISTINCT 查询,一旦结果就绪就立即显示。此更改修复了 #8951 #9559 (alexey-milovidov)
  • 允许在 clickhouse-copier 中使用 SAMPLE OFFSET 查询语句替代 cityHash64(PRIMARY KEY) % N == n 来进行分片。要使用此功能,请在命令行参数中传入 --experimental-use-sample-offset 1#10414 (Nikita Mikhaylov)
  • 当确定第一列的值不可能包含 BOM 时,允许在 TSV 中解析 BOM。这修复了 #10301 #10424 (alexey-milovidov)
  • 添加对 Avro 嵌套字段插入的支持 #10354 (Andrew Onyshchuk)
  • 在非数据修改模式下,如果指定的类型相同,则允许对列执行 ALTER 操作。 #10382 (Vladimir Chebotarev)
  • 在 GROUP BY 分片键上自动启用 distributed_group_by_no_merge(当已设置 optimize_skip_unused_shards 时)#10341Azat Khuzhin
  • 使用 LIMIT/LIMIT BY/ORDER BY 优化使用 GROUP BY sharding_key 的分布式查询 #10373 (Azat Khuzhin)
  • 添加了一个设置 max_server_memory_usage,用于限制服务器的总内存使用量。指标 MemoryTracking 的计算现在不会再出现偏差。设置 max_memory_usage_for_all_queries 现已废弃且不再起任何作用。修复了 #10293#10362alexey-milovidov
  • 添加配置项 system_tables_lazy_load。如果将其设置为 false,则包含日志的 system 表会在服务器启动时加载。Alexander BurmakSvyatoslav Tkhon Il Pak#9642 #10359 (alexey-milovidov)
  • 在分布式发送中使用后台线程池(background_schedule_pool_size)#10263 (Azat Khuzhin)
  • 使用后台线程池执行后台缓冲区刷新。#10315 (Azat Khuzhin)
  • 增加对删除未完全写入部分这一特殊情况的支持。这修复了 #9940#10221alexey-milovidov
  • 在进行 GROUP BY 优化时,使用 isInjective(),而不是维护这类函数的手动列表。 #10342 (Azat Khuzhin)
  • 如果客户端在刚建立连接后立即发送 RST 数据包,则避免在日志中打印错误消息。这是带有 keepalived 和 VRRP 的 IPVS 负载均衡器的典型行为。此更改修复了 #1851 #10274 (alexey-milovidov)
  • 允许解析浮点类型中的 +inf。此更改关闭了 #1839 #10272alexey-milovidov
  • 实现了适用于 Nested 类型的 generateRandom 表函数。修复了 #9903 #10219alexey-milovidov
  • 在 MySQL 兼容接口中提供 max_allowed_packed 设置,以便某些客户端能够通过 MySQL 协议与 ClickHouse 通信。 #10199 (BohuTANG)
  • 允许在 GLOBAL IN 中使用字面量(例如 SELECT * FROM remote('localhost', system.one) WHERE dummy global in (0)#10196Azat Khuzhin
  • 修复 clickhouse-client 交互模式中的若干小问题 #10194 (alexey-milovidov)
  • 避免不必要的字典加载(system.tables、DROP/SHOW CREATE TABLE) #10164 (Azat Khuzhin)
  • RWLock 更新:为 getLock() 添加 timeout 参数,并重构实现为阶段公平 #10073 (Alexander Kazakov)
  • 增强对原生 mysql-connector-java(JDBC)的兼容性 #10021 (BohuTANG)
  • 函数 toString 被视为单调函数,即使在对 String 或 LowCardinality(String) 参数的恒真情况中使用,也可以用于索引分析。#10110 (Amos Bird)
  • {CREATE|DROP} USER/ROLE/ROW POLICY/SETTINGS PROFILE/QUOTAGRANT 等命令添加对 ON CLUSTER 子句的支持。 #9811 (Vitaly Baranov)
  • 为 S3 URI 提供虚拟主机式访问支持 #9998 (Pavel Kovalenko)
  • 现在,在字典 DDL 查询中,无参数字典的布局类型可以在不使用圆括号的情况下指定。修复了 #10057#10064 (alesapin)
  • 添加在文件路径中使用带前导零的数字范围的功能 #9989 (Olga Khvostikova)
  • 优化 CROSS JOIN 的内存使用。#10029 (Artem Zuikov)
  • 在获取远程表结构且已设置 skip_unavailable_shards 时,尝试连接集群中的所有分片。 #7278 (nvartolomei)
  • total_rows/total_bytes 添加到 system.tables 表中。 #9919 (Azat Khuzhin)
  • 系统日志表现在默认使用多态 part(polymorphic parts)。 #9905 (Anton Popov)
  • 在 system.settings/merge_tree_settings 中添加一个 type 列 #9909 (Azat Khuzhin)
  • 在服务器启动时尽早检查可用的 CPU 指令。 #9888 (alexey-milovidov)
  • 从 mutation 中移除 ORDER BY 阶段,因为我们在单线程中只会从单个有序的 part 读取数据。同时增加检查,确保 mutation 中的行按排序键排序,且该顺序未被打乱。#9886 (alesapin)
  • 在 FixedString 作为左操作数时实现 LIKE 运算符。这是为了更好地支持 TPC-DS 查询。#9890 (alexey-milovidov)
  • 添加 force_optimize_skip_unused_shards_no_nested,用于对嵌套的 Distributed 表禁用 force_optimize_skip_unused_shards #9812 (Azat Khuzhin)
  • 现在 MergeTree 数据部分的列大小只计算一次。#9827 (alesapin)
  • optimize_skip_unused_shards 计算常量表达式(例如 SELECT * FROM foo_dist WHERE key=xxHash32(0)#8846 (Azat Khuzhin)
  • 对在 TTL 表达式中使用 DateDateTime 列的检查已被移除。#9967 (Vladimir Chebotarev)
  • 优化 DiskS3 硬链接的实现。 #9760 (Pavel Kovalenko)
  • 当将 multiple_joins_rewriter_version 设置为 2 时,会启用第二版多重 JOIN 重写算法,它会保持未发生冲突的列名原样不变。该版本支持带有 USING 的多个 JOIN,并允许对包含子查询的 JOIN 使用 select *#9739 (Artem Zuikov)
  • 实现用于 StorageMergeTree 的“非阻塞”ALTER #9606 (alesapin)
  • 为 DiskS3 添加对 MergeTree 的完整支持 #9646 (Pavel Kovalenko)
  • 扩展 splitByString,以支持空字符串作为分隔符。 #9742 (hcz)
  • system.trace_log 添加 timestamp_ns 列。该列包含跟踪事件的高精度时间戳,可用于构建线程分析(“火焰图”)的时间线。 #9696 (Alexander Kuzmenkov)
  • 当启用 send_logs_level 设置时,避免日志消息与查询进度交错输出。#9634 (Azat Khuzhin)
  • 新增对 MATERIALIZE TTL IN PARTITION 的支持。 #9581 (Vladimir Chebotarev)
  • 在 Avro 嵌套字段中增加对复杂类型的支持 #10502 (Andrew Onyshchuk)

性能改进

  • 为 Partial MergeJoin 中的右表提供了更优的插入逻辑。#10467 (Artem Zuikov)
  • 提升了行式格式的性能(对于窄表,CSV 提升超过 10%,Avro 提升超过 35%)。#10503 (Andrew Onyshchuk)
  • 提升了在 IN 运算符右侧显式定义集合且左侧为元组时的查询性能。#10385 (Anton Popov)
  • 降低了 HashJoin 中哈希表的内存占用。#10416 (Artem Zuikov)
  • 在 StorageDictionary 之上实现了特殊的 HashJoin。允许将 dictGet() 函数改写为 JOIN。此变更本身不会破坏向后兼容性,但可能会在某些安装环境中触发问题 #8400#10133 (Artem Zuikov)
  • 在目标表支持的情况下,启用对物化视图的并行插入。#10052 (vxider)
  • 改进了使用单调函数的索引分析性能。#9607#10026 (Anton Popov)
  • 使用 SSE2 或 SSE4.2 SIMD 内在函数加速 Bloom filter 中的标记化过程。#9968 (Vasily Nemkov)
  • 改进了在 IN 运算符右侧显式定义集合时的查询性能。修复了 20.3 版本中的性能回归问题。#9740 (Anton Popov)
  • 现在 clickhouse-copier 会将每个分区拆分为若干段并独立复制。#9075 (Nikita Mikhaylov)
  • 增加了更多聚合方法。例如,现在 TPC-H 查询 1 将选择 FixedHashMap<UInt16, AggregateDataPtr>,并获得 25% 的性能提升。#9829 (Amos Bird)
  • 在 pre-limit 转换阶段为多个流使用单一行计数器。这有助于在带有 limit 但没有 order by 的查询中(例如 select f(x) from (select x from t limit 1000000000))避免合并流水线中的各个流,从而在后续处理中使用多线程。#9602 (Nikolai Kochetov)

构建/测试/打包改进

  • 使用 ClickHouse-Extras 提供的 AWS SDK 库分支 #10527 (Pavel Kovalenko)
  • 为新的 ALTER RENAME COLUMN 查询添加集成测试。 #10654 (vzakaznikov)
  • 修复在使用错误参数调用函数 now64 时可能发生的有符号整数溢出问题。此更改修复了 #8973 #10511alexey-milovidov
  • 拆分 fuzzer 和 sanitizer 配置,以使构建配置与 OSS-Fuzz 兼容。 #10494 (kyprizel)
  • 修复 clang-10 中的 clang-tidy 问题。 #10420 (alexey-milovidov)
  • 在错误信息中显示绝对路径。否则 KDevelop 将无法跳转到正确的文件,而是会新建并打开一个文件。 #10434 (alexey-milovidov)
  • 添加了 ASAN_OPTIONS 环境变量,以使用 AddressSanitizer 调查 CI 压力测试中的错误。#10440 (Nikita Mikhaylov)
  • 在 clang 构建中启用 ThinLTO(实验性功能)。 #10435 (alexey-milovidov)
  • 移除在系统安装 Z3 求解器时可能被引入的对 Z3 的意外依赖。 #10426 (alexey-milovidov)
  • 将集成测试的 Docker 文件移动到 docker/ 目录中。 #10335 (Ilya Yatsishin)
  • 允许在 CI 中使用 clang-10,以确保 #10238 已被修复。#10384 (alexey-milovidov)
  • 将 OpenSSL 更新到上游 master 分支。修复了一个可能导致 TLS 连接失败,并出现 OpenSSL SSL_read: error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal errorSSL Exception: error:2400006E:random number generator::error retrieving entropy 错误消息的问题。该问题存在于 20.1 版本中。#8956 (alexey-milovidov)
  • 修复 clang-10 构建。 #10238 #10370 (Amos Bird)
  • 物化视图的并行 INSERT添加性能测试。#10345 (vxider)
  • 修复不稳定的测试用例 test_settings_constraints_distributed.test_insert_clamps_settings#10346 (Vitaly Baranov)
  • 在 CI 中添加用于上传 ClickHouse 测试结果的工具 #10330 (Ilya Yatsishin)
  • 将 junit_to_html 工具的测试结果转换为 JSONEachRow 格式 #10323 (Ilya Yatsishin)
  • 更新 cctz。 #10215 (alexey-milovidov)
  • 支持从原始的 JUnit XML 报告生成 HTML 报告。#10247 (Ilya Yatsishin)
  • 更新最低编译器版本检查。修复该问题的根本原因 #10250 #10256 (alexey-milovidov)
  • 对分布式 Live View 表提供初步支持 #10179 (vzakaznikov)
  • 修复 MergeTreeIndexFullText 中的 MSan 误报。该问题最初出现在 #9968#10801alexey-milovidov
  • clickhouse-docker-util #10151 (filimonov)
  • 将 pdqsort 更新到较新版本 #10171 (Ivan)
  • 将 libdivide 更新到 v3.0 #10169 (Ivan)
  • 在启用多态部件时添加检查。 #10086 (Anton Popov)
  • 为 FreeBSD 添加交叉编译构建支持。这修复了 #9465 #9643 (Ivan)
  • #6924 #6980 添加性能测试(filimonov
  • File 引擎中添加对 /dev/null 的支持,以便更好地进行性能测试 #8455 (Amos Bird)
  • 将 /dbms 目录下的所有文件夹上移一级 #9974 (Ivan)
  • 添加一个测试,用于检查在单线程从 MergeTree 读取时是否保持顺序。作为对 #9670 #9762 的补充(alexey-milovidov
  • 修复 00964_live_view_watch_events_heartbeat.py 测试以避免竞态条件。 #9944 (vzakaznikov)
  • 修复集成测试 test_settings_constraints #9962 (Vitaly Baranov)
  • 每个函数放在自己的文件中,第 12 部分。 #9922 (alexey-milovidov)
  • 针对分析元组数组极度缓慢的情况添加了性能测试。#9872 (alexey-milovidov)
  • 将 zstd 升级到 1.4.4。它在性能和压缩比方面有一些小幅提升。如果你运行的副本使用不同版本的 ClickHouse,可能会看到类似如下且带有说明的错误信息:Data after merge is not byte-identical to data on another replicas.。这些消息是正常的,无需担心。 #10663 (alexey-milovidov)
  • 修复 system.stack_trace 中的 TSan 报告。 #9832 (alexey-milovidov)
  • 已移除对 clock_getres 的依赖。 #9833 (alexey-milovidov)
  • 添加了使用 clang-tidy 的标识符命名检查。 #9799 (alexey-milovidov)
  • 更新 "builder" Docker 镜像。此镜像不会在 CI 中使用,但对开发者很有用。#9809 (alexey-milovidov)
  • 移除 CI 中不再使用的旧 performance-test 工具。clickhouse-performance-test 很好,但现在我们使用的是更为先进的工具,它通过复杂的统计公式进行比较测试,从而无论环境发生何种变化都能获得可靠的结果。 #9796 (alexey-milovidov)
  • 已添加大部分 clang-static-analyzer 检查项。#9765 (alexey-milovidov)
  • 将 Poco 更新到 1.9.3,为支持 MongoDB URI 做准备。 #6892 (Alexander Kuzmenkov)
  • 使用 -DUSE_STATIC_LIBRARIES=0 -DENABLE_JEMALLOC=0 修复构建问题 #9651 (Artem Zuikov)
  • 对于变更日志脚本,如果合并提交被 cherry-pick 到发布分支,则从提交说明中获取 PR 名称。 #9708 (Nikolai Kochetov)
  • 在 backport 脚本中支持 vX.X-conflicts 标签。 #9705 (Nikolai Kochetov)
  • 修复回移植脚本中的 auto-label#9685 (Nikolai Kochetov)
  • 在 Darwin 交叉编译中使用 libc++,使其与本地构建保持一致。 #9665 (Hui Wang)
  • 修复不稳定的测试 01017_uniqCombined_memory_usage。这是 #7236 的后续。#9667 (alexey-milovidov)
  • 修复在原生 macOS Clang 编译器下的构建问题 #9649 (Ivan)
  • 支持在 pthread_mutex_lockpthread_mutex_unlock 函数周围注入各种故障。#9635 (alexey-milovidov)
  • packager 脚本添加对 clang-tidy 的支持。 #9625 (alexey-milovidov)
  • 添加对使用未捆绑的 msgpack 的支持。#10168 (Azat Khuzhin)

ClickHouse 版本 v20.3

ClickHouse 版本 v20.3.21.2-lts,2020-11-02

Bug Fix

  • 修复 sharding_key 中的 dictGet(以及类似场景,即函数上下文被持久存储时)的问题。#16205Azat Khuzhin)。
  • 修复在查询 Distributed 表且查询中包含 WHEREPREWHEREGLOBAL IN 时得到错误的空结果的问题。修复了 #15792#15933Nikolai Kochetov)。
  • 修复 TSV/CSVWithNames 格式中缺失或多余表头的问题。此修复对应 #12504#13343Azat Khuzhin)。

ClickHouse 版本 v20.3.20.6-lts,2020-10-09

Bug Fix

  • 在执行 MOVEREPLACE PARTITION 之后,或者在极少数情况下执行 DETACHDROP PARTITION 之后,Mutation 可能会在等待某个不存在的数据部分时挂起。该问题已修复。#15724#15537tavplubix)。
  • 修复了对同一 MySQL 引擎表包含大量子查询时查询挂起的问题。此前,如果在一个查询中针对同一 MySQL 表存在超过 16 个子查询,该查询会一直挂起。#15299Anton Popov)。
  • 修复在对 Merge 表执行 JOIN 的查询中,GROUP BY 出现 Unknown identifier 的问题。#15242Artem Zuikov)。
  • 修复当子查询中包含 finalizeAggregation 函数时,谓词下推无法生效的问题。修复了 #14847#14937filimonov)。
  • 并发执行 ALTER ... REPLACE/MOVE PARTITION ... 查询可能导致死锁。该问题已修复。#13626tavplubix)。

ClickHouse 版本 v20.3.19.4-lts,2020-09-18

Bug Fix

  • 修复在执行 SELECT 查询时的罕见错误:当被查询的列具有依赖于另一列的 DEFAULT 表达式,而该另一列也具有 DEFAULT、未出现在查询中,且在磁盘上不存在时,会导致错误。部分修复 #14531#14845alesapin)。
  • 修复 ALTER UPDATE 变更在赋值表达式中包含 Nullable 列且赋值为常量值(如 UPDATE x = 42)时,会导致列中出现错误值或发生段错误(segfault)的问题。修复 #13634#14045#14646alesapin)。
  • 修复 Decimal 乘法结果错误的问题,原因是结果列的小数位数(scale)错误。#14603Artem Zuikov)。

Improvement

ClickHouse release v20.3.18.10-lts, 2020-09-08

Bug Fix

  • 当异常发生在 PipelineExecutor 本身时,停止查询执行。这可以防止在极少数情况下出现查询挂起的问题。是对 #14334 的延续。#14402Nikolai Kochetov)。
  • 修复缓存字典(cache-dictionary)有时返回默认值而不是来自数据源的实际值的问题。#13624Nikita Mikhaylov)。
  • 修复从 users.xml 解析行策略(row policies)时,当数据库或表名包含点(.)时的错误。修复 #5779#12527#13199Vitaly Baranov)。
  • 修复 CAST(Nullable(String), Enum()) 的行为。#12745Azat Khuzhin)。
  • 修复 text_log 中的数据竞争。这并不对应任何实际的 bug。#9726alexey-milovidov)。

Improvement

  • 修复对长查询返回的错误类型不正确的问题。对于合法查询,有可能得到不是 Max query size exceeded 的语法错误。#13928Nikolai Kochetov)。
  • 当在 parseDateTimeBestEffortOrNull/Zero 函数中值未被完整解析时,返回 NULL/零值。修复 #7876#11653alexey-milovidov)。

Performance Improvement

  • 对使用 LowCardinality 的非常短的查询进行小幅优化。#14129Anton Popov)。

Build/Testing/Packaging Improvement

  • 修复在迁移到 clang-10 后在 HashTable 中出现的 UBSan 报告(对 nullptr 执行加零操作)。#10638 (alexey-milovidov)。

ClickHouse release v20.3.17.173-lts, 2020-08-15

缺陷修复

  • 修复在使用 StorageMerge 且设置 set enable_optimize_predicate_expression=1 的 JOIN 查询中的崩溃问题。#13679 (Artem Zuikov)。
  • 修复包含 NULL 元素的元组进行比较时的无效返回类型。修复 #12461#13420 (Nikolai Kochetov)。
  • 修复包含常量列且 ORDER BY 为主键前缀时的查询问题。#13396 (Anton Popov)。
  • 在 roundUpToPowerOfTwoOrZero() 中,对于最高位为 1 的数字,返回传入的数值本身。#13234 (Azat Khuzhin)。

ClickHouse release v20.3.16.165-lts 2020-08-10

缺陷修复

  • 修复了当将 Unix 时间戳作为参数传入时 parseDateTimeBestEffort 函数中的错误。这修复了 #13362 中描述的问题。#13441alexey-milovidov)。
  • 修复了在包含 NaN 值的 Float 类型上调用 uniqExacttopKsumDistinct 等聚合函数时,可能出现的性能较低和结果略有偏差的问题。该问题还会在调试构建中触发断言。本次修复了 #12491#13254alexey-milovidov)。
  • 修复了在 if 函数中,当条件为可为空(Nullable)的 constexpr 且该条件不是字面量 NULL 时的行为。修复了 #12463#13226alexey-milovidov)。
  • 修复了在数组元素为 Nullable 类型且数组下标也为 Nullable 类型的情况下,arrayElement 函数中的断言错误。此更改修复了 #12172#13224alexey-milovidov)。
  • 修复了在从本地副本执行 SELECT 查询时对线程数量施加的不必要限制。#12840 (Nikolai Kochetov).
  • 修复了在使用 WITH TOTALS 的查询中,数据中可能出现的额外多出的一行问题。 #12747 (Nikolai Kochetov).
  • 修复了在 IN 子句中将包含大量元素的 tuple 解释为函数时的性能问题。即用户出于某些晦涩原因,将 WHERE x IN (1, 2, ...) 写成 WHERE x IN tuple(1, 2, ...) 的情况。#12700Anton Popov)。
  • 修复了 input_format_parallel_parsing 的内存跟踪问题(通过将线程附加到组上)。 #12672 (Azat Khuzhin).
  • 修复 #12293,在子查询包含 WITH 子句时允许谓词下推。#12663 (Winter Zhang)。
  • 修复了 #10572,解决了在使用常量表达式时 Bloom 过滤器索引的问题。#12659Winter Zhang)。
  • 修复了在 broker 不可用(以及某些其他情况下)时 StorageKafka 出现的 SIGSEGV 问题。 #12658 (Azat Khuzhin).
  • 修复了使用缓存布局的外部字典中的竞态条件,该问题可能导致服务器崩溃。 #12566 (alesapin).
  • 修复了在 enable_mixed_granularity_parts=1 时执行 ALTER DELETE 查询会导致旧数据分片损坏的错误。已修复 #12536#12543alesapin)。
  • 在函数 in 的参数数量无效时提供了更清晰的异常信息。#12529Anton Popov)。
  • 修复了从紧凑部分读取数据时的性能问题。 #12492 (Anton Popov)。
  • 修复了启用 text_log 时的死锁问题。#12452alexey-milovidov)。
  • 修复了在使用 StorageMerge 时可能出现的段错误。关闭 #12054#12401tavplubix)。
  • 修复了在使用 TOTALS/ROLLUP/CUBE 时,带有 -StateNullable 参数的聚合函数的问题。此更改修复了 #12163#12376alexey-milovidov)。
  • 修复了 WITH FILL 修饰符中列顺序的处理问题。此前不会遵循 ORDER BY 子句中指定的列顺序。#12306 (Anton Popov)。
  • 当存在通过虚拟列(例如 Merge 表中的 _table)或系统表中的索引列过滤数据的表达式(例如从 system.tables 查询时按数据库名称过滤),且该表达式返回 Nullable 类型时,避免触发 “bad cast” 异常。此更改修复了 #12166#12305alexey-milovidov)。
  • TrieDictionary 加载失败时显示错误。#12290 (Vitaly Baranov)。
  • 函数 arrayFill 在处理空数组时行为不正确,可能导致崩溃。此更改修复了 #12263#12279alexey-milovidov)。
  • LowCardinality 类型实现向通用类型的转换。这样就可以对包含 LowCardinality 列和其他列的表执行 UNION ALL 操作。修复了 #8212。修复了 #4342#12275alexey-milovidov)。
  • 修复了在进行多次连续插入时,StorageFile 中某些特殊类型的头信息被重复写入的问题。此修复解决了 #6155#12197Nikita Mikhaylov)。
  • 修复了在处理不等于 0 或 1 的 UInt8 值时的逻辑函数。#12196Alexander Kazakov)。
  • 修复了在 GROUP BY 单射函数消除过程中对 dictGet 参数的检查。 #12179 (Azat Khuzhin).
  • 修复了 ALTER DELETE 中的错误逻辑,该逻辑会在条件结果为 NULL 时误删记录。此修复解决了 #9088,并关闭了 #12106#12153alexey-milovidov)。
  • 修复了在存在别名时,将查询转换后发送到外部 DBMS(如 MySQL、ODBC)的问题。这修复了 #12032#12151alexey-milovidov)。
  • 修复了整数除法中可能发生的溢出问题。此更改修复了 #12119#12140alexey-milovidov)。
  • 修复了 greatCircleDistancegeoDistance 中潜在的无限循环问题,从而解决了 #12117#12137alexey-milovidov)。
  • 避免在带有 JOIN 或子查询且附加到系统日志(system.query_log、metric_log 等)或附加到底层为 engine=Buffer 的表的物化视图中出现 There is no query 异常。 #12120 (filimonov).
  • 修复了由于对总线程数的限制不正确而导致的带有 UNIONSELECT 查询性能问题。修复了 #12030#12103Nikolai Kochetov)。
  • 修复了使用 -StateResample 组合器时发生的段错误。#12092 (Anton Popov)。
  • 修复了从 VIEW 中执行 SELECT 时对线程数的不必要限制。修复了 #11937#12085Nikolai Kochetov)。
  • 修复了在 PREWHERE 使用错误类型时可能导致的崩溃。修复了 #12053#12060#12060Nikolai Kochetov)。
  • 修复了在 LowCardinality 类型下使用函数 defaultValueOfArgumentType 时出现的错误 Expected single dictionary argument for function。修复了 #11808#12056Nikolai Kochetov)。
  • 修复了在高阶函数中使用 Tuple(LowCardinality) 参数时出现的 Cannot capture column 错误,解决了 #9766#12055Nikolai Kochetov)。
  • 在加载数据库时并行解析表元数据,修复了在存在大量表时导致服务器启动缓慢的问题。#12045 (tavplubix).
  • 使 topK 聚合函数在处理 Enum 类型时返回 Enum 值。修复了 #3740#12043alexey-milovidov)。
  • 修正了约束检查逻辑,使其判断约束是否为常量表达式。此更改修复了 #11360#12042alexey-milovidov)。
  • 修复了在包含 Nullable 列的情况下对元组进行错误比较的问题。修复了 #11985#12039Nikolai Kochetov)。
  • 修复了在调用函数 if 且参数为不同长度的 FixedString 类型时产生错误结果并可能导致崩溃的问题。修复了 #11362#12021alexey-milovidov)。
  • 如果查询中返回的唯一表达式是函数 neighbor,则当以偏移量 -9223372036854775808 调用该函数时,可能会返回空结果。此更改修复了 #11367#12019alexey-milovidov)。
  • 修复了 generateRandom 中可能导致崩溃的数组大小溢出问题。该修复解决了 #11371#12013 (alexey-milovidov)。
  • 修复了潜在的浮点异常。这一修改关闭了 #11378#12005alexey-milovidov)。
  • 修正了服务器启动时日志消息中错误的设置名称。#11997 (alexey-milovidov)。
  • 修复了在 Values 格式中出现的 Query parameter was not set 错误。解决了 #11918#11936tavplubix)。
  • 在查询中为替换参数(参数化查询)保留别名。修复了 #11914#11916alexey-milovidov)。
  • 修复了在解析 DateTime64 时可能出现的浮点运算异常,已修复 #11374#11875alexey-milovidov)。
  • 通过 HTTP 接口修复了内存核算(在 wait_end_of_query=1 时影响可能较大)。#11840 (Azat Khuzhin).
  • 修复了在条件中包含 NULL 时 if() 返回错误结果的问题。#11807 (Artem Zuikov).
  • 在进行相等性比较之前,先解析存储在 ZooKeeper 中的元数据。 #11739 (Azat Khuzhin).
  • 修复了在与包含别名的 ORDER BY 子句一起使用 LIMIT n WITH TIES 时出现的问题。#11689 (Anton Popov).
  • 修复 cache 字典中潜在的未初始化内存读取问题。 #10834 (alexey-milovidov)。

性能改进

  • 对包含字面量的 IN 运算符未能使用索引,在 v19.3 附近引入了导致性能回退的问题。本次修复了 #10574#12062nvartolomei)。

ClickHouse 发行版 v20.3.12.112-lts 2020-06-25

Bug 修复

  • 修复在 prewhere 条件中使用 Nullable 列导致的罕见崩溃,是对 #11608 的后续修复。#11869Nikolai Kochetov)。
  • 不允许在高阶函数中使用 arrayJoin。此前这样会导致协议同步异常。此更改关闭了 #3933#11846alexey-milovidov)。
  • 修复查询线程数过多的问题。 #11788 (Nikolai Kochetov).
  • 修复类似 SELECT *, xyz.* 这类查询的非预期行为,此类查询原本应报错却意外执行成功。#11753hexiaoting)。
  • 现在,在执行元数据 ALTER 期间,将会取消副本拉取任务。 #11744 (alesapin).
  • 修复了由于在 Values 输入格式中错误地推导复杂字面量类型而引发的 LOGICAL_ERROR。 #11732 (tavplubix)。
  • 修复在常量列上使用 ORDER BY ... WITH FILL 时的问题。#11697 (Anton Popov).
  • 在与 XDBC bridge 通信时传入正确的超时设置。此前在检查 bridge 存活状态以及接收元信息时未能正确应用超时。#11690 (alexey-milovidov)。
  • 修复了一个会导致 system.mutations 状态不正确的错误。该错误可能会导致系统显示整个 mutation 已经完成,但实际上服务器在复制队列中仍然保留 MUTATE_PART 任务并尝试执行它们。此修复对应 #11611#11681alesapin)。
  • 添加对带有大小写不敏感标志的正则表达式的支持。修复 #11101#11506#11649alexey-milovidov)。
  • 如果设置了行级安全,则移除简单的 COUNT 查询优化。在早期版本中,用户会得到表中记录的总数,而不是过滤后的记录数。此更改修复了 #11352#11644alexey-milovidov)。
  • 修复 String 类型的布隆过滤器(数据跳过索引)。#11638Azat Khuzhin)。
  • 修复在 PREWHERE 条件中使用 Nullable 列时导致的罕见崩溃(可能与 #11572 有关)。#11608Nikolai Kochetov)。
  • 修复在对 Buffer 表进行采样读取时出现的 Block structure mismatch 错误。#11602 (Nikolai Kochetov)。
  • 修复在 exception.code() % 256 = 0clickhouse-client 退出码错误的问题。 #11601 (filimonov).
  • 修复服务器启动时与“Mark cache size was lowered”相关的日志消息中的一个小错误,并关闭了 #11399#11589alexey-milovidov)。
  • 修复在包含 PREWHERE column in (subquery)ARRAY JOIN 的查询中出现的 Size of offsets does not match size of column 错误。 #11580 (Nikolai Kochetov).
  • HTTP 会话中的所有查询都使用相同的 query_id。已修复。#11578 (tavplubix)。
  • 现在,clickhouse-server 的 Docker 容器在检查服务器存活状态时将优先使用 IPv6。 #11550 (Ivan Starkov)。
  • 修正 <node> 的 shard_num/replica_num(此前会导致 use_compact_format_in_distributed_parts_names 选项失效)。 #11528 (Azat Khuzhin).
  • 修复在使用 -State 聚合函数进行聚合时中途抛出异常导致的内存泄漏问题。已修复 #8995#11496alexey-milovidov)。
  • 修复在别名可能覆盖带限定符的列名时导致分布式查询返回错误结果的问题。修复了 #9672#9714#9972Artem Zuikov)。

ClickHouse 发行版 v20.3.11.97-lts 2020-06-10

新特性

  • 现在 ClickHouse 会在自身端控制字典源的超时时间。在缓存字典配置中新增了两个设置项:strict_max_lifetime_seconds,默认取值为 max_lifetime,以及 query_wait_timeout_milliseconds,默认值为一分钟。第一个设置项在搭配 allow_read_expired_keys 设置时也很有用(用于禁止读取已严重过期的键)。#10337Nikita Mikhaylov)。

Bug 修复

  • 修复在启用 min_bytes_to_use_direct_io 且启用 PREWHERE,并使用 SAMPLE 或高并发线程数时可能出现的 Data compressed with different methods 错误。修复了 #11539#11540alexey-milovidov)。
  • 修复编解码器返回的压缩大小。#11448 (Nikolai Kochetov).
  • 修复当某列使用带有非字面量参数的压缩编解码器时的服务器崩溃问题。修复了 #11365#11431alesapin)。
  • 修复 pointInPolygon 在点为 NaN 时的问题。修复 #11375#11421Alexey Ilyukhov)。
  • 修复在包含 LowCarinality(T) 和 Nullable(T) 的 JOIN 中出现的崩溃。#11380#11414Artem Zuikov)。
  • 修复针对错误 USING 键的错误代码。#11373#11404Artem Zuikov)。
  • 修复了在参数超出纬度/经度范围时的 geohashesInBox 行为。#11403Vasily Nemkov)。
  • 改进 joinGet() 函数的错误信息。 #11389 (Artem Zuikov).
  • 修复了在包含 external sort 和 limit 的查询中可能出现的 Pipeline stuck 错误。修复 #11359#11366Nikolai Kochetov)。
  • 移除 ReplicatedMergeTree 在发送数据部件时使用的冗余锁。 #11354 (alesapin).
  • 在多行模式下修复 clickhouse-client 对 \G(纵向输出)的支持,从而关闭 #9933#11350alexey-milovidov)。
  • 修复在直接从 StorageJoin(未使用 JOIN)执行 SELECT 时的崩溃问题以及错误的可空性处理。#11340 (Artem Zuikov).
  • 修复 quantilesExactWeightedArray 中的崩溃问题。#11337 (Nikolai Kochetov).
  • 现在在 ALTER 查询中,会在修改元数据之前先停止合并操作。 #11335 (alesapin).
  • 在将 parallel_view_processing 设置为 1 时,恢复对 MATERIALIZED VIEW 的并行写入。修复 #10241#11330Nikolai Kochetov)。
  • 修复 visitParamExtractRaw 在提取的 JSON 中包含不成对的 { 或 [ 的字符串时的处理。#11318 (Ewout).
  • 修复 ThreadPool 中极罕见的竞态条件。 #11314 (alexey-milovidov).
  • 修复转换过程中潜在的未初始化内存使用问题。例如:SELECT toIntervalSecond(now64())#11311 (alexey-milovidov)。
  • 修复了当表的主键中包含 Array 类型列且查询使用 emptynotEmpty 函数按该列进行过滤时,索引分析不起作用的问题。该修复解决了 #11286#11303alexey-milovidov)。
  • 修复了在查询被 max_network_bandwidthmax_execution_speedpriority 设置限流时,查询速度估算可能不正确,导致 min_execution_speed 限制可能不起作用或行为异常的错误。将 timeout_before_checking_execution_speed 的默认值更改为非零值,否则 min_execution_speedmax_execution_speed 设置将不会产生任何效果。修复了 #11297。修复了 #5732。修复了 #6228。可用性改进:在 clickhouse-client 中避免将异常消息与进度条拼接显示。#11296alexey-milovidov)。
  • 修复了在读取 Protobuf 格式的格式错误数据时出现的崩溃问题。修复了 #5957#11203#11258Vitaly Baranov)。
  • 修复了一个 bug:在仅存在过期键时,cache-dictionary 可能返回默认值而不是实际值的问题。此问题仅影响字符串字段。#11233 (Nikita Mikhaylov)。
  • 修复在从内部查询中包含常量的 VIEW 读取时出现的 Block structure mismatch in QueryPipeline 错误,解决了 #11181#11205Nikolai Kochetov)。
  • 修复潜在异常 Invalid status for associated output#11200 (Nikolai Kochetov).
  • 修复在高阶函数中使用捕获参数 Array(Array(LowCardinality)) 时可能出现的 Cannot capture column 错误。 #11185 (Nikolai Kochetov).
  • 修复了 S3 通配符匹配的问题,该问题在键数量超过 1000 个并且使用某些后端时可能会导致失败。#11179 (Vladimir Chebotarev).
  • 如果 data skipping index 依赖于在后台合并过程中将要被修改的列(适用于 SummingMergeTree、AggregatingMergeTree 以及 TTL GROUP BY),则其计算结果会不正确。通过将索引计算移动到合并之后,从而在合并后的数据上计算索引,已修复此问题。#11162Azat Khuzhin)。
  • 修复针对简单查询过度保留线程的问题(用于减少线程数的优化在执行管线变更后部分失效)。 #11114 (Azat Khuzhin).
  • 修复分布式查询中谓词优化功能(enable_optimize_predicate_expression=1)在包含 HAVING 子句的查询中的问题(即需要在发起查询的服务器端进行过滤时),方法是保持表达式的顺序(这本身就足以修复该问题),并强制聚合器优先使用列名而非索引。修复:#10613#11413#10621Azat Khuzhin)。
  • 引入提交重试逻辑,以在偏移量提交在罕见情况下失败时,降低从 Kafka 获取重复数据的可能性。#9884 (filimonov).

性能改进

  • 对每次调用任意读取外部字典的函数,仅获取字典并检查访问权限一次。 #10928 (Vitaly Baranov).

构建/测试/打包改进

ClickHouse 版本 v20.3.10.75-lts 2020-05-23

缺陷修复

  • 在 mutation 最终化任务中,如果没有任何内容被最终完成,则不再记录日志。 #11109 (alesapin).
  • 修复了 parseDateTime64BestEffort 参数解析中的错误。#11038 (Vasily Nemkov)。
  • 修正了 getRawData() 方法中原始数据大小不正确的问题。 #10964 (Igr).
  • 修复了在 20.1 及更早版本之间存在的两级聚合不兼容问题。当在发起节点与远程节点上使用不同版本的 ClickHouse,且 GROUP BY 结果集较大并且仅按单个 String 字段进行聚合时,会出现这种不兼容性。这会导致在结果中,同一键对应出现多行未合并的数据。#10952 (alexey-milovidov).
  • 修复了 Distributed 表中元组的向后兼容性问题。#10889 (Anton Popov).
  • 修复了在 StringHashTable 中访问不存在的键时发生的 SIGSEGV#10870 (Azat Khuzhin).
  • 修复了 ReplicatedMergeTree 中的一个缺陷,该缺陷可能导致在某个副本变为不活跃后,某些带有 OPTIMIZEALTER 查询一直挂起等待该副本。 #10849 (tavplubix)。
  • 在调用 Block::sortColumns() 后修正了列的顺序。#10826 (Azat Khuzhin).
  • 修复了在未请求对标识符加引号时 ODBC bridge 出现的问题。修复了 #7984#10821 (alexey-milovidov)。
  • 修复了 DateLUT 中由 UBSanMSan 报告的问题。#10798 (alexey-milovidov)。
  • 修复键条件中的错误类型转换。修复了 #6287#10791Andrew Onyshchuk
  • 修复了 parallel_view_processing 的行为。现在,即使发生异常,对 MATERIALIZED VIEW 的所有插入也应无一例外地完成。修复了 #10241#10757Nikolai Kochetov)。
  • 修复了组合器 -OrNull 和 -OrDefault 在与 -State 组合使用时的问题。 #10741 (hcz)。
  • 修复了在嵌套类型下使用 generateRandom 时发生的崩溃。修复了 #10583#10734Nikolai Kochetov)。
  • 修复了合并后可能发生的 SummingMergeTreeLowCardinality(FixedString) 键列的数据损坏问题。修复了 #10489#10721Nikolai Kochetov)。
  • 修复函数 h3EdgeAngle 中可能出现的缓冲区溢出问题。#10711 (alexey-milovidov).
  • 修复了总计丢失的问题。如果查询包含带有外部 WHERE 条件的 JOIN 或子查询,总计可能会被过滤掉。修复了 #10674#10698Nikolai Kochetov)。
  • 修复了在同一查询中多次对 IN 运算符使用相同集合的问题。#10686 (Anton Popov).
  • 修复了一个在 readonly=2cancel_http_readonly_queries_on_client_close=1 时,客户端关闭后导致 HTTP 请求卡住的 Bug。修复了 #7939#7019#7736#7091#10684tavplubix)。
  • 修正了 AggregateTransform 构造函数中参数的顺序。#10667palasonic1)。
  • 修复了在启用 distributed_aggregation_memory_efficient 时远程查询无法并行执行的问题。修复了 #10655#10664Nikolai Kochetov)。
  • 修复了在使用 LIMIT 的查询中可能导致返回行数不正确的问题。修复了 #10566#10709#10660Nikolai Kochetov)。
  • 修复了在表包含大量数据块(parts)时会导致并发 ALTER 操作被锁住的错误。#10659 (alesapin)。
  • 修复了一个问题:在执行 SYSTEM DROP DNS CACHE 查询时,会同时清除用于检查用户是否被允许从某些 IP 地址连接的缓存。 #10608 (tavplubix).
  • 修复了在 MATERIALIZED VIEW 的内部查询中包含依赖表时出现的标量结果不正确的问题。#10603 (Nikolai Kochetov).
  • 修复了在 ALIAS 列的默认表达式类型与列类型不一致时对该列执行 SELECT 查询的问题。 #10563 (Azat Khuzhin).
  • 已实现 DateTime64 与 String 值之间的比较。 #10560 (Vasily Nemkov)。
  • 修复了索引损坏问题,该问题可能在将 compact 部分合并到另一个 compact 部分后,在某些情况下发生。 #10531 (Anton Popov).
  • 修复了这样一种情况:mutation 已经处理完所有数据块,但仍然停留在 is_done=0 状态。#10526 (alesapin).
  • 修复了在 Unix 纪元起始时,对于相对于 UTC 具有小数偏移的时区出现的溢出问题。此更改修复了 #9335#10513 (alexey-milovidov)。
  • 修复了 Distributed 存储的异常关闭问题。 #10491 (Azat Khuzhin).
  • 修复了 simpleLinearRegression 在处理大整数时出现的数值溢出问题。#10474 (hcz).

构建/测试/打包改进

Bug 修复

  • 修复错误:the BloomFilter false positive must be a double number between 0 and 1#10551#10569 (Winter Zhang).

ClickHouse 发布 v20.3.8.53,2020-04-23

错误修复

  • 修复了在那些曾在 UTC 正偏移和负偏移之间发生过切换的时区(例如 Pacific/Kiritimati)上使用 datetime 函数时的错误行为。此更改修复了 #7202 #10369alexey-milovidov
  • 修复在启用 distributed_group_by_no_merge 时可能发生的段错误(该问题由 #10131 在 20.3.7.46 中引入)。#10399Nikolai Kochetov
  • 修复 Array(Tuple(...)) 数据类型的错误扁平化处理。此更改修复了 #10259 #10390alexey-milovidov
  • 在 Aggregator 中取消磁盘预留。修复了磁盘空间预留中的一个错误,该错误可能导致大型外部聚合在本可以成功完成的情况下却失败 #10375 (Azat Khuzhin)
  • 修复了 ReplicatedMergeTreeDROPOPTIMIZE 之间的竞态条件。如果存在并发的 OPTIMIZE 查询,DROP 可能会在 ZooKeeper 的副本路径中留下残留数据。 #10312 (tavplubix)
  • 修复在修改列默认值后服务器无法附加表的问题。#10441 (alesapin)
  • 在加载表之前,如果执行 ATTACH DATABASE 失败,不要删除元数据目录。 #10442 (Winter Zhang)
  • 修复了多个错误:当某些数据使用 quorum 插入后,又通过某种方式被删除(DROP PARTITION、TTL)时,会导致后续 INSERT 请求卡住,或者在 SELECT 查询中出现误报异常。此修复对应 #9946 #10188Nikita Mikhaylov
  • 修复 ConcatProcessor 中在远程查询时可能发生的 Pipeline stuck 错误。 #10381 (Nikolai Kochetov)
  • 修复 HashTable 中的错误行为,该问题会在尝试从缓冲区读取 HashMap 时导致编译错误。 #10386 (palasonic1)
  • 允许在包含多个 JOIN 的查询中使用 count(*)。修复 #9853 #10291 (Artem Zuikov)
  • 优先使用 fallback_to_stale_replicas 而不是 skip_unavailable_shards,否则当同时指定这两个设置且没有最新状态的副本时,查询将会失败(补丁来自 @alex-zaitsev)。修复:#2564#10422Azat Khuzhin
  • 修复了这样一个问题:当查询包含 ARRAY JOIN、ORDER BY 和 LIMIT 时,可能会返回不完整的结果。修复了 #10226。作者:Vadim Plakhtinskiy#10427alexey-milovidov
  • 在创建 Bloom Filter 索引时检查参数的数量和类型 #9623 #10431 (Winter Zhang)

性能改进

  • 提升了在 IN 运算符右侧显式定义集合、左侧为元组时的查询性能。该改动修复了 20.3 版本中的性能回归问题。#9740, #10385 (Anton Popov)

ClickHouse release v20.3.7.46, 2020-04-17

Bug 修复

  • 修复在查询中混用逗号 JOIN 和按名称 JOIN 时出现 Logical error: CROSS JOIN has expressions 错误的问题。#10311 (Artem Zuikov).
  • 修复使用 max_bytes_before_external_group_by 的查询。#10302 (Artem Zuikov).
  • 在存在 arrayJoin 函数时(某些场景)修复了 move-to-prewhere 优化的问题。此修复解决了 #10092#10195 (alexey-milovidov).
  • 通过 allow_nondeterministic_mutations 设置,允许在 mutation 中放宽对非确定性函数使用的限制。#10186 (filimonov).

ClickHouse release v20.3.6.40, 2020-04-16

新功能

  • 新增函数 isConstant。该函数检查其参数是否为常量表达式,并返回 1 或 0,主要用于开发、调试和演示。#10198 (alexey-milovidov).

Bug 修复

  • 修复在使用 max_rows_to_group_bygroup_by_overflow_mode = 'break' 时可能出现的 Pipeline stuck 错误。 #10279 (Nikolai Kochetov).
  • 修复一个可能出现的罕见异常 Cannot drain connections: cancel first#10239 (Nikolai Kochetov).
  • 修复了一个问题:当用户尝试在 ENGINE = Replicated* 的表上执行 ALTER UPDATE/DELETE 时,ClickHouse 会抛出 "Unknown function lambda." 错误消息。用于检查非确定性函数的逻辑现在已能正确处理 lambda 表达式。#10237 (Alexander Kazakov)。
  • 修复了针对 Date 类型的 generateRandom 函数,解决了 #9973。同时修复了一个边界情况:在使用旧式分区方式的 MergeTree 表中插入年份为 2106 的日期时,分区名称中的年份却是 1970。#10218alexey-milovidov)。
  • 当视图的表定义与其 SELECT 查询不一致时执行类型转换。此更改修复了 #10180#10022#10217alexey-milovidov)。
  • 修复 parseDateTimeBestEffort 在解析 RFC-2822 格式字符串时,当星期为周二或周四的处理问题。该修复解决了 #10082#10214alexey-milovidov)。
  • 修复 JOIN 内部常量列名可能与外部常量列名发生冲突的问题。 #10207 (alexey-milovidov).
  • 修复了在从 system.numberssystem.zeros 等无限数据源读取数据时,本应在 LIMIT 处停止的查询可能出现无限执行的问题。 #10206 (Nikolai Kochetov)。
  • 修复在未指定数据库时未使用当前数据库进行访问检查的问题。 #10192 (Vitaly Baranov).
  • 在向 Distributed() 表执行 INSERT 时,如果结构不匹配则转换数据块。 #10135 (Azat Khuzhin).
  • 修复 processors pipeline 中 extremes 可能产生不正确结果的问题。 #10131 (Nikolai Kochetov).
  • 修复在使用 compact parts 时某些类型 ALTER 操作的问题。 #10130 (Anton Popov)。
  • 修正在创建新副本时对 index_granularity_bytes 的错误检查。修复 #10098#10121alesapin)。
  • 修复在 Distributed 表结构与其底层表结构不一致时执行 INSERT 操作会导致的 SIGSEGV 崩溃。 #10105 (Azat Khuzhin).
  • 修复在使用 JOINUNION ALL 的查询中可能出现的行丢失。修复了 #9826#10113#10099Nikolai Kochetov)。
  • 修复了在从旧版 ClickHouse 升级时,由于不存在 /table/replicas/replica_name/metadata 节点而导致复制表无法启动的问题。修复了 #10037#10095alesapin)。
  • 为 MySQL Database Engine 新增了一些参数检查,并支持标识符类型参数。#10077 (Winter Zhang)。
  • 修复本地 ClickHouse 服务器上的 ClickHouse 字典源中的 bug。当字典与数据源中的类型不兼容时,该 bug 可能导致内存损坏。#10071 (alesapin).
  • 修复在包含 skip 索引的表上执行 CHECK TABLE 查询时的错误。#10068 (alesapin)。
  • 修复错误 Cannot clone block with columns because block has 0 columns ... While executing GroupingAggregatedTransform。当启用 distributed_aggregation_memory_efficient 设置项,并且分布式查询从不同分片读取不同聚合级别的数据(单层聚合和两层聚合混用)时会触发该问题。#10063 (Nikolai Kochetov)。
  • 修复在对尾部包含零字节的字符串键执行 GROUP BY 时可能发生的段错误(#8636#8925)。#10025Alexander Kuzmenkov)。
  • 修正用于远程查询执行的线程数量(修复自 20.3 起出现的性能退化问题)。当来自 Distributed 表的查询在本地和远程分片上同时执行时会触发该问题。修复 #9965#9971Nikolai Kochetov)。
  • 修复了一个问题:在处理针对某些数据库的查询的某个阶段,未能获取到所需的表。修复了 #9699#9949achulkov2)。
  • 修复当 JOINTOTALS 一起出现时的 “Not found column in block” 错误,并修复了问题 #9839#9939Artem Zuikov)。
  • 修复在服务器启动时会导致 ON CLUSTER DDL 查询冻结的 bug。#9927Gagan Arneja)。
  • 修复在 CREATE USER 命令中解析多个主机条件的问题,例如 CREATE USER user6 HOST NAME REGEXP 'lo.?*host', NAME REGEXP 'lo*host'#9924 (Vitaly Baranov)。
  • 修复 Join 表引擎中 TRUNCATE 的问题(#9917)。#9920Amos Bird)。
  • 修复 ALTER 语句中的“scalar does not exist”错误(#9878)。#9904Amos Bird)。
  • 修复 ReplicatedMergeTreedropoptimize 操作之间的竞态条件。#9901 (alesapin).
  • 修复在 distributed_product_mode='local' 模式下使用限定名时的错误。解决了 #4756 问题。#9891Artem Zuikov)。
  • 修复根据设置 'allow_introspection_functions' 计算自省函数权限的问题。#9840 (Vitaly Baranov)。

构建/测试/打包改进

ClickHouse release v20.3.5.21,2020-03-27

Bug 修复

  • 修复在分布式表上的查询同时包含 PREWHERE 和 WHERE 且执行 SET distributed_product_mode = 'local' 时出现的 “Different expressions with the same alias” 错误。#9871Artem Zuikov)。
  • 修复在具有复合主键的表上,mutation 操作导致的过量内存消耗。此修复解决了 #9850#9860alesapin)。
  • 对于 INSERT 查询,现在分片会将从发起端获取的设置限制到分片自身的约束范围内,而不是抛出异常。此修复允许向具有不同约束的分片发送 INSERT 查询。此变更改进了对 #9447 的修复。#9852Vitaly Baranov)。
  • 修复在存在 COMMA JOIN 的子查询(位于表列表之外,例如在 WHERE 中)时出现的 “COMMA to CROSS JOIN rewriter is not enabled or cannot rewrite query” 错误。修复了 #9782#9830Artem Zuikov)。
  • 修复客户端上可能出现的 Got 0 in totals chunk, expected 1 异常。该问题出现在包含 JOIN 的查询中,当右连接的表没有任何行时会触发。例如:select * from system.one t1 join system.one t2 on t1.dummy = t2.dummy limit 0 FORMAT TabSeparated;。修复了 #9777#9823Nikolai Kochetov)。
  • 修复在无法转换类型时使用 optimize_skip_unused_shards 导致的 SIGSEGV。#9804Azat Khuzhin)。
  • 修复 ALTER TABLE DELETE COLUMN 在 compact parts 上的异常行为。#9779alesapin)。
  • 修复 max_distributed_connections(有无 Processors 情况)。#9673Azat Khuzhin)。
  • 修复少数情况下未正确使用函数参数时区的问题。#9574Vasily Nemkov)。

改进

  • 从 mutation 中移除 ORDER BY 阶段,因为我们在单线程中仅从一个已排序的 part 读取数据。同时增加检查,确保 mutation 中行的顺序按照排序键顺序排列,且该顺序不会被破坏。#9886alesapin)。

ClickHouse release v20.3.4.10,2020-03-20

Bug Fix

  • 此版本同样包含来自 20.1.8.41 的所有错误修复
  • 修复通过 http(使用 processors pipeline)执行查询时缺少 rows_before_limit_at_least 的问题。修复了 #9730#9757Nikolai Kochetov

ClickHouse release v20.3.3.6, 2020-03-17

Bug Fix

  • 此版本同样包含来自 20.1.7.38 的所有错误修复
  • 修复复制机制中的一个错误:如果用户在上一版本中执行过 mutation,将导致复制无法工作。修复了 #9645#9652alesapin)。这使得 20.3 版本再次向后兼容。
  • 新增设置 use_compact_format_in_distributed_parts_names,允许在向 Distributed 表执行 INSERT 查询时,以更加紧凑的格式写入文件。修复了 #9647#9653alesapin)。这使得 20.3 版本再次向后兼容。

ClickHouse release v20.3.2.1, 2020-03-12

向后不兼容变更

  • 修复了在向拥有大量副本的 Distributed 表发送数据时出现的 file name too long 问题。修复了副本凭据暴露在服务器日志中的问题。磁盘上的目录名格式已更改为 [shard{shard_index}[_replica{replica_index}]]#8911 (Mikhail Korotov) 升级到新版本后,由于旧版本的服务器无法识别新的目录格式,除非进行手动干预,否则无法降级。如果需要降级,必须手动将相应目录重命名为旧格式。仅当您在 Distributed 表上使用异步 INSERT 时,此变更才与您相关。在 20.3.3 版本中,我们将引入一个设置,使您可以逐步启用新格式。
  • 已更改 mutation 命令在复制日志中的记录格式。在安装新版本之前,必须先等待所有旧的 mutation 全部处理完成。
  • 实现一个简单的内存分析器,在超过软分配上限后,每额外分配 N 个字节时将堆栈跟踪信息转储到 system.trace_log#8765 (Ivan) #9472 (alexey-milovidov) system.trace_log 表中的该列已从 timer_type 重命名为 trace_type。这将需要对第三方性能分析和火焰图处理工具进行相应更改。
  • 在所有场景下统一使用操作系统线程 ID,而不是内部线程编号。这修复了 #7477:旧版 clickhouse-client 在启用 send_logs_level 设置时,无法接收服务器发送的日志,因为结构化日志消息的名称和类型发生了变化。另一方面,不同版本的服务器之间互相发送日志时,其类型也可能不同。如果未使用 send_logs_level 设置,则无需关心这一点。#8954 (alexey-milovidov)
  • 删除 indexHint 函数 #9542 (alexey-milovidov)
  • 移除 findClusterIndexfindClusterValue 函数。此更改修复了 #8641。如果你正在使用这些函数,请发送邮件至 [email protected] #9543 (alexey-milovidov)
  • 现在不允许在创建列或添加列时使用 SELECT 子查询作为默认表达式。#9481 (alesapin)
  • 在 JOIN 中,子查询现在必须指定别名。 #9274 (Artem Zuikov)
  • 改进了 ALTER MODIFY/ADD 查询逻辑。现在不能在未指定类型的情况下 ADD 列,MODIFY 默认表达式不会改变列的类型,而对类型的 MODIFY 不会丢失默认表达式的值。修复了 #8669#9227alesapin
  • 需要重启服务器才能使日志配置中的更改生效。这是为临时规避一个缺陷,即服务器仍然将日志写入已被删除的日志文件(参见 #8696)。#8707Alexander Kuzmenkov
  • experimental_use_processors 设置默认启用。该设置会启用新的查询管线。这是一次内部重构,我们预计不会有任何可见变化。如果你遇到任何问题,请将其重新设为 0。#8768 (alexey-milovidov)

新功能

  • 添加 AvroAvroConfluent 输入和输出格式 #8571 (Andrew Onyshchuk) #8957 (Andrew Onyshchuk) #8717 (alexey-milovidov)
  • cache 字典中对已过期键进行多线程、非阻塞更新(可选地允许读取旧数据)。 #8303 (Nikita Mikhaylov)
  • 新增查询语句 ALTER ... MATERIALIZE TTL。它会运行一次 mutation 操作,强制删除已按 TTL 过期的数据,并在所有数据片段中重新计算 TTL 元信息。#8775 (Anton Popov)
  • 如有需要,可将 HashJoin 切换为基于磁盘的 MergeJoin #9082 (Artem Zuikov)
  • ALTER TABLE 添加了 MOVE PARTITION 命令 #4729 #6168 (Guillaume Tassery)
  • 支持在运行时从配置文件重新加载存储配置。#8594 (Vladimir Chebotarev)
  • 允许将 storage_policy 更改为不低于当前等级的存储策略。#8107 (Vladimir Chebotarev)
  • 为 S3 存储和表函数添加了对 glob 模式/通配符的支持。#8851 (Vladimir Chebotarev)
  • FixedString(N) 数据类型实现了 bitAndbitOrbitXorbitNot#9091 (Guillaume Tassery)
  • 新增函数 bitCount。修复了 #8702#8708alexey-milovidov#8749ikopylov
  • 添加 generateRandom 表函数,用于根据给定的 schema 生成随机行,从而为任意测试表填充数据。#8994 (Ilya Yatsishin)
  • JSONEachRowFormat:支持对象被包含在顶层数组中的特殊情况。#8860 (Kruglov Pavel)
  • 现在可以创建一个带有 DEFAULT 表达式的列,其表达式依赖于另一列,而该列带有 ALIAS 默认表达式。#9489 (alesapin)
  • 允许在 clickhouse-obfuscator 中指定大于源数据大小的 --limit。数据会在使用不同随机种子的情况下重复生成。#9155 (alexey-milovidov)
  • 添加了 groupArraySample 函数(类似于 groupArray),基于水库抽样算法实现。#8286 (Amos Bird)
  • 现在,您可以通过系统指标监控 cache/complex_key_cache 字典中更新队列的大小。 #9413 (Nikita Mikhaylov)
  • 当将设置 output_format_csv_crlf_end_of_line 设为 1 时,允许在 CSV 输出格式中使用 CRLF 作为行分隔符 #8934 #8935 #8963 (Mikhail Korotov)
  • 实现更多 H3 API 函数:h3GetBaseCellh3HexAreaM2h3IndexesAreNeighborsh3ToChildrenh3ToStringstringToH3 #8938 (Nico Mandery)
  • 引入了新的设置:max_parser_depth,用于控制最大栈大小,以便支持大型复杂查询。修复了 #6681#7668#8647Maxim Smirnov
  • 新增 force_optimize_skip_unused_shards 设置项,当无法跳过未使用的分片时抛出异常 #8805 (Azat Khuzhin)
  • 允许配置多个磁盘/卷,用于存储由 Distributed 引擎发送的数据 #8756 (Azat Khuzhin)
  • 支持存储临时数据的存储策略(<tmp_policy>)。#8750 (Azat Khuzhin)
  • 添加了 X-ClickHouse-Exception-Code HTTP 头字段,如果在发送数据之前抛出了异常,则会设置该字段。实现了 #4971#8786Mikhail Korotov
  • 新增函数 ifNotFinite。它仅是语法糖:ifNotFinite(x, y) = isFinite(x) ? x : y#8710 (alexey-milovidov)
  • system.dictionaries 表中新增 last_successful_update_time#9394 (Nikita Mikhaylov)
  • 添加 blockSerializedSize 函数(在磁盘上的未压缩大小) #8952 (Azat Khuzhin)
  • 新增函数 moduloOrZero #9358 (hcz)
  • 添加了系统表 system.zerossystem.zeros_mt,以及表函数 zeros()zeros_mt()。这些表(和表函数)仅包含一个名为 zero、类型为 UInt8 的列,该列的值全部为零。它用于测试,作为生成大量行的最快方法。这修复了 #6604 #9593Nikolai Kochetov

实验性功能

  • MergeTree 系列表新增紧凑格式的 part,在该格式中所有列存储在同一个文件中。这有助于提升小批量且高频插入操作的性能。旧格式(每列一个文件)现在称为宽格式。数据存储格式由设置项 min_bytes_for_wide_partmin_rows_for_wide_part 控制。#8290 (Anton Popov)
  • LogTinyLogStripeLog 表增加对 S3 存储的支持。#8862 (Pavel Kovalenko)

错误修复

  • 修复日志消息中不一致的空格。#9322 (alexey-milovidov)
  • 修复了在创建表时,将未命名元组数组错误地扁平化为 Nested 结构的问题。#8866 (achulkov2)
  • 修复了在 File 表或 file 表函数中,当有过多文件匹配 glob 模式时可能出现的 “Too many open files” 错误。现在文件会被惰性按需打开。此修复对应 #8857 #8861 (alexey-milovidov)
  • DROP TEMPORARY TABLE 现在只会删除临时表。 #8907 (Vitaly Baranov)
  • 在关闭服务器或对表执行 DETACH/ATTACH 操作时删除过期分区。#8602 (Guillaume Tassery)
  • 调整默认磁盘从 data 子目录计算可用空间的方式。修复了在将 data 目录挂载到单独设备(较为罕见的情况)时,可用空间计算不正确的问题。此修复对应 #7441 #9257 (Mikhail Korotov)
  • 允许在逗号(CROSS)JOIN 中内部使用 IN () 子句。 #9251 (Artem Zuikov)
  • 当 WHERE 子句中包含 [NOT] LIKE 运算符时,允许将 CROSS 重写为 INNER JOIN。 #9229 (Artem Zuikov)
  • 修复在启用设置 distributed_aggregation_memory_efficient 时,GROUP BY 查询可能产生错误结果的问题。修复 #9134#9289Nikolai Kochetov
  • 在缓存字典的指标中,已命中的键被统计为未命中。 #9411 (Nikita Mikhaylov)
  • 修复在 #8598 中引入的导致复制协议不兼容的问题。#9412 (alesapin)
  • 修复了 ReplicatedMergeTree 表在启动时 queue_task_handle 上的竞态条件。 #9552 (alexey-milovidov)
  • SHOW TABLES NOT LIKE 查询中,关键字 NOT 无法正常工作 #8727 #8940 (alexey-milovidov)
  • 为函数 h3EdgeLengthM 添加了范围检查。如果没有该检查,可能会发生缓冲区溢出。#8945 (alexey-milovidov)
  • 修复了在对多个参数(超过 10 个)进行批量三元逻辑运算时的一个错误。 #8718 (Alexander Kazakov)
  • 修复 PREWHERE 优化中的一个错误,该错误可能导致段错误或抛出 Inconsistent number of columns got from MergeTreeRangeReader 异常。#9024 (Anton Popov)
  • 修复在启用查询分析器时,在安全连接中随机出现的意外 Timeout exceeded while reading from socket 异常(在实际超时之前就被抛出)。同时新增 connect_timeout_with_failover_secure_ms 设置项(默认 100ms),其作用类似于 connect_timeout_with_failover_ms,但用于安全连接(因为 SSL 握手比普通 TCP 连接更慢) #9026 (tavplubix)
  • 修复变更(mutation)完成状态处理中的 bug,解决变更可能卡在 parts_to_do=0is_done=0 状态的问题。 #9022 (alesapin)
  • 使用新的 ANY JOIN 逻辑,通过 partial_merge_join 设置实现。现在在 partial_merge_join=1 时,可以执行 ANY|ALL|SEMI LEFTALL INNER join。#8932 (Artem Zuikov)
  • 现在,分片会将从发起方获取的设置自动收紧到该分片自身的约束范围内,而不是抛出异常。此修复允许在约束条件不同的情况下向分片发送查询。 #9447 (Vitaly Baranov)
  • 修复了 MergeTreeReadPool 中的内存管理问题。 #8791 (Vladimir Chebotarev)
  • 修复当以字符串 e 作为参数调用时的 toDecimal*OrNull() 系列函数问题。解决了 #8312 #8764Artem Zuikov
  • 确保 FORMAT Null 不向客户端发送任何数据。 #8767 (Alexander Kuzmenkov)
  • 修复 LiveViewBlockInputStream 中时间戳不会更新的问题。LIVE VIEW 是一个实验性特性。#8644 (vxider) #8625 (vxider)
  • 修复了 ALTER MODIFY TTL 的错误行为,此前无法删除旧的 TTL 表达式。 #8422 (Vladimir Chebotarev)
  • 修复了 MergeTreeIndexSet 中 UBSan 报告的问题。此修复解决了 #9250#9365alexey-milovidov
  • 修复了当 haystack 为零字节时 matchextract 函数的行为。当 haystack 为常量时,其行为不正确。本次修复了 #9160 #9163alexey-milovidov#9345alexey-milovidov
  • 避免在 Apache Avro 第三方库中从析构函数抛出异常。 #9066 (Andrew Onyshchuk)
  • 不要只提交从 Kafka 轮询到的批次中的一部分,否则可能导致数据出现缺失。#8876 (filimonov)
  • 修复具有可为空值返回类型的 joinGet#8919 #9014 (Amos Bird)
  • 修复使用 T64 编解码器压缩时的数据不兼容问题。 #9016 (Artem Zuikov) 修复 T64 压缩编解码器中的数据类型 ID,从而避免在受影响版本中产生错误的(解)压缩结果。 #9033 (Artem Zuikov)
  • 添加设置 enable_early_constant_folding,并在某些会导致错误的情况下禁用该设置。 #9010 (Artem Zuikov)
  • 修复涉及 VIEW 的下推谓词优化器并启用相关测试 #9011 (Winter Zhang)
  • 修复在从 File 存储读取时可能导致 Merge 表发生的段错误 #9387 (tavplubix)
  • ATTACH PARTITION FROMREPLACE PARTITIONMOVE TO TABLE 中新增了对存储策略的检查。否则在重启后可能导致部分数据不可访问,并阻止 ClickHouse 启动。#9383 (Vladimir Chebotarev)
  • 修复在表设置了 TTL 时执行 ALTER 的问题。 #8800 (Anton Popov)
  • 修复在执行 SYSTEM RELOAD ALL DICTIONARIES 时,当某个字典正在被修改/添加/删除时可能出现的竞争条件。 #8801 (Vitaly Baranov)
  • 在之前的版本中,Memory 数据库引擎使用空的数据路径,因此表会被创建在 path 目录中(例如 /var/lib/clickhouse/),而不是在数据库的数据目录中(例如 /var/lib/clickhouse/db_name)。 #8753 (tavplubix)
  • 修复了关于缺少默认磁盘或策略的错误的日志消息。#9530 (Vladimir Chebotarev)
  • 修复数组类型 bloom_filter 索引中 not(has()) 的问题。#9407 (achimbab)
  • 允许 Log 引擎表的首列(或前几列)为别名 #9231 (Ivan)
  • 修正单线程从 MergeTree 表读取时的范围顺序问题。该问题可能导致 MergeTreeRangeReader 抛出异常或产生错误的查询结果。#9050 (Anton Popov)
  • reinterpretAsFixedString 的返回类型从 String 改为 FixedString#9052 (Andrew Onyshchuk)
  • 避免在极少数情况下用户收到错误的提示信息(返回 Success 而不是详细的错误描述)。 #9457 (alexey-milovidov)
  • 在使用 Template 格式且行模板为空时避免发生崩溃。 #8785 (Alexander Kuzmenkov)
  • 系统表元数据文件可能会在错误的位置创建 #8653tavplubix),修复了 #8581
  • 修复 cache dictionary 中 exception_ptr 的数据竞争问题 #8303#9379Nikita Mikhaylov
  • 对于查询 ATTACH TABLE IF NOT EXISTS,不再抛出异常。此前,即使包含 IF NOT EXISTS 子句,如果表已存在也会抛出异常。#8967 (Anton Popov)
  • 修复了异常消息中缺失的右括号。 #8811 (alexey-milovidov)
  • 在交互模式下启动 clickhouse-client 时,避免显示 Possible deadlock avoided 消息。 #9455 (alexey-milovidov)
  • 修复了 base64 编码值末尾填充部分可能格式错误的问题,并更新了 base64 库。此更改修复了 #9491,并关闭了 #9492#9500alexey-milovidov
  • 防止在极少数情况下,在读取后缀之后但在提交之前发生异常时导致 Kafka 中的数据丢失。修复了 #9378 #9507filimonov
  • 修复了 DROP TABLE IF EXISTS 语句中的异常 #8663Nikita Vasilev
  • 修复当用户尝试对旧格式的 MergeTree 表引擎系列执行 ALTER MODIFY SETTING 时发生的崩溃问题。 #9435 (alesapin)
  • 在与 JSON 相关的函数中支持无法用 Int64 表示的 UInt64 数值。将 SIMDJSON 更新到 master 分支。该更改修复了 #9209 #9344alexey-milovidov
  • 修复在使用非严格单调函数索引时执行反向谓词的错误。 #9223 (Alexander Kazakov)
  • 不要在 GROUP BY 中对 IN 常量进行折叠 #8868 (Amos Bird)
  • 修复了 ALTER DELETE 变更操作导致索引损坏的错误。此修复解决了 #9019#8982。另外,修复了 ReplicatedMergeTreeALTER 查询里极其罕见的竞争条件。#9048 (alesapin)
  • 当启用 compile_expressions 设置时,在使用 Nullable 类型时,可能会在 LLVMExecutableFunction 中出现 unexpected column 错误 #8910Guillaume Tassery
  • 针对 Kafka 引擎的多项修复:1)修复在 consumer group rebalance 期间出现的重复数据问题。2)修复在使用一次 poll 从多个分区拉取数据并只做部分提交时出现的罕见“空洞”问题(现在我们总是处理 / 提交整块拉取到的消息)。3)修复按块大小进行 flush 的逻辑(在此之前,只有按超时时间进行 flush 能够正常工作)。4)改进订阅流程(带有 assignment 反馈)。5)加快测试执行速度(在默认轮询间隔和超时时间下)。由于之前并未按块大小进行 flush(而文档要求应当如此),该 PR 在默认设置下可能会导致一定的性能下降(因为 flush 更频繁且块更小,效率较低)。如果在此变更后遇到性能问题,请将表中的 kafka_max_block_size 调大(例如 CREATE TABLE ...Engine=Kafka ... SETTINGS ... kafka_max_block_size=524288)。修复 #7259 #8917filimonov
  • 修复了在进行 PREWHERE 优化后某些查询中出现的 Parameter out of bound 异常。#8914 (Baudouin Giard)
  • 修复了函数 arrayZip 在参数常量性不一致(同时包含常量与非常量)时的处理问题。 #8705 (alexey-milovidov)
  • 在执行 CREATE 查询时,对存储引擎参数中的常量表达式进行折叠。将空数据库名替换为当前数据库。修复 #6508#3492#9262tavplubix
  • 现在不再允许创建或添加具有简单循环别名的列,例如 a DEFAULT b, b DEFAULT a#9603 (alesapin)
  • 修复了双重移动操作可能破坏原始数据分片(part)的错误。如果您使用 ALTER TABLE MOVE,则该修复与您相关 #8680 (Vladimir Chebotarev)
  • 允许在不使用反引号的情况下也能正确解析 interval 标识符。修复了即使将 interval 标识符用反引号或双引号括起来,查询仍然无法执行的问题。修复了 #9124#9142alexey-milovidov
  • 修复了模糊测试以及 bitTestAll/bitTestAny 函数的不正确行为。#9143 (alexey-milovidov)
  • 修复在存在大量与第 n 行相等的行时,LIMIT n WITH TIES 可能导致崩溃或返回错误行数的问题。 #9464 (tavplubix)
  • 修复对在启用 insert_quorum 时写入的数据分片执行 mutation 时的问题。 #9463 (alesapin)
  • 修复在销毁 Poco::HTTPServer 期间出现的数据竞争。当服务器启动后立即关闭时可能会发生该问题。 #9468 (Anton Popov)
  • 修复了在运行 SHOW CREATE TABLE a_table_that_does_not_exist 时会显示误导性错误信息的问题。 #8899 (achulkov2)
  • 修复了在 SELECT 子句中包含常量且同时存在 ORDER BYLIMIT 子句时,极少数情况下会出现的 Parameters are out of bound 异常。 #8892 (Guillaume Tassery)
  • 修复 mutation 完成流程,已完成的 mutation 可能仍然显示状态 is_done=0#9217 (alesapin)
  • 禁止对 MergeTree 表使用旧语法执行 ALTER ADD INDEX,因为该语法无效。#8822 (Mikhail Korotov)
  • 在服务器启动时,请不要访问 LIVE VIEW 所依赖的表,以便服务器能够正常启动。在分离 LIVE VIEW 时,请同时移除其依赖关系。LIVE VIEW 是一个实验性功能。#8824 (tavplubix)
  • 修复在执行 PREWHEREMergeTreeRangeReader 中可能发生的段错误。 #9106 (Anton Popov)
  • 修复在使用列 TTL 时可能出现的校验和不匹配问题。#9451 (Anton Popov)
  • 修复了一个错误:当只有一个卷时,TTL 规则不会在后台移动数据分片。 #8672 (Vladimir Chebotarev)
  • 修复了问题 Method createColumn() is not implemented for data type Set。此修复解决了 #7799#8674 (alexey-milovidov)
  • 现在我们会更频繁地尝试完成 mutations。#9427 (alesapin)
  • 通过减去常量 1 修复 intDiv #9351 (hcz)
  • 修复 BlockIO 中可能存在的竞争条件。 #9356 (Nikolai Kochetov)
  • 修复在尝试使用或删除以错误参数创建的 Kafka 表时导致服务器终止的问题。 #9513 (filimonov)
  • 添加了针对操作系统对 timer_create 函数返回错误结果的变通方案。 #8837 (alexey-milovidov)
  • 修复了 min_marks_for_seek 参数的使用错误。修复了在 Distributed 表中没有分片键且尝试跳过未使用分片时的错误消息。#8908 (Azat Khuzhin)

改进

  • ReplicatedMergeTree* 引擎家族中基于 mutation(变更)机制实现 ALTER MODIFY/DROP 查询。现在 ALTER 查询只会在元数据更新阶段产生阻塞,之后将不再阻塞。 #8701 (alesapin)
  • WHERE 子句包含未限定名称时,新增将 CROSS 重写为 INNER JOIN 的功能。 #9512 (Artem Zuikov)
  • 使 SHOW TABLESSHOW DATABASES 查询支持 WHERE 表达式以及 FROM/IN 子句 #9076 (sundyli)
  • 新增了设置项 deduplicate_blocks_in_dependent_materialized_views#9070 (urykhy)
  • 在最近的更改之后,MySQL 客户端开始以十六进制形式输出二进制字符串,从而导致它们不可读(#9032)。在 ClickHouse 中的解决方法是将字符串列标记为 UTF-8,虽然并非在所有情况下都适用,但大多数情况下都是如此。#9079Yuriy Baranov
  • sumMap 添加对 String 和 FixedString 类型键的支持 #8903 (Baudouin Giard)
  • 在 SummingMergeTree 的 map 中增加对字符串键的支持 #8933 (Baudouin Giard)
  • 即使线程抛出异常,也会向线程池发送该线程的终止信号 #8736 (Ding Xiang Fei)
  • 支持在 clickhouse-benchmark 中设置 query_id #9416 (Anton Popov)
  • ALTER TABLE ... PARTITION partition 查询中不再允许使用异常表达式。修复了 #7192 #8835alexey-milovidov
  • system.table_engines 现在提供有关功能支持的信息(例如 supports_ttlsupports_sort_order)。 #8830 (Max Akhmedov)
  • 默认启用 system.metric_log。其中将包含以 "collect_interval_milliseconds" 间隔(默认一秒)采集的 ProfileEvents 和 CurrentMetrics 的值对应的行。该表非常小(通常只有几兆字节级别),默认收集这些数据是合理的。#9225 (alexey-milovidov)
  • 为同一组内的所有线程初始化查询分析器,例如,这样可以对 INSERT 查询进行完整分析。修复 #6964 #8874 (Ivan)
  • 现在创建临时 LIVE VIEW 时,使用 CREATE LIVE VIEW name WITH TIMEOUT [42] ...,而不再使用 CREATE TEMPORARY LIVE VIEW ...,因为之前的语法与 CREATE TEMPORARY TABLE ... 不一致 #9131 (tavplubix)
  • 添加 text_log.level 配置参数,用于限制写入到 system.text_log 表的日志条目 #8809 (Azat Khuzhin)
  • 允许根据 TTL 规则将已下载的数据分片存放到磁盘/卷上 #8598 (Vladimir Chebotarev)
  • 对于外部 MySQL 字典,允许复用 MySQL 连接池,使其在字典之间“共享”连接。此选项可显著减少到 MySQL 服务器的连接数量。 #9409 (Clément Rodriguez)
  • clickhouse-benchmark 的输出中,对分位数显示最接近的查询执行时间,而不是插值后的数值。最好显示与实际查询执行时间相对应的数值。 #8712 (alexey-milovidov)
  • 支持在向 Kafka 插入数据时为消息添加 key 和时间戳。修复 #7198 #8969 (filimonov)
  • 如果从终端运行服务器,则会通过不同颜色突出显示线程编号、查询 ID 和日志优先级。这样可以提高开发人员在阅读关联日志消息时的可读性。 #8961 (alexey-milovidov)
  • 在为 Ordinary 数据库加载表时改进异常信息。#9527 (alexey-milovidov)
  • 为包含聚合函数状态的数组实现 arraySlice 支持。修复了 #9388 #9391alexey-milovidov
  • 允许在 IN 运算符的右侧使用常量函数和常量数组。 #8813 (Anton Popov)
  • 如果在为 system.replicas 获取数据时发生 ZooKeeper 异常,则在单独的一列中显示该异常。对应实现 #9137 #9138alexey-milovidov
  • 在销毁时原子地删除 MergeTree 数据部件。#8402 (Vladimir Chebotarev)
  • 支持 Distributed 表的行级安全性。 #8926 (Ivan)
  • 现在支持在设置值中识别后缀(如 KB、KiB 等)。#8072 (Mikhail Korotov)
  • 防止在构建大型 JOIN 结果时发生内存耗尽。 #8637 (Artem Zuikov)
  • clickhouse-client 的交互模式中,在补全建议中添加了集群名称。#8709 (alexey-milovidov)
  • 为一个线程组中的所有线程初始化查询分析器,例如,这样可以对 INSERT 查询进行完整分析 #8820 (Ivan)
  • system.query_log 表中新增了 exception_code 列。 #8770 (Mikhail Korotov)
  • 在默认服务器配置文件中启用了端口 9004 上的 MySQL 兼容服务器。修正了配置示例中的密码生成命令。#8771 (Yuriy Baranov)
  • 当文件系统为只读时,防止在关闭时发生 abort。修复了 #9094 #9100alexey-milovidov
  • 当 HTTP POST 查询需要指定长度时,改进异常信息。 #9453 (alexey-milovidov)
  • HDFSFile 引擎以及 hdfsfile 表函数添加 _path_file 虚拟列 #8489 (Olga Khvostikova)
  • 修复在向 MATERIALIZED VIEW 插入数据时,如果已向视图的内部表中添加新列会出现的 Cannot find column 错误。 #8766 #8788 (vzakaznikov) #8788 #8806 (Nikolai Kochetov) #8803 (Nikolai Kochetov)
  • 修复原生客户端-服务器协议中的进度处理方式:改为在最终更新之后(类似日志)再发送进度信息。此更改可能仅与使用原生协议的部分第三方工具相关。 #9495 (Azat Khuzhin)
  • 添加系统指标,用于跟踪使用 MySQL 协议的客户端连接数(#9013)。#9015Eugene Klimov
  • 从现在起,HTTP 响应将包含 X-ClickHouse-Timezone 头部,其值与 SELECT timezone() 返回的时区值相同。#9493 (Denis Glazachev)

性能改进

  • 提高使用 IN 分析索引时的性能。#9261 (Anton Popov)
  • 在逻辑函数中使用更简单且更高效的代码,并进行代码清理。是对 #8718#8728 的后续改进。(Alexander Kazakov)
  • 通过借助 C++20 特性确保更严格的别名规则,从而整体提升性能(受影响查询的性能提升范围为 5%~200%)。#9304 (Amos Bird)
  • 对比较函数内部循环应用更严格的别名规则。#9327 (alexey-milovidov)
  • 对算术函数内部循环应用更严格的别名规则。#9325 (alexey-milovidov)
  • 为 ColumnVector::replicate() 提供了大约 3 倍更快的实现,ColumnConst::convertToFullColumn() 也是基于该实现完成的。在对常量做物化时的测试中也会很有用。#9293 (Alexander Kazakov)
  • ColumnVector::replicate() 进行另一项小幅性能优化(这会加速 materialize 函数以及高阶函数),是对 #9293 的进一步改进。#9442 (Alexander Kazakov)
  • 改进 stochasticLinearRegression 聚合函数的性能。该补丁由 Intel 贡献。#8652 (alexey-milovidov)
  • 改进 reinterpretAsFixedString 函数的性能。#9342 (alexey-milovidov)
  • 在处理器流水线中,对于 Null 格式不再向客户端发送数据块。#8797 (Nikolai Kochetov) #8767 (Alexander Kuzmenkov)

构建/测试/打包改进

  • 在 Windows Subsystem for Linux(WSL)中,异常处理现已正常工作。详见 https://github.com/ClickHouse-Extras/libunwind/pull/3。此更改修复了 #6480#9564sobolevsv)。
  • clickhouse-client 的交互式行编辑库从 readline 替换为 replxx #8416 (Ivan)
  • 在 FunctionsComparison 中提升构建速度并减少模板实例化次数。 #9324 (alexey-milovidov)
  • 在 CI 中新增了 clang-tidy 集成。另请参阅 #6044 #9566 (alexey-milovidov)
  • 现在在 CI 中链接 ClickHouse 时,即使使用 gcc,我们也会使用 lld#9049 (alesapin)
  • 当设置了 THREAD_FUZZER_* 环境变量时,可以对线程调度进行随机化并插入干扰,有助于测试。#9459 (alexey-milovidov)
  • 在无状态测试中启用安全套接字功能 #9288 (tavplubix)
  • 使 SPLIT_SHARED_LIBRARIES=OFF 更加健壮 #9156 (Azat Khuzhin)
  • 使 performance_introspection_and_logging 测试在服务器随机卡死的情况下也能保持可靠。这种情况可能会在 CI 环境中发生。另请参见 #9515 #9528alexey-milovidov
  • 在样式检查中对 XML 进行校验。 #9550 (alexey-milovidov)
  • 修复了测试 00738_lock_for_inner_table 中的竞态条件。该测试依赖于 sleep 调用。 #9555 (alexey-milovidov)
  • 移除 once 类型的性能测试。这样可以在统计对比模式下运行所有性能测试,从而获得更可靠的结果。#9557 (alexey-milovidov)
  • 为算术函数新增了性能测试。#9326 (alexey-milovidov)
  • sumMapsumMapWithOverflow 聚合函数添加了性能测试,作为 #8933#8947 的后续工作(alexey-milovidov
  • 通过样式检查确保 ErrorCodes 的风格一致。 #9370 (alexey-milovidov)
  • 为测试历史添加脚本。 #8796 (alesapin)
  • 添加 GCC 警告 -Wsuggest-override,以定位并修复所有需要使用 override 关键字的地方。 #8760 (kreuzerkrieg)
  • 在 Mac OS X 上忽略 weak symbol,因为它必须被定义 #9538 (Deleted user)
  • 对性能测试中部分查询的运行时间进行归一化处理。这是为了准备以对比模式运行所有性能测试。#9565 (alexey-milovidov)
  • 修复部分测试,以便在查询测试中支持 pytest #9062 (Ivan)
  • 在使用 MSan 构建时启用 SSL,以避免服务器在运行无状态测试时启动失败 #9531 (tavplubix)
  • 修复测试结果中的数据库替换问题 #9384 (Ilya Yatsishin)
  • 针对多种平台的构建修复 #9381 (proller) #8755 (proller) #8631 (proller)
  • 在 stateless-with-coverage 测试 Docker 镜像中添加了 disks 部分 #9213 (Pavel Kovalenko)
  • 使用 GRPC 进行构建时清理源码树中的文件 #9588 (Amos Bird)
  • 通过从 Context 中移除 SessionCleaner 略微缩短构建时间,并简化 SessionCleaner 的代码。#9232 (alexey-milovidov)
  • 更新了 clickhouse-test 脚本中对卡住查询的检查 #8858 (Alexander Kazakov)
  • 从代码仓库中移除了一些多余文件。 #8843 (alexey-milovidov)
  • 将 math 性能测试的类型从 once 更改为 loop#8783 (Nikolai Kochetov)
  • 添加一个 Docker 镜像,用于生成我们代码库的交互式代码浏览器 HTML 报告。 #8781 (alesapin) 参见 Woboq Code Browser
  • 在 MSan 下屏蔽了一些测试失败。#8780 (Alexander Kuzmenkov)
  • 加速“exception while insert”测试。此测试在启用代码覆盖率的调试构建中经常超时。 #8711 (alexey-milovidov)
  • libcxxlibcxxabi 更新到了 master 分支。为 #9304 #9308 做准备(alexey-milovidov
  • 修复不稳定的测试用例 00910_zookeeper_test_alter_compression_codecs#9525 (alexey-milovidov)
  • 清理重复的链接器标志,确保链接器不会解析到意外的符号。#9433 (Amos Bird)
  • 在测试镜像中添加 clickhouse-odbc 驱动程序,以便通过其自带的 ODBC 驱动测试 ClickHouse 与 ClickHouse 之间的交互。#9348 (filimonov)
  • 修复若干单元测试中的缺陷。 #9047 (alesapin)
  • 启用 -Wmissing-include-dirs GCC 警告,以消除所有指向不存在目录的 include —— 这些通常是由 CMake 脚本错误导致的 #8704 (kreuzerkrieg)
  • 当查询分析器无法工作时,请说明具体原因。此项变更对应 #9049 #9144alexey-milovidov
  • 将 OpenSSL 更新到上游 master 版本。修复了一个可能导致 TLS 连接失败的问题,失败时会出现 OpenSSL SSL_read: error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal errorSSL Exception: error:2400006E:random number generator::error retrieving entropy 错误信息。该问题存在于 20.1 版本中。#8956 (alexey-milovidov)
  • 更新 server Dockerfile #8893 (Ilya Mazaev)
  • 对 build-gcc-from-sources 脚本进行了一些小修正 #8774 (Michael Nacharov)
  • 在未使用 number 列的性能测试中将 numbers 替换为 zeros。这将使测试结果更加清晰。 #9600 (Nikolai Kochetov)
  • 修复在 Column 构造函数中使用 initializer_list 时出现的栈溢出问题。 #9367 (已删除的用户)
  • 将 librdkafka 升级到 v1.3.0。在 Mac OS X 上启用捆绑的 rdkafkagsasl 库。#9000 (Andrew Onyshchuk)
  • 修复 GCC 9.2.0 下的构建问题 #9306 (vxider)

ClickHouse 发布 v20.1

ClickHouse 发布 v20.1.16.120-stable 2020-60-26

Bug 修复

  • 修复在 prewhere 条件中使用 Nullable 列导致的罕见崩溃问题。是对 #11608 的后续修复。#11869Nikolai Kochetov)。
  • 不再允许在高阶函数内部使用 arrayJoin。此前这会导致协议同步被破坏。此修改关闭了 #3933#11846alexey-milovidov)。
  • 修复类似 SELECT *, xyz.* 这类查询的非预期行为,这些查询原本应该报错却能成功执行。#11753hexiaoting)。
  • 修复在 Values 输入格式中,由于复杂字面量类型推导错误导致的 LOGICAL_ERROR。#11732tavplubix)。
  • 修复对常量列使用 ORDER BY ... WITH FILL 的问题。#11697Anton Popov)。
  • 与 XDBC bridge 通信时传递正确的超时时间。此前在检查 bridge 存活状态和接收元数据时,未正确遵守超时设置。#11690alexey-milovidov)。
  • 增加对带有大小写不敏感标志的正则表达式的支持。修复了 #11101 并修复了 #11506#11649alexey-milovidov)。
  • 修复针对 String 的布隆过滤器(数据跳过索引)的问题。#11638Azat Khuzhin)。
  • 修复在 prewhere 条件中使用 Nullable 列导致的罕见崩溃问题。(可能与 #11572 有关联)。#11608Nikolai Kochetov)。
  • 修复在 exception.code() % 256 = 0 时,clickhouse-client 的错误退出码。#11601filimonov)。
  • 修正服务器启动时关于 "Mark cache size was lowered" 这一日志消息中的一个简单的错误。此修改关闭了 #11399#11589alexey-milovidov)。
  • 现在 clickhouse-server 的 Docker 容器在检查服务器存活时将优先使用 IPv6。#11550Ivan Starkov)。
  • 修复在执行使用带 -State 后缀聚合函数的聚合过程中抛出异常时出现的内存泄漏问题。修复了 #8995#11496alexey-milovidov)。
  • 修复在带有 FINAL 修饰符以及 ORDER BY 优化时,将主键包裹在函数中使用的问题。#10715Anton Popov)。

ClickHouse 发布 v20.1.15.109-stable 2020-06-19

Bug 修复

  • 修复在执行 ALTER 时对结构多余加锁的问题。#11790 (alesapin)。

ClickHouse 发布 v20.1.14.107-stable 2020-06-11

Bug 修复

  • 修复在包含 PREWHERE column in (subquery)ARRAY JOIN 的查询中出现错误 Size of offsets does not match size of column 的问题。#11580 (Nikolai Kochetov)。

ClickHouse 发布 v20.1.13.105-stable 2020-06-10

Bug 修复

  • 修复在启用 min_bytes_to_use_direct_io 且 PREWHERE 启用,并使用 SAMPLE 或高并发线程时可能出现的错误 Data compressed with different methods。此修复解决了 #11539#11540alexey-milovidov)。
  • 修复编解码器返回的压缩大小计算。 #11448 (Nikolai Kochetov).
  • 修复当某列的压缩 codec 带有非字面量参数时出现的服务器崩溃问题。修复了 #11365#11431alesapin)。
  • 修复 point 为 NaN 时的 pointInPolygon。解决了 #11375#11421Alexey Ilyukhov)。
  • 修复了在参数超出纬度/经度范围时的 geohashesInBox 问题。 #11403 (Vasily Nemkov).
  • 修复在使用外部排序(external sort)和 limit 的查询中可能出现的 Pipeline stuck 错误。修复了 #11359#11366Nikolai Kochetov)。
  • 修复 quantilesExactWeightedArray 中的崩溃。 #11337 (Nikolai Kochetov).
  • 在设置 parallel_view_processing = 1 时,恢复对 MATERIALIZED VIEW 的并行写入。修复 #10241#11330Nikolai Kochetov)。
  • 修复 visitParamExtractRaw 在提取的 JSON 中遇到包含不成对 { 或 [ 的字符串时的行为。 #11318 (Ewout).
  • 修复 ThreadPool 中极罕见的竞争条件。 #11314 (alexey-milovidov).
  • 修复转换过程中可能使用未初始化内存的问题。例如:SELECT toIntervalSecond(now64())#11311alexey-milovidov)。
  • 修复当表的主键中包含 Array 类型列,且查询对该列使用 emptynotEmpty 函数进行过滤时导致索引分析失效的问题。此修复对应 #11286#11303alexey-milovidov)。
  • 修复了一个错误:当查询被 max_network_bandwidthmax_execution_speedpriority 设置限速时,查询速度估算可能不正确,从而导致 min_execution_speed 的限制可能不起作用或无法正常工作。将 timeout_before_checking_execution_speed 的默认值更改为非零值,否则 min_execution_speedmax_execution_speed 设置将不会生效。此更改修复了 #11297。此更改修复了 #5732。此更改修复了 #6228。可用性改进:在 clickhouse-client 中避免将异常信息与进度条拼接在一起。#11296alexey-milovidov)。
  • 修复在读取格式错误的 Protobuf 数据时发生的崩溃。此更改修复了 #5957#11203#11258Vitaly Baranov)。
  • 修复在高阶函数捕获类型为 Array(Array(LowCardinality)) 的参数时可能出现的 Cannot capture column 错误。#11185 (Nikolai Kochetov)。
  • 如果 data skipping 索引依赖于在后台合并过程中会被修改的列(适用于 SummingMergeTree、AggregatingMergeTree 以及 TTL GROUP BY),则该索引会被错误地计算。此问题通过将索引计算移动到合并之后来修复,从而在合并后的数据上计算索引。#11162Azat Khuzhin)。
  • 如果没有任何内容被最终完成,则从 mutation 完成任务中移除日志记录。 #11109 (alesapin).
  • 修复了 parseDateTime64BestEffort 参数解析中的错误。#10925#11038 (Vasily Nemkov)。
  • 修复 getRawData() 方法返回的原始数据大小不正确的问题。 #10964 (Igr).
  • 修复 Distributed 表中元组的向后兼容性问题。#10889 (Anton Popov)。
  • 修复 StringHashTable 中的 SIGSEGV(如果该键不存在时)。 #10870 (Azat Khuzhin)。
  • 修复了 ReplicatedMergeTree 中的一个 bug,它可能会导致某些针对 OPTIMIZE 查询的 ALTER 语句在某个副本变为非活跃状态后仍一直等待该副本而挂起。#10849 (tavplubix)。
  • 在调用 Block::sortColumns() 之后修复列的顺序(并添加一个测试,用于展示它会影响某些实际用例,例如 Buffer 引擎)。 #10826 (Azat Khuzhin)。
  • 修复了在未对标识符加引号时 ODBC bridge 存在的问题。此更改修复了 #7984#10821alexey-milovidov)。
  • 修复 DateLUT 中 UBSan 和 MSan 报告的问题。 #10798 (alexey-milovidov).
  • 修复 parallel_view_processing 的行为。现在,即使发生异常,对所有 MATERIALIZED VIEW 的插入都应无一例外地完成。修复了 #10241#10757Nikolai Kochetov)。
  • 修复在与 -State 组合使用时的 -OrNull 和 -OrDefault 组合器。#10741 (hcz).
  • 修复总计消失的问题。如果查询包含 JOIN 或带有外部 WHERE 条件的子查询,则总计可能会被过滤掉。修复了 #10674#10698Nikolai Kochetov)。
  • 修复在单个查询中多次对同一集合使用 IN 运算符的问题。#10686 (Anton Popov).
  • 修复 AggregateTransform 构造函数的参数顺序。#10667palasonic1)。
  • 修复在启用 distributed_aggregation_memory_efficient 时远程查询无法并行执行的问题。修复了 #10655#10664Nikolai Kochetov)。
  • 修复分布式查询中谓词优化(enable_optimize_predicate_expression=1)在带有 HAVING 子句(即需要在发起端服务器进行过滤)的查询中的问题:通过保留表达式的顺序(这本身就足以修复该问题),并强制聚合器优先使用列名而非索引。修复:#10613, #11413#10621Azat Khuzhin)。
  • 修复错误 BloomFilter false positive 必须是介于 0 和 1 之间的双精度浮点数 #10551#10569Winter Zhang)。
  • 修复在 SELECT 中使用列别名 ALIAS 时,其默认表达式类型与列类型不一致的问题。#10563 (Azat Khuzhin).
    • 实现了 DateTime64 与 String 类型值之间的比较(与 DateTime 的行为相同)。 #10560 (Vasily Nemkov).

ClickHouse 版本 v20.1.12.86,2020-05-26

Bug 修复

  • 修复了 20.1 版本与更早版本之间在两级聚合上的不兼容问题。当在发起节点和远程节点上使用不同版本的 ClickHouse,且 GROUP BY 结果较大,并且仅按单个 String 字段进行聚合时,会出现此不兼容性。这会导致结果中同一键对应的多行数据未被合并。 #10952 (alexey-milovidov).
  • 修复了在合并后可能发生的 SummingMergeTreeLowCardinality(FixedString) 键列数据损坏。修复了 #10489#10721Nikolai Kochetov)。
  • 修复了在 readonly=2cancel_http_readonly_queries_on_client_close=1 时,客户端关闭会导致 HTTP 请求卡住的问题。修复了 #7939#7019#7736#7091#10684tavplubix)。
  • 修复了一个问题:在执行 SYSTEM DROP DNS CACHE 查询时,会连同用于检查用户是否被允许从某些 IP 地址连接的缓存一并清除。 #10608 (tavplubix).
  • 修复了在 MATERIALIZED VIEW 的内部查询中,当该查询包含依赖的表时返回的标量结果不正确的问题。#10603 (Nikolai Kochetov).
  • 修复了这样一种情况:mutation 已处理完所有数据部分,但状态仍停留在 is_done=0#10526 (alesapin).
  • 修复了在 Unix 纪元起点,对于相对于 UTC 具有非整数偏移的时区出现的溢出问题。此修复对应 #9335#10513alexey-milovidov)。
  • 修复了 Distributed 存储异常关闭的问题。#10491 (Azat Khuzhin).
  • 修复了 simpleLinearRegression 在处理大整数时的数值溢出问题。#10474 (hcz).
  • 修复了在 ATTACH DATABASE 失败时误删 metadata 目录的问题。 #10442 (Winter Zhang)。
  • 在创建 BloomFilter 索引时增加了对参数数量和类型的检查 #9623#10431Winter Zhang)。
  • 修复了包含 ARRAY JOINORDER BYLIMIT 的查询可能返回不完整结果的问题。此更改修复了 #10226#10427alexey-milovidov)。
  • 优先选择 fallback_to_stale_replicas,而不要使用 skip_unavailable_shards#10422 (Azat Khuzhin).
  • 修复了对 Array(Tuple(...)) 数据类型的不正确扁平化处理。此更改修复了 #10259#10390alexey-milovidov)。
  • 修复了 HashTable 中的错误逻辑,曾在尝试从缓冲区读取 HashMap 时导致编译错误。#10386 (palasonic1).
  • 修复了在远程查询中可能出现的 ConcatProcessor 中的 Pipeline stuck 错误。#10381Nikolai Kochetov)。
  • 修复了在使用 max_rows_to_group_bygroup_by_overflow_mode = 'break' 时可能出现的 Pipeline stuck 错误。#10279 (Nikolai Kochetov)。
  • 修复了若干问题:当部分数据以 quorum 方式写入后,又被(DROP PARTITION、TTL 等)删除时,会导致后续 INSERT 请求阻塞,或在执行 SELECT 时抛出误报异常。此改动修复了 #9946#10188Nikita Mikhaylov)。
  • 修复了这样一种不兼容问题:当远程服务器使用 18.12.17 之前的版本,而发起请求的服务器使用更新版本,并且在 GROUP BY 中同时使用固定键和非固定键且启用了 two-level group by 方法时会出现的问题。 #3254 (alexey-milovidov).

构建/测试/打包改进

  • 在 clickhouse-server Docker 镜像中添加了 CA 证书。#10476 (filimonov)。

ClickHouse v20.1.10.70 版本发布,2020-04-17

缺陷修复

  • 修复一个可能出现的罕见异常 Cannot drain connections: cancel first#10239 (Nikolai Kochetov).
  • 修复了一个问题:当用户尝试在 ENGINE = Replicated* 的表上执行 ALTER UPDATE/DELETE 时,ClickHouse 会抛出 'Unknown function lambda.' 错误信息。现在对非确定性函数的检查已能正确处理 lambda 表达式。#10237 (Alexander Kazakov)。
  • 修复 parseDateTimeBestEffort 在处理星期二或星期四的 RFC-2822 格式字符串时的解析问题。修复了 #10082#10214alexey-milovidov)。
  • 修复 JOIN 中常量列的列名,以避免与 JOIN 外部常量列的列名发生冲突。 #10207 (alexey-milovidov)。
  • 修复在从 system.numberssystem.zeros 等无限数据源读取时,本应在 LIMIT 处停止却可能导致查询无限执行的问题。#10206 (Nikolai Kochetov).
  • 修复在存在 arrayJoin 函数时(在某些情况下)move-to-prewhere 优化的问题。此修复解决了 #10092#10195alexey-milovidov)。
  • 通过 allow_nondeterministic_mutations 设置,新增在 mutation 中放宽对非确定性函数使用限制的功能。 #10186 (filimonov).
  • 在向使用 Distributed 引擎的表执行 INSERT 时,如果表结构不匹配,则自动转换数据块。#10135Azat Khuzhin)。
  • 修复在向 Distributed 表执行 INSERT 时,当其结构与底层表不同而导致的 SIGSEGV 问题。#10105Azat Khuzhin)。
  • 修复在包含 JOINUNION ALL 的查询中可能出现的行丢失问题。修复 #9826#10113#10099Nikolai Kochetov)。
  • 为 MySQL 数据库引擎添加参数检查,并支持标识符类型参数。 #10077 (Winter Zhang)。
  • 修复来自本机 ClickHouse 服务器的 ClickHouse 字典源中的 bug。当字典与数据源中的类型不兼容时,该 bug 可能导致内存损坏。#10071alesapin)。
  • 修复错误 Cannot clone block with columns because block has 0 columns ... While executing GroupingAggregatedTransform。该问题出现在启用 distributed_aggregation_memory_efficient 设置且分布式查询从不同分片读取聚合层级不同的数据时(单级与两级聚合混用)。#10063 (Nikolai Kochetov)。
  • 修复在对末尾带有零字节的字符串键执行 GROUP BY 时可能发生的段错误(#8636#8925)。#10025Alexander Kuzmenkov)。
  • 修复了一个问题:在对某些数据库执行查询的某个处理阶段中,未能检索到所需的表。修复了 #9699#9949achulkov2)。
  • 修复当 JOINTOTALS 一起使用时会出现 'Not found column in block' 错误的问题。已修复 #9839#9939Artem Zuikov)。
  • 修复了一个导致带有 ON CLUSTER 的 DDL 查询在服务器启动时发生冻结的问题。#9927 (Gagan Arneja)。
  • 为 Join 表引擎修复 TRUNCATE 操作(#9917)。#9920Amos Bird)。
  • 修复 ALTER 查询中的 'scalar does not exist' 错误(#9878)。#9904Amos Bird)。
  • 修复 ReplicatedMergeTree 中 drop 与 optimize 之间的并发竞争问题。 #9901 (alesapin).
  • 修复了 ATTACH PART 中的 DeleteOnDestroy 逻辑(该问题可能导致已附加的数据片段被自动删除),并增加了一些测试用例。#9410 (Vladimir Chebotarev)。

构建/测试/打包改进

ClickHouse 发行版 v20.1.9.54,2020-03-28

Bug 修复

  • 修复在分布式表上查询同时包含 PREWHEREWHERE,并且设置了 SET distributed_product_mode = 'local' 时出现的 'Different expressions with the same alias' 错误。#9871 (Artem Zuikov)。
  • 修复对具有复合主键的表执行 mutation 时内存消耗过高的问题。此修复解决了 #9850#9860 (alesapin)。
  • 对于 INSERT 查询,现在分片会将从发起端获得的设置裁剪到自身约束范围内,而不是直接抛出异常。此修复允许向约束不同的分片发送 INSERT 查询。此变更改进了对 #9447 的修复。#9852 (Vitaly Baranov)。
  • 修复客户端上可能出现的异常 Got 0 in totals chunk, expected 1。它会在包含 JOIN 的查询中触发,当右表没有任何行时会发生。例如:select * from system.one t1 join system.one t2 on t1.dummy = t2.dummy limit 0 FORMAT TabSeparated;。修复了 #9777#9823 (Nikolai Kochetov)。
  • 修复在类型无法转换时,配合 optimize_skip_unused_shards 使用会导致的 SIGSEGV#9804 (Azat Khuzhin)。
  • 修复了若干未正确使用函数参数时区的情形。#9574 (Vasily Nemkov)。

改进

  • 从 mutation 过程中移除 ORDER BY 阶段,因为我们在单线程中从单个有序数据部分读取。同时添加检查,以保证 mutation 中行的顺序符合排序键顺序,且该顺序不会被破坏。#9886 (alesapin)。

构建/测试/打包改进

  • 清理重复的链接器标志。确保链接器不会解析到意外的符号。#9433 (Amos Bird)。

ClickHouse 发行版 v20.1.8.41,2020-03-20

缺陷修复

  • 修复可能出现的永久性 Cannot schedule a task 错误(由 ParallelAggregatingBlockInputStream::Handler::onFinish/onFinishThread 中未处理的异常导致)。修复了 #6833#9154 (Azat Khuzhin)
  • 修复 ALTER 变更(mutation)查询中过高的内存消耗。修复了 #9533#9670#9754 (alesapin)
  • 修复外部字典 DDL 中反引号处理的错误。修复了 #9619#9734 (alesapin)

ClickHouse 版本 v20.1.7.38,2020-03-18

错误修复

  • 修复了 sumKahansumWithOverflow 的内部函数名称错误,该问题会在远程查询中使用这些函数时导致异常。#9636Azat Khuzhin)。这个问题存在于所有 ClickHouse 版本中。
  • 允许对包含内部复制的 Distributed 表执行 ALTER ON CLUSTER。这修复了 #3268#9617shinoi2)。该问题影响所有 ClickHouse 版本。
  • 修复了在 MergeTreeRangeReader 中可能出现的异常 Size of filter does not match size of columnInvalid number of rows in Chunk,这些异常可能在某些情况下执行 PREWHERE 时触发。修复了 #9132#9612Anton Popov
  • 已修复以下问题:在编写诸如 time + 1 这样的简单算术表达式时,不会保留时区(与 time + INTERVAL 1 SECOND 这样的表达式不同)。此修复对应 #5743#9323alexey-milovidov)。该问题存在于所有 ClickHouse 版本中。
  • 现在无法创建或添加带有简单循环引用别名的列,例如 a DEFAULT b, b DEFAULT a#9603 (alesapin)
  • 修复了 base64 编码值末尾填充可能格式错误的问题,并更新了 base64 库。修复了 #9491,关闭 #9492 #9500alexey-milovidov
  • 修复在销毁 Poco::HTTPServer 时出现的数据竞争问题。该问题可能在服务器刚启动后就立即被关闭时发生。#9468 (Anton Popov)
  • 修复在存在大量与第 n 行相同的行时,LIMIT n WITH TIES 可能发生的崩溃或返回行数不正确的问题。#9464 (tavplubix)
  • 修复在使用列 TTL 时可能出现的校验和不匹配问题。#9451 (Anton Popov)
  • 修复当用户尝试对旧格式的 MergeTree 表引擎系列执行 ALTER MODIFY SETTING 时发生的崩溃。#9435 (alesapin)
  • 现在我们会更频繁地尝试完成 mutation。 #9427 (alesapin)
  • 修复在 #8598 中引入的复制协议不兼容问题。#9412 (alesapin)
  • 修复数组类型的 bloom_filter 索引中 not(has()) 的问题。 #9407 (achimbab)
  • 修复了在 haystack 为零字节时 matchextract 函数的行为。当 haystack 为常量时,其行为不正确。此更改修复了 #9160 #9163 (alexey-milovidov) #9345 (alexey-milovidov)

构建/测试/打包改进

ClickHouse 发布 v20.1.6.30,2020-03-05

Bug 修复

  • 修复在使用 T64 编解码器进行压缩时出现的数据不兼容问题。 #9039 (abyss7)
  • 修正单线程读取 MergeTree 表时的范围顺序。修复了 #8964#9050 (CurtizJ)
  • 修复在执行 PREWHEREMergeTreeRangeReader 中可能出现的段错误,解决了 #9064#9106 (CurtizJ)
  • reinterpretAsFixedString 修复为返回 FixedString 而非 String#9052 (oandrew)
  • 修复 joinGet 在可为空返回类型情况下的行为。修复 #8919 #9014 (amosbird)
  • 修复 fuzz 测试,以及 bitTestAll/bitTestAny 函数的错误行为。 #9143 (alexey-milovidov)
  • 修复在 haystack 为零字节时 matchextract 函数的行为问题:当 haystack 为常量时,其行为不正确。修复了 #9160 #9163 (alexey-milovidov)
  • 修复了在使用非严格单调函数索引时对取反谓词条件的执行方式。修复了 #9034 #9223 (Akazz)
  • 允许在 WHERE 子句中存在 [NOT] LIKE 运算符时,将 CROSS 重写为 INNER JOIN。修复 #9191 #9229 (4ertus2)
  • 允许 Log 引擎表中的首列(或前几列)为别名列。 #9231 (abyss7)
  • 允许在逗号连接中使用 IN()。修复 #7314#9251 (4ertus2)
  • 改进 ALTER MODIFY/ADD 查询的逻辑。现在无法在未指定类型的情况下使用 ADD 添加列;使用 MODIFY 修改默认表达式不会改变列的类型,而使用 MODIFY 修改类型也不会丢失默认表达式的值。修复了 #8669#9227 (alesapin)
  • 修复变更(mutation)完成状态处理的问题:已完成的 mutation 仍然可能被标记为状态 is_done=0。 #9217 (alesapin)
  • 为 system.numbers 和 system.numbers_mt 提供对 "Processors" 流水线的支持。同时修复了 max_execution_time 未被正确遵守的问题。 #7796 (KochetovNicolai)
  • 修复 DictCacheKeysRequestedFound 指标计数错误。 #9411 (nikitamikhaylov)
  • ATTACH PARTITION FROMREPLACE PARTITIONMOVE TO TABLE 中新增了对存储策略的检查,否则可能会导致某些数据分片在重启后变得不可访问,并阻止 ClickHouse 启动。 #9383 (excitoon)
  • 修复了 MergeTreeIndexSet 中 UBSan 报告的问题。该修复解决了 #9250 #9365 (alexey-milovidov)
  • 修复 BlockIO 中可能的数据竞争问题。 #9356 (KochetovNicolai)
  • 在 JSON 相关函数中支持超出 Int64 范围的 UInt64 数字。将 SIMDJSON 更新到 master。这修复了 #9209 #9344 (alexey-milovidov)
  • 修复当数据目录挂载到单独设备上时,空闲空间大小计算不正确的问题。对于默认磁盘,从数据子目录计算空闲空间。此修复解决了 #7441 #9257 (millb)
  • 修复 TLS 连接可能失败并出现如下错误消息的问题:OpenSSL SSL_read: error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error and SSL Exception: error:2400006E:random number generator::error retrieving entropy. 将 OpenSSL 更新到上游 master 分支。 #8956 (alexey-milovidov)
  • 在执行 CREATE 查询时,对存储引擎参数中的常量表达式进行折叠。将空数据库名称替换为当前数据库。修复了 #6508#3492。同时修复了 ClickHouseDictionarySource 中对本地地址的检查。 #9262 (tabplubix)
  • 修复 StorageMerge 中的段错误(segfault),该问题可能在从 StorageFile 读取数据时发生。 #9387 (tabplubix)
  • 在极少数情况下,当在读取 suffix 之后但在提交之前发生异常时,防止 Kafka 中的数据丢失。修复 #9378。相关问题:#7175 #9507 (filimonov)
  • 修复在尝试使用或删除使用错误参数创建的 Kafka 表时导致服务器终止的错误。修复了 #9494,并合并了 #9507#9513 (filimonov)

新功能

  • 添加 deduplicate_blocks_in_dependent_materialized_views 选项,用于控制对包含物化视图的表执行幂等插入时的行为。应 Altinity 的特别请求,此新功能被加入到该 bug 修复版本中。 #9070 (urykhy)

ClickHouse 发布 v20.1.2.4,2020-01-22

向后不兼容变更

  • 将设置 merge_tree_uniform_read_distribution 标记为废弃。服务器仍然识别该设置,但它不再产生任何效果。#8308 (alexey-milovidov)
  • 将函数 greatCircleDistance 的返回类型更改为 Float32,因为现在计算结果为 Float32#7993 (alexey-milovidov)
  • 现在要求查询参数采用“转义(escaped)”格式表示。例如,要传递字符串 a<tab>b,必须写为 a\tba\<tab>b,并且在 URL 中分别为 a%5Ctba%5C%09b。这样做是为了能够将 NULL 作为 \N 传递。这修复了 #7488#8517 (alexey-milovidov)
  • 默认对 ReplicatedMergeTree 启用 use_minimalistic_part_header_in_zookeeper 设置。这将大幅减少存储在 ZooKeeper 中的数据量。该设置自 19.1 版本起已被支持,并且我们已经在多个服务的生产环境中稳定使用了超过半年。如果存在降级到 19.1 之前版本的可能,请禁用该设置。#6850 (alexey-milovidov)
  • 数据跳过索引已达到生产就绪状态并默认启用。设置 allow_experimental_data_skipping_indicesallow_experimental_cross_to_join_conversionallow_experimental_multiple_joins_emulation 现已废弃且不起任何作用。#7974 (alexey-milovidov)
  • StorageJoin 增加新的 ANY JOIN 逻辑,使其与 JOIN 操作保持一致。若要在升级时不改变行为,需要在 Join 引擎表的元数据中添加 SETTINGS any_join_distinct_right_table_keys = 1,或者在升级后重新创建这些表。#8400 (Artem Zuikov)
  • 现在需要重启服务器才能应用日志配置中的更改。这是一个临时变通方案,用于避免服务器继续写入已被删除的日志文件的 bug(见 #8696)。#8707 (Alexander Kuzmenkov)

新功能

  • system.merges 中添加了关于 part 路径的信息。#8043 (Vladimir Chebotarev)
  • 新增支持在 ON CLUSTER 模式下执行 SYSTEM RELOAD DICTIONARY 查询。 #8288 (Guillaume Tassery)
  • 新增支持在 ON CLUSTER 模式下执行 CREATE DICTIONARY 查询。 #8163 (alesapin)
  • 现在 users.xml 中的用户配置文件可以继承自多个配置文件。#8343 (Mikhail f. Shiryaev)
  • 添加了 system.stack_trace 表,用于查看所有服务器线程的栈跟踪信息。这对于开发人员分析服务器状态非常有用。修复了 #7576#8344alexey-milovidov
  • 新增支持可配置子秒级精度的 DateTime64 数据类型。#7170 (Vasily Nemkov)
  • 添加了表函数 clusterAllReplicas,可用于查询集群中所有节点。 #8493 (kiran sunkari)
  • 添加聚合函数 categoricalInformationValue,用于计算离散型特征的信息值。 #8117 (hcz)
  • 通过并行解析 CSVTSVJSONEachRow 格式的数据文件来加速处理。#7780 (Alexander Kuzmenkov)
  • 添加函数 bankerRound,用于执行银行家舍入法。 #8112 (hcz)
  • 在内置区域名称字典中支持更多语言:'ru', 'en', 'ua', 'uk', 'by', 'kz', 'tr', 'de', 'uz', 'lv', 'lt', 'et', 'pt', 'he', 'vi'。 #8189 (alexey-milovidov)
  • ANY JOIN 逻辑的一致性有所改进。现在 t1 ANY LEFT JOIN t2t2 ANY RIGHT JOIN t1 等价。#7665 (Artem Zuikov)
  • 添加 any_join_distinct_right_table_keys 设置,用于为 ANY INNER JOIN 启用旧行为。#7665 (Artem Zuikov)
  • 新增 SEMIANTI JOIN。旧的 ANY INNER JOIN 行为现在可以通过 SEMI LEFT JOIN 获得。#7665 (Artem Zuikov)
  • File 引擎和 file 表函数添加了 Distributed 格式,允许从异步插入到 Distributed 表所生成的 .bin 文件中读取数据。 #8535 (Nikolai Kochetov)
  • runningAccumulate 添加可选的重置列参数,用于在每个新的键值出现时重置聚合结果。#8326 (Sergey Kononenko)
  • 添加对将 ClickHouse 用作 Prometheus 端点的支持。 #7900 (vdimir)
  • config.xml 中添加 <remote_url_allow_hosts> 配置段,用于限制远程表引擎以及 URLS3HDFS 表函数所允许的主机。#7154 (Mikhail Korotov)
  • 新增函数 greatCircleAngle,用于计算球面上的距离(单位:度)。 #8105 (alexey-milovidov)
  • 调整地球半径,使其与 H3 库保持一致。#8105 (alexey-milovidov)
  • 添加了用于输入和输出的 JSONCompactEachRowJSONCompactEachRowWithNamesAndTypes 格式。 #7841 (Mikhail Korotov)
  • 为基于文件的表引擎和表函数(FileS3URLHDFS)新增特性,可根据额外的引擎参数或文件扩展名读写 gzip 文件。#7840 (Andrey Bodrov)
  • 添加了 randomASCII(length) 函数,用于生成由随机 ASCII 可打印字符组成的字符串。 #8401 (BayoNet)
  • 新增函数 JSONExtractArrayRaw,用于从 JSON 字符串中返回由未解析的 JSON 数组元素组成的数组。 #8081 (Oleg Matrokhin)
  • 新增 arrayZip 函数,用于将多个长度相同的数组组合成一个由元组构成的数组。 #8149 (Winter Zhang)
  • *MergeTree 表引擎族新增根据已配置的 TTL 表达式在不同磁盘之间移动数据的功能。 #8140 (Vladimir Chebotarev)
  • 新增聚合函数 avgWeighted,用于计算加权平均值。 #7898 (Andrey Bodrov)
  • 现已对 TSVTSKVCSVJSONEachRow 格式默认启用并行解析。#7894 (Nikita Mikhaylov)
  • H3 库中新增了几个地理函数:h3GetResolutionh3EdgeAngleh3EdgeLengthh3IsValidh3kRing#8034 (Konstantin Malanchev)
  • 在基于文件的存储和表函数中新增了对 brotli(br)压缩的支持。修复了 #8156#8526alexey-milovidov
  • SimpleAggregationFunction 类型添加 groupBit* 函数。#8485 (Guillaume Tassery)

错误修复

  • 修复 Distributed 引擎表重命名的问题。修复问题 #7868#8306 (tavplubix)
  • 现在,在非 ClickHouse SQL 方言中,字典支持对任意字符串类型的属性使用 EXPRESSION#8098 (alesapin)
  • 修复异常的 INSERT SELECT FROM mysql(...) 查询。该修复解决了 #8070#7960#8234tavplubix
  • 修复从 JSONEachRow 插入默认 Tuple 时出现的 “Mismatch column sizes” 错误。解决了 #5653#8606 (tavplubix)
  • 现在,如果在使用 LIMIT BY 时同时使用 WITH TIES,将会抛出异常。同时新增对在 LIMIT BY 中使用 TOP 的支持。此更改修复了 #7472#7637Nikita Mikhaylov
  • 修复 clickhouse-odbc-bridge 二进制文件中对较新版本 glibc 的意外依赖。#8046 (Amos Bird)
  • 修复 *MergeTree 引擎族中 check 函数的缺陷。现在在最后一个 granule 与最后一个(非 final)mark 中的行数相等时,校验不会再失败。#8047 (alesapin)
  • 修复在执行 ALTER 查询后,当底层数值类型与表中指定类型相同时向 Enum* 列插入数据的问题。此修复解决了 #7836#7908Anton Popov
  • 允许在函数 substring 中使用非常量的负数 size 参数。此前由于疏忽而被错误地禁止。本更改修复了 #4832#7703 (alexey-milovidov)
  • 修复在向 (O|J)DBC 表引擎传递错误个数的参数时出现的解析错误。 #7709 (alesapin)
  • 在向 syslog 发送日志时,使用正在运行的 clickhouse 进程的命令名称。在之前的版本中,会使用空字符串作为命令名称。 #8460 (Michael Nacharov)
  • 修复对 localhost 的允许主机检查。本 PR 修复了在 #8241 中提供的解决方案。#8342Vitaly Baranov
  • 修复了在处理长字符串参数时,当 argMinargMax 函数的结果被用于 runningAccumulate 函数时极少发生的崩溃问题。此修复对应 #8325 #8341dinosaur
  • 修复使用 Buffer 引擎的表的内存过度分配问题。 #8345 (Azat Khuzhin)
  • 修复了这样一类函数中的潜在缺陷:可以将 NULL 作为某个参数传入,但返回值为非 NULL#8196 (alexey-milovidov)
  • 改进了后台进程线程池中 MergeTree 表引擎的指标计算。#8194 (Vladimir Chebotarev)
  • 在存在行级表过滤器时,修复 WHERE 子句中 IN 函数的行为。修复了 #6687 #8357Ivan
  • 现在,如果设置中的整型值未被完整解析,将抛出异常。 #7678 (Mikhail Korotov)
  • 修复在查询包含两个以上本地分片的分布式表且使用聚合函数时出现的异常。#8164 (小路)
  • 现在 Bloom 过滤器可以处理零长度数组,并且避免了冗余计算。#8242 (achimbab)
  • 修复了通过将客户端主机与 users.xml 中指定的 host_regexp 进行匹配来检查其是否被允许的逻辑。#8241 (Vitaly Baranov)
  • 放宽对含糊列的检查,以避免在存在多个 JOIN ON 子句时产生误报。#8385 (Artem Zuikov)
  • 修复了在以下情况下可能发生的服务器崩溃(std::terminate):当服务器无法以 JSONXML 格式发送或写入 String 数据类型(需要进行 UTF-8 校验)的值时,或在使用 Brotli 算法压缩结果数据时,以及在某些其他罕见情况下发生的崩溃。修复了 #7603 #8384alexey-milovidov
  • 修复 CI 发现的 StorageDistributedDirectoryMonitor 中的竞态条件,修复了 #8364#8383Nikolai Kochetov
  • 现在,*MergeTree 表引擎系列中的后台合并操作可以更加准确地遵循存储策略中各卷的顺序。#8549 (Vladimir Chebotarev)
  • 现在表引擎 Kafka 已能与 Native 格式正常配合使用。此更改修复了 #6731 #7337 #8003#8016filimonov
  • 修复了带有表头的固定格式(如 CSVWithNames)在用于表引擎 Kafka 时会抛出 EOF(文件结束)异常的问题。#8016 (filimonov)
  • 修复了在 IN 子句右侧从子查询创建集合时的一个错误。此修复解决了 #5767#2542#7755Nikita Mikhaylov
  • 修复从 File 存储引擎读取时可能发生的崩溃。 #7756 (Nikolai Kochetov)
  • 修复了读取包含 list 类型列的 Parquet 格式文件时的问题。#8334 (maxulan)
  • 修复当 max_parallel_replicas > 1PREWHERE 条件依赖 sampling key 时,分布式查询出现 Not found column 错误的问题。 #7913 (Nikolai Kochetov)
  • 修复当查询中使用依赖于表别名的 PREWHERE 且由于主键条件导致结果集为空时出现的 Not found column 错误。 #7911 (Nikolai Kochetov)
  • 当参数为 Nullable 时,修正了函数 randrandConstant 的返回类型。现在这些函数始终返回 UInt32,且绝不会返回 Nullable(UInt32)#8204 (Nikolai Kochetov)
  • 禁用了用于 WITH FILL 表达式的谓词下推。这修复了 #7784#7789Winter Zhang
  • 修复了在使用 FINAL 子句时,SummingMergeTreecount() 结果不正确的问题。 #3280 #7786 (Nikita Mikhaylov)
  • 修复了来自远程服务器的常量函数可能产生不正确结果的问题。该问题出现在使用 version()uptime() 等函数的查询中,这些函数在不同服务器上会返回不同的常量值。此更改修复了 #7666#7689Nikolai Kochetov
  • 修复了下推谓词优化中的一个复杂 bug,该 bug 会导致结果不正确。此次修复解决了许多与下推谓词优化相关的问题。 #8503 (Winter Zhang)
  • 修复 CREATE TABLE .. AS dictionary 查询导致的崩溃。 #8508 (Azat Khuzhin)
  • .g4 文件中的 ClickHouse 语法进行了多处改进。 #8294 (taiyang-li)
  • 修复在对使用 Join 引擎的表执行 JOIN 时导致崩溃的错误。修复了 #7556 #8254 #7915 #8100#8298Artem Zuikov
  • 修复在执行 CREATE DATABASE 时字典的冗余重新加载问题。 #7916 (Azat Khuzhin)
  • 限制从 StorageFileStorageHDFS 读取时的最大流数。修复 #7650#7981alesapin
  • 修复在 ALTER ... MODIFY ... CODEC 查询中,当用户同时指定默认表达式和 codec 时会触发的 bug。修复了 8593#8614alesapin
  • 修复在后台合并 SimpleAggregateFunction(LowCardinality) 类型列时出现的错误。 #8613 (Nikolai Kochetov)
  • 修正函数 toDateTime64 中的类型检查。 #8375 (Vasily Nemkov)
  • 现在,当在 Join 引擎中使用不受支持的 join_use_nulls 设置执行 LEFTFULL JOIN 时,服务器不会崩溃。#8479 (Artem Zuikov)
  • 现在,即使 db 不存在,执行 DROP DICTIONARY IF EXISTS db.dict 查询也不会抛出异常。#8185 (Vitaly Baranov)
  • 修复由于引用已移除的 IStorage 对象而可能导致表函数(filemysqlremote)崩溃的问题。修复在向表函数插入数据时对指定列的错误解析。 #7762 (tavplubix)
  • 在启动 clickhouse-server 之前,确保网络已就绪。此更改修复了 #7507#8570Zhichang Yu
  • 修复安全连接的超时处理,使查询不会无限期挂起。修复了 #8126#8128 (alexey-milovidov)
  • 修复 clickhouse-copier 在并发 worker 之间出现的不必要争用问题。 #7816 (Ding Xiang Fei)
  • 现在,mutations 不再跳过已附加的分片,即使它们的 mutation 版本号大于当前的 mutation 版本号。#7812 (Zhichang Yu) #8250 (alesapin)
  • 在将数据移动到另一块磁盘并重启服务器后,忽略 *MergeTree 数据部分的冗余副本。#7810 (Vladimir Chebotarev)
  • 修复在 JOIN 键中使用 LowCardinality 时导致 FULL JOIN 崩溃的问题。 #8252 (Artem Zuikov)
  • 禁止在 INSERT 查询语句中多次使用相同的列名,例如 INSERT INTO tbl (x, y, x)。这修复了 #5465#7681#7685alesapin
  • 针对未知 CPU 类型,在检测物理 CPU 核心数时增加了回退机制(使用逻辑 CPU 核心数)。修复了 #5239#7726 (alexey-milovidov)
  • 修复在物化列和别名列上出现的 There's no column 错误。 #8210 (Artem Zuikov)
  • 修复了在使用 EXISTS 查询且未带 TABLEDICTIONARY 限定符时导致的服务器崩溃问题,比如 EXISTS t。此修复解决了问题 #8172。该缺陷是在 19.17 版本中引入的。 #8213 (alexey-milovidov)
  • 修复在使用 SimpleAggregateFunction 列时可能出现的一处罕见问题,其报错信息为 "Sizes of columns does not match"#7790 (Boris Granveaud)
  • 修复了一个 bug:当用户的 allow_databases 为空时会被授予对所有数据库的访问权限(allow_dictionaries 也存在同样的问题)。#7793 (DeifyTheGod)
  • 修复当服务器已与客户端断开连接时客户端发生崩溃的问题。 #8071 (Azat Khuzhin)
  • 修复在按主键前缀和非主键后缀列排序时的 ORDER BY 行为。 #7759 (Anton Popov)
  • 检查表中是否存在带限定符的列。这修复了 #6836#7758 (Artem Zuikov)
  • 修复了在合并完成后立即运行 ALTER MOVE 时的行为问题,该操作会错误地移动指定分区的超级分区。修复了 #8103#8104Vladimir Chebotarev
  • 修复在使用列数不同的 UNION 时可能导致的服务器崩溃问题。解决了 #7279#7929Nikolai Kochetov
  • 修复函数 substr 在长度参数为负数时返回子串的长度计算。 #8589 (Nikolai Kochetov)
  • 现在,当后台线程池中没有足够的空闲线程时,服务器将不再在 MergeTree 中执行分片变更操作。 #8588 (tavplubix)
  • 修复 UNION ALL AST 格式化中的一个小错误。 #7999 (litao91)
  • 修复了针对负数的布隆过滤器(Bloom Filter)结果错误。修复了 #8317#8566 (Winter Zhang)
  • 修复了 decompress 中潜在的缓冲区溢出漏洞。恶意用户可以传入伪造的压缩数据,从而导致越界读取。该问题由 Yandex 信息安全团队的 Eldar Zaitov 发现。#8404 (alexey-milovidov)
  • 修复 arrayIntersect 中因整数溢出产生的错误结果。 #7777 (Nikolai Kochetov)
  • 现在,OPTIMIZE TABLE 查询在执行该操作时不会等待离线副本。 #8314 (javi santana)
  • 修复了用于 Replicated*MergeTree 表的 ALTER TTL 解析器。#8318 (Vladimir Chebotarev)
  • 修复服务器与客户端之间的通信,使服务器在查询失败后能够读取临时表的信息。 #8084 (Azat Khuzhin)
  • 修复在聚合 bitmap 与标量 bitmap 之间执行交集运算时出现的 bitmapAnd 函数错误。#8082 (Yue Huang)
  • 根据 ZooKeeper《Programmer's Guide》完善 ZXid 的定义,以修复 clickhouse-cluster-copier 中的 bug。#8088 (Ding Xiang Fei)
  • odbc 表函数现在会遵循 external_table_functions_use_nulls 设置。 #7506 (Vasily Nemkov)
  • 修复了导致罕见数据竞争的错误。 #8143 (Alexander Kazakov)
  • 现在 SYSTEM RELOAD DICTIONARY 会完全重新加载字典,并忽略 update_field。修复了 #7440#8037Vitaly Baranov
  • 支持在 CREATE 查询中检查字典是否存在。 #8032 (alesapin)
  • 修复 Values 格式中 Float* 的解析,从而解决 #7817#7870 (tavplubix)
  • 修复在 *MergeTree 表引擎系列的一些后台操作中无法预留空间时发生的崩溃。#7873 (Vladimir Chebotarev)
  • 修复当表包含 SimpleAggregateFunction(LowCardinality) 列时合并操作发生崩溃的问题。该修复解决了 #8515#8522Azat Khuzhin
  • 恢复对所有 ICU 区域设置的支持,并新增对常量表达式应用排序规则的支持。同时在 system.collations 表中新增语言名称列。#8051 (alesapin)
  • 修复当外部字典的最小存活时间为零(LIFETIME(MIN 0 MAX N)LIFETIME(N))时无法在后台更新的问题。#7983 (alesapin)
  • 修复使用 ClickHouse 作为数据源的外部字典在查询中包含子查询时的崩溃问题。#8351 (Nikolai Kochetov)
  • 修复在使用 URL 引擎的表中对文件扩展名的错误解析,从而修复了 #8157#8419Andrey Bodrov
  • 修复针对无主键的 *MergeTree 表的 CHECK TABLE 查询。修复 #7543#7979alesapin
  • 修正了将 Float64 转换为 MySQL 类型的逻辑。#8079 (Yuriy Baranov)
  • 现在,如果由于服务器崩溃导致表未被完全删除,服务器会尝试恢复并加载该表。 #8176 (tavplubix)
  • 修复了在向不存在的文件中插入数据时,表函数 file 崩溃的问题。现在在此情况下,会先创建该文件,然后再执行插入操作。#8177 (Olga Khvostikova)
  • 修复在启用 trace_log 时可能发生的罕见死锁。#7838 (filimonov)
  • 为通过 DDL 查询创建的 RangeHashed 外部字典新增对除 Date 之外其他类型的支持。修复 7899#8275 (alesapin)
  • 修复了在使用另一个函数的结果调用 now64() 时发生的崩溃。#8270 (Vasily Nemkov)
  • 修复了通过 MySQL 线协议建立的连接中检测客户端 IP 的问题。#7743 (Dmitry Muzyka)
  • 修复 arraySplit 函数对空数组的处理。该修复解决了 #7708#7747hcz
  • 修复了正在运行的其他 clickhouse-serverpid-file 可能被删除的问题。 #8487 (Weiqing Xu)
  • 修复包含 invalidate_query 的字典在重新加载时的问题,该问题会导致更新停止,并在之前的更新尝试中抛出异常。 #8029 (alesapin)
  • 修复了函数 arrayReduce 中可能导致“double free”的错误,以及聚合函数组合器 Resample 中可能导致内存泄漏的错误。新增聚合函数 aggThrow,可用于测试。 #8446 (alexey-milovidov)

改进

  • 改进了在使用 S3 表引擎时的日志记录。 #8251 (Grigory Pervakov)
  • 在调用 clickhouse-local 且未传入任何参数时打印帮助信息。此更改修复了 #5335#8230Andrey Nagorny
  • 新增设置 mutations_sync,用于以同步方式等待 ALTER UPDATE/DELETE 查询执行完成。 #8237 (alesapin)
  • 允许在 config.xml 中将 user_files_path 设置为相对路径(其方式类似于 format_schema_path)。#7632 (hcz)
  • 为带有 -OrZero 后缀的转换函数添加针对非法类型的异常处理。#7880 (Andrey Konyaev)
  • 简化分布式查询中数据发送到分片时的头部格式。 #8044 (Vitaly Baranov)
  • Live View 表引擎重构。 #8519 (vzakaznikov)
  • 为基于 DDL 查询创建的外部字典添加额外检查。 #8127 (alesapin)
  • 修复在同时使用 FINALSAMPLE 时出现的错误 Column ... already exists,例如 select count() from table final sample 1/2。修复了 #5186#7907 (Nikolai Kochetov)
  • 现在 joinGet 函数的第一个参数可以使用表标识符。 #7707 (Amos Bird)
  • 允许在作用于 Kafka 表的子查询中使用 MaterializedView#8197 (filimonov)
  • 现在,在磁盘之间移动数据的后台任务在单独的线程池中运行。 #7670 (Vladimir Chebotarev)
  • SYSTEM RELOAD DICTIONARY 现在同步执行。 #8240 (Vitaly Baranov)
  • 现在堆栈跟踪显示的是物理地址(在对象文件中的偏移量),而不是虚拟内存地址(对象文件被加载到的地址)。这使得在二进制为位置无关且启用了 ASLR 时可以使用 addr2line。这修复了 #8360#8387 (alexey-milovidov)
  • 为行级安全过滤器添加新语法支持:<table name='table_name'>...</table>。修复 #5779#8381 (Ivan)
  • 现在 cityHash 函数可以处理 DecimalUUID 类型。修复了 #5184#7693Mikhail Korotov
  • 从 system logs 表中移除了固定的索引粒度(此前为 1024),因为在实现自适应粒度后已不再需要。 #7698 (alexey-milovidov)
  • 当 ClickHouse 在未启用 SSL 的情况下编译时,也启用 MySQL 兼容服务器。 #7852 (Yuriy Baranov)
  • 现在服务器会对分布式数据批次进行校验和检查,这样在批次数据损坏时可以提供更加详细的错误信息。 #7914 (Azat Khuzhin)
  • MySQL 数据库引擎添加对 DROP DATABASEDETACH TABLEDROP TABLEATTACH TABLE 的支持。#8202 (Winter Zhang)
  • 在 S3 表函数和表引擎中添加身份验证。 #7623 (Vladimir Chebotarev)
  • 为位于不同磁盘上的 MergeTree 额外数据分片增加了检查,以避免在未定义的磁盘上丢失数据分片。 #8118 (Vladimir Chebotarev)
  • 为 Mac 客户端和服务器启用 SSL 支持。#8297 (Ivan)
  • 现在 ClickHouse 可以充当 MySQL federated server(参见 https://dev.mysql.com/doc/refman/5.7/en/federated-create-server.html)。#7717Maxim Fedotov
  • clickhouse-client 现在仅在 multiquery 开启且 multiline 关闭时才启用 bracketed-paste。这修复了 #7757#7761Amos Bird
  • if 函数中支持 Array(Decimal)#7721 (Artem Zuikov)
  • arrayDifferencearrayCumSumarrayCumSumNegative 函数新增对 Decimal 类型的支持。 #7724 (Artem Zuikov)
  • 已在 system.dictionaries 表中添加 lifetime 列。 #6820 #7727 (kekekekule)
  • 改进了 *MergeTree 表引擎对位于不同磁盘上的已有数据部分的检查。修复了 #7660#8440Vladimir Chebotarev
  • 集成用于与 S3 交互的 AWS SDK,从而可以开箱即用地使用 S3 的全部功能。#8011 (Pavel Kovalenko)
  • Live View 表添加了对子查询的支持。#7792 (vzakaznikov)
  • 已移除对在 TTL 表达式中使用 DateDateTime 列的检查。 #7920 (Vladimir Chebotarev)
  • 磁盘相关信息已添加到 system.detached_parts 表中。 #7833 (Vladimir Chebotarev)
  • 现在可以在无需重启的情况下修改 max_(table|partition)_size_to_drop 设置。#7779 (Grigory Pervakov)
  • 错误信息的易用性略有改善。请用户不要删除 Stack trace: 下方的行。#7897 (alexey-milovidov)
  • 改进了在 #7935 之后以多种格式从 Kafka 引擎读取消息的能力。#8035Ivan
  • 进一步提升了对不支持 sha2_password 认证插件的 MySQL 客户端的兼容性。#8036 (Yuriy Baranov)
  • MySQL 兼容服务器现在支持更多列类型。#7975 (Yuriy Baranov)
  • 为基于底层 MergeTree 表的 MergeBufferMaterilized View 存储实现 ORDER BY 优化。 #8130 (Anton Popov)
  • 现在我们始终使用 getrandom 的 POSIX 实现,以提高在旧内核(< 3.17)上的兼容性。 #7940 (Amos Bird)
  • 改进 move TTL 规则中对有效目标的检查。#8410 (Vladimir Chebotarev)
  • 针对 Distributed 表引擎中损坏的插入批次提供了更完善的检查。#7933 (Azat Khuzhin)
  • system.mutations 表中新增一列,用于存放将来需要由 mutation 处理的 parts 名称数组。 #8179 (alesapin)
  • 针对处理器的并行归并排序优化。 #8552 (Nikolai Kochetov)
  • 设置 mark_cache_min_lifetime 现已废弃,不再产生任何效果。在之前的版本中,mark 缓存在内存中的大小可能会增长到超过 mark_cache_size,以便在 mark_cache_min_lifetime 秒内保留数据。这会导致困惑,并造成高于预期的内存占用,在内存受限的系统上尤其糟糕。如果在安装此版本后发现性能下降,应增大 mark_cache_size#8484 (alexey-milovidov)
  • 为在各处使用 tid 做准备。这是完成 #7477 所必需的。#8276 (alexey-milovidov)

性能优化

  • 处理器流水线中的性能优化。 #7988 (Nikolai Kochetov)
  • 在缓存字典中过期键的非阻塞更新(允许读取旧值)。 #8303 (Nikita Mikhaylov)
  • 在全局编译 ClickHouse 时不使用 -fno-omit-frame-pointer,从而多腾出一个寄存器可用。 #8097 (Amos Bird)
  • 提升 greatCircleDistance 函数性能,并为其添加性能测试。 #7307 (Olga Khvostikova)
  • 优化了函数 roundDown 的性能。 #8465 (alexey-milovidov)
  • 优化了 DateTime64 数据类型上 maxminargMinargMax 的性能。 #8199 (Vasily Nemkov)
  • 在没有 LIMIT 或 LIMIT 较大且使用外部排序的情况下,提升了排序性能。#8545 (alexey-milovidov)
  • 将浮点数格式化的性能最高提升至原来的 6 倍。 #8542 (alexey-milovidov)
  • 优化了 modulo 函数的性能。#7750 (Amos Bird)
  • 针对使用单列键的 ORDER BY 和合并操作进行了优化。 #8335 (alexey-milovidov)
  • 针对 arrayReduce-Array-State 组合器进行了更好的实现。 #7710 (Amos Bird)
  • 现在 PREWHERE 现已优化,其效率至少不低于 WHERE#7769 (Amos Bird)
  • 改进 roundroundBankers 对负数的处理方式。#8229 (hcz)
  • DoubleDeltaGorilla 编解码器的解码性能提高了约 30–40%。这修复了 #7082#8019Vasily Nemkov
  • 提升了 base64 相关函数的性能。#8444 (alexey-milovidov)
  • 新增了 geoDistance 函数。它类似于 greatCircleDistance,但基于 WGS-84 椭球模型进行近似计算。两个函数的性能几乎相同。 #8086 (alexey-milovidov)
  • 提升 Decimal 数据类型的 minmax 聚合函数性能。#8144Artem Zuikov
  • arrayReduce 进行向量化处理。 #7608 (Amos Bird)
  • if 语句链现在会被优化为 multiIf#8355 (kamalov-ruslan)
  • 修复在 19.15 中引入的 Kafka 表引擎性能回归问题。此修复对应 #7261#7935filimonov
  • 移除了 Debian 软件包中的 gcc 偶尔默认启用的 PIE 代码生成。#8483 (alexey-milovidov)
  • 并行解析数据格式 #6553 (Nikita Mikhaylov)
  • 默认启用对包含表达式的 Values 的优化解析器(input_format_values_deduce_templates_of_expressions=1)。#8231 (tavplubix)

构建/测试/打包改进

实验性功能

  • 新增实验性设置 min_bytes_to_use_mmap_io。它允许在不将数据从内核复制到用户空间的情况下读取大文件。该设置默认禁用。建议将阈值设置为约 64 MB,因为 mmap/munmap 调用较慢。#8520 (alexey-milovidov)
  • 作为访问控制系统的一部分,重构了配额功能。新增表 system.quotas,新函数 currentQuotacurrentQuotaKey,以及新的 SQL 语法 CREATE QUOTAALTER QUOTADROP QUOTASHOW QUOTA#7257 (Vitaly Baranov)
  • 允许在跳过未知设置时给出警告,而不是抛出异常。#7653 (Vitaly Baranov)
  • 作为访问控制系统的一部分,重构了行策略。新增表 system.row_policies,新函数 currentRowPolicies(),以及新的 SQL 语法 CREATE POLICYALTER POLICYDROP POLICYSHOW CREATE POLICYSHOW POLICIES#7808 (Vitaly Baranov)

安全修复

2019 年更新日志