2020
ClickHouse 版本 20.12
ClickHouse 版本 v20.12.5.14-stable, 2020-12-28
Bug 修复
- 在合并期间禁用 AIO 写入, 因为它会导致合并期间主键列的数据损坏极为罕见. #18481 (alesapin).
- 修复了在使用类型为
Nullable(String)的参数执行toType(...)函数 (toDate、toUInt32等)时出现的value is too short错误. 现在这些函数在解析错误时返回NULL而不是抛出异常. 修复 #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. #18278 (Denis Glazachev). - 修复了 Enum 和 Int 类型之间的键比较. 这修复了 #17989. #18214 (Amos Bird).
- 修复了
MaterializeMySQL数据库引擎中唯一键转换崩溃的问题. 这修复了 #18186 并修复了 #16372 #18211 (Winter Zhang). - 修复了 S3 URL 解析中的
std::out_of_range: basic_string. #18059 (Vladimir Chebotarev). - 修复了由于 MaterializeMySQL 不支持转换 MySQL 前缀索引而导致某些表无法从 MySQL 同步到 ClickHouse 的问题. 这修复了 #15187 并修复了 #17912 #17944 (Winter Zhang).
- 修复了查询包含
ARRAY JOIN时查询优化产生错误结果的问题. #17887 (sundyli). - 修复了
topK聚合函数中可能出现的段错误. 这将关闭 #17404. #17845 (Maksim Kita). - 修复了服务器在守护进程模式下运行时空的
system.stack_trace表. #17630 (Amos Bird).
ClickHouse 版本 v20.12.3.3-stable, 2020-12-13
向后不兼容变更
- 默认启用
use_compact_format_in_distributed_parts_names(参考文档). #16728 (Azat Khuzhin). - 创建使用
File引擎的表时, 在SETTINGS子句中接受与文件格式 (例如format_csv_delimiter) 相关的用户设置, 并在所有INSERT和SELECT中使用这些设置. 当前用户会话中或 DML 查询本身的SETTINGS子句中更改的文件格式设置不再影响查询. #16591 (Alexander Kuzmenkov).
新特征
- 添加
*.xz压缩/解压支持。它允许在file()函数中使用*.xz. 这将关闭 #8828. #16578 (Abi Palagashvili). - 引入查询
ALTER TABLE ... DROP|DETACH PART 'part_name'. #15511 (nvartolomei). - 添加了新的 ALTER UPDATE/DELETE IN PARTITION 语法. #13403 (Vladimir Chebotarev).
- 允许在使用 JSON 输入/输出格式时将命名元组格式化为 JSON 对象, 由
output_format_json_named_tuples_as_objects设置控制, 默认禁用. #17175 (Alexander Kuzmenkov). - 在TSV和CSV格式默认情况下添加一种可能的输入枚举值作为它的id. #16834 (Kruglov Pavel).
- 添加对 Nullable、LowCardinality、Array 和 Tuple 的 COLLATE 支持,其中嵌套类型为 String. 同时重构ColumnString.cpp中与collations相关的代码. #16273 (Kruglov Pavel).
- 新的
tcpPort函数返回此服务器监听的 TCP 端口. #17134 (Ivan). - 添加新的数学函数:
acosh、asinh、atan2、atanh、cosh、hypot、log1p、sinh. #16636 (Konstantin Malanchev). - 在不同副本之间分配合并的可能性. 引入
execute_merges_on_single_replica_time_threshold合并树设置. #16424 (filimonov). - 添加设置
aggregate_functions_null_for_empty以实现 SQL 标准兼容性. 此选项将重写查询中的所有聚合函数, 并向它们添加 -OrNull 后缀. 实现 10273. #16123 (flynn). - 更新了 DateTime、DateTime64 解析以接受字符串日期文字格式. #16040 (Maksim Kita).
- 可以使用
--history_file参数在clickhouse-client中更改历史文件的路径. #15960 (Maksim Kita).
Bug 修复
- 修复在极少数情况下服务器可以停止接受连接的问题. #17542 (Amos Bird).
- 修复了在 Linux 的 Windows 子系统上运行的 ClickHouse 在
Atomic数据库中执行RENAME查询时出现的Function not implementation错误. 修复 #17661. #17664 (tavplubix). - 如果禁用了
in_memory_parts_enable_wal, 则不要从 WAL 恢复部件. #17802 (detailyang). - 使用
min_compress_block_size修复 MergeTreeWriterSettings 的max_compress_block_size的错误初始化. #17833 (flynn). - 有关要删除的最大表大小的异常消息显示不正确. #17764 (alexey-milovidov).
- 修复了插入
Distributed表时空间不足时可能出现的段错误. #17737 (tavplubix). - 修复了 ClickHouse 无法恢复与 MySQL 服务器的连接时的问题. #17681 (Alexander Kazakov).
- 当
pool_size> 1 时, 由于竞争条件, 在执行ON CLUSTER查询时, 可能会错误地确定集群是否为循环 (交叉) 复制. 已修复. #17640 (tavplubix). - 异常
fmt::v7::format_error可以记录在 MergeTree 表的后台. 这修复了 #17613. #17615 (alexey-milovidov). - 当 clickhouse-client 在交互模式下与多行查询一起使用时, 单行注释被错误地扩展到查询结束. 这修复了 #13654. #17565 (alexey-milovidov).
- 当相应的突变在不同的副本上被杀死时, 修复更改查询挂起. 修复 #16953. #17499 (alesapin).
- 修复了 clickhouse 低估了标记缓存大小的问题. 当有很多带有标记的小文件时可能会发生. #17496 (alesapin).
- 启用设置
optimize_redundant_functions_in_order_by来修复ORDER BY. #17471 (Anton Popov). - 修复
DISTINCT之后由于不正确优化而可能出现的重复项. 修复 #17294. #17296 (li chengxiang). #17439 (Nikolai Kochetov). - 修复从具有
LowCardinality类型的JOIN表读取时崩溃的问题. 修复 #17228. #17397 (Nikolai Kochetov). - 修复
toInt256(inf)堆栈溢出. Int256 是一项实验性功能. 已关闭 #17235. #17257 (flynn). - 使用
LIMIT修复分布式查询中可能记录的Unexpected packet Data received from client错误. #17254 (Azat Khuzhin). - 修复子查询中存在 const 列时设置索引失效的问题. 这修复了 #17246. #17249 (Amos Bird).
- 修复索引比较类型不同时可能出现的错误索引分析. 这修复了 #17122. #17145 (Amos Bird).
- 修复 ColumnConst 比较导致崩溃. 这个修复了 #17088. #17135 (Amos Bird).
- MaterializeMySQL (实验功能) 的多个修复. 修复 #16923 修复 #15883 修复 MaterializeMySQL 同步失败时修改 MySQL binlog_checksum. #17091 (Winter Zhang).
- 修复非领导者 ReplicatedMergeTree 表的
ON CLUSTER查询可能永远挂起的错误. #17089 (alesapin). - 修复了在创建
some_table时CREATE TABLE ... AS some_table查询崩溃AS table_function()修复. #17072 (tavplubix). - 功能模糊位的错误未完成的实现, 相关问题: #16980. #17051 (hexiaoting).
- 在 CFA 寄存器为 RAX 的情况下修复 LLVM 的 libunwind. 这是 LLVM's libunwind 中的 bug ). 我们已经有针对此错误的解决方法. #17046 (alexey-milovidov).
- 避免远程查询的不必要的网络错误, 这些错误在执行时可能会被取消, 例如使用
LIMIT的查询. #17006 (Azat Khuzhin). - 修复
optimize_distributed_group_by_sharding_key设置 (默认情况下禁用) 以仅使用 OFFSET 进行查询. #16996 (Azat Khuzhin). - 修复了使用 JOIN 在分布式表上合并表的问题. #16993 (Azat Khuzhin).
- 修复了从 double 转换时大整数 (128、256 位) 的错误结果。 大整数支持是实验性的. #16986 (Mike).
- 修复在
ALTER TABLE ... MODIFY COLUMN ... NewType之后可能发生的服务器崩溃, 当SELECT在更改列上具有WHERE表达式并且更改尚未完成时. #16968 (Amos Bird). clickhouse-git-import中没有正确计算批判信息. #16959 (alexey-milovidov).- 通过使用单调函数进行优化来修复顺序. 修复 #16107. #16956 (Anton Popov).
- 通过启用
optimize_aggregators_of_group_by_keys和 join 设置来修复组的优化. 修复 #12604. #16951 (Anton Popov). - 修复使用
ORDER BY的查询可能出现的错误Illegal type of argument. 修复 #16580. #16928 (Nikolai Kochetov). - 修复 InterpreterShowAccessQuery 中的奇怪代码. #16866 (tavplubix).
- 使用函数
timeSeriesGroupSum时防止clickhouse 服务器崩溃. 该功能已从较新的 ClickHouse 版本中删除. #16865 (filimonov). - 当查询分析器打开并且 ClickHouse 安装在操作系统上时, 修复罕见的无声崩溃, glibc 版本已经 (据说) 损坏了某些功能的异步展开表. 这修复了 #15301. This fixes #13098. #16846 (alexey-milovidov).
- 修复在不带任何参数的情况下使用
any时的崩溃。 这是针对 #16803的 . cc @azat. #16826 (Amos Bird). - 如果在磁盘上写入表元数据时无法分配内存, 则可以写入损坏的元数据文件. #16772 (alexey-milovidov).
- 使用分区谓词修复琐碎的查询优化. #16767 (Azat Khuzhin).
- 在启用了
transform_null_in设置的情况下修复多列和元组上的IN运算符. 修复 #15310. #16722 (Anton Popov). - 通过 MySQL 协议返回 INSERT 查询的受影响行数. 以前 ClickHouse 过去总是返回 0, 现在已修复. 修复 #16605. #16715 (Winter Zhang).
- 修复使用
if后缀聚合函数时远程查询失败的问题. 修复 #16574 Fixes #16231 #16610 (Winter Zhang). - 修复由
select_sequential_consistency引起的不一致行为, 用于优化的琐碎计数查询和 system.tables. #16309 (Hao Chen).
改进
- 删除被 TTL、变异或折叠合并算法修剪后的空部分. #16895 (Anton Popov).
- 为分布式表中的异步发送启用紧凑格式的目录:
use_compact_format_in_distributed_parts_names默认设置为 1. #16788 (Azat Khuzhin). - 如果没有数据写入 S3, 则中止分段上传. #16840 (Pavel Kovalenko).
- 重新解析
format_avro_schema_registry_url的IP. #16985 (filimonov). - 在 system.distribution_queue 中的 data_path 中屏蔽密码. #16727 (Azat Khuzhin).
- 使用列转换器替换不存在的列时抛出错误. #16183 (hexiaoting).
- 当没有足够的内存供所有线程同时工作时关闭并行解析. 当有人试图插入非常大的行 (> min_chunk_bytes_for_parallel_parsing) 时, 也可能有
Memory limit exceeded之类的例外, 因为要解析的每个部分都必须是独立的一组字符串 (一个或多个). #16721 (Nikita Mikhaylov). - 安装脚本应始终在 config 文件夹中创建子目录. 这仅与使用自定义配置的 Docker 构建相关. #16936 (filimonov).
- 纠正 JSONEachRow、JSONCompactEachRow 和 RegexpRow 输入格式的错误消息中的语法. #17205 (nico piderman).
- 将
SOURCE(CLICKHOUSE(...))的默认host和port参数设置为当前实例,并将默认的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. #16769 (Nikita Mikhaylov).
- 可用性改进:当
CODEC表达式在CREATE TABLE查询中错位时, 在语法错误消息中提供更好的建议. 这修复了 #12493. #16768 (alexey-milovidov). - 在分布式引擎启动时删除异步插入的空目录. #16729 (Azat Khuzhin).
- 将 S3 与 nginx 服务器一起用作代理的解决方法. Nginx 当前不接受像
http://domain.com?delete这样的空路径 url, 但是 vanilla aws-sdk-cpp 会产生这种 url. 此提交使用修补过的 aws-sdk-cpp 版本, 在这种情况下, 它使 url 以 "/" 作为路径, 例如http://domain.com/?delete. #16709 (ianton-ru). - 允许
reinterpretAs*函数处理相同大小的整数和浮点数. 实现 16640. #16657 (flynn). - 现在,
<auxiliary_zookeepers>配置可以在config.xml中更改并在不启动服务器的情况下重新加载. #16627 (Amos Bird). - 在到远程资源的 https 连接中支持 SNI. 这将允许连接到需要 SNI 的 Cloudflare 服务器. 这修复了 #10055. #16252 (alexey-milovidov).
- 可以连接到需要 SNI 的
clickhouse-server安全端点. 当clickhouse-server托管在 TLS 代理之后是可能的. #16938 (filimonov). - 如果创建了物化视图循环, 则修复可能的堆栈溢出. 这将关闭 #15732. #16048 (alexey-milovidov).
- 简化 MergeTree 表引擎系列的后台任务处理的实现. 用户应该没有明显的变化. #15983 (alesapin).
- MaterializeMySQL (实验功能) 的改进. 当 MySQL 同步用户有错误权限时抛出关于正确同步权限的异常. #15977 (TCeason).
- 使用 BloomFilter 生成
indexOf(). #14977 (achimbab).
性能改进
- 使用 Floyd-Rivest 算法, 它是 ClickHouse 部分排序用例的最佳选择. 基准在 https://github.com/danlark1/miniselect 和 here. #16825 (Danila Kutenin).
- 现在,
ReplicatedMergeTree树引擎系列使用单独的线程池进行复制提取. 通过设置“background_fetches_pool_size”限制池的大小, 可以通过服务器重启进行调整. 设置的默认值是 3, 这意味着最大并行提取量等于 3 (允许使用 10G 网络) . 修复 #520. #16390 (alesapin). - 修复了
quantileTDigest状态的不受控制的增长. #16680 (hrissan). - 将
VIEW子查询描述添加到EXPLAIN. 限制VIEW的下推优化. 将Distributed的本地副本添加到查询计划中. #14936 (Nikolai Kochetov). - 使用 max_threads > 0 和 ORDER BY 中的表达式修复 optimize_read_in_order/optimize_aggregation_in_order. #16637 (Azat Khuzhin).
- 修复从
Merge表读取大量MergeTree表的性能. 修复 #7748. #16988 (Anton Popov). - 现在我们可以安全地修剪具有精确匹配的分区. 有用的案例: 假设表由
intHash64(x) % 100分区, 并且查询的条件是逐字的, 而不是 x. #16253 (Amos Bird).
实验功能
构建/测试/打包改进
- 测试覆盖率构建图像的改进. #17233 (alesapin).
- 将嵌入的时区数据更新到 2020d 版 (同时将 cctz 更新到最新的 master). #17204 (filimonov).
- 修复 Poco 中的 UBSan 报告. 这将关闭 #12719. #16765 (alexey-milovidov).
- 不要使用 UBSan 检测第三方库. #16764 (alexey-milovidov).
- 修复缓存字典中的 UBSan 报告. 这将关闭 #12641. #16763 (alexey-milovidov).
- 在尝试将无限浮点数转换为整数时修复 UBSan 报告. 这将关闭 #14190. #16677 (alexey-milovidov).
ClickHouse 版本 20.11
ClickHouse 版本 v20.11.7.16-stable, 2021-03-02
改进
Bug 修复
- BloomFilter 索引崩溃修复. 修复 #19757. #19884 (Maksim Kita).
- 如果启用了 system.text_log, 则可能出现死锁. 这修复了 #19874. #19875 (alexey-milovidov).
- 在以前的版本中, 函数 arrayEnumerateUniq 的异常参数可能会导致崩溃或无限循环. 这关闭 #19787. #19788 (alexey-milovidov).
- 修复了使用算术类型与字符串类型的准确比较时的堆栈溢出. #19773 (tavplubix).
- 修复
bitmapAndnot函数中的分段错误. 修复 #19668. #19713 (Maksim Kita). - 一些具有大整数的函数可能会导致段错误. 大整数是实验性功能. 这关闭 #19667. #19672 (alexey-milovidov).
- 修复
LowCardinality参数的neighbor函数的错误结果. 修复 #10333. #19617 (Nikolai Kochetov). - 修复断开连接后连接中 CompressedWriteBuffer 的 use-after-free. #19599 (Azat Khuzhin).
DROP/DETACH TABLE table ON CLUSTER cluster SYNC查询可能会挂起, 已修复. 修复 #19568. #19572 (tavplubix).- 查询 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. This fixes #19413. #19472 (alexey-milovidov). - 如果文件之一中有空数据块,则将分布式批处理标记为已损坏. #19449 (Azat Khuzhin).
- 修复 Uber H3 库中可能的缓冲区溢出. 请参阅 https://github.com/uber/h3/issues/392. 这将关闭 #19219. #19383 (alexey-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. #19316 (Nikolai Kochetov). - 修复在处理 ReplicatedMergeTree 表时并发
ALTER和DROP查询可能挂起的错误. #19237 (alesapin). - 修复了从
ORC格式的文件中无限读取的问题 (在 #10580 中引入). 修复 #19095. #19134 (Nikolai Kochetov). - 修复 clickhouse 无法从
LowCardinality(Nullable(...))读取压缩编解码器并抛出异常Attempt to read after EOF时的启动错误. 修复 #18340. #19101 (alesapin). - 修复了使用
Template或CustomSeparated格式通过 http 接口插入数据时出现的There no checkpoint错误. 修复 #19021. #19072 (tavplubix). - 限制对以旧语法创建的
MergeTree表的MODIFY TTL查询. 之前查询成功了, 但实际上没有效果. #19064 (Anton Popov). - 确保
groupUniqArray为 Enum 类型的参数返回正确的类型. 这将关闭 #17875. #19019 (alexey-milovidov). - 如果将函数
ignore与LowCardinality参数一起使用, 则修复可能的错误Expected single dictionary argument for function. 修复 #14275. #19016 (Nikolai Kochetov). - 使用
TinyLog引擎修复将LowCardinality列插入到表中的问题. 修复 #18629. #19010 (Nikolai Kochetov). - 禁用
optimize_move_functions_out_of_any因为优化并不总是正确的. 这将关闭 #18051. 这将关闭 #18973. #18981 (alexey-milovidov). - 修复了非常罕见的关机死锁. #18977 (tavplubix).
- 修复某些转义文本突变时的错误 (例如
ALTER ... UPDATE e = CAST('foo', 'Enum8(\'foo\' = 1')序列化不正确). 修复 #18878. #18944 (alesapin). - 附加分区应该重置突变. #18804. #18935 (fastio).
- 修复 clickhouse-local 关机时可能挂起的问题. 这修复了 #18891. #18893 (alexey-milovidov).
- 修复 *If 具有一元函数和 Nullable 类型的组合器. #18806 (Azat Khuzhin).
- 如果设置
network_compression_method全局设置为非默认值,则服务器可以拒绝异步分布式插入. 这修复了 #18741. #18776 (alexey-milovidov). - 修复了在尝试将
CASTNULL从Nullable(String)转换为Nullable(Decimal(P, S))时的Attempt to read after eof错误. 现在函数CAST在它不能从可为空的字符串解析十进制时返回NULL. 修复 #7690. #18718 (Winter Zhang). - 使用不匹配的 arg 大小修复 Logger. #18717 (sundyli).
- 添加 FixedString 数据类型支持. 将数据从 MySQL 复制到 ClickHouse 时, 我会收到此异常
Code: 50, e.displayText() = DB::Exception: Unsupported type FixedString(1). 此补丁修复了错误 #18450 还修复了 #6556. #18553 (awesomeleo). - 在使用
RIGHT或 FULL连接进行子查询后使用ORDER BY时修复可能的Pipeline stuck` 错误. #18550 (Nikolai Kochetov). - 修复在相应的突变杀死后可能导致
ALTER查询挂起的错误. 由线程模糊器发现. #18518 (alesapin). - 在合并期间禁用AIO写, 因为这可能导致合并期间主键列的数据损坏. #18481 (alesapin).
- 当无法计算结果时, 在分析阶段禁用子查询的常量折叠. #18446 (Azat Khuzhin).
- 修复了在使用类型为 Nullable(String) 的参数执行
toType(...)函数 (toDate、toUInt32等) 时出现的value is too short错误. 现在这些函数在解析错误时返回NULL而不是抛出异常. 修复 #7673. #18445 (tavplubix). - 限制从宽部分合并到紧凑部分. 在垂直合并的情况下, 它会导致结果部分损坏. #18381 (Anton Popov).
- 修复填充表
system.settings_profile_elements. 这个 PR 修复了 #18231. #18379 (Vitaly Baranov). - 修复带有常量参数的二元函数的索引分析, 导致错误的查询结果. 这修复了 #18364. #18373 (Amos Bird).
- 使用组合子
Distinct修复聚合函数中可能的崩溃,同时使用两级聚合. 修复 #17682. #18365 (Anton Popov). - 如果只能从
table中选择任意一列, 现在可以执行SELECT count() FROM table. 此 PR 修复 #10639. #18233 (Vitaly Baranov). SELECT JOIN现在需要对每个连接表的SELECT权限. 此 PR 修复 #17654. #18232 (Vitaly Baranov).- 修复在读取退避的情况下从
MergeTree*读取时可能不完整的查询结果 (消息`Debug: MergeTreeReadPool: Will lower number of threads in logs). 在 #16423 中引入. 修复 #18137. #18216 (Nikolai Kochetov). - 修复查询
MODIFY COLUMN ... REMOVE TTL并没有真正删除列 TTL 时的错误. #18130 (alesapin). - 使用谓词优化器修复不确定函数. 这修复了 #17244. #17273 (Winter Zhang).
- Mutation 可能会在
MOVE或REPLACE PARTITION之后等待一些不存在的部分, 或者在极少数情况下, 在DETACH或DROP PARTITION之后挂起. 是固定的. #15537 (tavplubix).
构建/测试/打包改进
ClickHouse 版本 v20.11.6.6-stable, 2020-12-24
Bug 修复
- 修复了在具有双
IPv4/IPv6 stack的机器上的服务器无法访问clickhouse-odbc-bridge进程时的问题, 并修复了使用格式错误的查询执行 ODBC 字典更新和/或导致崩溃时的问题. 这可能会关闭 #14489. #18278 (Denis Glazachev). - 修复了 Enum 和 Int 类型之间的键比较. 这修复了 #17989. #18214 (Amos Bird).
- 修复了
MaterializeMySQL数据库引擎中唯一键转换崩溃的问题. 这修复了 #18186 并修复了 #16372 #18211 (Winter Zhang). - 修复了 S3 URL 解析中的
std::out_of_range: basic_string. #18059 (Vladimir Chebotarev). - 修复了由于 MaterializeMySQL 不支持转换 MySQL 前缀索引而导致某些表无法从 MySQL 同步到 ClickHouse 的问题. 这修复了 #15187 并修复了 #17912 #17944 (Winter Zhang).
- 修复了查询包含
ARRAY JOIN时查询优化产生错误结果的问题. #17887 (sundyli). - 修复
topK聚合函数中可能出现的段错误. 这将关闭 #17404. #17845 (Maksim 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). - 修复了当 xxception
fmt::v7::format_error可以登录到 MergeTree 表的后台时的行为. 这修复了 #17613. #17615 (alexey-milovidov). - 修复了 clickhouse-client 在交互模式下使用多行查询和单行注释错误地扩展到查询结束时的行为. 这修复了 #13654. #17565 (alexey-milovidov).
- 修复了服务器在极少数情况下停止接受连接的问题. #17542 (alexey-milovidov).
- 修复了在不同副本上杀死相应突变时更改查询挂起的问题. 这修复了 #16953. #17499 (alesapin).
- 修复了 clickhouse 低估标记缓存大小时的错误. 当有很多带有标记的小文件时可能会发生. #17496 (alesapin).
- 修复了启用设置
optimize_redundant_functions_in_order_by的ORDER BY. #17471 (Anton Popov). - 修复了
DISTINCT之后由于不正确优化而可能出现的重复项. 这修复了 #17294. #17296 (li chengxiang). #17439 (Nikolai Kochetov). - 修复了从具有
LowCardinality类型的JOIN表读取时崩溃的问题. 这修复了 #17228. #17397 (Nikolai Kochetov). - 修复了子查询中有 const 列时设置索引失效的问题. 这修复了 #17246. #17249 (Amos Bird).
- 修复索引比较类型不同时可能出现的错误索引分析. 这修复了 #17122. #17145 (Amos Bird).
- 修复了
ColumnConst比较导致崩溃. 这修复了 #17088 . #17135 (Amos Bird). - 修复了非领导者
ReplicatedMergeTreeTables的ON CLUSTER查询可能永远挂起的错误. #17089 (alesapin). - 修复了函数
fuzz Bits中模糊器发现的错误. 这修复了 #16980. #17051 (hexiaoting). - 避免远程查询的不必要的网络错误, 这些错误在执行时可能会被取消, 例如使用
LIMIT的查询. #17006 (Azat Khuzhin). - 修复了从 double 转换时大整数 (128、256 位) 的错误结果. #16986 (Mike).
- 出现错误时解析
format_avro_schema_registry_url的IP. #16985 (filimonov). - 修复了在
ALTER TABLE ... MODIFY COLUMN ... NewType之后, 当SELECT在更改列上具有WHERE表达式并且更改尚未完成时可能出现的服务器崩溃. #16968 (Amos Bird). clickhouse-git-import中没有正确计算批判信息. #16959 (alexey-milovidov).- 通过单调函数优化来固定顺序. 修复 #16107. #16956 (Anton Popov).
- 修复了启用设置
optimize_aggregators_of_group_by_keys和 joins 的 group by 优化. 这修复了 #12604. #16951 (Anton Popov). - 安装脚本应始终在 config 文件夹中创建子目录. 这仅与使用自定义配置的 Docker 构建相关. #16936 (filimonov).
- 修复了使用
ORDER BY的查询可能出现的错误Illegal type of argument. 这修复了 #16580. #16928 (Nikolai Kochetov). - 如果没有数据写入 WriteBufferFromS3, 则中止分段上传. #16840 (Pavel Kovalenko).
- 修复了在不带任何参数的情况下使用
any时崩溃的问题. 这修复了 #16803. #16826 (Amos Bird). - 修复了 ClickHouse 过去总是返回 0 而不是通过 MySQL 协议进行
INSERT查询的受影响行数时的行为. 这修复了 #16605. #16715 (Winter Zhang). - 修复了 TDigest 不受控制的增长. #16680 (hrissan).
- 修复了在 Aggregate 函数中使用后缀
if时远程查询失败的问题. 这修复了 #16574 fixes #16231 #16610 (Winter Zhang). - 修复了由
select_sequential_consistency导致优化的琐碎计数查询和 system.tables 的不一致行为. #16309 (Hao Chen). - 使用 ColumnTransformer 替换不存在的列时抛出错误. #16183 (hexiaoting).
ClickHouse 版本 v20.11.3.3-stable, 2020-11-13
Bug 修复
- 当查询分析器打开并且 ClickHouse 安装在操作系统上时, 修复罕见的无声崩溃, glibc 版本已经 (据说) 损坏了某些功能的异步展开表. 这修复了 #15301. This fixes #13098. #16846 (alexey-milovidov).
ClickHouse 版本 v20.11.2.1, 2020-11-11
向后不兼容变更
- 如果在
distributed_ddl配置部分指定了一些profile, 那么这个配置文件可以在服务器启动时覆盖default配置文件的设置. 已修复, 现在分布式 DDL 查询的设置不应影响全局服务器设置. #16635 (tavplubix). - 限制在键 (排序键、主键、分区键等) 中使用不可比较的数据类型 (如
AggregateFunction). #16601 (alesapin). - 删除
ANALYZE和AST查询,并使设置enable_debug_queries过时, 因为它现在是全功能EXPLAIN查询的一部分. #16536 (Ivan). - 聚合函数
boundingRatio、rankCorr、retention、timeSeriesGroupSum、timeSeriesGroupRateSum、windowFunnel被错误地设为不区分大小写. 现在他们的名字按照设计区分大小写. 只有在 SQL 标准中指定的函数或为了与其他 DBMS 兼容而制作的函数或与这些函数类似的函数才应不区分大小写. #16407 (alexey-milovidov). - 使
rankCorr函数在数据不足时返回 nan #16124. #16135 (hexiaoting). - 从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 标头, 并在某些情况下向下游传递它们. 执行查询的跟踪跨度保存到
system.opentelemetry_span_log表中. #14195 (Alexander Kuzmenkov). - 允许在
CREATE TABLE查询的列列表中指定主键. 这是与其他 SQL 方言兼容所必需的. #15823 (Maksim Kita). - 实现
OFFSET offset_row_count {ROW | ROWS} FETCH {FIRST | NEXT} fetch_row_count {ROW | ROWS} {ONLY | WITH TIES}在带有 ORDER BY 的 SELECT 查询中. 这是指定LIMIT的SQL标准方式. #15855 (hexiaoting). errorCodeToName函数 - 返回错误的变量名称 (用于分析 query_log 和类似的).system.errors表 - 显示错误发生的次数 (包括system_events_show_zero_values). #16438 (Azat Khuzhin).- 添加了函数
untuple, 这是一个特殊的函数, 它可以通过扩展命名元组将新列引入到 SELECT 列表中. #16242 (Nikolai Kochetov, Amos Bird). - 现在我们可以通过查询参数提供标识符. 并且这些参数可以用作表对象或列. #16594 (Amos Bird).
- 为 MergeTree BloomFilter 索引添加了大整数 (UInt256、Int128、Int256)和 UUID 数据类型支持. 大整数是一项实验性功能. #16642 (Maksim 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). - 添加了
toUUIDOrNull、toUUIDOrZero转换函数. #16337 (Maksim Kita). - 添加
max_concurrent_queries_for_all_users设置, 用例见 #6636. #16154 (nvartolomei). - 向 clickhouse-client 添加一个新选项
print_query_id. 它有助于使用客户端生成的当前查询 ID 生成任意字符串. 默认情况下还会在 clickhouse-client 中打印查询 ID. #15809 (Amos Bird). - 添加
tid和logTrace函数. 这将关闭 #9434. #15803 (flynn). - 添加函数
formatReadableTimeDelta, 将时间增量格式化为人类可读的字符串... #15497 (Filipe Caixeta). - 在多磁盘配置中为卷添加了
disable_merges选项. #13956 (Vladimir Chebotarev).
实验功能
- 新函数
encrypt、aes_encrypt_mysql、decrypt、aes_decrypt_mysql. 这些功能运行缓慢, 因此我们将其视为实验性功能. #11844 (Vasily Nemkov).
Bug 修复
- 在
system.distribution_queue中的data_path中屏蔽密码. #16727 (Azat Khuzhin). - 在启用了
transform_null_in设置的情况下修复多个列和元组上的IN运算符. 修复 #15310. #16722 (Anton Popov). - 如果查询的表没有采样, 设置
max_parallel_replicas将无法正常工作. 这修复了 #5733. #16675 (alexey-milovidov). - 使用 max_threads > 0 和 ORDER BY 中的表达式修复 optimize_read_in_order/optimize_aggregation_in_order. #16637 (Azat Khuzhin).
DEFAULT表达式的计算涉及可能的名称冲突 (这是不太可能遇到的). 这修复了 #9359. #16612 (alexey-milovidov).- 修复
query_thread_log.query_duration_ms单元. #16563 (Azat Khuzhin). - 修复使用 MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL Engine 时的错误.
MaterializeMySQL是一个实验性功能. #16504 (TCeason). - 带有
Decimal的round函数的特别设计参数导致整数除以零. 这修复了 #13338. #16451 (alexey-milovidov). - 修复分布式的 DROP TABLE (使用 INSERT). #16409 (Azat Khuzhin).
- 修复复制队列中非常大的条目的处理. 如果表结构非常大 (接近 1 MB), 则非常大的条目可能会出现在 ALTER 查询中. 这修复了 #16307. #16332 (alexey-milovidov).
- 修复了由于未创建过滤集而可能删除部分返回数据时的不一致行为. #16308 (Nikita Mikhaylov).
- 修复 sharding_key 中的 dictGet (以及类似的地方, 即当函数上下文被永久存储时). #16205 (Azat Khuzhin).
- 修复尝试执行
OPTIMIZE命令时在clickhouse-local中抛出的异常. 修复 #16076. #16192 (filimonov). - 修复 #15780 回归, 例如
indexOf([1, 2, 3], toLowCardinality(1))现在被禁止, 但不应该. #16038 (Mike). - 修复 MySQL 数据库的错误. 当用作数据库引擎的 MySQL 服务器关闭时, 某些查询会引发异常, 因为它们试图从禁用的服务器获取表, 而这是不必要的. 例如, 查询
SELECT ... FROM system.parts应该只适用于 MergeTree 表并且根本不要接触 MySQL 数据库. #16032 (Kruglov Pavel). - 现在, 当
ALTER MODIFY COLUMN ... DEFAULT ...与列类型的默认值不兼容时, 将抛出异常. 修复 #15854. #15858 (alesapin). - 修复了 IPv4CIDRToRange/IPv6CIDRToRange 函数以接受常量 IP 列值. #15856 (vladimir-golovchenko).
改进
- 将
INTERVAL '1 hours'视为等同于INTERVAL 1 HOUR, 以与 Postgres 和类似的兼容. 这修复了 #15637. #15978 (flynn). - 启用通过 CSV、TSV 和 JSON 输入格式的数字 ID 解析枚举值. #15685 (vivarum).
- 更好地为 JBOD 架构和
MergeTree存储安排读取任务. 新设置read_backoff_min_concurrency作为读取线程数的下限. #16423 (Amos Bird). - 在
Avro格式中添加对LowCardinality的缺失支持. #16521 (Mike). - 将
S3与 nginx 服务器一起用作代理的解决方法. Nginx 当前不接受像http://domain.com?delete这样的空路径 url, 但是 vanilla aws-sdk-cpp 会产生这种 url. 此提交使用修补过的 aws-sdk-cpp 版本, 在这种情况下, 它使 url 以"/"作为路径, 例如http://domain.com/?delete. #16814 (ianton-ru). - 更好地诊断输入数据中的解析错误. 在
Cannot read all data错误上提供行号. #16644 (alexey-milovidov). - 使
mind Map和maxMap的行为更加可取. 它不会在结果中跳过零值. 修复 #16087. #16631 (Ildus Kurbangaliev). - 在运行时更好地更新 ZooKeeper 配置. #16630 (sundyli).
- 尽早应用 SETTINGS 子句. 它允许修改查询中的更多设置. 这将关闭 #3178. #16619 (alexey-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). - 允许将当前实例中已经提交或过时的部分提取到分离目录中. 当从另一个集群迁移表并具有 N 到 1 个分片映射时, 它很有用. 它也与当前的 fetchPartition 实现一致. #16538 (Amos Bird).
RabbitMQ的多项改进: 修复了 #16263 的错误. 还最小化了事件循环生命周期. 添加了更高效的队列设置. #16426 (Kseniia Sumarokova).- 修复
quantileDeterministic函数中的调试断言. 在以前的版本中, 它还可以通过网络传输多达两倍的数据. 虽然不存在错误. 这修复了 #15683. #16410 (alexey-milovidov). - 添加
TablesToDropQueueSize指标. 它等于正在等待后台数据删除的已删除表的数量. #16364 (tavplubix). - 当客户端断开连接时更好的诊断. 在以前的版本中, 服务器中记录了
Attempt to read after EOF和Broken pipe异常. 在新版本中, 它的信息消息Client has dropped the connection, cancel the query.. #16329 (alexey-milovidov). - 为 Set/Join 表引擎添加 total_rows/total_bytes (来自 system.tables) 支持. #16306 (Azat Khuzhin).
- 现在可以为 MergeTree 表引擎系列指定没有
ORDER BY的PRIMARY KEY. 关闭 #15591. #16284 (alesapin). - 如果系统中没有 tmp 文件夹 (chroot、错误配置等)
clickhouse-local将在当前目录中创建临时子文件夹. #16280 (filimonov). - 添加对嵌套数据类型 (如命名元组) 作为子类型的支持. 修复 #15587. #16262 (Ivan).
- 支持
database_atomic_wait_for_drop_and_detach_synchronously/NO DELAY/SYNCforDROP DATABASE. #16127 (Azat Khuzhin). - 添加
allow_nondeterministic_optimize_skip_unused_shards(允许在分片键中使用非确定性,如rand()或dictGet()). #16105 (Azat Khuzhin). - 修复
memory_profiler_step/max_untracked_memory以通过 HTTP 进行查询 (包括测试). 修复在 xml 配置中全局调整此值也无济于事的问题, 因为这些设置无论如何都不会应用, 只有默认 (4MB) 值是 [used](https://github.com/ClickHouse/ClickHouse/blob/17731245336d8c84f75e4c0894c5797ed7732190 /src/Common/ThreadStatus.h#L104). 修复 http 查询最根 ThreadStatus 的query_id(通过在读取 query_id 后初始化 QueryScope). #16101 (Azat Khuzhin). - 现在, 无论集群配置中的
<internal_replication>设置如何,都可以执行ALTER ... ON CLUSTER查询. #16075 (alesapin). - 修复了
clickhouse-client可能因加载建议而在退出时中止的罕见问题. 这修复了 #16035. #16047 (alexey-milovidov). - 为具有复杂键的
Redis字典添加cache布局支持. #15985 (Anton Popov). - 在配置错误的情况下修复查询挂起 (无限循环) (
connections_with_failover_max_tries设置为 0). #15876 (Azat Khuzhin). - 将某些日志消息的级别从信息更改为调试, 因此不会为每个查询显示信息消息. 这将关闭 #5293. #15816 (alexey-milovidov).
- 删除
MemoryTrackingInBackground*指标以避免潜在的误导性结果. 这修复了 #15684. #15813 (alexey-milovidov). - 添加重新连接到
zookeeper-dump-tree工具. #15711 (alexey-milovidov). - 允许在
CREATE TABLE table AS table_function(...)查询中明确指定列列表. 修复 #9249 修复 #14214. #14295 (tavplubix).
性能改进
- 不要在 SELECT FINAL 中跨分区合并部分. #15938 (Kruglov Pavel).
- 提高
-OrNull和-OrDefault聚合函数的性能. #16661 (alexey-milovidov). - 提高
quantileMerge的性能. 在以前的版本中, 它非常慢. 这将关闭 #1463. #16643 (alexey-milovidov). - 稍微提高逻辑函数的性能. #16347 (alexey-milovidov).
- 改进了 MergeTree 表引擎中合并分配的性能. 不应该对用户可见. #16191 (alesapin).
- 通过预分配哈希表加速哈希/sparse_hashed 字典加载. #15454 (Azat Khuzhin).
- 现在, 琐碎的计数优化变得有点不琐碎了.包含精确分区expr的谓词也可以被优化. 这也修复了#11092当
max_parallel_replicas > 1时返回错误计数的问题. #15074 (Amos Bird).
构建/测试/打包改进
- 为无状态测试添加薄片检查. 在功能测试被合并之前, 它将提前检测出可能不可靠的功能测试. #16238 (alesapin).
- 使用适当的版本进行
croaring而不是合并. #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 初始化脚本. #14135 (alexey-milovidov).
- 将
boost::program_options添加到db_generator以提高其可用性. 这将关闭 #15940. #15973 (Nikita Mikhaylov).
ClickHouse 版本 20.10
ClickHouse 版本 v20.10.7.4-stable, 2020-12-24
Bug 修复
- 修复了
clickhouse-odbc-bridge进程无法被具有双IPv4/IPv6堆栈的机器上的服务器访问的问题, 并修复了使用格式错误的查询执行 ODBC 字典更新和/或导致崩溃时的问题. 这可能会关闭 #14489. #18278 (Denis Glazachev). - 修复 Enum 和 Int 类型之间的键比较. 这修复了 #17989. #18214 (Amos Bird).
- 修复了
MaterializeMySQL数据库引擎中唯一键转换崩溃的问题. 这修复了 #18186 并修复了 #16372 #18211 (Winter Zhang). - 修复了 S3 URL 解析中的
std::out_of_range: basic_string. #18059 (Vladimir Chebotarev). - 修复了由于 MaterializeMySQL 不支持转换 MySQL 前缀索引而导致某些表无法从 MySQL 同步到 ClickHouse 的问题. 这修复了 #15187 并修复了 #17912 #17944 (Winter Zhang).
- 修复
topK聚合函数中可能出现的段错误. 这将关闭 #17404. #17845 (Maksim Kita). - 如果禁用了
in_memory_parts_enable_wal, 则不要从WAL恢复部件. #17802 (detailyang). - 修复了 ClickHouse 无法恢复与 MySQL 服务器的连接时的问题. #17681 (Alexander Kazakov).
- 修复了服务器在守护进程模式下运行时空的
system.stack_trace表. #17630 (Amos Bird). - 修复了在多行查询的交互模式下使用
clickhouse-client时的行为, 并且单行注释被错误地扩展到查询结束. 这修复了 #13654. #17565 (alexey-milovidov). - 修复了服务器在极少数情况下停止接受连接的问题. #17542 (alexey-milovidov).
- 修复了在不同副本上杀死相应突变时的
ALTER查询挂起. 这修复了 #16953. #17499 (alesapin). - 修复了 clickhouse 低估标记缓存大小时的错误. 当有很多带有标记的小文件时可能会发生. #17496 (alesapin).
- 修复了启用设置
optimize_redundant_functions_in_order_by的ORDER BY. #17471 (Anton Popov). - 修复了
DISTINCT之后由于不正确优化而可能出现的重复项. 修复 #17294. #17296 (li chengxiang). #17439 (Nikolai Kochetov). - 修复了从具有
LowCardinality类型的JOIN表读取时崩溃的问题. 这修复了 #17228. #17397 (Nikolai Kochetov). - 修复了子查询中存在 const 列时设置索引失效的问题. 这修复了 #17246. #17249 (Amos Bird).
- 修复了导致崩溃的
ColumnConst比较. 这个修复了 #17088. #17135 (Amos Bird). - 修复了非领导者
ReplicatedMergeTreeTables的ON CLUSTER查询可能永远挂起的错误. #17089 (alesapin). - 修复了函数
fuzzBits中的模糊器发现错误. 这修复了. #17051 (hexiaoting). - 避免远程查询的不必要的网络错误, 这些错误在执行时可能会被取消, 例如使用
LIMIT的查询. #17006 (Azat Khuzhin). - 修复了从 double 转换时大整数 (128、256 位) 的错误结果. #16986 (Mike).
- 出现错误时解析
format_avro_schema_registry_url的IP. #16985 (filimonov). - 修复了在
ALTER TABLE ... MODIFY COLUMN ... NewType之后, 当“SELECT”在更改列上具有WHERE表达式并且更改尚未完成时可能出现的服务器崩溃. #16968 (Amos Bird). clickhouse-git-import中没有正确计算批判信息. #16959 (alexey-milovidov).- 通过单调函数优化来固定顺序. 这修复了 #16107. #16956 (Anton Popov).
- Fixrf 通过启用设置
optimize_aggregators_of_group_by_keys和连接来优化组. 这修复了 #12604. #16951 (Anton Popov). - 安装脚本应始终在 config 文件夹中创建子目录. 这仅与使用自定义配置的 Docker 构建相关. #16936 (filimonov).
- 使用
ORDER BY的查询修复可能的错误Illegal type of argument. 这修复了 #16580. #16928 (Nikolai Kochetov). - 如果没有数据写入
WriteBufferFromS3, 则中止分段上传. #16840 (Pavel Kovalenko). - 修复了在不带任何参数的情况下使用
any时的崩溃问题. 这修复了 #16803. #16826 (Amos Bird). - 修复了 ClickHouse 过去总是通过 MySQL 协议为
INSERT查询返回许多受影响行的 0 插入的行为. 这修复了 #16605. #16715 (Winter Zhang). - 修复了
TDigest不受控制的增长. #16680 (hrissan). - 修复了在 Aggregate 函数中使用后缀
if时远程查询失败的问题. 这修复了 #16574 fixes #16231 #16610 (Winter Zhang).
ClickHouse 版本 v20.10.4.1-stable, 2020-11-13
Bug 修复
- 当查询分析器打开并且 ClickHouse 安装在操作系统上时, 修复罕见的无声崩溃, glibc 版本已经 (据说) 损坏了某些功能的异步展开表. 这修复了 #15301。 这修复了 #13098. #16846 (alexey-milovidov).
- 在启用了
transform_null_in设置的情况下修复多个列和元组上的IN运算符. 修复 #15310. #16722 (Anton Popov). - 这将修复 optimize_read_in_order/optimize_aggregation_in_order 与 max_threads>0 和 ORDER BY 中的表达式. #16637 (Azat Khuzhin).
- 现在, 当从输入解析 AVRO 时, LowCardinality 从类型中删除. 修复 #16188. #16521 (Mike).
- 通过适当缩小 GTID 集, 修复使用 MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL Engine 和 MySQL Slave 上启用的
slave_parallel_worker时元数据的快速增长. 这修复了 #15951. #16504 (TCeason). - 修复分布式的 DROP TABLE (使用 INSERT). #16409 (Azat Khuzhin).
- 修复复制队列中非常大的条目的处理. 如果表结构非常大 (接近 1 MB), 则非常大的条目可能会出现在 ALTER 查询中. 这修复了 #16307. #16332 (alexey-milovidov).
- 修复 MySQL 数据库的错误. 当用作数据库引擎的 MySQL 服务器关闭时, 某些查询会引发异常, 因为它们试图从禁用的服务器获取表, 而这是不必要的. 例如, 查询
SELECT ... FROM system.parts应该只适用于 MergeTree 表并且根本不要接触 MySQL 数据库. #16032 (Kruglov Pavel).
改进
- 将 S3 与 nginx 服务器一起用作代理的解决方法。 Nginx 当前不接受像 http://domain.com?delete 这样的空路径 url,但是 vanilla aws-sdk-cpp 会生成这种 url。 此提交使用修补过的 aws-sdk-cpp 版本,在这种情况下,它使 url 以“/”作为路径,例如 http://domain.com/?delete. #16813 (ianton-ru).
ClickHouse 版本 v20.10.3.30, 2020-10-28
向后不兼容变更
- 使
multiple_joins_rewriter_version过时. 删除连接重写器的第一个版本. #15472 (Artem Zuikov). - 将
format_regexp_escaping_rule设置的默认值 (它与Regexp格式相关) 更改为Raw(这意味着 - 将整个子模式作为一个值读取), 使行为更符合用户的期望. #15426 (alexey-milovidov). - 在 SQL 中添加对嵌套多行注释
/* 注释 /* 注释 */ */的支持. 这符合SQL标准. #14655 (alexey-milovidov). - 添加了 MergeTree 设置 (
max_replicated_merges_with_ttl_in_queue和max_number_of_merges_with_ttl_in_pool) 来控制后台池和复制队列中与 TTL 合并的数量. 仅当您使用删除 TTL 时, 此更改才会破坏与旧版本的兼容性. 否则, 复制将保持兼容. 如果您一次更新所有分片副本或执行SYSTEM STOP TTL MERGES直到完成所有副本的更新, 您可以避免不兼容问题. 如果你在复制队列中得到一个不兼容的条目, 首先, 执行SYSTEM STOP TTL MERGES, 然后在ALTER TABLE ... DETACH PARTITION ...分配不兼容的TTL合并的分区. 将其重新连接到单个副本上. #14490 (alesapin). - 从20.5以上的版本升级时, 如果进行滚动更新, 集群同时包含20.5以上和20.5以下的版本, 如果旧版本的ClickHouse节点重启, 旧版本在新版本存在的情况下启动, 可能会导致
Part ... intersects previous part错误. 为防止出现此错误, 首先在所有集群节点上安装更新的 clickhouse-server 软件包, 然后重新启动 (因此, 当 clickhouse-server 重新启动时, 它将以新版本启动).
新特征
- 后台数据再压缩. 添加为 MergeTree 表引擎系列指定
TTL ... RECOMPRESS codec_name的能力. #14494 (alesapin). - 添加并行仲裁插入. 这将关闭 #15601. #15601 (Latysheva Alexandra).
- 用于额外强制执行数据持久性的设置. 对非复制设置有用. #11948 (Anton Popov).
- 当复制块写入本地不存在的副本时 (尚未从副本中提取), 不要忽略它并在本地写入, 以达到与复制成功相同的效果. #11684 (alexey-milovidov).
- 现在我们支持
WITH <identifier> AS (subquery) ...在查询上下文中引入命名子查询. 这将关闭 #2416. 这将关闭 #4967. #14771 (Amos Bird). - 引入
enable_global_with_statement设置, 它将第一个 select 的WITH语句传播到同一级别的其他选择查询, 并使WITH语句中的别名对子查询可见. #15451 (Amos Bird). - 安全的集群间查询执行 (initial_user 作为当前查询用户). #13156 (Azat Khuzhin). #15551 (Azat Khuzhin).
- 添加删除列属性和表 TTL 的功能. 引入了查询
ALTER TABLE MODIFY COLUMN col_name REMOVE what_to_remove和ALTER TABLE REMOVE TTL. 这两个操作都是轻量级的, 并且在元数据级别执行. #14742 (alesapin). - 添加格式
RawBLOB. 它用于输入或输出没有任何转义和分隔符的单个值. 这将关闭 #15349. #15364 (alexey-milovidov). - 添加
reinterpretAsUUID函数, 允许将大端字节字符串转换为 UUID. #15480 (Alexander Kuzmenkov). - 实现
force_data_skiping_indices设置. #15642 (Azat Khuzhin). - 添加一个设置
output_format_pretty_row_numbers以计算出漂亮格式的结果. 这将关闭 #15350. #15443 (flynn). - 添加了查询混淆工具. 它允许共享更多查询以进行更好的测试. 这将关闭 #15268. #15321 (alexey-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. 请注意, 该设置仅控制输出格式, 并且\N是TSV输入格式唯一支持的NULL表示. #14586 (Kruglov Pavel). - 支持
MaterializeMySQL的十进制数据类型。MaterializeMySQL是一个实验性功能. #14535 (Winter Zhang). - 添加新功能:
SHOW DATABASES LIKE 'xxx'. #14521 (hexiaoting). - 添加了将 (任意) git 存储库作为示例数据集导入到 ClickHouse 的脚本. #14471 (alexey-milovidov).
- 现在插入语句可以在列列表中带有带有列转换器的星号 (或变体). #14453 (Amos Bird).
- 用于分布式查询的新查询复杂度限制设置
max_rows_to_read_leaf、max_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(作为 ClickHouseDecimal) 和具有亚秒级精度的datetime(作为DateTime64). #11512 (Vasily Nemkov). - 将
event_time_microseconds字段引入system.text_log、system.trace_log、system.query_log和system.query_thread_log表. #14760 (Bharat Nallan). - 将
event_time_microseconds添加到system.asynchronous_metric_log和system.metric_log表. #14514 (Bharat Nallan). - 将
query_start_time_microseconds字段添加到system.query_log和system.query_thread_log表. #14252 (Bharat Nallan).
Bug 修复
- 修复无论限制如何都可以过度分配内存的情况. 这将关闭 #14560. #16206 (alexey-milovidov).
- 修复
executable字典源挂起. 在以前的版本中, 当使用某些格式 (例如JSONEachRow) 时, 数据在至少输出一些东西之前不会提供给子进程. 这将关闭 #1697. 这将关闭 #2455. #14525 (alexey-milovidov). - 在函数
dictGet出现异常时修复double free. 如果字典加载错误, 可能会发生这种情况. #16429 (Nikolai Kochetov). - 使用总数/汇总/多维数据集修饰符和最小/最大功能按键修复分组. 修复 #16393. #16397 (Anton Popov).
- 使用
prefer_localhost_replica=0和internal_replication修复异步分布式插入. #16358 (Azat Khuzhin). - 修复 TwoLevelStringHashTable 实现中一个很错误的代码,可能导致内存泄漏. #16264 (Amos Bird).
- 修复了在lambda中某些错误聚合情况下的段错误. #16082 (Anton Popov).
- 修复
ReplicatedVersionedCollapsingMergeTree的ALTER MODIFY ... ORDER BY查询挂起。 这修复了 #15980. #16011 (alesapin). MaterializeMySQL(实验功能): 修复整理名称和字符集名称解析器并支持字符串类型的length = 0. #16008 (Winter Zhang).- 允许对具有复杂键的字典使用
direct布局. #16007 (Anton Popov). - 在一段时间不活动后发生复制错误时,防止副本挂起 5-10 分钟. #15987 (filimonov).
- 在插入或从 MaterializedView 中选择并同时删除目标表时修复罕见的段错误 (适用于原子数据库引擎). #15984 (tavplubix).
- 修复解析设置配置文件时的歧义:
CREATE USER ... SETTINGS profile readonly现在被视为使用名为readonly的配置文件, 而不是名为profile的具有只读约束的设置. 这修复了 #15628. #15982 (Vitaly Baranov). MaterializeMySQL(实验功能): 修复创建数据库失败时的崩溃. #15954 (Winter Zhang).- 修复了当表被并发重命名 (对于原子数据库引擎) 时,
DROP TABLE IF EXISTS失败并带有Table ... does not exist错误的问题. 修复了并发执行具有多个表的某些 DDL 查询 (如DROP DATABASE和RENAME TABLE) 时罕见的死锁 - 修复了并发执行DROP/DETACH时Table ... does not exist的DROP/DETACH DATABASE失败表`. #15934 (tavplubix). - 如果查询具有
WHERE、PREWHERE和GLOBAL IN, 则修复来自Distributed表的查询的错误空结果. 修复#15792. #15933 (Nikolai Kochetov). - 修复 #12513: 重新分析查询时具有相同别名的差异表达式. #15886 (Winter Zhang).
- 修复 RBAC 实现中可能非常罕见的死锁. #15875 (Vitaly Baranov).
- 修复在
ALTER MODIFY COLUMN查询之后执行的SELECT ... ORDER BY DESC查询中的异常Block structure mismatch. 修复 #15800. #15852 (alesapin). MaterializeMySQL(实验功能): 修复select count()不准确. #15767 (tavplubix).- 修复某些查询情况, 其中仅选择虚拟列. 以前可能会抛出
Not found column _nothing in block异常. 修复 #12298. #15756 (Anton Popov). - 修复原子数据库中具有内表的物化视图的删除 (由于工作线程挂起, 由于 MV 内表的递归 DROP TABLE, 因此挂起所有后续 DROP TABLE). #15743 (Azat Khuzhin).
- 如果第一次尝试失败, 可以将部分移动到另一个磁盘/卷. #15723 (Pavel Kovalenko).
- 修复错误
Cannot find column, 如果对MV的查询包含ARRAY JOIN, 则在插入MATERIALIZED VIEW时可能会发生该错误. #15717 (Nikolai Kochetov). - 修复了
max_replicated_logs_to_keep设置的默认值过低, 这可能导致副本过于频繁地丢失. 通过选择要克隆的最新副本来改进丢失的副本恢复过程. 也不要从丢失的复制品中取出旧零件, 而是将它们拆下. #15701 (tavplubix). - 修复 MySQL 字典和表中罕见的竞争条件. #15686 (alesapin).
- 修复 AMQP-CPP 中的 (良性) 竞争条件. #15667 (alesapin).
- 修复错误
Cannot add simple transform to empty Pipe, 该错误在从与目标表结构不同的Buffer表中读取时发生. 如果目标表返回空的查询结果是可能的. 修复 #15529. #15662 (Nikolai Kochetov). - 在使用 S3 插入 MergeTree 期间正确处理错误. S3 上的 MergeTree 是一项实验性功能. #15657 (Pavel Kovalenko).
- 修复了 S3 表功能的错误: 来自 URL 的区域未应用于 S3 客户端配置. #15646 (Vladimir Chebotarev).
- 修复查询计划的 ReadFromStorage 步骤中资源的销毁顺序. 在极少数情况下, 它可能会导致崩溃. 可能与#15610有关. #15645 (Nikolai Kochetov).
- 分离只读表时减去
ReadonlyReplica指标. #15592 (sundyli). - 修复了使用
JSON*函数时会导致VALUES、LIMIT或IN运算符右侧的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. #15557 (alexey-milovidov). - 修复
Database <db> does not exist.在启动器上没有数据库时使用 IN 和分布式表的查询. #15538 (Artem Zuikov). - Mutation 可能会在
MOVE或REPLACE PARTITION之后等待一些不存在的部分, 或者在极少数情况下, 在DETACH或DROP PARTITION之后挂起. 已修复. #15537 (tavplubix). - 修复如果执行具有相同模式的
LIKE, 则LIKE运算符不再区分大小写的错误. #15536 (alesapin). - 修复了当选择数据中没有的列,但依赖于数据中也没有的其他列时的
Missing columns错误. 修复 #15530. #15532 (alesapin). - 将单个参数传递给 ReplicatedMergeTree 而不是忽略它时抛出错误. #15516 (nvartolomei).
- 修复了 DDLWorker 中事件订阅的错误, 该错误很少会导致查询在
ON CLUSTER中挂起. 引入 #13450. #15477 (alesapin). - 当
boundingRatio聚合函数的第二个参数类型错误时报告正确的错误. #15407 (detailyang). - 修复 #15365: 附加带有 MySQL 引擎的数据库抛出异常 (无查询上下文) . #15384 (Winter Zhang).
- 修复 select 查询中多次出现列转换器的情况. #15378 (Amos Bird).
- 修复了
S3存储中的压缩. #15376 (Vladimir Chebotarev). - 修复诸如
SELECT toStartOfDay(today())之类的查询失败抱怨空 time_zone 参数的错误. #15319 (Bharat Nallan). - 修复合并树表重命名和背景清理过程中的竞争条件. #15304 (alesapin).
- 修复启用系统日志时服务器启动时罕见的竞争条件. #15300 (alesapin).
- 修复带有大量子查询的查询挂起到
MySQL引擎的同一个表. 以前, 如果查询中对同一个MySQL表的子查询超过 16 个, 它将永远挂起. #15299 (Anton Popov). - 修复 QueryLog 中的 MSan 报告. 未初始化的内存可用于字段
memory_usage. #15258 (alexey-milovidov). - 当查询在 Merge 表上有 JOIN 时,修复 GROUP BY 中的
Unknown identifier. #15242 (Artem Zuikov). - 修复了将
joinGet与LowCardinality类型结合使用时的实例崩溃问题. 这修复了 #15214. #15220 (Amos Bird). - 修复表引擎
Buffer中的错误, 该错误不允许在ALTER查询后将新结构的数据插入到Buffer中. 修复 #15117. #15192 (alesapin). - 调整 MySQL 列定义包中的 Decimal 字段大小. #15152 (maqroll).
- 修复了
join_algorithm='auto'中的用不同方法压缩的数据. 在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. #15033 (Amos Bird).
- 如果使用专门设计的参数调用函数
bar, 则可能会发生缓冲区溢出. 这将关闭 #13926. #15028 (alexey-milovidov). - 修复了在 Mac OS 上的 Docker 中运行 clickhouse-server 时, 在原子数据库中执行 DDL 查询时出现的
Cannot rename ... errno: 22, strerror: Invalid argument错误. #15024 (tavplubix). - 当超过内存限制时, 使用 join_algorith='auto' 修复 RIGHT 或 FULL JOIN 中的崩溃, 我们应该使用 MergeJoin 更改 HashJoin. #15002 (Artem Zuikov).
- 现在设置
number_of_free_entries_in_pool_to_execute_mutation和number_of_free_entries_in_pool_to_lower_max_size_of_merge可以等于background_pool_size. #14975 (alesapin). - 当子查询包含
finalizeAggregation函数时, 修复使谓词下推工作. 修复 #14847. #14937 (filimonov). - 在
system.asynchronous_metrics中发布每个逻辑核心的 CPU 频率. 这修复了 #14923. #14924 (Alexander Kuzmenkov). MaterializeMySQL(实验功能): 修复了.metadata.tmp File exists错误. #14898 (Winter Zhang).- 修复部分调用
extractAllGroups函数可能触发Memory limit exceeded错误的问题. 这修复了 #13383. #14889 (alexey-milovidov). - 修复 SIGSEGV 以尝试使用文件描述符插入 StorageFile. #14887 (Azat Khuzhin).
- 修复了
cache字典中的段错误 #14837. #14879 (Nikita Mikhaylov). MaterializeMySQL(实验功能): 修复了解析 MySQL 二进制日志事件的错误,该错误导致MaterializeMySQL数据库引擎中的Attempt to read after eof和Packet payload is not fully read. #14852 (Winter Zhang).- 当被查询的列具有
DEFAULT表达式时, 修复SELECT查询中的罕见错误, 该表达式依赖于另一列, 该列也具有DEFAULT并且不存在于选择查询中且不存在于磁盘上. 部分修复 #14531. #14845 (alesapin). - 如果必须从 ZK 获取配置文件 (使用
from_zk包含选项) , 则修复服务器在与 ZooKeeper 交谈时可能会在启动时卡住的问题. 这修复了 #14814. #14843 (Alexander Kuzmenkov). - 修复了收缩的
Int -> Int签名类型转换的错误单调性检测. 可能会导致查询结果不正确. 此错误在 #14513 中公布. #14783 (Amos Bird). Replace列转换器应该用克隆的 AST 替换标识符. 这修复了 #14695. #14734 (Amos Bird).- 修复了执行
ALTER ... MODIFY QUERY时物化视图元数据中丢失的默认数据库名称. #14664 (tavplubix). - 修复了当赋值表达式和常量值 (如
UPDATE x = 42) 中带有Nullable列的ALTER UPDATE突变导致列或段错误中的值不正确时的错误. 修复 #13634, #14045. #14646 (alesapin). - 修复错误的十进制乘法结果导致结果列小数位数错误. #14603 (Artem Zuikov).
- 修复函数
has与LowCardinality的Nullable. #14591 (Mike). - 在为 StorageReplicatedMergeTree 引擎创建查询期间 Zookeeper 异常后清理数据目录. #14563 (Bharat Nallan).
- 修复带有组合子
-Resample的函数中罕见的段错误, 这可能会出现在参数非常大的溢出结果中. #14562 (Anton Popov). - 修复了将
Nullable(String)转换为 Enum 时的错误. 由 #12745 介绍. 这修复了 #14435. #14530 (Amos Bird). - 修复了
Nullable列不正确的排序顺序. 这修复了 #14344. #14495 (Nikita Mikhaylov). - 修复
currentDatabase()函数不能在ON CLUSTERddl 查询中使用. #14211 (Winter Zhang). MaterializeMySQL(实验功能): 修复了MaterializeMySQL数据库引擎中的Packet payload is not full read错误. #14696 (BohuTANG).
改进
- 默认情况下为新创建的数据库启用
Atomic数据库引擎. #15003 (tavplubix). - 添加为具有子类型的列指定专用编解码器的功能, 如
Delta、T64等. 实现 #12551, 修复 #11397, 修复 #4609. #15089 (alesapin). - 动态重新加载zookeeper配置. #14678 (sundyli).
- 现在, 无论集群配置中的
<internal_replication>设置如何, 都可以执行ALTER ... ON CLUSTER查询. #16075 (alesapin). - 现在
joinGet支持多键查找。 续. #13015 (Amos Bird). - 如果为
Atomic数据库指定了NO DELAY或SYNC, 则等待DROP/DETACH TABLE实际完成. #15448 (tavplubix). - 现在可以使用
ALTER查询更改VersionedCollapsingMergeTree的版本列的类型. #15442 (alesapin). - 在复制表创建时展开
zookeeper_path中的{database}、{table}和{uuid}宏. 如果在服务器重启后可能会破坏zookeeper_path, 不要允许RENAME TABLE. 修复 #6917. #15348 (tavplubix). - 函数
now允许使用时区参数. 这关闭 15264. #15285 (flynn). - 在执行
/docker-entrypoint-initdb.d/中的所有脚本之前. 不允许连接到 ClickHouse 服务器. #15244 (Aleksei Kozharin). - 向
EXPLAIN PLAN查询添加了optimize设置. 如果启用, 则应用查询计划级别优化. 默认启用. #15201 (Nikolai Kochetov). - CAST 参数数量错误的正确异常消息. 这将关闭 #13992. #15029 (alexey-milovidov).
- 添加选项以在数据部分插入时禁用 TTL 移动. #15000 (Pavel Kovalenko).
- 进行突变时忽略关键约束. 没有这个拉取请求, 当
force_index_by_date = 1或force_primary_key = 1时不可能进行突变. #14973 (Amos Bird). - 如果之前的删除尝试由于 ZooKeeper 会话过期而失败, 则允许删除复制表. 这修复了 #11891. #14926 (alexey-milovidov).
- 修复了从分布式表中使用 SETTINGS 运行 SELECT 时过多的设置约束冲突. #14876 (Amos Bird).
- 提供一个
load_balancing_first_offset查询设置来明确说明第一个副本是什么. 它与“FIRST_OR_RANDOM”负载均衡策略一起使用, 允许控制副本工作负载. #14867 (Amos Bird). - 在
EXPLAIN结果中显示SET和JOIN的子查询. #14856 (Nikolai Kochetov). - 允许在存储
Distributed中使用多卷存储配置. #14839 (Pavel Kovalenko). - 从相同的 timespec 构造
query_start_time和query_start_time_microseconds. #14831 (Bharat Nallan). - 支持禁用
StorageJoin和StorageSet的持久化, 这个特性是通过设置disable_set_and_join_persistency来控制的. 这个 PR 解决了问题 #6318. #14776 (vxider). - 现在
COLUMNS可用于包装列列表并在之后应用列转换器. #14775 (Amos Bird). - 将
merge_algorithm添加到system.merges表以改进合并检查. #14705 (Amos Bird). - 修复 zookeeper 存在 watch 导致的潜在内存泄漏. #14693 (hustnn).
- 允许并行执行分布式 DDL. #14684 (Azat Khuzhin).
- 添加
QueryMemoryLimitExceeded事件计数器. 这将关闭 #14589. #14647 (fastio). - 修复查询格式中的一些尾随空格. #14595 (Azat Khuzhin).
- ClickHouse 对分区 expr 和键 expr 的处理方式不同. 分区 expr 用于构造包含相关列的 minmax 索引, 而主键 expr 存储为 expr. 有时用户可能会在更粗略的级别对表进行分区, 例如
partition by i / 1000. 然而, 二元运算符不是单调的, 这个 PR 试图解决这个问题. 它也可能有益于其他用例. #14513 (Amos Bird). - 添加一个选项以跳过对
DiskS3的访问检查.s3磁盘是一项实验性功能. #14497 (Pavel Kovalenko). - 如果有正在进行的 S3 请求, 则加快服务器关闭过程. #14496 (Pavel Kovalenko).
- 如果重新加载失败并继续使用以前的 users.xml,
SYSTEM RELOAD CONFIG现在会抛出异常. 如果重新加载失败, 后台定期重新加载也会继续使用以前的 users.xml. #14492 (Vitaly Baranov). - 对于
clickhouse-client的脚本模式下带有 VALUES 格式的内联数据的 INSERT, 除了换行外, 还支持分号作为数据终止符. 关闭 #12288. #13192 (Alexander Kuzmenkov). - 支持紧凑部分的自定义编解码器. #12183 (Anton Popov).
性能改进
- 默认情况下为小零件启用紧凑零件. 这将允许稍微更有效地处理频繁插入 (4..100 次). #11913 (alexey-milovidov).
- 提高
quantileTDigest性能. 这修复了 #2668. #15542 (Kruglov Pavel). - 显著减少 AggregatingInOrderTransform/optimize_aggregation_in_order 中的内存使用. #15543 (Azat Khuzhin).
- 更快的 256 位乘法. #15418 (Artem Zuikov).
- 使用 (u)int64_t 作为宽整数的基本类型提高 256 位类型的性能. 原始宽整数使用 8 位类型作为基数. #14859 (Artem Zuikov).
- 显式使用临时磁盘存储垂直合并临时数据. #15639 (Grigory Pervakov).
- 在循环中使用一个 S3 DeleteObjects 请求而不是多个 DeleteObject. 没有任何功能更改, 因此由现有测试 (如集成/test_log_family_s3) 覆盖. #15238 (ianton-ru).
- 修复
DateTime <op> DateTime错误地选择了缓慢的通用实现. 这修复了 #15153. #15178 (Amos Bird). - 提高
FixedString类型的 GROUP BY 键的性能. #15034 (Amos Bird). - 启动 clickhouse-server 时只有
mlock代码段. 在以前的版本中, 所有映射区域都被锁定在内存中, 包括调试信息. 调试信息通常被拆分为一个单独的文件, 但如果不是, 则会导致 +2..3 GiB 内存使用. #14929 (alexey-milovidov). - 由于链接时间优化, ClickHouse 二进制文件变得更小.
构建/测试/打包改进
- 现在我们使用 clang-11 进行生产 ClickHouse 构建. #15239 (alesapin).
- 现在我们使用 clang-11 在 CI 中构建 ClickHouse. #14846 (alesapin).
- 将二进制构建 (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. #14922 (alexey-milovidov). - 默认使用 LLVM 的实验通行证管理器. #15608 (Danila Kutenin).
- 不允许任何 C++ 翻译单元构建超过 10 分钟或使用超过 10 GB 或内存. 这修复了 #14925. #15060 (alexey-milovidov).
- 通过拆分测试运行和配置文件运行, 使性能测试更加稳定和具有代表性. #15027 (alexey-milovidov).
- 尝试使性能测试更可靠. 它是通过使用
madvise动态重新映射进程的可执行内存以使用透明大页面来完成的 - 它可以降低 iTLB 未命中的数量, 这是性能测试中不稳定的主要来源. #14685 (alexey-milovidov). - 转换为python3. 这将关闭 #14886. #15007 (Azat Khuzhin).
- 如果服务器未能响应, 则在功能测试中尽早失败. 这将关闭 #15262. #15267 (alexey-milovidov).
- 允许在没有配置的情况下运行 AArch64 版本的 clickhouse-server. 这有利于 #15174. #15266 (alexey-milovidov).
- CI docker 镜像的改进: 摆脱 ZooKeeper 和用于测试配置安装的单个脚本. #15215 (alesapin).
- 在快速测试脚本中修复 CMake 选项转发. 修复了 #14711 中的错误. #15155 (alesapin).
- 添加了一个脚本以在单个命令中执行硬件基准测试. #15115 (alexey-milovidov).
- 将巨大的测试
test_dictionaries_all_layouts_and_sources拆分成较小的测试. #15110 (Nikita Mikhaylov). - 也许修复 base64 中的 MSan 报告 (在带有 AVX-512 的服务器上). 这修复了. #15030 (alexey-milovidov).
- 重新格式化和清理所有集成测试 *.py 文件中的代码. #14864 (Bharat Nallan).
- 修复在 CI 中发现的 MaterializeMySQL 空事务不稳定测试用例. #14854 (Winter Zhang).
- 尝试加快构建速度. #14808 (alexey-milovidov).
- 通过删除未使用的标头来加快构建速度. #14714 (alexey-milovidov).
- 修复 OSX 中的构建失败. #14761 (Winter Zhang).
- 如果在操作系统中找到 ccache, 则默认在 cmake 中启用. #14575 (alesapin).
- Control CI 从 ClickHouse 存储库构建配置. #14547 (alesapin).
- 在 CMake 文件中: - 将一些选项的描述部分移动到上面的注释中. - 替换 0 ->
OFF, 1 ->option的默认值中的ON. - 在选项中添加了一些说明和文档链接. - 替换了FUZZER选项 (还有另一个选项ENABLE_FUZZING也可以启用相同的功能). - 删除了ENABLE_GTEST_LIBRARY选项, 因为有ENABLE_TESTS. 请参阅 PR 中的完整说明: #14711 (Mike). - 使二进制文件更小 (调试版本约为 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
性能改进
- 修复从
Merge表读取大量MergeTree表的性能. 修复 #7748. #16988 (Anton Popov).
Bug 修复
- 如果禁用了
in_memory_parts_enable_wal, 则不要从 WAL 恢复部件. #17802 (detailyang). - 修复了插入
Distributed表时空间不足时的段错误. #17737 (tavplubix). - 修复了 ClickHouse 无法恢复与 MySQL 服务器的连接时的问题. #17681 (Alexander Kazakov).
- 修复了在 Linux 的 Windows 子系统上运行的 ClickHouse 在
Atomic数据库中执行RENAME查询时出现的Function not implementation错误. 修复 #17661. #17664 (tavplubix). - 当 clickhouse-client 用于多行查询的交互模式时, 单行注释被错误地扩展到查询结束. 这修复了 #13654. #17565 (alexey-milovidov).
- 修复在极少数情况下服务器可以停止接受连接的问题. #17542 (alexey-milovidov).
- 修复了当不同副本上的相应突变被杀死时 alter 查询挂起的问题. 修复 #16953. #17499 (alesapin).
- 修复 clickhouse 低估标记缓存大小时的错误. 当有很多带有标记的小文件时可能会发生. #17496 (alesapin).
- 修复了启用
optimize_redundant_functions_in_order_by设置的ORDER BY. #17471 (Anton Popov). - 修复
DISTINCT之后由于不正确优化而可能出现的重复项. 修复 #17294. #17296 (li chengxiang). #17439 (Nikolai Kochetov). - 修复了从具有
LowCardinality类型的JOIN表读取时崩溃的问题. 修复 #17228. #17397 (Nikolai Kochetov). - 修复子查询中存在 const 列时设置索引失效的问题. 这修复了 #17246. #17249 (Amos Bird).
- 修复 ColumnConst 比较导致崩溃. 这个修复了 #17088. #17135 (Amos Bird).
- 修复了在创建
some_table时CREATE TABLE ... AS some_table查询崩溃AS table_function()修复 #16944. #17072 (tavplubix). - 功能 fuzzBits 的 Bug 修复, 相关问题: #16980. #17051 (hexiaoting).
- 避免远程查询的不必要的网络错误, 这些错误在执行时可能会被取消, 例如使用
LIMIT的查询. #17006 (Azat Khuzhin). - 备忘录. #16866 (tavplubix).
- 通过 MySQL 协议返回 INSERT 查询的受影响行数. 以前 ClickHouse 过去总是返回 0, 它是固定的. 修复 #16605. #16715 (Winter Zhang).
构建/测试/打包改进
ClickHouse 版本 v20.9.6.14-stable, 2020-11-20
改进
- 可以连接到需要 SNI 的
clickhouse-server安全端点. 当clickhouse-server托管在 TLS 代理之后是可能的. #16938 (filimonov). - 条件聚合函数 (例如:
avgIf、sumIf、maxIf) 在缺少行并使用可为空参数时应返回NULL. #13964 (Winter Zhang).
Bug 修复
- 修复非领导者 ReplicatedMergeTree 表的
ON CLUSTER查询可能永远挂起的错误. #17089 (alesapin). - 出现错误时解析
format_avro_schema_registry_url的IP. #16985 (filimonov). - 修复在
ALTER TABLE ... MODIFY COLUMN ... NewType之后可能发生的服务器崩溃, 当SELECT在更改列上具有WHERE表达式并且更改尚未完成时. #16968 (Amos Bird). - 安装脚本应始终在 config 文件夹中创建子目录. 这仅与使用自定义配置的 Docker 构建相关. #16936 (filimonov).
- 修复使用
ORDER BY的查询可能出现的错误Illegal type of argument. 修复 #16580. #16928 (Nikolai Kochetov). - 如果没有数据写入 WriteBufferFromS3,则中止分段上传. #16840 (Pavel Kovalenko).
- 修复在不带任何参数的情况下使用
any时的崩溃. 这是针对 #16803 的 . cc @azat. #16826 (Amos Bird). - 在启用了
transform_null_in设置的情况下修复多个列和元组上的IN运算符. 修复 #15310. #16722 (Anton Popov). - 这将修复 optimize_read_in_order/optimize_aggregation_in_order 与 max_threads>0 和 ORDER BY 中的表达式. #16637 (Azat Khuzhin).
- 修复 #16574, 修复 #16231, 修复使用时远程查询失败'if'后缀聚合函数. #16610 (Winter Zhang).
- 在异常的情况下查询完成得更快. 如果发生异常, 取消对远程副本的执行. #15578 (Azat Khuzhin).
ClickHouse 版本 v20.9.5.5-stable, 2020-11-13
Bug 修复
- 当查询分析器打开并且 ClickHouse 安装在操作系统上时, 修复罕见的无声崩溃, glibc 版本已经 (据说) 损坏了某些功能的异步展开表. 这修复了 #15301. 这修复了 #13098. #16846 (alexey-milovidov).
- 现在, 当从输入解析 AVRO 时, LowCardinality 将从类型中删除. 修复 #16188. #16521 (Mike).
- 通过适当缩小 GTID 集,修复使用 MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL Engine 和 MySQL Slave 上启用的
slave_parallel_worker时元数据的快速增长. 这修复了 #15951. #16504 (TCeason). - 修复分布式的 DROP TABLE (使用 INSERT). #16409 (Azat Khuzhin).
- 复复制队列中非常大的条目的处理. 如果表结构非常大 (接近 1 MB), 则非常大的条目可能会出现在 ALTER 查询中. 这修复了 #16307. #16332 (alexey-milovidov).
- 修复了由于未创建过滤集而可能删除部分返回数据时的不一致行为. #16308 (Nikita Mikhaylov).
- 修复 MySQL 数据库的错误. 当用作数据库引擎的 MySQL 服务器关闭时, 某些查询会引发异常, 因为它们试图从禁用的服务器获取表, 而这是不必要的. 例如, 查询
SELECT ... FROM system.parts应该只适用于 MergeTree 表并且根本不要接触 MySQL 数据库. #16032 (Kruglov Pavel).
ClickHouse 版本 v20.9.4.76-stable (2020-10-29)
Bug 修复
- 在函数
dictGet出现异常时修复double free. 如果字典加载错误, 可能会发生这种情况. #16429 (Nikolai Kochetov). - 修复由总数/汇总/多维数据集修饰符和最小/最大功能按键分组. 修复 #16393. #16397 (Anton Popov).
- 修复异步分布式插入 w/prefer_localhost_replica=0 和 internal_replication. #16358 (Azat Khuzhin).
- 修复 TwoLevelStringHashTable 实现中的一个非常错误的代码, 这可能会导致内存泄漏. 我很惊讶这个 bug 怎么能潜伏这么久.... #16264 (Amos Bird).
- 修复无论限制如何都可以过度分配内存的情况. 这将关闭 #14560. #16206 (alexey-milovidov).
- 修复
ReplicatedVersionedCollapsingMergeTree的ALTER MODIFY ... ORDER BY查询挂起. 这修复了 #15980. #16011 (alesapin). - 修复整理名称和字符集名称解析器并支持字符串类型的
length = 0. #16008 (Winter Zhang). - 允许对具有复杂键的字典使用直接布局. #16007 (Anton Popov).
- 在一段时间不活动后发生复制错误时, 防止副本挂起 5-10 分钟. #15987 (filimonov).
- 在插入或从 MaterializedView 中选择并同时删除目标表时修复罕见的段错误 (适用于原子数据库引擎). #15984 (tavplubix).
- 修复解析设置配置文件时的歧义:
CREATE USER ... SETTINGS profile readonly现在被视为使用名为readonly的配置文件, 而不是名为profile的具有只读约束的设置. 这修复了 #15628. #15982 (Vitaly Baranov). - 修复数据库创建失败时的崩溃. #15954 (Winter Zhang).
- 修复了当表被并发重命名 (对于原子数据库引擎) 时,
DROP TABLE IF EXISTS失败并带有Table ... does not exist错误的问题. 修复了并发执行具有多个表的某些 DDL 查询 (如DROP DATABASE”和“RENAME TABLE)时罕见的死锁 修复了并发执行DROP/DETACH TABLE时Table ... does not exist的DROP/DETACH DATABASE失败 `. #15934 (tavplubix). - 如果查询具有
WHERE、PREWHERE和GLOBAL IN, 则修复来自Distributed表的查询的错误空结果. 修复 #15792. #15933 (Nikolai Kochetov). - 修复 RBAC 中可能的死锁. #15875 (Vitaly Baranov).
- 修复在
ALTER MODIFY COLUMN查询之后执行的SELECT ... ORDER BY DESC查询中的异常Block structure mismatch. 修复 #15800. #15852 (alesapin). - 修复 MaterializeMySQL 的
select count()不准确. #15767 (tavplubix). - 修复某些查询情况, 其中仅选择虚拟列. 以前可能会抛出
Not found column _nothing in block异常. 修复 #12298. #15756 (Anton Popov). - 修复了
max_replicated_logs_to_keep设置的默认值过低, 这可能导致副本过于频繁地丢失. 通过选择要克隆的最新副本来改进丢失的副本恢复过程. 也不要从丢失的复制品中取出旧零件, 而是将它们拆下. #15701 (tavplubix). - 修复错误
Cannot add simple transform to empty Pipe,该错误在从与目标表结构不同的Buffer表中读取时发生. 如果目标表返回空的查询结果是可能的. 修复 #15529. #15662 (Nikolai Kochetov). - 修复了 S3 表函数中的 globs 错误,URL 中的区域未应用于 S3 客户端配置. #15646 (Vladimir Chebotarev).
- 分离只读表时递减
ReadonlyReplica指标. 这修复了 #15598. #15592 (sundyli). - 将单个参数传递给 ReplicatedMergeTree 而不是忽略它时抛出错误. #15516 (nvartolomei).
改进
- 现在, 无论集群配置中的
<internal_replication>设置如何,都可以执行ALTER ... ON CLUSTER查询. #16075 (alesapin). - 在创建表时在
ReplicatedMergeTree参数中展开{database}、{table}和{uuid}宏. #16160 (tavplubix).
ClickHouse 版本 v20.9.3.45-stable (2020-10-09)
Bug 修复
- 修复错误
Cannot find column, 如果对MV的查询包含ARRAY JOIN, 则在插入MATERIALIZED VIEW时可能会发生该错误. #15717 (Nikolai Kochetov). - 修复 AMQP-CPP 中的竞争条件. #15667 (alesapin).
- 修复查询计划的 ReadFromStorage 步骤中资源的销毁顺序. 在极少数情况下, 它可能会导致崩溃. 可能与#15610有关. #15645 (Nikolai Kochetov).
- 修复了使用
JSON*函数时会导致VALUES、LIMIT或IN运算符右侧的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).
- Mutation 可能会在
MOVE或REPLACE PARTITION之后等待一些不存在的部分, 或者在极少数情况下, 在DETACH或DROP PARTITION之后挂起. 已修复. #15537 (tavplubix). - 修复如果执行具有相同模式的
LIKE, 则LIKE运算符不再区分大小写的错误. #15536 (alesapin). - 在选择数据中不存在但依赖于数据中也不存在的其他列时修复
Missing columns错误. 修复 #15530. #15532 (alesapin). - 修复了 DDLWorker 中事件订阅的错误, 该错误很少会导致查询在
ON CLUSTER中挂起. 引入 #13450. #15477 (alesapin). - 当
boundingRatio聚合函数的第二个参数类型错误时报告正确的错误. #15407 (detailyang). - 修复诸如
SELECT toStartOfDay(today())之类的查询失败抱怨空 time_zone 参数的错误. #15319 (Bharat Nallan). - 修复合并树表重命名和背景清理过程中的竞争条件. #15304 (alesapin).
- 修复启用 system.logs 时服务器启动时罕见的竞争条件. #15300 (alesapin).
- 修复 QueryLog 中的 MSan 报告. 未初始化的内存可用于
memory_usage字段. #15258 (alexey-milovidov). - 修复将 joinGet 与 LowCardinality 类型一起使用时的实例崩溃. 这修复了 #15214. #15220 (Amos Bird).
- 修复表引擎
Buffer中的错误, 该错误不允许在ALTER查询后将新结构的数据插入到Buffer中. 修复 #15117. #15192 (alesapin). - 调整mysql列定义包中的decimals字段大小. #15152 (maqroll).
- 修复了在 Mac OS 上的 docker 中运行 clickhouse-server 时, 在原子数据库中执行 DDL 查询时出现的
Cannot rename ... errno: 22, strerror: Invalid argument错误. #15024 (tavplubix). - 修复了当子查询包含 finalizeAggregation 函数时使谓词下推工作的问题.修复 #14847. #14937 (filimonov).
- 如果必须从 ZK 获取配置文件 (使用
from_zk包含选项), 则修复服务器在与 ZooKeeper 交谈时可能会在启动时卡住的问题. 这修复了 #14814. #14843 (Alexander Kuzmenkov).
改进
ClickHouse 版本 v20.9.2.20, 2020-09-22
向后不兼容变更
- 从20.5以上的版本升级时, 如果进行滚动更新, 集群同时包含20.5以上和20.5以下的版本, 如果旧版本的ClickHouse节点重启, 旧版本在新版本存在的情况下启动, 可能会导致 到
Part ... intersects previous part错误. 为防止出现此错误, 首先在所有集群节点上安装更新的 clickhouse-server 软件包, 然后重新启动 (因此, 当 clickhouse-server 重新启动时, 它将以新版本启动).
新特征
- 添加了列转换器
EXCEPT、REPLACE、APPLY, 可以应用于所选列的列表 (在*或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, 它将子查询转换为表对象. 这有助于传递查询. 例如, 它可以用于远程/集群表功能. #12567 (Amos Bird).
Bug 修复
- 修复了在赋值表达式和常量值 (如
UPDATE x = 42)中使用 Nullable 列的ALTER UPDATE突变导致列或段错误中的值不正确时的错误. 修复#13634, #14045. #14646 (alesapin). - 修复了错误的十进制乘法结果导致结果列小数位数错误. #14603 (Artem Zuikov).
- 修复了
Nullable列不正确的排序顺序. 这修复了 #14344. #14495 (Nikita Mikhaylov). - 修复了索引分析中与类型为
FixedString的主键的比较不一致的问题, 如果它们与较小的字符串进行比较. 这修复了 #14908. #15033 (Amos Bird). - 修复了如果表具有单个部分的分区会导致错误的合并分配的错误. #14444 (alesapin).
- 如果使用专门设计的参数调用函数
bar, 则可能会发生缓冲区溢出. 这将关闭 #13926. #15028 (alexey-milovidov). - 在
system.asynchronous_metrics中发布每个逻辑核心的 CPU 频率. 这修复了 #14923. #14924 (Alexander Kuzmenkov). - 修复了使用
MaterializeMySQL数据库引擎时.metadata.tmp File exists的错误. #14898 (Winter Zhang). - 修复部分调用
extractAllGroups函数可能触发Memory limit exceeded错误的问题. 这修复了 #13383. #14889 (alexey-milovidov). - 修复 SIGSEGV 以尝试插入 StorageFile(fd). #14887 (Azat Khuzhin).
- 当被查询的列具有
DEFAULT表达式时, 修复SELECT查询中的罕见错误, 该表达式依赖于另一列, 该列也具有DEFAULT并且不存在于选择查询中且不存在于磁盘上. 部分修复 #14531. #14845 (alesapin). - 修复了收缩的
Int -> Int签名类型转换的错误单调性检测. 可能会导致查询结果不正确. 此错误在 #14513 中公布. #14783 (Amos Bird). - 修复了执行
ALTER ... MODIFY QUERY时物化视图元数据中丢失的默认数据库名称. #14664 (tavplubix). - 修复当涉及 LowCardinality 和 Nullable 类型时函数
has可能不正确的结果. #14591 (Mike). - 在使用 ReplicatedMergeTree Engine 对表进行 CREATE 查询期间, 在 Zookeeper 异常后清理数据目录. #14563 (Bharat Nallan).
- 修复带有组合子
-Resample的函数中罕见的段错误, 这可能会出现在参数非常大的溢出结果中. #14562 (Anton Popov). - 检查
topK聚合函数中的数组大小溢出. 如果没有此检查, 用户可能会发送带有精心设计的参数的查询, 这将导致服务器崩溃. 这将关闭 #14452. #14467 (alexey-milovidov). - 代理重启/启动/停止/重新加载 SysVinit 到 systemd (如果使用). #14460 (Azat Khuzhin).
- 如果 PipelineExecutor 本身发生异常, 则停止查询执行. 这可以防止罕见的查询挂起. #14334 #14402 (Nikolai Kochetov).
- 修复在创建为
AS table_function的表的ALTER查询期间崩溃. 修复 #14212. #14326 (alesapin). - 使用 REFRESH 命令修复 ALTER LIVE VIEW 查询期间的异常. LIVE VIEW 是一项实验性功能. #14320 (Bharat Nallan).
- 修复带有嵌套解释器的查询的 QueryPlan 生命周期 (对于 EXPLAIN PIPELINE graph=1). #14315 (Azat Khuzhin).
- 更好地检查 SSD 缓存复杂键外部字典中的元组大小. 这修复了 #13981. #14313 (alexey-milovidov).
- 在
ALIAS列类型上不允许使用CODEC. 修复#13911. #14263 (Bharat Nallan). - 在非全局级别执行时修复 GRANT ALL 语句. #13987 (Vitaly Baranov).
- 修复 lambda 中的 arrayJoin() 捕获 (抛出逻辑错误消息的异常). #13792 (Azat Khuzhin).
实验功能
- 通过给定的 SELECT 查询添加了用于随机数据库生成的
db-generator工具. 当用户只有不完整的错误报告时, 它可能有助于重现问题. #14442 (Nikita Mikhaylov) #10973 (ZeDRoman).
改进
- 允许在分布式存储中使用多卷存储配置. #14839 (Pavel Kovalenko).
- 禁止在
toStartOf*类型的函数中使用空的 time_zone 参数. #14509 (Bharat Nallan). - MySQL 处理程序为诸如
SET @@var = value之类的查询返回OK. 此类声明被忽略. 这是必需的, 因为某些 MySQL 驱动程序会在握手后发送SET @@查询以进行设置 https://github.com/ClickHouse/ClickHouse/issues/9336#issuecomment-686222422 . #14469 (BohuTANG). - 现在, 如果之前没有实现 TTL, 将在合并期间应用它们. #14438 (alesapin).
- 现在
clickhouse-obfuscator支持 #13163 中提出的 UUID 类型. #14409 (dimarub2000). - 添加了 #11384 中提出的新设置
system_events_show_zero_values. #14404 (dimarub2000). - 在
MaterializeMySQL中将主键隐式转换为非空 (与MySQL相同). 修复 #14114. #14397 (Winter Zhang). - 用 https://github.com/cerevra/int 的实现替换 boost multiprecision 中的宽整数 (256 位). 256 位整数是实验性的. #14229 (Artem Zuikov).
- 为
system.part_log中的部分添加默认压缩编解码器, 名称为default_compression_codec. #14116 (alesapin). - 为
DateTime类型添加精度参数. 它允许使用DateTime名称代替DateTime64. #13761 (Winter Zhang). - 为 Redis 外部字典添加了 requirepass 授权. #13688 (Ivan Torgashov).
- RabbitMQ 引擎的改进: 添加了连接和通道故障处理、正确提交、插入故障处理、更好的交换、队列持久性和队列恢复机会、新的队列设置. 固定测试. #12761 (Kseniia Sumarokova).
- 支持紧凑部分的自定义编解码器. #12183 (Anton Popov).
性能改进
- 使用 LIMIT/LIMIT BY/ORDER BY 优化查询以使用 GROUP BY sharding_key (在
optimize_skip_unused_shards和optimize_distributed_group_by_sharding_key下). #10373 (Azat Khuzhin). - 为多个
JOIN和IN并行创建集合. 它可能会稍微提高具有几种不同IN subquery表达式的查询的性能. #14412 (Nikolai Kochetov). - 通过为每个消费者提供独立线程来提高 Kafka 引擎性能. 流引擎的单独线程池 (如 Kafka). #13939 (fastio).
构建/测试/打包改进
- 通过从
Functions中删除调试信息来降低调试构建中的二进制大小. 只有 Yandex 中使用非常旧的链接器的一个内部项目才需要这样做. #14549 (alexey-milovidov). - 准备使用 clang 11 进行构建. #14455 (alexey-milovidov).
- 修复反向移植脚本中的逻辑. 在以前的版本中, 任何 100% 红色的标签都会触发它. 这很奇怪. #14433 (alexey-milovidov).
- 集成测试使用默认的基本配置. 所有配置更改都是显式的, 例如 main_configs、user_configs 和字典参数. #13647 (Ilya Yatsishin).
ClickHouse 版本 20.8
ClickHouse 版本 v20.8.12.2-lts, 2021-01-16
Bug 修复
- 修复 *If 具有一元函数和 Nullable 类型的组合器. #18806 (Azat Khuzhin).
- 限制从宽部分合并到紧凑部分. 在垂直合并的情况下, 它会导致结果部分损坏. #18381 (Anton Popov).
ClickHouse 版本 v20.8.11.17-lts, 2020-12-25
Bug 修复
- 在合并期间禁用 AIO 写入, 因为它会导致合并期间主键列的数据损坏极为罕见. #18481 (alesapin).
- 修复了在使用类型为 Nullable(String) 的参数执行
toType(...)函数 (toDate、toUInt32等) 时出现的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 时, 日志没有正确轮换. #17905 (Alexander Kuzmenkov). - 使用
min_compress_block_size修复了 MergeTreeWriterSettings 中max_compress_block_size的错误初始化. #17833 (flynn). - 修复了 ClickHouse 无法恢复与 MySQL 服务器的连接时的问题. #17681 (Alexander Kazakov).
- 修复了在不同副本上杀死相应突变时的“ALTER”查询挂起. 这修复了 #16953. #17499 (alesapin).
- 修复了 ClickHouse 低估标记缓存大小时的错误. 当有很多带有标记的小文件时可能会发生. #17496 (alesapin).
- 修复了启用设置
optimize_redundant_functions_in_order_by的ORDER BY. #17471 (Anton Popov). - 修复了导致崩溃的
ColumnConst比较. 这个修复了 #17088. #17135 (Amos Bird). - 修复了非领导者 ReplicatedMergeTreeTables 的
ON CLUSTER查询可能永远挂起的错误. #17089 (alesapin). - 避免远程查询的不必要的网络错误, 这些错误在执行时可能会被取消, 例如使用
LIMIT的查询. #17006 (Azat Khuzhin). - 出现错误时解析
format_avro_schema_registry_url的IP. #16985 (filimonov). - 修复了在
ALTER TABLE ... MODIFY COLUMN ... NewType之后, 当SELECT在更改列上具有WHERE表达式并且更改尚未完成时可能出现的服务器崩溃. #16968 (Amos Bird). - 安装脚本应始终在 config 文件夹中创建子目录. 这仅与使用自定义配置的 Docker 构建相关. #16936 (filimonov).
- 修复了使用
ORDER BY的查询可能出现的错误Illegal type of argument。 修复 #16580. #16928 (Nikolai Kochetov). - 如果没有数据写入 WriteBufferFromS3,则中止分段上传. #16840 (Pavel Kovalenko).
- 修复了在不带任何参数的情况下使用
any时的崩溃问题. 这修复了 #16803. #16826 (Amos Bird). - 修复了多个列和元组上的
IN运算符, 启用了transform_null_in设置. 修复 #15310. #16722 (Anton Popov). - 修复了
optimize_read_in_order/optimize_aggregation_in_order的不一致行为, max_threads > 0 和 ORDER BY 中的表达式. #16637 (Azat Khuzhin). - 修复了查询包含
ARRAY JOIN时查询优化产生错误结果的问题. #17887 (sundyli). - 在异常的情况下查询完成得更快. 如果发生异常, 取消对远程副本的执行. #15578 (Azat Khuzhin).
ClickHouse 版本 v20.8.6.6-lts, 2020-11-13
Bug 修复
- 当查询分析器打开并且 ClickHouse 安装在操作系统上时, 修复罕见的无声崩溃, glibc 版本已经 (据说) 损坏了某些功能的异步展开表. 这修复了 #15301. 这修复了 #13098. #16846 (alexey-milovidov).
- 现在, 当从输入解析 AVRO 时, LowCardinality 将从类型中删除. 修复 #16188. #16521 (Mike).
- 通过适当缩小 GTID 集,修复使用 MySQL Master -> MySQL Slave -> ClickHouse MaterializeMySQL Engine 和 MySQL Slave 上启用的
slave_parallel_worker时元数据的快速增长. 这修复了 #15951. #16504 (TCeason). - 修复分布式的 DROP TABLE (使用 INSERT). #16409 (Azat Khuzhin).
- 修复了复制队列中非常大的条目的处理. 如果表结构非常大 (接近 1 MB), 则非常大的条目可能会出现在 ALTER 查询中. 这修复了 #16307. #16332 (alexey-milovidov).
- 修复了由于未创建过滤集而可能删除部分返回数据时的不一致行为. #16308 (Nikita Mikhaylov).
- 修复 MySQL 数据库的错误. 当用作数据库引擎的 MySQL 服务器关闭时, 某些查询会引发异常, 因为它们试图从禁用的服务器获取表, 而这是不必要的. 例如, 查询
SELECT ... FROM system.parts应该只适用于 MergeTree 表并且根本不要接触 MySQL 数据库. #16032 (Kruglov Pavel).
ClickHouse 版本 v20.8.5.45-lts, 2020-10-29
Bug 修复
- 在函数
dictGet出现异常时修复double free. 如果字典加载错误, 可能会发生这种情况. #16429 (Nikolai Kochetov). - 修复由总数/汇总/多维数据集修饰符和最小/最大功能按键分组. 修复 #16393. #16397 (Anton Popov).
- 修复异步分布式插入 w/prefer_localhost_replica=0 和 internal_replication. #16358 (Azat Khuzhin).
- 修复了在使用字符串键的
GROUP BY期间可能出现的内存泄漏, 这是由TwoLevelStringHashTable实现中的错误引起的. #16264 (Amos Bird). - 修复无论限制如何都可以过度分配内存的情况. 这将关闭 #14560. #16206 (alexey-milovidov).
- 修复
ReplicatedVersionedCollapsingMergeTree的ALTER MODIFY ... ORDER BY查询挂起。 这修复了 #15980. #16011 (alesapin). - 修复整理名称和字符集名称解析器并支持字符串类型的
length = 0. #16008 (Winter Zhang). - 允许对具有复杂键的字典使用直接布局. #16007 (Anton Popov).
- 在一段时间不活动后发生复制错误时, 防止副本挂起 5-10 分钟. #15987 (filimonov).
- 在插入或从 MaterializedView 中选择并同时删除目标表时修复罕见的段错误 (适用于原子数据库引擎). #15984 (tavplubix).
- 修复解析设置配置文件时的歧义:
CREATE USER ... SETTINGS profile readonly现在被视为使用名为readonly的配置文件, 而不是名为profile的具有只读约束的设置. 这修复了 #15628. #15982 (Vitaly Baranov). - 修复数据库创建失败时的崩溃. #15954 (Winter Zhang).
- 修复了当表被并发重命名 (对于原子数据库引擎) 时,
DROP TABLE IF EXISTS失败并带有Table ... does not exist错误的问题. 修复了并发执行具有多个表的某些 DDL 查询 (如DROP DATABASE和RENAME TABLE) 时罕见的死锁, 修复了并发执行DROP/DETACH TABLE时Table ... does not exist的DROP/DETACH DATABASE失败 `. #15934 (tavplubix). - 如果查询具有
WHERE、PREWHERE和GLOBAL IN, 则修复来自Distributed表的查询的错误空结果. 修复 #15792. #15933 (Nikolai Kochetov). - 修复 RBAC 中可能的死锁. #15875 (Vitaly Baranov).
- 修复在
ALTER MODIFY COLUMN查询之后执行的SELECT ... ORDER BY DESC查询中的异常Block structure mismatch. 修复 #15800. #15852 (alesapin). - 修复某些查询情况, 其中仅选择虚拟列. 以前可能会抛出
Not found column _nothing in block异常. 修复 #12298. #15756 (Anton Popov). - 修复错误
Cannot find column, 如果对MV的查询包含ARRAY JOIN, 则在插入MATERIALIZED VIEW时可能会发生该错误. #15717 (Nikolai Kochetov). - 修复了
max_replicated_logs_to_keep设置的默认值过低, 这可能导致副本过于频繁地丢失. 通过选择要克隆的最新副本来改进丢失的副本恢复过程. 也不要从丢失的复制品中取出旧零件, 而是将它们拆下. #15701 (tavplubix). - 修复错误
Cannot add simple transform to empty Pipe, 该错误在从与目标表结构不同的Buffer表中读取时发生. 如果目标表返回空的查询结果是可能的. 修复 #15529. #15662 (Nikolai Kochetov). - 修复了 S3 表函数中的 globs 错误, URL 中的区域未应用于 S3 客户端配置. #15646 (Vladimir Chebotarev).
- 分离只读表时递减
ReadonlyReplica指标. 这修复了 #15598. #15592 (sundyli). - 将单个参数传递给 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有关. #15645 (Nikolai Kochetov). - 修复了使用
JSON*函数时会导致VALUES、LIMIT或IN运算符右侧的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).
- Mutation 可能会在
MOVE或REPLACE PARTITION之后等待一些不存在的部分, 或者在极少数情况下, 在DETACH或DROP PARTITION之后挂起. 已修复. #15537 (tavplubix). - 修复如果执行具有相同模式的
ILIKE, 则ILIKE运算符不再区分大小写的错误. #15536 (alesapin). - 在选择数据中不存在但依赖于数据中也不存在的其他列时修复
Missing columns错误. 修复 #15530. #15532 (alesapin). - 修复了 DDLWorker 中事件订阅的错误, 该错误很少会导致查询在“ON CLUSTER”中挂起. 引入 #13450. #15477 (alesapin).
- 当
boundingRatio聚合函数的第二个参数类型错误时报告正确的错误. #15407 (detailyang). - 修复合并树表重命名和背景清理过程中的竞争条件. #15304 (alesapin).
- 修复启用 system.logs 时服务器启动时罕见的竞争条件. #15300 (alesapin).
- 修复 QueryLog 中的 MSan 报告. 未初始化的内存可用于字段
memory_usage. #15258 (alexey-milovidov). - 修复将 joinGet 与 LowCardinality 类型一起使用时的实例崩溃. 这修复了 #15214. #15220 (Amos Bird).
- 修复表引擎
Buffer中的错误, 该错误不允许在ALTER查询后将新结构的数据插入到Buffer中. 修复 #15117. #15192 (alesapin). - 调整mysql列定义包中的decimals字段大小. #15152 (maqroll).
- 我们已经在 String 和 FixedString 之间使用了填充比较 (https://github.com/ClickHouse/ClickHouse/blob/master/src/Functions/FunctionsComparison.h#L333) . 此 PR 将相同的逻辑应用于字段比较, 以更正 FixedString 作为主键的使用. 这修复了 #14908. #15033 (Amos Bird).
- 如果使用专门设计的参数调用函数
bar, 则可能会发生缓冲区溢出. 这将关闭 #13926. #15028 (alexey-milovidov). - 修复了在 Mac OS 上的 docker 中运行 clickhouse-server 时, 在原子数据库中执行 DDL 查询时出现的
Cannot rename ... errno: 22, strerror: Invalid argument错误. #15024 (tavplubix). - 现在设置
number_of_free_entries_in_pool_to_execute_mutation和number_of_free_entries_in_pool_to_lower_max_size_of_merge可以等于background_pool_size. #14975 (alesapin). - 当子查询包含 finalizeAggregation 函数时, 修复使谓词下推工作. 修复 #14847. #14937 (filimonov).
- 在
system.asynchronous_metrics中发布每个逻辑核心的 CPU 频率. 这修复了 #14923. #14924 (Alexander Kuzmenkov). - 修复了使用
MaterializeMySQL数据库引擎时.metadata.tmp File exists的错误. #14898 (Winter Zhang). - Fix a problem where the server may get stuck on startup while talking to ZooKeeper, if the configuration files have to be fetched from ZK (using the
from_zkinclude option). This fixes #14814. #14843 (Alexander Kuzmenkov). - 修复了收缩的
Int -> Int签名类型转换的错误单调性检测. 可能会导致查询结果不正确. 此错误在 #14513 中公布. #14783 (Amos Bird). - 修复了
Nullable列不正确的排序顺序. 这修复了 #14344. #14495 (Nikita Mikhaylov).
改进
ClickHouse 版本 v20.8.3.18-stable, 2020-09-18
Bug 修复
- 修复部分调用
extractAllGroups函数可能触发“超出内存限制”错误的问题. 这修复了 #13383. #14889 (alexey-milovidov). - 修复 SIGSEGV 以尝试插入 StorageFile(fd). #14887 (Azat Khuzhin).
- 当被查询的列具有
DEFAULT表达式时, 修复SELECT查询中的罕见错误, 该表达式依赖于另一列, 该列也具有“DEFAULT”并且不存在于选择查询中且不存在于磁盘上. 部分修复 #14531. #14845 (alesapin). - 修复了执行
ALTER ... MODIFY QUERY时物化视图元数据中丢失的默认数据库名称. #14664 (tavplubix). - 修复了在赋值表达式和常量值 (如
UPDATE x = 42) 中使用 Nullable 列的ALTER UPDATE突变导致列或段错误中的值不正确时的错误. 修复 #13634, #14045. #14646 (alesapin). - 修复错误的十进制乘法结果导致结果列小数位数错误. #14603 (Artem Zuikov).
- 添加了检查器, 因为既不调用
lc->isNullable()也不调用ls->getDictionaryPtr()->isNullable()将返回正确的结果. #14591 (myrrc). - 在为 StorageReplicatedMergeTree 引擎创建查询期间 Zookeeper 异常后清理数据目录. #14563 (Bharat Nallan).
- 使用组合器 -Resample 修复函数中罕见的段错误, 这可能会出现在参数非常大的溢出结果中. #14562 (Anton Popov).
改进
- 如果有正在进行的 S3 请求, 则加快服务器关闭过程. #14858 (Pavel Kovalenko).
- 允许在分布式存储中使用多卷存储配置. #14839 (Pavel Kovalenko).
- 如果有正在进行的 S3 请求, 则加快服务器关闭过程. #14496 (Pavel Kovalenko).
- 支持紧凑部分的自定义编解码器. #12183 (Anton Popov).
ClickHouse 版本 v20.8.2.3-stable, 2020-09-08
向后不兼容变更
- 现在
OPTIMIZE FINAL查询不会重新计算在创建 TTL 之前添加的部件的 TTL. 使用ALTER TABLE ... MATERIALIZE TTL一次来计算它们, 之后OPTIMIZE FINAL将正确评估TTL. 此行为从未适用于复制表. #14220 (alesapin). - 扩展
parallel_distributed_insert_select设置, 添加一个选项以将INSERT运行到本地表中. 该设置将类型从Bool更改为UInt64, 因此不再支持值false和true. 如果服务器配置中有这些值, 服务器将不会启动. 请将它们分别替换为0和1. #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. #14049 (alesapin). - 支持 Kafka 中的 Kerberos 身份验证,使用
krb5和cyrus-sasl库. #12771 (Ilya Golshtein). - 添加函数
normalizeQuery, 用占位符替换文字、文字序列和复杂别名. 添加函数normalizedQueryHash, 为类似的查询返回相同的 64 位哈希值. 它有助于分析查询日志. 这将关闭 #11271. #13816 (alexey-milovidov). - 添加
time_zones表. #13880 (Bharat Nallan). - 添加函数
defaultValueOfTypeName, 返回给定类型的默认值. #13877 (hcz). - 添加
countDigits(x)函数, 用于计算整数或小数列中的小数位数. 添加isDecimalOverflow(d, [p])函数, 用于检查 Decimal 列中的值是否超出其 (或指定的) 精度. #14151 (Artem Zuikov). - 添加
quantileExactLow和quantileExactHigh实现, 并分别具有medianExactLow和medianExactHigh的别名. #13818 (Bharat Nallan). - 添加了将日期/时间值截断为指定日期/时间部分的
date_trunc函数. #13888 (Vladimir Golovchenko). - 将新的可选部分
<user_directories>添加到主配置. #13425 (Vitaly Baranov). - 添加允许更改表示例子句的
ALTER SAMPLE BY语句. #13280 (Amos Bird). - 函数
position现在支持可选的start_pos参数. #13237 (vdimir).
Bug 修复
- 修复客户端交互模式下进度条可见数据乱码问题. 这修复了 #12562 和 #13369 和 #13584 并修复了 #12964. #13691 (alexey-milovidov).
- 修复了按多列排序时如果
LowCardinality列不正确的排序顺序. 这修复了 #13958. #14223 (Nikita Mikhaylov). - 检查
topK聚合函数中的数组大小溢出. 如果没有此检查, 用户可能会发送带有精心设计的参数的查询, 这将导致服务器崩溃. 这将关闭 #14452. #14467 (alexey-milovidov). - 修复了如果表具有单个部分的分区可能导致错误合并分配的错误. #14444 (alesapin).
- 如果 PipelineExecutor 本身发生异常, 则停止查询执行. 这可以防止罕见的查询挂起. 续 #14334. #14402 #14334 (Nikolai Kochetov).
- 修复在创建为
AS table_function的表的ALTER查询期间崩溃. 修复 #14212. #14326 (alesapin). - 使用 REFRESH 命令修复 ALTER LIVE VIEW 查询期间的异常. 实时取景是一项实验性功能. #14320 (Bharat Nallan).
- 修复带有嵌套解释器的查询的 QueryPlan 生命周期 (对于 EXPLAIN PIPELINE graph=1). #14315 (Azat Khuzhin).
- 在从某些外部来源获取架构期间修复
lickhouse-odbc-bridge的段错误. PR 修复了. #14267 (Vitaly Baranov). - 修复 #12277 中引入的标记包含搜索崩溃. #14225 (Amos Bird).
- 使用命名元组修复表的创建. 这修复了 #13027. #14143 (alexey-milovidov).
- 修复最小负十进制数的格式. 这修复了 #14111. #14119 (Alexander Kuzmenkov).
- 修复
DistributedFilesToInsert指标 (不应该归零). #14095 (Azat Khuzhin). - 使用 const 2d 数组将
pointInPolygon修复为多边形. #14079 (Alexey Ilyukhov). - 修复了
Poco::Exception: no space left on device额外信息中错误的挂载点. #14050 (tavplubix). - 在非全局级别执行时修复 GRANT ALL 语句. #13987 (Vitaly Baranov).
- 修复解析器以拒绝使用引擎创建表作为表函数. #13940 (hcz).
- 如果启用了
optimize_duplicate_order_by_and_distinct设置, 则使用DISTINCT关键字修复选择查询和使用 UNION ALL 的子查询中的错误结果. #13925 (Artem Zuikov). - 修复了重命名
Distributed表时潜在的死锁. #13922 (tavplubix). - 修复按多列排序时
FixedString列的不正确排序. 修复 #13182. #13887 (Nikolai Kochetov). - 修复
topK/topKWeighted合并的潜在不精确结果 (使用非默认参数). #13817 (Azat Khuzhin). - 修复与 NULL 比较时, 从 MergeTree 表中读取 INDEX 类型为 SET 失败的问题. 这修复了#13686. #13793 (Amos Bird).
- 修复 lambda 中的
arrayJoin捕获 (LOGICAL_ERROR). #13792 (Azat Khuzhin). - 在函数
range中添加步骤溢出检查. #13790 (Azat Khuzhin). - 修复了并发执行
DROP DATABASE和CREATE TABLE时的Directory not empty错误. #13756 (alexey-milovidov). - 为
h3KRing函数添加范围检查. 这修复了#13633. #13752 (alexey-milovidov). - 修复 DETACH 和后台合并之间的竞争条件. 零件在分离后可能会复活. 这是 #8602 的延续, 它没有解决问题, 但引入了一个在极少数情况下开始失败的测试, 证明了这个问题. #13746 (alexey-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 和
set enable_optimize_predicate_expression=1修复 JOIN 中的崩溃. #13679 (Artem Zuikov). - 修复关于
number_of_free_entries_in_pool_to_lower_max_size_of_merge设置的值的错误消息中的错字. #13678 (alexey-milovidov). - 并发
ALTER ... REPLACE/MOVE PARTITION ...查询可能会导致死锁. 已修复. #13626 (tavplubix). - 修复了有时缓存字典从源返回默认值而不是当前值时的行为. #13624 (Nikita Mikhaylov).
- 修复紧凑部分中的二级索引损坏. 紧凑的部件是实验功能. #13538 (Anton Popov).
- 修复必须在单个副本上执行的查询的过早
ON CLUSTER超时. 修复 #6704, #7228, #13361, #11884. #13450 (alesapin). - 修复函数
netloc中的错误代码. 这修复了#13335. #13446 (alexey-milovidov). - 修复
StorageMemory中可能出现的竞争. #13416 (Nikolai Kochetov). - 修复 HTTP 协议中
TSV/CSVWithNames格式中缺失或过多的标头. 这修复了 #12504. #13343 (Azat Khuzhin). - 当数据库或表的名称包含点时, 修复从 users.xml 解析行策略. 这修复了#5779, #12527. #13199 (Vitaly Baranov).
- 在连接断开一次后修复对
redis字典的访问.cache和direct字典布局可能会发生这种情况. #13082 (Anton Popov). - 删除了使用 ClickHouseDictionarySource 查询远程表时错误的身份验证访问检查. #12756 (sundyli).
- 正确区分某些情况下的子查询, 用于公共子表达式的消除. #8333. #8367 (Amos Bird).
改进
- 在
ALIAS列类型上不允许使用CODEC. 修复 #13911. #14263 (Bharat 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'. 这对于将数据传送到新集群很有用. #14155 (Amos Bird). - 如果 Memory 表是由大量非常小的块构建的, 那么它的性能会稍好一些 (这不太可能). 这个想法的作者: Mark Papadakis. 关闭 #14043. #14056 (alexey-milovidov).
- 条件聚合函数 (例如:
avgIf、sumIf、maxIf) 在缺少行并使用可为空参数时应返回NULL. #13964 (Winter Zhang). - 将 -Resample 组合器中的限制增加到 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. #13868 (alexey-milovidov). - 修复
lgamma函数中的数据竞争. 这场比赛只在tsan中被抓到, 没有真正发生过副作用. #13842 (Nikolai Kochetov). - 当数组作为字段操作时, 避免太慢的查询. 改为抛出异常. #13753 (alexey-milovidov).
- 新增Redis requirepass授权 (针对redis字典源码). #13688 (Ivan Torgashov).
- 添加 MergeTree Write-Ahead-Log (WAL) 转储工具. WAL 是一个实验性功能. #13640 (BohuTANG).
- 在以前的版本中, 如果使用专门设计的参数调用,
lcm函数可能会在调试构建中产生断言冲突. 这修复了 #13368. #13510 (alexey-milovidov). - 在更多情况下为
toDate/toDateTime函数提供单调性. 单调性信息用于索引分析 (更复杂的查询将能够使用索引). 现在输入参数更自然地饱和并提供更好的单调性. #13497 (Amos Bird). - 支持自定义设置的复合标识符. 自定义设置是 ClickHouse 代码库与其他代码库的集成点 (对 ClickHouse 本身没有好处) #13496 (Vitaly Baranov).
- 将部分从 DiskLocal 并行移动到 DiskS3.
DiskS3是一个实验性功能. #13459 (Pavel Kovalenko). - 默认启用混合粒度部分. #13449 (alesapin).
- S3 重定向中正确的远程主机检查 (与安全相关的事情). #13404 (Vladimir Chebotarev).
- 将
QueryTimeMicroseconds、SelectQueryTimeMicroseconds和InsertQueryTimeMicroseconds添加到 system.events. #13336 (ianton-ru). - 修复 Decimal 具有太大负指数时的调试断言. 修复 #13188. #13228 (alexey-milovidov).
- 为 DiskS3 添加了缓存层 (缓存到本地磁盘标记和索引文件).
DiskS3是一个实验性功能. #13076 (Pavel Kovalenko). - 修复 readline 以便现在将历史记录转储到文件中. #13600 (Amos Bird).
- 默认使用
Atomic引擎创建system数据库 (准备在任何地方默认启用Atomic数据库引擎). #13680 (tavplubix).
性能改进
- 使用
LowCardinality稍微优化非常短的查询. #14129 (Anton Popov). - 当设置
max_insert_threads时, 为表引擎Null、Memory、Distributed和Buffer启用并行插入. #14120 (alexey-milovidov). - 如果在部件扫描时超过
max_rows_to_read限制, 则快速失败. 此更改背后的动机是, 如果明显已超过max_rows_to_read, 则跳过所有选定部分的范围扫描. 对于大量零件的查询, 这种变化非常明显. #13677 (Roman Khavronenko). - 通过 UInt8/UInt16 键略微提高聚合性能. #13099 (alexey-milovidov).
- 优化
has()、indexOf()和countEqual()函数, 用于Array(LowCardinality(T))和常量右参数. #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). - 为它们添加类型
Int128、Int256、UInt256和相关函数. 使用 Decimal256 扩展小数 (精度高达 76 位). 新类型在设置allow_experimental_bigint_types下. 它的工作非常缓慢和糟糕. 实施不完整. 请不要使用此功能. #13097 (Artem Zuikov).
构建/测试/打包改进
- 添加了
clickhouse install脚本, 如果你只有一个二进制文件, 这很有用. #13528 (alexey-milovidov). - 允许在没有配置的情况下运行
clickhouse二进制文件. #13515 (alexey-milovidov). - 使用
codespell启用检查代码中的拼写错误. #13513 #13511 (alexey-milovidov). - 在 CI 中启用 Shellcheck 作为 .sh 测试的 linter. 这将关闭 #13168. #13530 #13529 (alexey-milovidov).
- 添加 CMake 选项以失败配置而不是自动重新配置, 默认启用. #13687 (Konstantin).
- 通过 system.build_options 中的 TZDATA_VERSION 公开嵌入式 tzdata 的版本. #13648 (filimonov).
- 在构建期间改进 system.time_zones 表的生成. 关闭 #14209. #14215 (filimonov).
- 使用来自包存储库的最新 tzdata 构建 ClickHouse. #13623 (alexey-milovidov).
- 在skip_list.json中添加编写js样式注释的能力. #14159 (alesapin).
- 确保没有复制粘贴的 GPL 代码. #13514 (alexey-milovidov).
- 切换测试 docker 图像以使用基于测试的父级. #14167 (Ilya Yatsishin).
- 启动docker-compose集群时添加重试逻辑; 增加 COMPOSE_HTTP_TIMEOUT. #14112 (vzakaznikov).
- 在压力测试中启用
system.text_log以发现更多错误. #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).
- 修复 Mac OS 上的 cassandra 构建. #13708 (Ilya Yatsishin).
- 修复共享构建中的链接错误. #13700 (Amos Bird).
- 更新 LDAP 用户身份验证套件以检查它是否适用于 RBAC. #13656 (vzakaznikov).
- 删除了
contrib/aws的-DENABLE_CURL_CLIENT. #13628 (Vladimir Chebotarev). - 增加 ClickHouse 节点的运行状况检查超时, 并在发现不健康的容器时添加对转储 docker-compose 日志的支持. #13612 (vzakaznikov).
- 确保 #10977 无效. #13539 (Amos Bird).
- 从robot-clickhouse 跳过PR. #13489 (Nikita Mikhaylov).
- 将 Dockerfiles 从集成测试移动到
docker/test目录. docker_compose 文件在runnerdocker 容器中可用. Docker 镜像是在 CI 中构建的, 而不是在集成测试中. #13448 (Ilya Yatsishin).
ClickHouse 版本 20.7
ClickHouse 版本 v20.7.2.30-stable, 2020-08-31
向后不兼容变更
- 以至少一个浮点数作为参数的函数
modulo(运算符%)将直接计算浮点数的除法余数, 而不将两个参数都转换为整数. 它使行为与大多数 DBMS 兼容. 这也适用于 Date 和 DateTime 数据类型. 添加别名mod. 这将关闭 #7323. #12585 (alexey-milovidov). - 弃用零日期/日期时间值的特殊打印为
0000-00-00和0000-00-00 00:00:00. #12442 (alexey-milovidov). - 函数
groupArrayMoving*不适用于分布式查询. 它的结果是在不正确的数据类型中计算的 (没有升级到最大的类型).groupArrayMovingAvg函数返回的整数与avg函数不一致. 这修复了#12568. #12622 (alexey-milovidov). - 为 MergeTree 设置添加健全性检查. 如果设置不正确,服务器将拒绝启动或创建表, 并向用户打印详细说明. #13153 (alexey-milovidov).
- 防止用户可能将
background_pool_size设置为低于number_of_free_entries_in_pool_to_execute_mutation或number_of_free_entries_in_pool_to_lower_max_size_of_merge的值. 在这些情况下, ALTER 将不起作用或合并的最大大小将太有限. 它将抛出异常解释要做什么. 这将关闭 #10897. #12728 (alexey-milovidov). - 从20.5以上的版本升级时, 如果进行滚动更新, 集群同时包含20.5以上和20.5以下的版本, 如果旧版本的ClickHouse节点重启, 旧版本在新版本存在的情况下启动, 可能会导致
Part ... intersects previous part错误. 为防止出现此错误, 首先在所有集群节点上安装更新的 clickhouse-server 软件包, 然后重新启动 (因此, 当 clickhouse-server 重新启动时, 它将以新版本启动).
新特征
- 提供高效
reverse geocoding查找的多边形字典类型 - 在许多多边形的字典 (世界地图) 中通过坐标查找区域. 它使用精心优化的算法和递归网格来保持较低的 CPU 和内存使用率. #9278 (achulkov2). - 添加了对预配置用户的 LDAP 身份验证支持 (
Simple Bind方法). #11234 (Denis Glazachev). - 引入设置
alter_partition_verbose_result, 它为某些类型的ALTER TABLE ... PARTITION ...查询 (当前是ATTACH和FREEZE)输出有关触摸部分的信息. 关闭 #8076. #13017 (alesapin). - 为 bayesian-ab-testing 添加
bayesAB函数. #12327 (achimbab). - 添加了
system.crash_log表, 用于收集致命错误的堆栈跟踪. 这个表应该是空的. #12316 (alexey-milovidov). - 添加了 http 标头
X-ClickHouse-Database和X-ClickHouse-Format, 可用于设置默认数据库和输出格式. #12981 (hcz). - 将
minMap和maxMap函数支持添加到SimpleAggregateFunction. #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表设置, 则允许 Nullable 类型作为 MergeTree 表中的键. 关闭 #5319. #12433 (Amos Bird). - 与 COS 集成. #12386 (fastio).
- 添加
mapAdd和mapSubtract函数以添加/减去键映射值. #11735 (Ildus Kurbangaliev).
Bug 修复
- 修复必须在单个副本上执行的查询的过早
ON CLUSTER超时. 修复 #6704, #7228, #13361, #11884. #13450 (alesapin). - 修复 #12277 中引入的标记包含搜索崩溃. #14225 (Amos Bird).
- 使用缓存布局修复外部字典中的竞争条件, 这可能导致服务器崩溃. #12566 (alesapin).
- 修复客户端交互模式下进度条可见数据乱码问题. 这修复了 #12562 和 #13369 和 [#13584] (https://github.com/ClickHouse/ClickHouse/issues/13584) 并修复了 #12964. #13691 (alexey-milovidov).
- 修复了当使用 ORDER BY 多列时
LowCardinality列的不正确排序顺序. 这修复了 #13958. #14223 (Nikita Mikhaylov). - 删除了硬编码超时, 它错误地否决了缓存字典的
query_wait_timeout_milliseconds设置. #14105 (Nikita Mikhaylov). - 修复了
Poco::Exception: no space left on device额外信息中错误的挂载点. #14050 (tavplubix). - 在启用了
optimize_duplicate_order_by_and_distinct设置的情况下, 当子查询也具有DISTINCT时, 使用DISTINCT关键字修复选择查询的错误查询优化. #13925 (Artem Zuikov). - 修复了重命名
Distributed表时潜在的死锁. #13922 (tavplubix). - 修复使用 ORDER BY 多列时
FixedString列的不正确排序。 修复 #13182. #13887 (Nikolai Kochetov). - 修复
topK/topKWeighted聚合的潜在较低精度 (使用非默认参数). #13817 (Azat Khuzhin). - 修复从 MergeTree 表中读取 INDEX 类型为 SET 时与 NULL 相比失败的问题. 这修复了 #13686. #13793 (Amos Bird).
- 修复函数
range()中的步骤溢出. #13790 (Azat Khuzhin). - 修复了并发执行
DROP DATABASE和CREATE TABLE时的Directory not empty错误. #13756 (alexey-milovidov). - 为
h3KRing函数添加范围检查. 这修复了 #13633. #13752 (alexey-milovidov). - 修复 DETACH 和后台合并之间的竞争条件. 零件在分离后可能会复活. 这是 #8602 的延续, 它没有解决问题, 但引入了一个在极少数情况下开始失败的测试, 证明了这个问题. #13746 (alexey-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). - 修复了有时缓存字典从源返回默认值而不是当前值时的行为. #13624 (Nikita Mikhaylov).
- 修复紧凑部分中的二级索引损坏 (紧凑部分是一个实验性功能). #13538 (Anton Popov).
- 修复函数
netloc中的错误代码. 这修复了 #13335. #13446 (alexey-milovidov). - 当 unix 时间戳作为参数传递时, 修复
parseDateTimeBestEffort函数中的错误. 这修复了 #13362. #13441 (alexey-milovidov). - 修复无效的返回类型, 用于将元组与
NULL元素进行比较. 修复 #12461. #13420 (Nikolai Kochetov). - 修复错误优化导致
aggregate function any(x) is found inside another aggregate function in query错误SET optimize_move_functions_out_of_any = 1和any()内的别名. #13419 (Artem Zuikov). - 修复
storagmemory中可能存在的竞争问题. #13416 (Nikolai Kochetov). - 如果查询返回零行, 修复
Arrow和Parquet格式的空输出. 这样做是因为空输出对于这种格式无效. #13399 (hcz). - 在
ORDER BY子句中使用常量列和主键前缀修复选择查询. #13396 (Anton Popov). - 修复 clickhouse-local 的
PrettyCompactMonoBlock. 使用PrettyCompactMonoBlock修复极端/总数. 修复 #7746. #13394 (Azat Khuzhin). - 修复了 system.text_log 中的死锁. #12452 (alexey-milovidov). 它是 #12339 的一部分. 这修复了 [#12325]. #13386 (Nikita Mikhaylov).
- 修复了
File(TSVWithNames*)(标题被多次写入), 修复了clickhouse-local --format CSVWithNames*(缺少标题, 在[#12197](https://github.com/ClickHouse/ClickHouse/ 问题/12197)), 修复了零行 (缺少标题) 的clickhouse-local --format CSVWithNames*. #13343 (Azat Khuzhin). - 当函数
groupArrayMovingSum反序列化空状态时, 修复段错误. 修复 #13339. #13341 (alesapin). - 在
JOIN ON部分中的arrayJoin()函数上抛出错误. #13330 (Artem Zuikov). - 使用
join_use_nulls=1修复LEFT ASOF JOIN中的崩溃. #13291 (Artem Zuikov). - 在从延迟副本查询的情况下, 修复可能的错误
Totals having transform was already added to pipeline. #13290 (Nikolai Kochetov). - 如果用户将特制的参数传递给函数
h3ToChildren, 服务器可能会崩溃. 这修复了 #13275. #13277 (alexey-milovidov). - 修复了在具有 NaN 值的 Float 类型上调用的
uniqExact、topK、sumDistinct和类似聚合函数的潜在低性能和稍微不正确的结果. 它还在调试版本中触发断言. 这修复了 #12491. #13254 (alexey-milovidov). - 当主键包含具有单调函数的表达式并且查询包含与类型不同的常量的比较时, 修复 KeyCondition 中的断言. 这修复了#12465. #13251 (alexey-milovidov).
- 返回在函数 roundUpToPowerOfTwoOrZero() 中设置了 MSB 的数字的传递数字. 它可以防止数组大小溢出时的潜在错误. #13234 (Azat Khuzhin).
- 如果使用可为空的 constexpr 作为不是文字 NULL 的 cond, 则修复函数. 修复 #12463. #13226 (alexey-milovidov).
- 在数组元素为 Nullable 且数组下标也可为 Null 的情况下, 修复
arrayElement函数中的断言. 这修复了 #12172. #13224 (alexey-milovidov). - 使用常量参数修复 DateTime64 转换函数. #13205 (Azat Khuzhin).
- 当数据库或表的名称包含点时, 修复从 users.xml 解析行策略. 这修复了 #5779, #12527. #13199 (Vitaly Baranov).
- 在连接断开一次后修复对
redis字典的访问.cache和direct字典布局可能会发生这种情况. #13082 (Anton Popov). - 使用函数修复错误的索引分析. 从
MergeTree表中读取时, 可能会导致跳过某些数据部分. 修复 #13060. Fixes #12406. #13081 (Anton Popov). - 修复错误
Cannot convert column because it is constant but values of constants are different in source and result, 远程查询在查询范围内使用确定性函数, 但查询之间不具有确定性, 例如now()、now64()、randConstant(). 修复 #11327. #13075 (Nikolai Kochetov). - 修复了使用
ORDER BY元组和小LIMIT查询时可能发生的崩溃. 修复 #12623. #13009 (Nikolai Kochetov). - 修复带有
UNION和JOIN的查询的Block structure mismatch错误. 修复 #12602. #12989 (Nikolai Kochetov). - 更正了
merge_with_ttl_timeout逻辑, 当过期影响一个时间间隔内的多个分区时, 该逻辑无法正常工作. (作者 @excitoon). #12982 (Alexander Kazakov). - 修复从 DDL 查询创建的范围哈希字典的列重复. 这修复了#10605. #12857 (alesapin).
- 修复对从本地副本中选择的线程数的不必要限制. #12840 (Nikolai Kochetov).
- 修复了当
ALTER DELETE和ALTER MODIFY COLUMN查询作为单个突变同时执行时的罕见错误. 错误导致count.txt中的行数不正确,从而导致部分数据不正确. 此外, 修复了同时使用ALTER RENAME COLUMN和ALTER ADD COLUMN的小错误. #12760 (alesapin). - 使用
clickhouse字典源查询远程表时使用了错误的凭据. #12756 (sundyli). - 修复
CAST(Nullable(String), Enum()). #12745 (Azat Khuzhin). - 修复大元组的性能,这些元组在
IN部分被解释为函数. 当用户出于某种晦涩的原因编写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 使用 const 表达式修复布隆过滤器索引. #12659 (Winter Zhang).
- 当代理不可用时 (不仅如此) 修复 StorageKafka 中的 SIGSEGV. #12658 (Azat Khuzhin).
- 添加对带有
Array(UUID)参数的函数if的支持. 这修复了 #11066. #12648 (alexey-milovidov). - 如果用户存在, CREATE USER IF NOT EXISTS 现在不会抛出异常. 这修复了#12507. #12646 (Vitaly Baranov).
- 在意外情况下 (例如从 UInt64 列中减去时),在
ALTER ... UPDATE期间可以抛出异常There is no supertype.... 这修复了 #7306. This fixes #4165. #12633 (alexey-milovidov). - 修复使用外部排序的查询可能出现的
Pipeline stuck错误. 修复 #12617. #12618 (Nikolai Kochetov). - 修复
OPTIMIZE DEDUPLICATE的错误Output of TreeExecutor is not sorted. 修复 #11572. #12613 (Nikolai Kochetov). - 修复查询优化过程中函数
any结果的别名可能丢失的问题. #12593 (Anton Popov). - 在 DROP TABLE 上删除分布式表 (来自异步插入的块) 的数据. #12556 (Azat Khuzhin).
现在 ClickHouse 将在文件
checksums.txt不存在时重新计算部件的校验和. 自 #9827 以来已损坏. #12545 (alesapin). - 修复当
enable_mixed_granularity_parts=1时, 在ALTER DELETE查询后导致旧部件损坏的错误. 修复 #12536. #12543 (alesapin). - 修复实时视图表中可能导致数据重复的竞争条件. LIVE VIEW 是一项实验性功能. #12519 (vzakaznikov).
- 修复
AggregateFunction(avg, ...)值二进制格式的向后兼容性. 这修复了 #12342. #12486 (alexey-milovidov). - 当我们加入字典键的表达时, 修复 JOIN 与字典中的崩溃:
t JOIN dict ON expr(dict.id) = t.id. 在这种情况下禁用字典连接优化. #12458 (Artem Zuikov). - 当指定非常大的 LIMIT 或 OFFSET 时修复溢出. 这修复了 #10470. 这修复了 #11372. #12427 (alexey-milovidov).
- kafka: 修复 SIGSEGV 如果在批处理中间有错误消息. #12302 (Azat Khuzhin).
改进
- 在 ZooKeeper 中保留少量日志. 当有许多服务器/表/插入时, 避免在离线副本的情况下过度增长 ZooKeeper 节点. #13100 (alexey-milovidov).
- 现在, 如果在 ALTER 或突变期间发生错误, 则异常会转发给客户端. 关闭 #11329. #12666 (alesapin).
- 将
QueryTimeMicroseconds、SelectQueryTimeMicroseconds和InsertQueryTimeMicroseconds添加到system.events, 以及 system.metrics、processes、query_log 等. #13028 (ianton-ru). - 将
SelectedRows和SelectedBytes添加到system.events, 以及 system.metrics、processes、query_log 等. #12638 (ianton-ru). - 将
current_database信息添加到system.query_log. #12652 (Amos Bird). - 允许
TabSeparatedRaw作为输入格式. #12009 (hcz). - 现在
joinGet支持多键查找. #12418 (Amos Bird). - 允许
*Map聚合函数处理带有 NULL 的数组. 修复 #13157. #13225 (alexey-milovidov). - 避免解析 DateTime 值时溢出, 这将导致其时区中的 unix 时间戳为负 (例如, 莫斯科的
1970-01-01 00:00:00). 相反, 饱和为零. 这修复了 #3470. This fixes #4172. #12443 (alexey-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. #13229 (alexey-milovidov). - 修复
parseDateTimeBestEffort中的断言. 这修复了 #12649. #13227 (alexey-milovidov). - Processors/PipelineExecutor 中的小优化: 跳出循环, 因为这样做很有意义. #13058 (Mark Papadakis).
- 支持不带 TABLE 关键字的 TRUNCATE 表. #12653 (Winter Zhang).
- 修复默认情况下解释查询格式覆盖. 这修复了 #12541. #12541 (BohuTANG).
- 允许以更标准的方式设置 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. #12440 (alexey-milovidov). Log、TinyLog、StripeLog引擎中的回滚插入错误. 在以前的版本中, 插入错误会导致表状态不一致 (这按照文档工作,对于这些表引擎来说是正常的). 这修复了 #12402. #12426 (alexey-milovidov).- 为
Atomic数据库引擎实现RENAME DATABASE和RENAME 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数据库引擎的向后兼容性. 以前创建的“原子”数据库必须手动转换为新格式. 原子数据库是一个实验性功能. #12343 (tavplubix). - 将
AWSAuthV4Signer分离到不同的记录器中, 从日志消息中删除过多的AWSClient: AWSClient. #12320 (Vladimir Chebotarev). - 磁盘访问存储中更好的异常消息. #12625 (alesapin).
- 参数数目无效的函数
in的更好例外. #12529 (Anton Popov). - 修复有关自适应粒度的错误消息. #12624 (alesapin).
- 修复格式化后的设置解析. #12480 (Azat Khuzhin).
- 如果 MergeTree 表不包含 ORDER BY 或 PARTITION BY, 则可能会请求 ALTER 清除所有列, 而 ALTER 将卡住. 已修复 #7941. #12382 (alexey-milovidov).
- 避免在每次查询后从历史文件重新加载完成 (以避免历史与其他客户端会话重叠). #13086 (Azat Khuzhin).
性能改进
- 某些操作的内存使用量降低高达 2 倍. #12424 (alexey-milovidov).
- 针对匹配精确 PK 范围的查询优化 PK 查找. #12277 (Ivan Babrou).
- 使用
LowCardinality稍微优化非常短的查询. #14129 (Anton Popov). - 通过 UInt8/UInt16 键略微提高聚合性能. #13091 and #13055 (alexey-milovidov).
- 下推
LIMIT步骤查询计划 (在子查询内). #13016 (Nikolai Kochetov). - 并行主键查找和跳过部分的索引阶段, 如 #11564 中所述. #12589 (Ivan Babrou).
- 如果
set optimize_if_transform_strings_to_enum = 1, 则将函数if和transform的字符串类型参数转换为枚举. #12515 (Artem Zuikov). - 如果
set optimize_monotonous_functions_in_order_by=1, 则用ORDER BY中的参数替换单调函数. #12467 (Artem Zuikov). - 通过优化添加顺序, 如果
set optimize_redundant_functions_in_order_by = 1, 则用ORDER by x重写ORDER BY x, f(x). #12404 (Artem Zuikov). - 当子查询包含
WITH子句时允许下推谓词. 这修复了 #12293 #12663 (Winter Zhang). - 提高读取紧凑部件的性能. 紧凑型零件是一项实验性功能. #12492 (Anton Popov).
- 尝试在
DiskS3中实现流优化. DiskS3 是一项实验性功能. #12434 (Vladimir Chebotarev).
构建/测试/打包改进
- 使用
shellcheck进行 sh 测试 linting. #13200 #13207 (alexey-milovidov). - 在 GitHub 挂钩中添加为拉取请求设置标签的脚本. #13183 (alesapin).
- 删除一些递归子模块. 见 #13378. #13379 (alexey-milovidov).
- 确保所有子模块都来自正确的 URL. Continuation of #13379. This fixes #13378. #13397 (alexey-milovidov).
- 添加了对用户声明的设置的支持, 可以从内部查询访问. 当 ClickHouse 引擎用作另一个系统的组件时需要这样做. #13013 (Vitaly Baranov).
- 在 TestFlows 中添加了对 INSERT 权限的 RBAC 功能的测试. 正在测试 SELECT 的扩展表. 添加了匹配新表引擎测试的要求. #13340 (MyroTk).
- 修复压力测试中服务器重启时超时错误. #13321 (alesapin).
- 现在快速测试将等待服务器重试. #13284 (alesapin).
- 函数
materialize()(用于 ClickHouse 测试的函数) 将按预期为 NULL 工作 - 通过将其转换为非常量列. #13212 (alexey-milovidov). - 修复 AArch64 中的 libunwind 构建. 这修复了 #13204. #13208 (alexey-milovidov).
- 在 zkutil gtest 中进行更多重试以防止测试不稳定. #13165 (alexey-milovidov).
- 对 RBAC 测试流的小修正. #13152 (vzakaznikov).
- 修复
00960_live_view_watch_events_live.py测试. #13108 (vzakaznikov). - 改进文档部署脚本中的缓存清除. #13107 (alesapin).
- 重写了一些孤立的测试到gtest. 从测试中移除无用的内容. #13073 (Nikita Mikhaylov).
- 在 TestFlows 中添加了对
SELECT权限的 RBAC 功能的测试. #13061 (Ritaank Tiwari). - 在快速测试检查中重新运行一些测试. #12992 (alesapin).
- 修复
rdkafka库中的 MSan 错误. 这将关闭 #12990. 将rdkafka更新到 1.5 版 (主). #12991 (alexey-milovidov). - 如果在带有 AVX-512 的服务器上运行测试, 则修复 base64 中的 UBSan 报告. 这修复了 #12318. 作者: @qoega. #12441 (alexey-milovidov).
- 修复 HDFS 库中的 UBSan 报告. 这将关闭 #12330. #12453 (alexey-milovidov).
- 检查我们能够将备份从旧版本恢复到新版本的能力. 这将关闭 #8979. #12959 (alesapin).
- 不要在集成测试中构建 helper_container 图像. 在 CI 中构建 docker 容器并在集成测试中使用预构建的 helper_container. #12953 (Ilya Yatsishin).
- 为主键列添加对
ALTER TABLE CLEAR COLUMN查询的测试. #12951 (alesapin). - 测试流测试中的超时时间增加. #12949 (vzakaznikov).
- 修复 Mac OS X 下的测试构建. 这将关闭 #12767. #12772 (alexey-milovidov).
- 连接器-ODBC 更新为 mysql-connector-odbc-8.0.21. #12739 (Ilya Yatsishin).
- 在 TestFlows 中添加 RBAC 语法测试. #12642 (vzakaznikov).
- 提高 TestKeeper 的性能. 这将加速大量使用复制表的测试. #12505 (alexey-milovidov).
- 现在我们检查服务器是否能够在压力测试运行后启动. 这修复了 #12473. #12496 (alesapin).
- 将 fmtlib 更新到 master (7.0.1). #12446 (alexey-milovidov).
- 添加 docker 镜像以进行快速测试. #12294 (alesapin).
- 集成测试的返工配置路径. #12285 (Ilya Yatsishin).
- 添加编译器选项以控制堆栈帧不会太大. 这将有助于在具有小堆栈大小的纤程中运行代码. #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 重新启动时, 它将以新版本启动).
新特征
- 添加了
EXPLAIN查询的初始实现. 语法:EXPLAIN SELECT .... 这修复了 #1118. #11873 (Nikolai Kochetov). - 添加了存储
RabbitMQ. #11069 (Kseniia Sumarokova). - 为 #11710 实现了类似 PostgreSQL 的
ILIKE操作符. #12125 (Mike). - 支持 RIGHT 和 FULL JOIN 与
SET join_algorithm = 'partial_merge'. 只允许 ALL 严格 (ANY、SEMI、ANTI、ASOF 不是). #12118 (Artem Zuikov). - 添加了一个函数
initializeAggregation以初始化基于单个值的聚合. #12109 (Guillaume Tassery). - 支持
ALTER TABLE ... [ADD|MODIFY] COLUMN ... FIRST#4006. #12073 (Winter Zhang). - 添加了函数
parseDateTimeBestEffortUS. #12028 (flynn). - 支持输出格式
ORC(仅支持输入). #11662 (Kruglov Pavel).
Bug 修复
- 修复了
aggregate function any(x) is found inside another aggregate function in query错误, 其中包含SET optimize_move_functions_out_of_any = 1和any()中的别名. #13419 (Artem Zuikov). - 修复了 clickhouse-local 的
PrettyCompactMonoBlock. 使用PrettyCompactMonoBlock修复了极端/总数. 这修复了 #7746. #13394 (Azat Khuzhin). - 修复了在从延迟副本查询的情况下可能出现的错误
Totals having transform was already added to pipeline. #13290 (Nikolai Kochetov). - 如果用户将特制的参数传递给函数
h3ToChildren, 服务器可能会崩溃. 这修复了 #13275. #13277 (alexey-milovidov). - 修复了在具有 NaN 值的 Float 类型上调用的
uniqExact、topK、sumDistinct和类似聚合函数的潜在低性能和稍微不正确的结果. 它还在调试版本中触发断言. 这修复了 #12491. #13254 (alexey-milovidov). - 修复了如果以nullable constexpr为cond, 则不是字面量 NULL 问题. 修复 #12463. #13226 (alexey-milovidov).
- 在数组元素为 Nullable 且数组下标也可为 Null 的情况下, 修复了
arrayElement函数中的断言. 这修复了 #12172. #13224 (alexey-milovidov). - 修复了带有常量参数的
DateTime64转换函数. #13205 (Azat Khuzhin). - 用函数修正了错误的索引分析. 在从
MergeTree表中读取时, 它可能会导致修剪错误的部分. 修复 #13060. Fixes #12406. #13081 (Anton Popov). - 修复了错误
Cannot convert column because it is constant but values of constants are different in source and result, 远程查询在查询范围内使用确定性函数, 但查询之间不具有确定性, 例如now()、now64()、randConstant(). 修复 #11327. #13075 (Nikolai Kochetov). - 修复了对从本地副本进行选择的线程数的不必要限制. #12840 (Nikolai Kochetov).
- 修复了当
ALTER DELETE和ALTER MODIFY COLUMN查询作为单个突变同时执行时的罕见错误. 错误导致count.txt中的行数不正确, 从而导致部分数据不正确. 另外, 修复了一个同时使用ALTER RENAME COLUMN和ALTER ADD COLUMN的小错误. #12760 (alesapin). - 修复了
CAST(Nullable(String), Enum()). #12745 (Azat Khuzhin). - 修复了大元组的性能, 这些元组在
IN部分被解释为函数. 当用户出于某种晦涩的原因编写WHERE x IN tuple(1, 2, ...)而不是WHERE x IN (1, 2, ...)的情况. #12700 (Anton Popov). - 修复了
input_format_parallel_parsing的内存跟踪 (通过将线程附加到组). #12672 (Azat Khuzhin). - 使用 const 表达式修复了布隆过滤器索引. 这修复了 #10572. #12659 (Winter Zhang).
- 修复了当 Broker 不可用时 (不仅如此) 在
StorageKafka中的SIGSEGV. #12658 (Azat Khuzhin). - 添加了对带有
Array(UUID)参数的函数if的支持. 这修复了 #11066. #12648 (alexey-milovidov). - 如果用户存在,
CREATE USER IF NOT EXISTS现在不会抛出异常. 这修复了 #12507. #12646 (Vitaly Baranov). - 磁盘访问存储中更好的异常消息. #12625 (alesapin).
- 函数
groupArrayMoving*不适用于分布式查询. 它的结果是在不正确的数据类型中计算的 (没有升级到最大的类型).groupArrayMovingAvg函数返回的整数与avg函数不一致. 这修复了 #12568. #12622 (alexey-milovidov). - 修复了函数
any缺少别名的问题. #12593 (Anton Popov). - 修复了带有缓存布局的外部字典中的竞争条件, 这可能导致服务器崩溃. #12566 (alesapin).
- 在 DROP TABLE 上删除分布式表 (来自异步插入的块) 的数据. #12556 (Azat Khuzhin).
- 修复了当
enable_mixed_granularity_parts=1时, 在ALTER DELETE查询后导致旧部件损坏的错误. 修复 #12536. #12543 (alesapin). - 参数数目无效的函数
in的更好例外. #12529 (Anton Popov). - 修复实时视图表中可能导致数据重复的竞争条件. #12519 (vzakaznikov).
- 修正了从合并部分读取时的性能问题. #12492 (Anton Popov).
- 修复了
AggregateFunction(avg, ...)值的二进制格式的向后兼容性. 这修复了 #12342. #12486 (alexey-milovidov). - 固定设置解析格式后. #12480 (Azat Khuzhin).
- 修复了启用
text_log时的死锁. #12452 (alexey-milovidov). - 修复了指定非常大的
LIMIT或OFFSET时的溢出. 这修复了 #10470. This fixes #11372. #12427 (alexey-milovidov). - 如果
StorageMerge, 则修复了可能的段错误. 这修复了 #12054. #12401 (tavplubix). - 恢复在 #11079 中引入的更改以解决 #12098. #12397 (Mike).
- 额外检查布隆过滤器索引的参数. 这修复了 #11408. #12388 (alexey-milovidov).
- 在索引表的 WHERE 条件中使用负数或浮点常量时避免异常. 这修复了 #11905. #12384 (alexey-milovidov).
- 在索引表的 WHERE 条件中使用负数或浮点常量时避免异常. 这修复了 #12333. #12378 (alexey-milovidov).
- 修复带有
-State和Nullable参数的聚合函数的TOTALS/ROLLUP/CUBE. 这修复了 #12163. #12376 (alexey-milovidov). - 修复了在不允许使用
RENAME时,ALTER RENAME COLUMN查询的错误消息和退出代码. 修复 #12301 和 #12303. #12335 (alesapin). - 修复了
ReplicatedMergeTree Queue中非常罕见的竞争条件. #12315 (alexey-milovidov). - 当使用具有非固定宽度类型的编解码器
Delta或DoubleDelta时, 返回代码为LOGICAL_ERROR的异常而不是代码为BAD_ARGUMENTS的异常 (我们确保代码逻辑错误的异常永远不会发生). 这修复了 #12110. #12308 (alexey-milovidov). - 修复了
WITH FILL修饰符中列的顺序. 以前不遵守ORDER BY语句的列顺序. #12306 (Anton Popov). - 当存在按虚拟列 (如
Merge表中的_table) 或系统表中的 "index" 列过滤数据 (例如从system.tables查询时按数据库名称过滤) 时, 避免bad cast异常, 并且这个表达式返回Nullable` 类型. 这修复了 #12166. #12305 (alexey-milovidov). - 修复了重命名列后的
TTL, 它依赖于 TTL 表达式. #12304 (Anton Popov). - 修复了 SIGSEGV 如果在
Kafka引擎中批处理中间有错误消息. #12302 (Azat Khuzhin). - 修复了
DNS缓存更新过程中某些线程可能会随机挂起几秒钟的情况. #12296 (tavplubix). - 修复了设置名称中的错字. #12292 (alexey-milovidov).
TrieDictionary加载失败后显示错误. #12290 (Vitaly Baranov).- 对于可能导致崩溃的空数组, 函数
arrayFill工作不正确. 这修复了 #12263. #12279 (alexey-milovidov). - 实现到
LowCardinality类型的公共类型的转换. 这允许对具有 LowCardinality 列和其他列的表执行 UNION ALL. 这修复了 #8212. 这修复了 #4342. #12275 (alexey-milovidov). - 修复了在对
S3存储的请求中达到重定向限制的行为. #12256 (ianton-ru). - 修复了在某些特殊类型的
StorageFile标头中多次连续插入期间多次写入时的行为. 这个修复了 #6155. #12197 (Nikita Mikhaylov). - 修复了 UInt8 值不等于 0 或 1 时的逻辑函数. #12196 (Alexander Kazakov).
- 上限 max_memory_usage* 限制为进程驻留内存. #12182 (Azat Khuzhin).
- 在
GROUP BY内射函数消除期间修复 dictGet 参数检查. #12179 (Azat Khuzhin). - 修复了当
SummingMergeTree引擎从分区键中汇总列时的行为. 在列的显式定义与分区键列相交的情况下添加了一个例外. 这修复了 #7867. #12173 (Nikita Mikhaylov). - 如果 ODBC 连接不支持架构, 则不要将字典源的表名拆分为架构和表名本身. #12165 (Vitaly Baranov).
- 修复了
ALTER DELETE中的错误逻辑, 当条件评估为 NULL 时会导致删除记录. 这修复了 #9088. This closes #12106. #12153 (alexey-milovidov). - 修复了在存在别名的情况下发送到外部 DBMS (例如 MySQL、ODBC) 的查询转换. 这修复了#12032. #12151 (alexey-milovidov).
- 修复了冗余 ORDER BY 优化中的错误代码. 该错误是在 #10067 中引入的. #12148 (alexey-milovidov).
- 修复了整数除法中的潜在溢出. 这修复了 #12119. #12140 (alexey-milovidov).
- 修复了
greatCircleDistance、geoDistance中潜在的无限循环. 这修复了 #12117. #12137 (alexey-milovidov). - 规范化
pid文件处理. 在以前的版本中, 如果服务器在没有正确关闭的情况下被杀死, 并且有另一个进程与以前运行的服务器具有相同的 pid, 则服务器可能会拒绝启动. 即使有另一台服务器正在运行, pid 文件也可能在服务器启动失败时被删除. 这修复了 #3501. #12133 (alexey-milovidov). - 修复了导致 ZooKeepeer 中 ReplicatedVersionedCollapsingMergeTree 表的表元数据不正确的错误. 修复 #12093. #12121 (alesapin).
- 对于具有连接或附加到系统日志 (system.query_log、metric_log 等) 或 engine=Buffer 基础表的子查询的物化视图, 避免
There is no query异常. #12120 (filimonov). - 修复了对字典的 ENGINE=Dictionary 表的处理依赖性. 这修复了 #10994. 这修复了 #10397. #12116 (Vitaly Baranov).
- 格式
Parquet现在可以正确地与LowCardinality和LowCardinality(Nullable)类型一起使用. 修复 #12086, #8406. #12108 (Nikolai Kochetov). - 修复了由于线程总数限制错误导致的带有
UNION的选择的性能. 修复 #12030. #12103 (Nikolai Kochetov). - 使用
-StateResample组合器修复了段错误. #12092 (Anton Popov). - 修复了
system.quey_log中选择的空result_rows和result_bytes指标. 修复 #11595. #12089 (Nikolai Kochetov). - 修复了不必要的限制从
VIEW中选择的线程数. 修复 #11937. #12085 (Nikolai Kochetov). - 修复了 DROP TABLE 上 StorageKafka 中的 SIGSEGV. #12075 (Azat Khuzhin).
- 修复了对
PREWHERE使用错误类型时可能发生的崩溃。 修复 #12053, #12060. #12060 (Nikolai Kochetov). - 修复了带有
Tuple(LowCardinality)参数的高阶函数的错误Cannot capture column. 修复 #9766. #12055 (Nikolai Kochetov). - 固定约束检查约束是否为常量表达式. 这修复了 #11360. #12042 (alexey-milovidov).
- 修复了在调用具有不同大小的
FixedString类型参数的函数if时出现错误结果和潜在崩溃的问题. 这修复了 #11362. #12021 (alexey-milovidov).
改进
- 允许以更标准的方式设置
JOIN种类和类型:LEFT SEMI JOIN而不是SEMI LEFT JOIN. 目前两者都是正确的. #12520 (Artem Zuikov). - 缓冲区引擎的lifetime_rows/lifetime_bytes. #12421 (Azat Khuzhin).
- 将详细异常消息写入客户端而不是
MySQL server has gone away. #12383 (BohuTANG). - 允许更改用于打印网格边框的字符集. 可用的字符集如下: UTF-8、ASCII. 设置
output_format_pretty_grid_charset启用此功能. #12372 (Sabyanin Maxim). - 1.支持 MySQL 'SELECT DATABASE()' #9336. 2. 添加 MySQL 替换查询集成测试. #12314 (BohuTANG).
- 为 MySQL 客户端/驱动程序添加
KILL QUERY [connection_id]以取消长查询, 问题 #12038. #12152 (BohuTANG). - 在
formatDateTime函数中添加了对%g(两位 ISO 年份) 和%G(四位 ISO 年份) 替换的支持. #12136 (vivarum). - 在 system.disks 中添加了
type列. #12115 (ianton-ru). - 改进的
REVOKE命令: 现在它只需要授予/管理选项才能被撤销. 例如, 现在要执行REVOKE ALL ON *.* FROM user1, 不需要通过授予选项授予完全访问权限. 添加命令REVOKE ALL FROM user1- 它从user1撤销所有授予的角色. #12083 (Vitaly Baranov). - 为 load_balancing 添加了副本优先级 (用于手动确定负载平衡的优先级). #11995 (Azat Khuzhin).
- 将 S3 元数据中的路径切换为相对路径, 以便更轻松地处理 S3 blob. #11892 (Vladimir Chebotarev).
性能改进
- 通过排序键的前缀改进了
ORDER BY和GROUP BY的性能 (使用optimize_aggregation_in_order设置启用, 默认禁用). #11696 (Anton Popov). - 如果
set optimize_injective_functions_inside_uniq=1, 则删除uniq*()内的单射函数. #12337 (Ruslan Kamalov). - 索引不用于带文字的 IN 运算符, 在 v19.3 前后引入了性能回归. 这修复了#10574. #12062 (nvartolomei).
- 为 DiskS3 (实验功能) 实现单部分上传. #12026 (Vladimir Chebotarev).
实验功能
- 在
MergeTree-family 表中添加了新的部件内存格式, 将数据存储在内存中. 第一次合并时将部分写入磁盘. 如果零件的行或字节大小低于阈值min_rows_for_compact_part和min_bytes_for_compact_part, 将以内存格式创建. 还提供了对 Write-Ahead-Log 的可选支持, 默认情况下启用并通过设置in_memory_parts_enable_wal来控制. #10697 (Anton Popov).
构建/测试/打包改进
- 为 clickhouse-client 实现基于 AST 的查询模糊测试模式. 请参阅 this label 了解我们最近通过模糊测试发现的问题列表. 其中大部分是由这个工具发现的, 还有一些是由 SQLancer 和
00746_sql_fuzzy.pl发现的. #12111 (Alexander Kuzmenkov). - 添加基于 Testflows 框架的新型测试. #12090 (vzakaznikov).
- 添加了 S3 HTTPS 集成测试. #12412 (Pavel Kovalenko).
- 从单独的线程记录清除陷阱消息. 这将防止线程消毒剂下可能出现的死锁. #12313 (alexey-milovidov).
- 现在功能和压力测试将能够使用旧版本的
clickhouse-test脚本运行. #12287 (alesapin). - 在
orc构建期间删除奇怪的文件创建. #12258 (Nikita Mikhaylov). - 将常见的 docker compose 文件放置到集成 docker 容器中. #12168 (Ilya Yatsishin).
- 修复来自 CodeQL 的警告.
CodeQL是另一个静态分析器, 我们将与我们已经使用的clang-tidy和PVS-Studio一起使用. #12138 (alexey-milovidov). - UNBUNDLED 构建的小 CMake 修复. #12131 (Matwey V. Kornilov).
- 添加了一个不使用任何 Linux 发行版的最小 Docker 镜像的展示. #12126 (alexey-milovidov).
- 在
clickhouse-serverdocker 镜像中执行系统包的升级. #12124 (Ivan Blinkov). - 将
UNBUNDLED标志添加到system.build_options表. 将clickhouse-test的跳过列表移动到 clickhouse repo. #12107 (alesapin). - 通过 Anchore Container Analysis 安全分析工具定期检查, 该工具会在
clickhouse-serverDocker 镜像中查找 CVE. 还确认Dockerfile是可构建的. 每天在master和Dockerfile的拉取请求上运行. #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
Bug 修复
- 用函数修正了错误的索引分析. 在从
MergeTree表中读取时, 它可能会导致修剪错误的部分. 修复 #13060. Fixes #12406. #13081 (Anton Popov). - 修复了对从本地副本进行选择的线程数的不必要限制. #12840 (Nikolai Kochetov).
- 修复了大元组的性能, 这些元组在
IN部分被解释为函数. 当用户出于某种晦涩的原因编写WHERE x IN tuple(1, 2, ...)而不是WHERE x IN (1, 2, ...)的情况. #12700 (Anton Popov). - 修复了 input_format_parallel_parsing 的内存跟踪 (通过将线程附加到组). #12672 (Azat Khuzhin).
- 使用 const 表达式修复了布隆过滤器索引. 这修复了 #10572. #12659 (Winter Zhang).
- 修复了当 Broker 不可用时 (不仅如此) 在
StorageKafka中的SIGSEGV. #12658 (Azat Khuzhin). - 添加了对带有
Array(UUID)参数的函数if的支持. 这修复了 #11066. #12648 (alexey-milovidov). - 修复了函数
any缺少别名的问题. #12593 (Anton Popov). - 修复了带有缓存布局的外部字典中的竞争条件, 这可能导致服务器崩溃. #12566 (alesapin).
- 在 DROP TABLE 上删除分布式表 (来自异步插入的块) 的数据. #12556 (Azat Khuzhin).
- 修复了当
enable_mixed_granularity_parts=1时, 在ALTER DELETE查询后导致旧部件损坏的错误. 修复 #12536. #12543 (alesapin). - 参数数目无效的函数
in的更好例外. #12529 (Anton Popov). - 修复了实时视图表中可能导致数据重复的竞争条件. #12519 (vzakaznikov).
- 修正了从合并部分读取时的性能问题. #12492 (Anton Popov).
- 修复了
AggregateFunction(avg, ...)值的二进制格式的向后兼容性. 这修复了 #12342. #12486 (alexey-milovidov). - 修复了启用
text_log时的死锁. #12452 (alexey-milovidov). - 修复了当指定非常大的限制或偏移量时的溢出问题. 这修复了 #10470. This fixes #11372. #12427 (alexey-milovidov).
- 修复了 StorageMerge 时可能出现的段错误. 关闭 #12054. #12401 (tavplubix).
- 还原 #11079 中引入的更改以解决 #12098. #12397 (Mike).
- 在索引表的 WHERE 条件中使用负数或浮点常量时避免异常. 这修复了 #11905. #12384 (alexey-milovidov).
- 即使存在依赖的 DEFAULT 表达式,也允许 CLEAR 列. 这修复了 #12333. #12378 (alexey-milovidov).
- 修复了带有
-State和Nullable参数的聚合函数的 TOTALS/ROLLUP/CUBE. 这修复了 #12163. #12376 (alexey-milovidov). - 修复了 SIGSEGV 如果在
Kafka引擎中批处理中间有错误消息. #12302 (Azat Khuzhin). - 修复了当
SummingMergeTree引擎从分区键中汇总列时的行为. 在列的显式定义与分区键列相交的情况下添加了一个例外. 这修复了 #7867. #12173 (Nikita Mikhaylov). - 修复了在存在别名的情况下发送到外部 DBMS (例如 MySQL、ODBC) 的查询转换. 这修复了 #12032. #12151 (alexey-milovidov).
- 修复了导致 ZooKeepeer 中 ReplicatedVersionedCollapsingMergeTree 表的表元数据不正确的错误. 修复 #12093. #12121 (alesapin).
- 修复了从
VIEW中选择的不必要的线程数限制. 修复 #11937. #12085 (Nikolai Kochetov). - 使用
join_algorithm=partial_merge修复了具有 LowCardinality 类型的 JOIN 崩溃. #12035 (Artem Zuikov). - 修复了条件为 NULL 的
if()的错误结果. #11807 (Artem Zuikov).
性能改进
- 索引不用于带文字的 IN 运算符, 在 v19.3 前后引入了性能回归. 这修复了 #10574. #12062 (nvartolomei).
构建/测试/打包改进
- 在 Dockerfile 中的第一个
apt-get update之前安装ca-certificates. #12095 (Ivan Blinkov).
ClickHouse 版本 v20.5.2.7-stable 2020-07-02
向后不兼容变更
- 从 COUNT(DISTINCT) 和
uniq聚合函数系列返回不可为空的结果. 如果所有传递的值都是 NULL, 则返回零. 这提高了 SQL 兼容性. #11661 (alexey-milovidov). - 添加了对在错误位置指定用户级设置的情况的检查. 用户级设置应该在
<profile>部分内的users.xml中为特定用户配置文件指定 (或在<default>中指定默认设置). 服务器不会以日志中的异常消息启动. 这修复了 #9051. 如果您想跳过检查, 您可以将设置移动到适当的位置或将<skip_check_for_incorrect_settings>1</skip_check_for_incorrect_settings>添加到 config.xml. #11449 (alexey-milovidov). - 默认情况下启用设置
input_format_with_names_use_header. 它会影响对输入格式-WithNames和-WithNamesAndTypes的解析. #10937 (alexey-milovidov). - 删除
experimental_use_processors设置. 它默认启用. #10924 (Nikolai Kochetov). - 将
zstd更新到 1.4.4. 它在性能和压缩比方面有一些小的改进. 如果您使用不同版本的 ClickHouse 运行副本, 您可能会看到合理的错误消息Data after merge is not byte-identical to data on another replicas.并附有说明. 这些消息没问题, 您不必担心. 此更改向后兼容, 但我们将其列在更改日志中, 以防您对这些消息感到疑惑. #10663 (alexey-milovidov). - 添加了对无意义编解码器的检查和设置
allow_suspicious_codecs来控制此检查. 这将关闭 #4966. #10645 (alexey-milovidov). - 一些 Kafka 设置更改了它们的默认值. 见 #11388.
- 从20.5以上的版本升级时, 如果进行滚动更新, 集群同时包含20.5以上和20.5以下的版本, 如果旧版本的ClickHouse节点重新启动, 旧版本在新版本存在的情况下启动, 可能会导致
Part ... intersects previous part错误. 为防止出现此错误, 首先在所有集群节点上安装更新的 clickhouse-server 软件包, 然后重新启动 (因此, 当 clickhouse-server 重新启动时, 它将以新版本启动).
新特征
TTL DELETE WHERE和TTL 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 表函数 #10554 (ageraab). #10901 (tavplubix).
- 添加基于 Linux
perf_events的查询性能指标 (这些指标是使用硬件 CPU 计数器和 OS 计数器计算的). 它是可选的, 需要在 clickhouse 二进制文件上设置CAP_SYS_ADMIN. #9545 Andrey Skobtsov. #11226 (Alexander Kuzmenkov). - 现在支持
CREATE查询中数据类型的NULL和NOT NULL修饰符. #11057 (Павел Потемкин). - 添加
ArrowStream输入输出格式. #11088 (hcz). - 支持 Cassandra 作为外部字典源. #4978 (favstovol).
- 添加了一个新的布局
direct, 它直接从每个查询的源加载所有数据, 而不存储或缓存数据. #10622 (Artem Streltsov). - 向字典添加了新的
complex_key_direct布局, 在查询执行期间不会在本地存储任何内容. #10850 (Artem Streltsov). - 添加了对 MySQL 样式全局变量语法 (存根) 的支持. 这是 MySQL 协议兼容性所必需的. #11832 (alexey-milovidov).
- 使用
repl为clickhouse-client添加了语法高亮. #11422 (Tagir Kuskarov). - 添加了
mind Map和maxMap函数. #11603 (Ildus Kurbangaliev). - 添加记录来自
system.asynchronous_metrics的历史指标的system.asynchronous_metric_log表. #11588 (Alexander Kuzmenkov). - 添加函数
extractAllGroupsHorizontal(haystack, re)和extractAllGroupsVertical(haystack, re). #11554 (Vasily 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. #10866 (Andrei 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). - 将列
position添加到system.columns表, 将column_position添加到system.parts_columns表. 它包含从 1 开始的表中列的顺序位置.这将关闭 #7744. #11655 (alexey-milovidov). - ON CLUSTER 支持系统 {FLUSH DISTRIBUTED,STOP/START DISTRIBUTED SEND}. #11415 (Azat Khuzhin).
- 添加 system.distribution_queue 表. #11394 (Azat Khuzhin).
- 支持Kafka中的所有格式设置, 在表级别公开一些设置, 调整默认值以获得更好的性能. #11388 (filimonov).
- 添加
port函数 (从 URL 中提取端口). #11120 (Azat Khuzhin). - 现在
dictGet*函数接受表名. #11050 (Vitaly Baranov). - 当使用
-n参数时,clickhouse-format工具现在能够格式化多个查询. #10852 (Darío). - 可以为 DiskS3 配置代理解析器. #10744 (Pavel Kovalenko).
- 使
pointInPolygon与非常量多边形一起工作. PointInPolygon 现在可以将 Array(Array(Tuple(..., ...))) 作为第二个参数, 多边形和孔的数组. #10623 (Alexey Ilyukhov) #11421 (Alexey Ilyukhov). - 将
move_ttl_info添加到system.parts以提供对移动 TTL 功能的内省. #10591 (Vladimir Chebotarev). - 可以通过代理使用 S3. #10576 (Pavel Kovalenko).
- 为数据类型添加
NCHAR和NVARCHAR同义词. #11025 (alexey-milovidov). - 已解决 #7224: 将
FailedQuery、FailedSelectQuery和FailedInsertQuery指标添加到system.events表. #11151 (Nikita Orlov). - 向
system.asynchronous_metrics添加更多jemalloc统计信息, 并确保我们看到它们的最新值. #11748 (Alexander Kuzmenkov). - 允许指定默认 S3 凭据和自定义身份验证标头. #11134 (Grigory Pervakov).
- 添加了以各种精度将 DateTime64 导入/导出为 Int64 的新函数:
to-/fromUnixTimestamp64Milli/-Micro/-Nano. #10923 (Vasily Nemkov). - 允许为 MongoDB 字典指定
mongodb://URI. #10915 (Alexander Kuzmenkov). - 现在可以在没有附属 LIMIT 子句的情况下使用 OFFSET 关键字. #10802 (Guillaume Tassery).
- 添加了
system.licenses表. 此表包含位于contrib目录中的第三方库的许可证. 这将关闭 #2890. #10795 (alexey-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. #10887 (alesapin).
Bug 修复
- 修复十进制解析中的 UBSan 报告. 这修复了 #7540. #10512 (alexey-milovidov).
- 解析 DateTime64 时修复潜在的浮点异常. 这修复了 #11374. #11875 (alexey-milovidov).
- 修复在 prewhere 条件下使用
Nullable列导致的罕见崩溃. #11895 #11608 #11869 (Nikolai Kochetov). - 不允许在高阶函数中使用 arrayJoin. 它导致协议同步中断. 这将关闭 #3933. #11846 (alexey-milovidov).
- 修复 FixedString 与常量 String 比较的错误结果. 这修复了 #11393. 这个bug出现在20.4版本. #11828 (alexey-milovidov).
- 修复条件为 NULL 的
if的错误结果. #11807 (Artem Zuikov). - 修复使用过多线程进行查询. #11788 (Nikolai Kochetov).
- 修复了在
SELECT ... FROM merge_tree_table ...中使用WITH <scalar subquery> ...时的Scalar does not exist异常 #11621. #11767 (Amos Bird). - 修复像
SELECT *, xyz.*这样的查询的意外行为, 这些查询在预期错误时成功. #11753 (hexiaoting). - 现在, 在修改元数据期间, 复制的取数据将被取消. #11744 (alesapin).
- 在检查相等性之前解析存储在 zookeeper 中的元数据. #11739 (Azat Khuzhin).
- 修复了由 Values 输入格式中复杂文字的错误类型推导导致的 LOGICAL_ERROR. #11732 (tavplubix).
- 修复
ORDER BY ... WITH FILL在 const 列上. #11697 (Anton Popov). - 复 SYSTEM SYNC REPLICA 中非常罕见的竞争条件. 如果创建了复制表, 同时另一个客户端从单独的连接中对该表发出
SYSTEM SYNC REPLICA命令 (这不太可能, 因为另一个客户端应该知道该表已创建), 则有可能获得 nullptr 取消引用. #11691 (alexey-milovidov). - 与 XDBC 桥通信时传递适当的超时. 最近在检查桥接活性和接收元信息时没有遵守超时. #11690 (alexey-milovidov).
- 将
LIMIT n WITH TIES与包含别名的ORDER BY语句一起使用. #11689 (Anton Popov). - 修复带有并行
FINAL的选择的可能的Pipeline stuck. 修复 #11636. #11682 (Nikolai Kochetov). - 修复导致
system.mutations状态不正确的错误. 它可能表明整个突变已经完成, 但服务器在复制队列中仍有MUTATE_PART任务并尝试执行它们. 这修复了 #11611. #11681 (alesapin). - 修复 CREATE USER 查询中的语法 hilite. #11664 (alexey-milovidov).
- 添加对带有不区分大小写标志的正则表达式的支持. This fixes #11101 并修复 #11506. #11649 (alexey-milovidov).
- 如果设置了行级安全性, 则删除琐碎的计数查询优化. 在以前的版本中, 用户获取表中记录的总数而不是过滤。 这修复了 #11352. #11644 (alexey-milovidov).
- 修复字符串的布隆过滤器 (数据跳过索引). #11638 (Azat Khuzhin).
- 如果没有
-q选项, 数据库不会在启动时创建. #11604 (giordyb). - 修复错误
Block structure mismatch, 用于从“缓冲区”表中采样读取的查询. #11602 (Nikolai Kochetov). - 修复 clickhouse-client 错误的退出代码, 当
exception.code() % 256 == 0. #11601 (filimonov). - 修复 ReplicatedMergeTree 的不同副本的 CREATE/DROP 中的竞争条件. 如果表未从 ZooKeeper 中完全删除或未成功创建, 则继续工作. 这修复了 #11432. #11592 (alexey-milovidov).
- 修复服务器启动时有关
Mark cache size was lowered的日志消息中的小错误. 这将关闭 #11399. #11589 (alexey-milovidov). - 修复错误
Size of offsets does not match size of column, 用于查询中的PREWHERE column in (subquery)和ARRAY JOIN. #11580 (Nikolai Kochetov). - 修复了
SHOW CREATE TABLE中罕见的段错误. 修复 #11490. #11579 (tavplubix). - 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. #11540 (alexey-milovidov). - 修复
<node>的 shard_num/replica_num (破坏 use_compact_format_in_distributed_parts_names). #11528 (Azat Khuzhin). - 将异步 INSERT 修复到分布式中, 以用于 prefer_localhost_replica=0 和 w/o internal_replication. #11527 (Azat Khuzhin).
- 使用
-State函数在聚合过程中抛出异常时修复内存泄漏. 这修复了 #8995. #11496 (alexey-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. #11431 (alesapin).
- 修复了当表没有成功创建时, 在合并树关闭时可能出现的未初始化内存读取问题. #11420 (alexey-milovidov).
- 修复 JOIN 在
LowCarinality(T)和Nullable(T)上的崩溃. #11380. #11414 (Artem Zuikov). - 修复错误
USING键的错误代码. #11373. #11404 (Artem Zuikov). - 修复了参数超出纬度/经度范围的
geohashesInBox. #11403 (Vasily Nemkov). joinGet()函数更好的错误. #11389 (Artem Zuikov).- 修复具有外部排序和限制的查询可能出现的
Pipeline stuck错误. 修复 #11359. #11366 (Nikolai Kochetov). - 在 ReplicatedMergeTree 中发送零件期间删除冗余锁. #11354 (alesapin).
- 修复了多行模式下 clickhouse-client 对
\G(垂直输出)的支持. 这将关闭 #9933. #11350 (alexey-milovidov). - 修复使用
Lazy数据库时潜在的段错误. #11348 (alexey-milovidov). - 修复从
Join表引擎 (没有 JOIN) 直接选择的崩溃和错误的可空性. #11340 (Artem Zuikov). - 修复
quantilesExactWeightedArray中的崩溃问题. #11337 (Nikolai Kochetov). - 现在合并在
ALTER查询中更改元数据之前停止. #11335 (alesapin). - Make writing to
MATERIALIZED VIEWwith settingparallel_view_processing = 1parallel again. Fixes #10241. #11330 (Nikolai Kochetov). - 当提取的 JSON 具有不平衡的 { 或 [ 字符串时,修复
visitParamExtractRaw. #11318 (Ewout). - 修复 ThreadPool 中非常罕见的竞争条件. #11314 (alexey-milovidov).
- 修复
clickhouse-copier中无关紧要的数据竞争. 通过集成测试发现. #11313 (alexey-milovidov). - 修复转换中潜在的未初始化内存. 示例:
SELECT toIntervalSecond(now64()). #11311 (alexey-milovidov). - 修复了如果表的主键中有 Array 列并且查询正在使用
empty或notEmpty函数按此列过滤时索引分析无法工作的问题. 这修复了 #11286. #11303 (alexey-milovidov). - 修复当查询速度估计可能不正确时的错误, 并且如果查询受到
max_network_bandwidth、max_execution_speed或priority设置的限制,min_execution_speed的限制可能无法工作或无法正常工作。 将timeout_before_checking_execution_speed的默认值更改为非零值, 否则设置min_execution_speed和max_execution_speed无效/ 这修复了 #11297. 这修复了 #5732. 这修复了 #6228. 可用性改进: 避免在clickhouse-client中将异常消息与进度条串联. #11296 (alexey-milovidov). - 修复了使用错误参数调用
SET DEFAULT ROLE时的崩溃. 这修复了 #10586. #11278 (Vitaly Baranov). - 修复在以
Protobuf格式读取格式错误的数据时崩溃的问题. 这修复了 #5957, fixes #11203. #11258 (Vitaly Baranov). - 修复了
cache字典可以返回默认值而不是正常值 (只有过期键时) 的错误. 这仅影响字符串字段. #11233 (Nikita Mikhaylov). - 修复错误
Block structure mismatch in QueryPipeline, 同时从内部查询中的常量读取VIEW. 修复 #11181. #11205 (Nikolai Kochetov). - 修复可能的异常
Invalid status for associated output. #11200 (Nikolai Kochetov). - 现在将检查
primary.idx是否在CREATE查询中定义. #11199 (alesapin). - 使用
Array(Array(LowCardinality))捕获参数修复高阶函数的可能错误Cannot capture column. #11185 (Nikolai Kochetov). - 修复了在超过 1000 个键和一些后端的情况下可能会失败的
S3通配符. #11179 (Vladimir Chebotarev). - 如果数据跳过索引依赖于将在后台合并期间修改的列 (对于 SummingMergeTree、AggregatingMergeTree 以及 TTL GROUP BY), 则计算错误. 此问题已通过合并后移动索引计算得到修复, 因此索引是在合并数据上计算的. #11162 (Azat Khuzhin).
- 修复了在表引擎 = Kafka 的 DROP 期间 (或在服务器重新启动期间) 有时发生的挂起. #11145 (filimonov).
- 修复简单查询过多的线程预留 (优化减少线程数量, 在管道更改后部分中断). #11114 (Azat Khuzhin).
- 如果没有最终确定, 则从突变终止任务中删除日志记录. #11109 (alesapin).
- 修复了更新后服务器启动过程中的死锁, 系统日志表的结构发生了变化. #11106 (alesapin).
- 修复了 registerDiskS3 中的内存泄漏. #11074 (Pavel Kovalenko).
- 当 JOIN 出现在 PREWHERE 或
optimize_move_to_prewhere使 PREWHERE from WHERE 出现时, 修复错误No such name in Block::erase(). #11051 (Artem Zuikov). - 修复 Kafka 引擎表终止期间可能丢失的数据. #11048 (filimonov).
- 修复了 parseDateTime64BestEffort 参数解析错误. #10925. #11038 (Vasily Nemkov).
- 现在可以在单个
ALTER查询中对同一列进行ADD/DROP和RENAME. 同时MODIFY和RENAME的异常信息变得更加清晰. 部分修复 #10669. #11037 (alesapin). - 修复了 S3 URL 的解析. #11036 (Vladimir Chebotarev).
- 修复存在
LIMIT时两级GROUP BY的内存跟踪. #11022 (Azat Khuzhin). - 如果表未成功创建,则修复 MergeTree 中非常罕见的潜在释放后使用错误. #10986 (alexey-milovidov).
- 修复原子数据库的元数据 (重命名的相对路径) 和数据 (符号链接的相对路径) 处理. #10980 (Azat Khuzhin).
- 使用
Atomic数据库引擎修复并发ALTER和DROP 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). - 修复当您从同一列的多个线程的聚合函数状态获得结果时可能发生的竞争. 唯一可能发生的方法 (我发现) 是当您使用
finalizeAggregation函数同时使用Memory引擎从表中读取时, 该引擎为quanite*函数存储AggregateFunction状态. #10890 (Nikolai Kochetov). - 修复与分布式表中元组的向后兼容性. #10889 (Anton Popov).
- 修复 StringHashTable 中的 SIGSEGV (如果这样的键不存在). #10870 (Azat Khuzhin).
- 修复了在使用
Atomic引擎从数据库中删除LiveView表后,WATCH挂起的问题. #10859 (tavplubix). - 修复了
ReplicatedMergeTree中的错误, 该错误可能导致OPTIMIZE查询上的某些ALTER在它变为非活动状态后挂起等待某些副本. #10849 (tavplubix). - 现在,如果参与
CONSTRAINT表达式的列被重命名, 则约束会更新. 修复 #10844. #10847 (alesapin). - 修复缓存字典中未初始化内存的潜在读取. #10834 (alexey-milovidov).
- 在 Block::sortColumns() 之后修复列顺序 (还添加了一个测试, 表明它会影响一些实际用例 - 缓冲区引擎). #10826 (Azat Khuzhin).
- 修复 ODBC 桥在不要求引用标识符时的问题. 这修复了 #7984. #10821 (alexey-milovidov).
- 修复 DateLUT 中的 UBSan 和 MSan 报告. #10798 (alexey-milovidov).
- 在关键条件下使用
src_type进行正确的类型转换. 修复 #6287. #10791 (Andrew Onyshchuk). - 摆脱旧的 libunwind 补丁. https://github.com/ClickHouse-Extras/libunwind/commit/500aa227911bd185a94bfc071d68f4d3b03cb3b1#r39048012 这允许在
clang中禁用-fno-omit-frame-pointer至少 1% 的平均构建性能. #10761 (Amos Bird). - 修复了在多个分片上使用浮点权重时的avgWeighted问题. #10758 (Baudouin Giard).
- 修复
parallel_view_processing行为. 现在, 如果发生异常, 所有对MATERIALIZED VIEW的插入都应该无一例外地完成. 修复 #10241. #10757 (Nikolai Kochetov). - 与 -State 结合时修复组合器 -OrNull 和 -OrDefault. #10741 (hcz).
- 使用嵌套类型修复
generateRandom中的崩溃. 修复 #10583. #10734 (Nikolai Kochetov). - 修复合并后可能发生的
SummingMergeTree中LowCardinality(FixedString)键列的数据损坏. 修复 #10489. #10721 (Nikolai Kochetov). - 修复使用
FINAL修饰符和ORDER BY优化包装成函数的主键的使用. #10715 (Anton Popov). - 修复函数
h3EdgeAngle中可能的缓冲区溢出. #10711 (alexey-milovidov). - 修复消失的总数. 如果查询具有带有外部 where 条件的连接或子查询, 则总计可能已被过滤. 修复 #10674. #10698 (Nikolai Kochetov).
- 修复 HTTP 插入的原子性. 这修复了 #9666. #10687 (Andrew Onyshchuk).
- 在一个查询中使用相同的集合修复
IN运算符的多次使用. #10686 (Anton Popov). - 修复了当
readonly=2和cancel_http_readonly_queries_on_client_close=1时导致 http 请求卡在客户端关闭的错误. 修复 #7939, #7019, #7736, #7091. #10684 (tavplubix). - 修复 AggregateTransform 构造函数中参数的顺序. #10667 (palasonic1).
- 修复启用了
distributed_aggregation_memory_efficient的远程查询缺乏并行执行的问题。 修复 #10655. #10664 (Nikolai Kochetov). - 使用
LIMIT修复查询的可能不正确的行数. 修复#10566, #10709. #10660 (Nikolai Kochetov). - 修复当表有很多部分时锁定并发更改的错误. #10659 (alesapin).
- 如果服务器在表启动之前关闭,则修复 StorageBuffer 中的 nullptr 取消引用. #10641 (alexey-milovidov).
- 修复分布式查询的谓词优化 (
enable_optimize_predicate_expression=1) 对于带有HAVING部分的查询 (即需要在服务器启动器上进行过滤时), 通过保留表达式的顺序 (这足以修复), 并且还强制 聚合器在索引上使用列名. 修复: #10613, #11413. #10621 (Azat Khuzhin). - 使用 LowCardinality 修复 optimize_skip_unused_shards. #10611 (Azat Khuzhin).
- 修复服务器启动异常时 StorageBuffer 中的段错误. 修复 #10550. #10609 (tavplubix).
- 在
SYSTEM DROP DNS CACHE查询中还会删除缓存, 用于检查是否允许用户从某些 IP 地址进行连接. #10608 (tavplubix). - 修复了
MATERIALIZED VIEW内部查询中不正确的标量结果, 以防该查询包含相关表. #10603 (Nikolai Kochetov). - 修复了同步突变的处理条件变量. 在某些情况下, 该条件变量的信号可能会丢失. #10588 (Vladimir Chebotarev).
- 修复了在
loadStoredObject()完成之前调用createDictionary()可能导致的崩溃. #10587 (Vitaly Baranov). - 修复错误
the BloomFilter false positive must be a double number between 0 and 1#10551. #10569 (Winter Zhang). - 修复 SELECT 列 ALIAS 的默认表达式类型与列类型不同. #10563 (Azat Khuzhin).
- 实现了 DateTime64 和 String 值之间的比较 (就像 DateTime 一样). #10560 (Vasily Nemkov).
- 修复索引损坏,在某些情况下将合并部分合并到另一个合并部分后可能会发生. #10531 (Anton Popov).
- 默认禁用GROUP BY sharding_key优化 (
optimize_distributed_group_by_sharding_key已被引入并默认关闭, 由于sharding_key分析的技巧, 简单的例子是分片键中的if) 并修复 WITH ROLLUP/CUBE/TOTALS. #10516 (Azat Khuzhin). - 修复: #10263 (之后通过 INSERT 发送的 PR dist 在每个 INSERT 上被推迟) 修复: #8756 (that PR breaks distributed sends with all of the following conditions met (unlikely setup for now I guess):
internal_replication == false, multiple local shards (activates the hardlinking code) anddistributed_storage_policy(makeslink(2)fails onEXDEV)). #10486 (Azat Khuzhin). - 修复了
max_rows_to_sort限制的错误. #10268 (alexey-milovidov). - 每次调用读取外部字典的任何函数时, 仅获取一次字典并检查访问权限. #10928 (Vitaly Baranov).
改进
- 在
ALTER MODIFY TTL查询之后, 对旧数据应用TTL. 这个行为是通过设置materialize_ttl_after_modify来控制的, 默认是启用的. #11042 (Anton Popov). - 在解析字符串文字、VALUES 和各种文本格式中的 C 样式反斜杠转义时 (这是对 ClickHouse 和 MySQL 特有的 SQL 标准的扩展), 如果发现未知的转义序列 (例如
\%或\ w), 这将使LIKE和match正则表达式的使用更加方便 (写name LIKE 'used\_cars'而不是name LIKE 'used\\_cars'就足够了) 同时更兼容. 这修复了 #10922. #11208 (alexey-milovidov). - 读取 Decimal 值时, 在点后切掉多余的数字. 此行为与 MySQL 和 PostgreSQL 更兼容. 这修复了 #10202. #11831 (alexey-milovidov).
- 如果 ZooKeeper 中的元数据已经被删除并且不存在, 则允许 DROP 复制表 (这也是使用 TestKeeper 进行测试并重新启动服务器时的情况). 即使与 ZooKeeper 通信出现错误, 也允许重命名复制表. 这修复了 #10720. #11652 (alexey-milovidov).
- 稍微改进从字符串中读取十进制的诊断. 这将关闭 #10202. #11829 (alexey-milovidov).
- 修复信号处理程序中的睡眠调用. 它的睡眠时间比预期的要少. #11825 (alexey-milovidov).
- (仅限 Linux) 操作系统相关的性能指标 (针对 CPU 和 I/O) 即使没有
CAP_NET_ADMIN功能也能正常工作. #10544 (Alexander Kazakov). - 添加了
hostname作为函数hostName的别名. 此功能由 Yandex.Metrica 的 Victor Tarnavskiy 提出. #11821 (alexey-milovidov). - 添加了对跨复制集群上分布式
DDL(更新/删除/删除分区) 的支持. #11703 (Nikita Mikhaylov). - 如果我们无法侦听侦听地址之一 (例如,在 Docker 中 IPv6 不可用), 则在启动时在服务器日志中发出警告而不是错误. 请注意,如果服务器未能侦听所有列出的地址, 它将像以前一样拒绝启动. 这修复了 #4406. #11687 (alexey-milovidov).
- 在 docker 映像启动时创建默认用户和数据库. #10637 (Paramtamtam).
- 当多行查询打印到服务器日志时, 这些行被连接起来. 使其在多行字符串文字、标识符和单行注释的情况下正常工作. 这修复了 #3853. #11686 (alexey-milovidov).
- 现在允许在命令中使用多个名称: CREATE USER、CREATE ROLE、ALTER USER、SHOW CREATE USER、SHOW GRANTS 等. #11670 (Vitaly Baranov).
- 在跨复制集群上添加对分布式 DDL (
UPDATE/DELETE/DROP PARTITION) 的支持. #11508 (frank lee). - 如果用户已使用显式值指定密码, 则从命令行中的
clickhouse-client和clickhouse-benchmark清除密码. 这可以防止ps和类似工具暴露密码. #11665 (alexey-milovidov). - 如果 ELF 文件与正在运行的二进制文件不对应, 请不要使用调试信息. 需要避免在堆栈跟踪中打印错误的函数名称和源位置. 这修复了 #7514. #11657 (alexey-milovidov).
- 当在 parseDateTimeBestEffortOrNull/Zero 函数中没有完全解析值时, 返回 NULL/零. 这修复了 #7876. #11653 (alexey-milovidov).
- 跳过请求的 URL 中的空参数. 当你写
http://localhost:8123/?&a=b或http://localhost:8123/?a=b&&c=d时, 它们可能会出现. 这将关闭 #10749. #11651 (alexey-milovidov). - 允许使用
groupArrayArray和groupUniqArrayArray作为SimpleAggregateFunction. #11650 (Volodymyr Kuznetsov). - 在分析其他类型的索引条件时, 允许通过隐式转换与常量字符串进行比较. 这可能会关闭 #11630. #11648 (alexey-milovidov).
- https://github.com/ClickHouse/ClickHouse/pull/7572#issuecomment-642815377 支持配置默认 HTTPHandlers. #11628 (Winter Zhang).
- 制作更多输入格式以与 Kafka 引擎配合使用. 解决过早冲洗的问题. 修复
kafka_num_consumers大于主题分区数时的性能问题. #11599 (filimonov). - 改进
multiple_joins_rewriter_version=2逻辑. 修复 lambda 别名的未知列错误. #11587 (Artem Zuikov). - 无法解析列声明列表时更好的异常消息. 这将关闭 #10403. #11537 (alexey-milovidov).
- 改进 VIEW 的
enable_optimize_predicate_expression=1逻辑. #11513 (Artem Zuikov). - 在实时视图表中添加对 PREWHERE 的支持. #11495 (vzakaznikov).
- 自动更新 DNS 缓存, 用于检查是否允许用户从某个地址连接. #11487 (tavplubix).
- 即使执行并发合并, OPTIMIZE FINAL 也会强制合并. 这将关闭 #11309 并关闭 #11322. #11346 (alexey-milovidov).
- 抑制 clickhouse-client 中取消查询的输出. 在以前的版本中, 即使按 Ctrl+C 取消查询, 结果也可能会继续在终端中打印. 这将关闭 #9473. #11342 (alexey-milovidov).
- 现在历史文件会在每次查询后更新, 如果多个客户端使用一个历史文件, 则不会出现竞争条件. 这修复了 #9897. #11453 (Tagir Kuskarov).
- 重新加载配置时更好地记录消息. #11341 (alexey-milovidov).
- 在某些情况下,从
clickhouse-client或clickhouse-format中的格式化查询中删除尾随空格. #11325 (alexey-milovidov). - 添加设置
output_format_pretty_max_value_width. 如果 value 较长, 则将其剪切以避免在终端中输出过大的 value. 这将关闭. #11324 (alexey-milovidov). - 在内存映射不足的情况下更好的异常消息. 这将关闭 #11027. #11316 (alexey-milovidov).
- 支持 (U)Int8、(U)Int16、ASOF JOIN 中的日期. #11301 (Artem Zuikov).
- 支持 Kafka 表的 kafka_client_id 参数. 它还将 ClickHouse 在与 Kafka 通信时使用的默认
client.id更改为更加详细和可用. #11252 (filimonov). - 将
DistributedFilesToInsert指标的值保留在异常上. 在以前的版本中, 该值是在我们要发送一些文件时设置的, 但如果出现异常并且一些文件仍处于待处理状态, 则该值为零. 现在它对应于文件系统中待处理文件的数量. #11220 (alexey-milovidov). - 添加对多字数据类型名称的支持 (例如
DOUBLE PRECISIONandCHAR VARYING) 以获得更好的 SQL 兼容性. #11214 (Павел Потемкин). - 为某些数据类型提供同义词. #10856 (Павел Потемкин).
- 现在默认启用查询日志. #11184 (Ivan Blinkov).
- 在表 system.users 和执行 SHOW CREATE USER 查询时显示身份验证类型. #11080 (Vitaly Baranov).
- 删除
Memory数据库引擎的显式DROP DATABASE上的数据. 修复 #10557. #11021 (tavplubix). - 为 rdkafka 库的内部线程设置线程名称. 使来自 rdkafka 的日志在服务器日志中可用. #10983 (Azat Khuzhin).
- 支持查询中的 unicode 空格. 这有助于从 Word 或网页复制粘贴查询. 这修复了 #10896. #10903 (alexey-milovidov).
- 允许大型 UInt 类型作为函数
tupleElement中的索引. #10874 (hcz). - 尊重在 INSERT 到分布式上的prefer_localhost_replica/load_balancing. #10867 (Azat Khuzhin).
- 介绍
min_insert_block_size_rows_for_materialized_views、min_insert_block_size_bytes_for_materialized_views设置. 此设置类似于min_insert_block_size_rows和min_insert_block_size_bytes, 但仅适用于插入到MATERIALIZED VIEW中的块. 它有助于在推送到 MV 时控制块挤压并避免过多的内存使用. #10858 (Azat Khuzhin). - 在服务器关闭期间摆脱复制队列中的异常. 修复 #10819. #10841 (alesapin).
- 确保
varSamp、varPop不能因数值错误返回负结果, 并且不能从负方差计算stddevSamp、stddevPop. 这修复了 #10532. #10829 (alexey-milovidov). - 更好的 DNS 异常消息. 这修复了 #10813. #10828 (alexey-milovidov).
- 将某些解析错误的 HTTP 响应代码更改为 400 Bad Request. 这个修复 #10636. #10640 (alexey-milovidov).
- 如果 clickhouse-client 比 clickhouse-server 新, 则打印一条消息. #10627 (alexey-milovidov).
- 添加对
INSERT INTO [db.]table WATCH查询的支持. #10498 (vzakaznikov). - 允许在 clickhouse-client 中传递 quota_key. 这将关闭 #10227. #10270 (alexey-milovidov).
性能改进
- 允许多个副本同时分配合并、突变、分区删除、移动和替换. 这将关闭 #10367. #11639 (alexey-milovidov) #11795 (alexey-milovidov).
- 关于表排序键的 GROUP BY 优化, 通过
optimize_aggregation_in_order设置启用. #9113 (dimarub2000). - 带有 final 的选择是并行执行的. 添加设置
max_final_threads以限制使用的线程数. #10463 (Nikolai Kochetov). - 当生成小块时, 通过
INSERT SELECT或 INSERT with clickhouse-client 提高 INSERT 查询的性能 (并行解析的典型情况). 这修复了 #11275. 修复 CONSTRAINT 不适用于 DEFAULT 字段的问题. 这修复了 #11273. 修复 TEMPORARY 表忽略 CONSTRAINTS 的问题. 这修复了 #11274. #11276 (alexey-milovidov). - 消除 SELECT 部分中 GROUP BY 键的最小/最大/任何聚合器的优化, 通过
optimize_aggregators_of_group_by_keys设置启用. #11667 (xPoSx). #11806 (Azat Khuzhin). - 使用
optimize_move_functions_out_of_any启用的新优化, 可从any函数中删除所有操作 #11529 (Ruslan). - 当使用 Pretty 格式时, 提高交互模式下
clickhouse-client的性能. 在以前的版本中, 计算 UTF-8 字符串的可见宽度可能会花费大量时间. 这将关闭 #11323. #11323 (alexey-milovidov). - 使用
ORDER BY和小的LIMIT提高查询的性能 (小于, 然后是max_block_size). #11171 (Albert Kidrachev). - 添加运行时 CPU 检测以选择和调度最佳功能实现. 添加对多个目标的代码生成的支持. 这将关闭 #1017. #10058 (DimasKovas).
- 默认启用 clickhouse 二进制文件的
mlock. 它将防止 clickhouse 可执行文件在高 IO 负载下被分页. #11139 (alexey-milovidov). - 使用
sum聚合函数进行查询而不使用 GROUP BY 键以更快地运行多次. #10992 (alexey-milovidov). - 通过删除一些冗余数据移动来改进基数排序 (在带有简单键的
ORDER BY中使用). #10981 (Arslan Gumerov). - 在 MergeJoin 中对左表的较大部分进行排序. 缓冲内存中的剩余块. 添加
partial_merge_join_left_table_buffer_bytes设置来管理左侧块缓冲区大小. #10601 (Artem Zuikov). - 从子查询中删除重复的 ORDER BY 和 DISTINCT, 此优化通过
optimize_duplicate_order_by_and_distinct启用 #10067 (Mikhail Malafeev). - 此功能消除了 GROUP BY 部分中其他键的功能, 通过
optimize_group_by_function_keys启用 #10051 (xPoSx). - 使用
optimize_arithmetic_operations_in_aggregate_functions启用从聚合函数中提取算术运算的新优化 #10047 (Ruslan). - 使用基于 Poco 而不是 curl 的 S3 的 HTTP 客户端. 这将提高性能并降低 s3 存储和表函数的内存使用量. #11230 (Pavel Kovalenko).
- 修复与基于限制重新安排相关的 Kafka 性能问题, 这些限制总是被应用. #11149 (filimonov).
- 为 jemalloc 启用 percpu_arena:percpu (这将减少由于线程池造成的内存碎片). #11084 (Azat Khuzhin).
- 从 S3 HTTP 客户端读取响应时优化内存使用. #11561 (Pavel Kovalenko).
- 调整默认的 Kafka 设置以获得更好的性能. #11388 (filimonov).
实验功能
- 添加数据类型
Point(Tuple(Float64, Float64)) 和Polygon(Array(Array(Tuple(Float64, Float64))). #10678 (Alexey Ilyukhov). - 添加一个
hasSubstr函数, 允许在数组中查找子序列. 注: 此功能可能会更名, 恕不另行通知. #11071 (Ryad Zenine). - 添加了 OpenCL 支持和双音排序算法, 可用于对单列中的整数类型数据进行排序. 需要使用标志
-DENABLE_OPENCL=1构建. 要使用双音排序算法而不是其他算法, 您需要为设置选项special_sort设置bitonic_sort, 并确保 OpenCL 可用. 此功能不会提高性能或其他任何东西, 仅作为示例和演示目的提供. 如果在这个方向上没有进一步的发展, 它可能会在不久的将来被移除. #10232 (Ri).
构建/测试/打包改进
- 为程序和实用程序启用 clang-tidy. #10991 (alexey-milovidov).
- 删除对
tzdata的依赖: 如果/usr/share/zoneinfo目录不存在, 则不会失败. 请注意, 即使系统中没有安装 tzdata,所有时区都可以在 ClickHouse 中使用. #11827 (alexey-milovidov). - 添加了 MSan 和 UBSan 压力测试. 请注意, 我们已经有了用于功能测试的 MSan、UBSan, 而 "stress" 测试是另一种测试. #10871 (alexey-milovidov).
- 在崩溃消息中打印编译器构建 ID. 这将使我们更加确定哪个二进制文件崩溃了. 添加了新函数
buildId. #11824 (alexey-milovidov). - 添加了一个测试以确保在 FREEZE 查询后突变继续工作. #11820 (alexey-milovidov).
- 不允许在名称中包含 "fail" 子字符串的测试, 因为当您键入 Ctrl+F 并搜索 "fail" 时, 这会使在浏览器中查看测试结果变得不那么方便. #11817 (alexey-milovidov).
- 从 HTTPHandlerFactory 中删除未使用的导入. #11660 (Bharat Nallan).
- 添加了对执行复制程序的实例的随机抽样. 需要避免
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 构建文件. #11390 (Ivan).
- 修复几个不稳定的集成测试. #11355 (alesapin).
- 添加对使用 UBSan 运行的单元测试的支持. #11345 (alexey-milovidov).
- 从集成测试
test_insertion_sync_fails_with_timeout中删除冗余超时. #11343 (alesapin). - 更好地检查 clickhouse-test 中的挂起查询. #11321 (alexey-milovidov).
- 如果服务器是在调试中构建或使用消毒剂构建的, 则发出警告. #11304 (alexey-milovidov).
- 现在 clickhouse-test 在测试运行之前检查服务器的活动性. #11285 (alesapin).
- 修复可能不稳定的测试
00731_long_merge_tree_select_opened_files.sh. 它不会经常失败, 但我们在试验 ThreadFuzzer 时发现了这个测试中潜在的竞争条件: #9814 见 link for the example. #11270 (alexey-milovidov). - 如果
curl调用超时, 则在 CI 中重复测试. 由于系统挂断超过 10 秒, 这在我们的 CI 基础设施中很常见. 这修复了 #11267. #11268 (alexey-milovidov). - 从@donmikel 添加对连接表引擎的测试. 这将关闭 #9158. #11265 (alexey-milovidov).
- 修复单元测试中的几个非重大错误. #11262 (alesapin).
- 现在,
cctz库的部分链接器命令将不会与其他库混在一起. #11213 (alesapin). - 将 /programs/server 拆分为实际的程序和库. #11186 (Ivan).
- 改进 protobuf 和 gRPC 的构建脚本. #11172 (Vitaly Baranov).
- 启用不起作用的性能测试. #11158 (alexey-milovidov).
- 在启动任何 CH 实例之前为测试创建根 S3 存储桶. #11142 (Pavel Kovalenko).
- 添加非恒定多边形的性能测试. #11141 (alexey-milovidov).
- 修复
00979_live_view_watch_continuous_aggregates测试. #11024 (vzakaznikov). - 添加在 tmpfs 上的集成测试中运行 zookeeper 的功能. #11002 (alesapin).
- 等待具有指数退避的 odbc-bridge. 在我们的 CI 环境中, 之前 200 毫秒的等待时间是不够的. #10990 (alexey-milovidov).
- 修复非确定性测试. #10989 (alexey-milovidov).
- 添加了对空外部数据的测试. #10926 (alexey-milovidov).
- 每次测试都会重新创建数据库. 这改进了测试的分离. #10902 (alexey-milovidov).
- 在列代码中添加了更多断言. #10833 (alexey-milovidov).
- 与清除系统更好的合作. 在清除失败的消息中打印有关 query_id 的信息. #10832 (alexey-milovidov).
- 在 "Split build smoke test" 检查中修复明显的竞争条件. #10820 (alexey-milovidov).
- 在 MergeTreeIndexFullText 中修复 (false) MSan 报告. 该问题首次出现在 #9968 中. #10801 (alexey-milovidov).
- 为 MariaDB 客户端库添加 MSan 抑制. #10800 (alexey-milovidov).
- GRPC make 找不到 protobuf 文件, 通过添加正确的链接来更改 make 文件. #10794 (mnkonkova).
- 为 base、utils、programs 启用额外警告 (
-Weverything). 请注意, 我们已经为大部分代码提供了它. #10779 (alexey-milovidov). - 在 #10396 中, 对图书馆警告的抑制被错误地声明为公开. #10776 (alexey-milovidov).
- 恢复在 #10396 中意外删除的补丁. #10774 (alexey-milovidov).
- 修复性能测试错误, 第 2 部分. #10773 (alexey-milovidov).
- 修复性能测试错误. #10766 (alexey-milovidov).
- 更新交叉构建以使用 clang-10 编译器. #10724 (Ivan).
- 更新安装 RPM 包的说明. 这是由 Denis (TG login @ldviolet) 建议并由 Arkady Shejn 实施的. #10707 (alexey-milovidov).
- 试图修复
tests/queries/0_stateless/01246_insert_into_watch_live_view.py测试. #10670 (vzakaznikov). - 修复和重新启用 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报告. #10631 (alexey-milovidov). See also https://github.com/lz4/lz4/issues/857 - 将 LZ4 更新到最新的 dev 分支. #10630 (alexey-milovidov).
- 添加了自动生成的机器可读文件与稳定版本的列表. #10628 (alexey-milovidov).
- 修复
capnp::UnalignedFlatArrayMessageReader的capnproto版本检查. #10618 (Matwey V. Kornilov). - 测试中的内存使用率较低. #10617 (alexey-milovidov).
- 在新的实时视图测试中修复硬编码超时. #10604 (vzakaznikov).
- 在 tests/queries/0_stateless/helpers/client.py 中打开客户端时增加超时. #10599 (vzakaznikov).
- 为 clang 构建启用 ThinLTO, 继续 #10435. #10585 (Amos Bird).
- 添加模糊器并准备 oss-fuzz 集成. #10546 (kyprizel).
- 修复 FreeBSD 构建. #10150 (Ivan).
- 使用 pytest 框架为查询测试添加新版本. #10039 (Ivan).
ClickHouse 版本 v20.4
ClickHouse 版本 v20.4.8.99-stable 2020-08-10
Bug 修复
- 修复了当 unix 时间戳作为参数传递时
parseDateTimeBestEffort函数中的错误. 这修复了 #13362. #13441 (alexey-milovidov). - 修复了在具有 NaN 值的 Float 类型上调用的
uniqExact、topK、sumDistinct和类似聚合函数的潜在低性能和稍微不正确的结果. 它还在调试版本中触发断言. 这修复了 #12491. #13254 (alexey-milovidov). - 如果将可空 constexpr 作为不是文字 NULL 的 cond 的固定函数. 修复 #12463. #13226 (alexey-milovidov).
- 在数组元素为 Nullable 且数组下标也可为 Null 的情况下, 修复了
arrayElement函数中的断言. 这修复了 #12172. #13224 (alexey-milovidov). - 用函数修正了错误的索引分析. 在从
MergeTree表中读取时, 它可能会导致修剪错误的部分. 修复 #13060. Fixes #12406. #13081 (Anton Popov). - 修复了对从本地副本进行选择的线程数的不必要限制. #12840 (Nikolai Kochetov).
- 修复了查询
WITH TOTALS时可能出现的数据中可能出现的额外溢出行. #12747 (Nikolai Kochetov). - 修复了大元组的性能, 这些元组在
IN部分被解释为函数. 当用户出于某种晦涩的原因编写WHERE x IN tuple(1, 2, ...)而不是WHERE x IN (1, 2, ...)时的情况. #12700 (Anton Popov). - 修复了
input_format_parallel_parsing的内存跟踪(通过将线程附加到组). #12672 (Azat Khuzhin). - 修复了 #12293 当子查询包含 with 子句时允许推送谓词. #12663 (Winter Zhang).
- 修复了 #10572 使用 const 表达式修复布隆过滤器索引. #12659 (Winter Zhang).
- 修复了当 Broker 不可用时 (不仅如此) 在
StorageKafka中的SIGSEGV. #12658 (Azat Khuzhin). - 添加了对带有
Array(UUID)参数的函数if的支持. 这修复了 #11066. #12648 (alexey-milovidov). - 修复了带有缓存布局的外部字典中的竞争条件, 这可能导致服务器崩溃. #12566 (alesapin).
- 删除了 DROP TABLE 上分布式表 (来自异步插入的块) 的数据. #12556 (Azat Khuzhin).
- 修复了当
enable_mixed_granularity_parts=1时, 在ALTER DELETE查询后导致旧部件损坏的错误。 修复 #12536. #12543 (alesapin). - 参数数目无效的函数
in的更好例外. #12529 (Anton Popov). - 修复了性能问题, 同时读取紧凑部件. #12492 (Anton Popov).
- 修复了当我们通过字典键的表达式加入时, JOIN 与字典中的崩溃:
t JOIN dict ON expr(dict.id) = t.id. 在这种情况下禁用字典连接优化. #12458 (Artem Zuikov). - 修复了 StorageMerge 时可能出现的段错误. 关闭 #12054. #12401 (tavplubix).
- 修复了
WITH FILL修饰符中列的顺序. 以前不遵守ORDER BY语句的列顺序. #12306 (Anton Popov). - 当存在按虚拟列 (如
Merge表中的_table) 或系统表中的 "index" 列过滤数据 (例如从system.tables查询时按数据库名称过滤) 时, 避免 "bad cast" 异常, 并且这个表达式返回Nullable类型. 这修复了 #12166. #12305 (alexey-milovidov). - TrieDictionary 加载失败后显示错误. #12290 (Vitaly Baranov).
- 对于可能导致崩溃的空数组, 函数
arrayFill工作不正确. 这修复了 #12263. #12279 (alexey-milovidov). - 实现了到
LowCardinality类型的通用类型的转换. 这允许对具有 LowCardinality 列和其他列的表执行 UNION ALL. 这修复了#8212. 这修复了 #4342. #12275 (alexey-milovidov). - 修复了在某些特殊类型的
StorageFile标头中多次连续插入期间多次写入时的行为. 这个修复了 #6155. #12197 (Nikita Mikhaylov). - 修复了 UInt8 值不等于 0 或 1 时的逻辑函数. #12196 (Alexander Kazakov).
- 上限 max_memory_usage* 对进程驻留内存的限制. #12182 (Azat Khuzhin).
- 在 GROUP BY 内射函数消除期间修复了
dictGet参数检查. #12179 (Azat Khuzhin). - 如果 ODBC 连接不支持架构,则不要将字典源的表名拆分为架构和表名本身. #12165 (Vitaly Baranov).
- 修复了
ALTER DELETE中的错误逻辑, 当条件评估为 NULL 时会导致删除记录. 这修复了 #9088. This closes #12106. #12153 (alexey-milovidov). - 修复了在存在别名的情况下发送到外部 DBMS (例如 MySQL、ODBC) 的查询转换. 这修复了#12032. #12151 (alexey-milovidov).
- 修复了整数除法中的潜在溢出. 这修复了 #12119. #12140 (alexey-milovidov).
- 修复了
greatCircleDistance、geoDistance中潜在的无限循环. 这修复了 #12117. #12137 (alexey-milovidov). - 规范化
pid文件处理. 在以前的版本中, 如果服务器在没有正确关闭的情况下被杀死, 并且有另一个进程与以前运行的服务器具有相同的 pid, 则服务器可能会拒绝启动. 即使有另一台服务器正在运行, pid 文件也可能在服务器启动失败时被删除. 这修复了 #3501. #12133 (alexey-milovidov). - 修复了对字典的 ENGINE=Dictionary 表的处理依赖性. 这修复了#10994. This fixes #10397. #12116 (Vitaly Baranov).
- 修复了由于线程总数限制错误导致的带有
UNION的选择的性能. 修复 #12030. #12103 (Nikolai Kochetov). - 使用
-StateResample组合器修复了段错误. #12092 (Anton Popov). - 修复了
system.quey_log中选择的空result_rows和result_bytes指标. 修复 #11595. #12089 (Nikolai Kochetov). - 修复了从
VIEW中选择的不必要的线程数限制. 修复 #11937. #12085 (Nikolai Kochetov). - 修复了使用错误类型
PREWHERE时可能发生的崩溃. 修复 #12053, #12060. #12060 (Nikolai Kochetov). - 修复了具有
LowCardinality类型的函数defaultValueOfArgumentType的Expected single dictionary argument for function错误. 修复 #11808. #12056 (Nikolai Kochetov). - 修复了带有
Tuple(LowCardinality)参数的高阶函数的错误Cannot capture column. 修复 #9766. #12055 (Nikolai Kochetov). - 加载数据库时并行解析表元数据. 这修复了有大量表时服务器启动缓慢的问题. #12045 (tavplubix).
- 使
topK聚合函数为 Enum 类型返回 Enum. 这修复了 #3740. #12043 (alexey-milovidov). - 修复了是否为常量表达式的约束检查. 这修复了 #11360. #12042 (alexey-milovidov).
- 修复了元组与
Nullable列的不正确比较. 修复 #11985. #12039 (Nikolai Kochetov). - 修复了 allow_introspection_functions=0 时访问权限的计算. #12031 (Vitaly Baranov).
- 修复了在调用具有不同大小的
FixedString类型参数的函数if时出现错误结果和潜在崩溃的问题. 这修复了 #11362. #12021 (alexey-milovidov). - 如果使用偏移量
-9223372036854775808调用函数, 则以函数neighbor作为唯一返回表达式的查询可能会返回空结果. 这修复了 #11367. #12019 (alexey-milovidov). - 修复了 allow_ddl=0 时访问权限的计算. #12015 (Vitaly Baranov).
- 修复了 generateRandom 中可能导致崩溃的潜在数组大小溢出. 这修复了 #11371. #12013 (alexey-milovidov).
- 修复了潜在的浮点异常. 这将关闭 #11378. #12005 (alexey-milovidov).
- 修复了服务器启动时日志消息中错误的设置名称. #11997 (alexey-milovidov).
- 修复了
Values格式中的Query parameter was not set问题. 修复 #11918. #11936 (tavplubix). - 在查询 (参数化查询) 中保留替换的别名. 这修复了 #11914. #11916 (alexey-milovidov).
- 修复了从默认存储策略更改存储策略时没有移动的错误. #11893 (Vladimir Chebotarev).
- 修复了解析
DateTime64时潜在的浮点异常. 这修复了 #11374. #11875 (alexey-milovidov). - 通过 HTTP 接口固定内存记帐 (使用
wait_end_of_query=1可能很重要). #11840 (Azat Khuzhin). - 在检查相等性之前解析存储在 zookeeper 中的元数据. #11739 (Azat Khuzhin).
性能改进
- 索引不用于带文字的 IN 运算符, 在 v19.3 前后引入了性能回归. 这修复了 #10574. #12062 (nvartolomei).
构建/测试/打包改进
- 在 Dockerfile 中的第一个
apt-get update之前安装ca-certificates. #12095 (Ivan Blinkov).
ClickHouse 版本 v20.4.6.53-stable 2020-06-25
Bug 修复
- 修复在 prewhere 条件下使用
Nullable列导致的罕见崩溃. 续 #11608. #11869 (Nikolai Kochetov). - 不允许在高阶函数中使用 arrayJoin. 它导致协议同步中断. 这将关闭 #3933. #11846 (alexey-milovidov).
- 修复 FixedString 与常量 String 比较的错误结果. 这修复了. #11828 (alexey-milovidov).
- 修复条件为 NULL 的
if()的错误结果. #11807 (Artem Zuikov). - 修复使用过多线程进行查询. #11788 (Nikolai Kochetov).
- 修复像
SELECT *, xyz.*这样的查询的意外行为, 这些查询在预期错误时成功. #11753 (hexiaoting). - 现在复制的提取将在元数据更改期间取消. #11744 (alesapin).
- 修复了由 Values 输入格式中复杂文字的错误类型推导导致的 LOGICAL_ERROR. #11732 (tavplubix).
- 修复 在 const 列上的
ORDER BY ... WITH FILL. #11697 (Anton Popov). - 与 XDBC 桥通信时传递适当的超时. 最近在检查桥接活性和接收元信息时没有遵守超时. #11690 (alexey-milovidov).
- 将
LIMIT n WITH TIES与包含别名的ORDER BY语句一起使用. #11689 (Anton Popov). - 修复导致
system.mutations状态不正确的错误. 它可能表明整个突变已经完成, 但服务器在复制队列中仍有MUTATE_PART任务并尝试执行它们. 这修复了 #11611. #11681 (alesapin). - 添加对带有不区分大小写标志的正则表达式的支持. 这修复了 #11101 and fixes #11506. #11649 (alexey-milovidov).
- 如果设置了行级安全性, 则删除琐碎的计数查询优化. 在以前的版本中, 用户获取表中记录的总数而不是过滤. 这修复了#11352. #11644 (alexey-milovidov).
- 修复字符串的布隆过滤器 (数据跳过索引). #11638 (Azat Khuzhin).
- 修复在 prewhere 条件下使用
Nullable列导致的罕见崩溃. (可能它以某种方式与 #11572 相关联). #11608 (Nikolai Kochetov). - 修复错误
Block structure mismatch, 用于从Buffer表中采样读取的查询. #11602 (Nikolai Kochetov). - 修复 clickhouse-client 的错误退出代码, 当 exception.code() % 256 = 0 时. #11601 (filimonov).
- 修复服务器启动时有关
Mark cache size was lowered的日志消息中的小错误. 这将关闭 #11399. #11589 (alexey-milovidov). - 修复错误
Size of offsets does not match size of column, 用于查询中的PREWHERE column in (subquery)和ARRAY JOIN. #11580 (Nikolai Kochetov). - 修复了
SHOW CREATE TABLE中罕见的段错误. 修复 #11490. #11579 (tavplubix). - 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). - 修复可能导致表删除期间异常的竞争条件. 这有点棘手, 一点也不危险. 如果你想要解释, 请在电报中通知我. #11523 (alesapin).
- 使用 -State 函数在聚合过程中抛出异常时修复内存泄漏. 这修复了 #8995. #11496 (alexey-milovidov).
- 如果数据跳过索引依赖于将在后台合并期间修改的列 (对于 SummingMergeTree、AggregatingMergeTree 以及 TTL GROUP BY) , 则计算错误. 此问题已通过合并后移动索引计算得到修复, 因此索引是在合并数据上计算的. #11162 (Azat Khuzhin).
- 摆脱旧的 libunwind 补丁. https://github.com/ClickHouse-Extras/libunwind/commit/500aa227911bd185a94bfc071d68f4d3b03cb3b1#r39048012 这允许在
clang中禁用-fno-omit-frame-pointer至少 1% 的平均构建性能. #10761 (Amos Bird). - 使用
FINAL修饰符和ORDER BY优化来修复包装到函数中的主键的使用. #10715 (Anton Popov).
构建/测试/打包改进
- 修复单元测试中的几个非重大错误. #11262 (alesapin).
- 在 MergeTreeIndexFullText 中修复 (false) MSan 报告. 该问题首先出现在 #9968. #10801 (alexey-milovidov).
ClickHouse 版本 v20.4.5.36-stable 2020-06-10
Bug 修复
- 修复了在启用
min_bytes_to_use_direct_io且 PREWHERE 处于活动状态并使用 SAMPLE 或大量线程时可能发生的Data compressed with different methods错误. 这修复了 #11539. #11540 (alexey-milovidov). - 修复编解码器的返回压缩大小. #11448 (Nikolai Kochetov).
- 当列具有带有非文字参数的压缩编解码器时修复服务器崩溃. 修复 #11365. #11431 (alesapin).
- 以 nan 为点修复 pointInPolygon. 修复 #11375. #11421 (Alexey Ilyukhov).
- 如果表未成功创建, 则修复 MergeTree 关闭时潜在的未初始化内存读取. #11420 (alexey-milovidov).
- 修复了带有纬度/经度范围之外的参数的 geohashesInBox. #11403 (Vasily Nemkov).
- 修复具有外部排序和限制的查询可能出现的
Pipeline stuck错误. 修复 #11359. #11366 (Nikolai Kochetov). - 在 ReplicatedMergeTree 中发送零件期间删除冗余锁. #11354 (alesapin).
- 修复了多行模式下 clickhouse-client 对
\G(垂直输出)的支持. 这将关闭 #9933. #11350 (alexey-milovidov). - 修复使用
Lazy数据库时潜在的段错误. #11348 (alexey-milovidov). - 修复
quantilesExactWeightedArray中的崩溃问题. #11337 (Nikolai Kochetov). - 现在合并在
ALTER查询中更改元数据之前停止. #11335 (alesapin). - 通过再次设置
parallel_view_processing = 1并行写入MATERIALIZED VIEW. 修复 #10241. #11330 (Nikolai Kochetov). - 当提取的 JSON 具有不平衡的 { 或 [ 字符串时, 修复visitParamExtractRaw. #11318 (Ewout).
- 修复 ThreadPool 中非常罕见的竞争条件. #11314 (alexey-milovidov).
- 修复 clickhouse-copier 中无关紧要的数据竞争. 通过集成测试发现. #11313 (alexey-milovidov).
- 修复转换中潜在的未初始化内存. 示例:
SELECT toIntervalSecond(now64()). #11311 (alexey-milovidov). - 修复了如果表的主键中有 Array 列并且查询正在使用
empty或notEmpty函数按此列过滤时索引分析无法工作的问题. 这修复了 #11286. #11303 (alexey-milovidov). - 修复当查询速度估计可能不正确时的错误, 并且如果查询受到
max_network_bandwidth、max_execution_speed或priority设置的限制,min_execution_speed的限制可能无法工作或无法正常工作. 将timeout_before_checking_execution_speed的默认值更改为非零值, 否则设置min_execution_speed和max_execution_speed无效. 这修复了 #11297. 这修复了 #5732。 这修复了 #6228. 可用性改进:避免在“clickhouse-client”中将异常消息与进度条串联. #11296 (alexey-milovidov). - 修复使用错误参数调用 SET DEFAULT ROLE 时的崩溃. 这修复了#10586. #11278 (Vitaly Baranov).
- 修复读取 Protobuf 格式错误数据时崩溃的问题. 这修复了 #5957, fixes #11203. #11258 (Vitaly Baranov).
- 修复了缓存字典可以返回默认值而不是正常值 (只有过期键时) 的错误. 这仅影响字符串字段. #11233 (Nikita Mikhaylov).
- 修复错误
Block structure mismatch in QueryPipeline, 同时从内部查询中的常量读取VIEW. 修复 #11181. #11205 (Nikolai 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).
- 修复简单查询过多的线程预留 (优化减少线程数量, 在管道更改后部分中断). #11114 (Azat Khuzhin).
- 修复分布式查询的谓词优化 (
enable_optimize_predicate_expression=1) 对于带有HAVING部分的查询 (即需要在服务器启动器上进行过滤时), 通过保留表达式的顺序 (这足以修复), 并且还强制 聚合器在索引上使用列名. 修复: #10613, #11413. #10621 (Azat Khuzhin).
构建/测试/打包改进
ClickHouse 版本 v20.4.4.18-stable 2020-05-26
与 v20.4.3.16 稳定版相比没有变化.
ClickHouse 版本 v20.4.3.16-stable 2020-05-23
Bug 修复
- 如果没有最终确定, 则从突变终止任务中删除日志记录. #11109 (alesapin).
- 修复了 registerDiskS3 中的内存泄漏. #11074 (Pavel Kovalenko).
- 修复 Kafka 引擎表终止时可能丢失的数据. #11048 (filimonov).
- 复了
parseDateTime64BestEffort参数解析错误. #11038 (Vasily Nemkov). - 如果表未成功创建, 则修复了
MergeTree中非常罕见的潜在释放后使用错误. #10986, #10970 (alexey-milovidov). - 修复了原子数据库的元数据 (重命名的相对路径) 和数据 (符号链接的相对路径) 处理. #10980 (Azat Khuzhin).
- 修复了使用
Atomic数据库引擎并发ALTER和DROP 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). - 修复了当您从同一列的多个线程的聚合函数状态获得结果时可能发生的竞争. 它可能发生的唯一方法是当您使用
finalizeAggregation函数同时使用Memory引擎从表中读取时, 该引擎为quantile*函数存储AggregateFunction状态. #10890 (Nikolai Kochetov). - 修复了与分布式表中元组的向后兼容性. #10889 (Anton Popov).
- 如果这样的键不存在, 则修复了
StringHashTable中的SIGSEGV. #10870 (Azat Khuzhin). - 修复了在使用
Atomic引擎从数据库中删除LiveView表后,WATCH挂起的问题. #10859 (tavplubix). - 修复了
ReplicatedMergeTree中的错误, 该错误可能导致OPTIMIZE查询上的某些ALTER在它变为非活动状态后挂起等待某些副本. #10849 (tavplubix). - 现在, 如果参与
CONSTRAINT表达式的列被重命名, 则约束会更新. 修复 #10844. #10847 (alesapin). - 修复了缓存字典中未初始化内存的潜在读取. #10834 (alexey-milovidov).
- 修复
Block::sortColumns()之后的列顺序. #10826 (Azat Khuzhin). - 修复了当不要求引用标识符时
ODBC桥的问题. 修复 #7984. #10821 (alexey-milovidov). - 修复了
DateLUT中的UBSan和MSan报告. #10798 (alexey-milovidov). - 修复了关键条件下错误的类型转换. 修复 #6287. #10791 (Andrew Onyshchuk).
- 修复了
parallel_view_processing行为. 现在, 如果发生异常, 所有对MATERIALIZED VIEW的插入都应该无一例外地完成. 修复 #10241. #10757 (Nikolai Kochetov). - 固定组合器
-OrNull和-OrDefault与-State结合使用. #10741 (hcz). - 修复了函数
h3EdgeAngle中可能出现的缓冲区溢出. #10711 (alexey-milovidov). - 修复了当表有很多部分时锁定并发更改的错误. #10659 (alesapin).
- 如果服务器在表启动前关闭, 则修复了
StorageBuffer中的nullptr取消引用. #10641 (alexey-milovidov). - 使用
LowCardinality修复了optimize_skip_unused_shards. #10611 (Azat Khuzhin). - 修复了同步突变的处理条件变量. 在某些情况下, 该条件变量的信号可能会丢失. #10588 (Vladimir Chebotarev).
- 修复了在
loadStoredObject()完成之前调用createDictionary()时可能发生的崩溃. #10587 (Vitaly Baranov). - 修复了列
ALIAS的SELECT, 它的默认表达式类型与列类型不同. #10563 (Azat Khuzhin). - 实现了 DateTime64 和 String 值之间的比较. #10560 (Vasily Nemkov).
- 默认禁用
GROUP BYsharding_key优化 (optimize_distributed_group_by_sharding_key已经被引入并默认关闭, 由于 sharding_key 分析的技巧, 简单的例子是 sharding key 中的if) 并修复它为WITH ROLLUP/CUBE/TOTALS. #10516 (Azat Khuzhin). - 已修复 #10263. #10486 (Azat Khuzhin).
- 添加了关于
max_rows_to_sort设置的测试. #10268 (alexey-milovidov). - 添加了创建布隆过滤器索引的向后兼容性. #10551. #10569 (Winter Zhang).
ClickHouse 版本 v20.4.2.9, 2020-05-12
向后不兼容变更
- 系统表 (例如 system.query_log、system.trace_log、system.metric_log) 对小于 10 MiB 的部分使用合并数据部分格式. 自 20.3 版起支持压缩数据部分格式. 如果你打算降级到20.3以下的版本, 你应该手动删除
/var/lib/clickhouse/data/system/中系统日志的表数据. - 当字符串比较涉及 FixedString 并且比较的参数大小不同时, 将较小的字符串填充到较大的字符串的长度进行比较. 如果我们想象 FixedString 数据类型对应于 SQL CHAR,这是为了 SQL 兼容性. 这将关闭 #9272. #10363 (alexey-milovidov)
- 使 SHOW CREATE TABLE 多行. 现在它更具可读性, 更像 MySQL. #10049 (Azat Khuzhin)
- 添加了在
pointInPolygon函数中使用并默认启用的设置validate_polygons. #9857 (alexey-milovidov)
新特征
- 添加对从 ClickHouse 到 Zookeeper 的安全连接的支持 #10184 (Konstantin Lebedev)
- 支持自定义 HTTP 处理程序。 参见 #5436 的描述. #7572 (Winter Zhang)
- 添加 MessagePack 输入/输出格式. #9889 (Kruglov Pavel)
- 添加正则表达式输入格式. #9196 (Kruglov Pavel)
- 添加了输出格式
Markdown, 用于在 Markdown 文档中嵌入表格. #10317 (Kruglov Pavel) - 添加了对字典中自定义设置部分的支持. 还修复了问题 #2829. #10137 (Artem Streltsov)
- 在 DDL 查询中为
CREATE DICTIONARY添加了自定义设置支持. #10465 (Artem Streltsov) - 添加简单的服务器范围内存分析器, 当服务器内存使用率高于下一个分配阈值时, 它将收集分配上下文. #10444 (alexey-milovidov)
- 添加设置
always_fetch_merged_part限制副本自己合并部分, 并且总是喜欢从其他副本下载. #10379 (alesapin) - 添加函数
JSONExtractKeysAndValuesRaw, 它从JSON对象中提取原始数据. #10378 (hcz) - 将操作系统的内存使用添加到
system.asynchronous_metrics. #10361 (alexey-milovidov) - 添加了函数
least和greatest的通用变体. 现在它们可以处理任意数量的任意类型的参数. 这修复了 #4767 #10318 (alexey-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 以在 key 丢失时返回 NULL 而不是返回默认值. #10094 (Amos Bird)
- 如果设置了选项
transform_null_in, 则认为NULL等于IN运算符中的NULL. #10085 (achimbab) - 为 MergeTree 表引擎系列添加
ALTER TABLE ... RENAME COLUMN. #9948 (alesapin) - 支持并行分布式 INSERT SELECT. #9759 (vxider)
- 添加在分布式上查询分布式的能力 (不带
distributed_group_by_no_merge) ... #9923 (Azat Khuzhin) - 添加函数
arrayReduceInRanges, 它聚合给定范围内的数组元素. #9598 (hcz) - 在 prometheus 导出器上添加字典状态. #9622 (Guillaume Tassery)
- 添加函数
arrayAUC. #8698 (taiyang-li) - 支持
DROP VIEW语句以获得更好的TPC-H兼容性. #9831 (Amos Bird) - 将
strict_order选项添加到 windowFunnel(). #9773 (achimbab) - 支持
DATE和TIMESTAMPSQL 操作符, 例如选择日期'2001-01-01'. #9691 (Artem Zuikov)
实验功能
- 添加了实验性数据库引擎 Atomic. 它支持非阻塞
DROP和RENAME TABLE查询以及原子EXCHANGE TABLES t1 AND t2查询. #7512 (tavplubix) - 对 S3 上的 ReplicatedMergeTree 的初始支持 (它以次优方式工作). #10126 (Pavel Kovalenko)
Bug 修复
- 修复了
MATERIALIZED VIEW内部查询中不正确的标量结果, 以防该查询包含相关表. #10603 (Nikolai Kochetov) - 修复了当
readonly=2和cancel_http_readonly_queries_on_client_close=1时导致 HTTP 请求卡在客户端关闭连接上的错误. #10684 (tavplubix) - 在服务器启动时抛出异常时修复 StorageBuffer 中的段错误. 修复 #10550 #10609 (tavplubix)
- 查询
SYSTEM DROP DNS CACHE现在还删除用于检查是否允许用户从某些 IP 地址连接的缓存. #10608 (tavplubix) - 修复在一个查询中使用多个具有相同集合的
IN运算符. 修复 #10539 #10686 (Anton Popov) - 使用嵌套类型修复
generateRandom中的崩溃. 修复 #10583. #10734 (Nikolai Kochetov) - 修复合并后可能发生的
SummingMergeTree中LowCardinality(FixedString)键列的数据损坏. 修复 #10489. #10721 (Nikolai Kochetov) - 修复 aggregation_memory_efficient_merge_threads 设置的逻辑. #10667 (palasonic1)
- 修复消失的总数. 如果查询具有
JOIN或带有外部WHERE条件的子查询, 则总计可能被过滤。 修复#10674 #10698 (Nikolai Kochetov) - 修复启用了
distributed_aggregation_memory_efficient的远程查询缺乏并行执行的问题. 修复 #10655 #10664 (Nikolai Kochetov) - 使用
LIMIT修复查询的可能不正确的行数. 修复 #10566, #10709 #10660 (Nikolai Kochetov) - 修复索引损坏, 在某些情况下将合并部分合并到另一个合并部分后可能会发生这种情况. #10531 (Anton Popov)
- 修复当mutation完成所有部分, 但在
is_done=0中挂掉的情况. #10526 (alesapin) - 修复 unix 纪元开始时与 UTC 有小数偏移的时区的溢出. 修复 #9335. #10513 (alexey-milovidov)
- 更好的输入格式诊断. 修复 #10204 #10418 (tavplubix)
- 修复
simpleLinearRegression()中大整数上的数字溢出. #10474 (hcz) - 修复分布式关闭中的use-after-free, 避免等待发送所有批次 #10491 (Azat Khuzhin)
- 将 CA 证书添加到 clickhouse-server docker 镜像. #10476 (filimonov)
- 修复使用
addressToLine函数或 AggregateFunctionState 列时可能发生的罕见无限循环. #10466 (Alexander Kuzmenkov) - 在分布式查询期间处理zookeeper
no node error. #10050 (Daniel Chen) - 修复更改列的默认值后服务器无法附加表的错误. #10441 (alesapin)
- 将默认表达式类型隐式转换为 ALIAS 列的列类型. #10563 (Azat Khuzhin)
- 如果
ATTACH DATABASE失败, 不要删除元数据目录. #10442 (Winter Zhang) - 避免依赖系统 tzdata. 修复了在 CentOS 8 上加载
Africa/Casablanca时区的问题. #10211 #10425 (alexey-milovidov) - 如果数据以仲裁插入然后被删除 (DROP PARTITION、TTL 等), 则修复一些问题. 它导致在 SELECT 中卡住 INSERT 或误报异常. 修复 #9946 #10188 (Nikita Mikhaylov)
- 创建 BloomFilter 索引时检查参数的数量和类型 #9623 #10431 (Winter Zhang)
- 更喜欢
fallback_to_stale_replicas而不是skip_unavailable_shards, 否则当两个设置都指定并且没有最新的副本时, 查询将失败 (来自@alex-zaitsev的补丁 ). #10422 (Azat Khuzhin) - 修复带有 ARRAY JOIN、ORDER BY 和 LIMIT 的查询可能返回不完整结果的问题. 修复 #10226. #10427 (Vadim Plakhtinskiy)
- 在 DETACH/ATTACH 之后将数据库名称添加到字典名称. 修复 system.dictionaries 表和
SYSTEM RELOAD查询. #10415 (Azat Khuzhin) - 修复处理器管道中极端情况可能导致的错误结果. #10131 (Nikolai Kochetov)
- 修复启用设置
distributed_group_by_no_merge时可能出现的段错误 (在 20.3.7.46 中由 #10131 引入). #10399 (Nikolai Kochetov) - 修复
Array(Tuple(...))数据类型的错误扁平化. 修复 #10259 #10390 (alexey-milovidov) - 修复 JOIN 内的常量列名可能与 JOIN 外的常量名冲突. #9950 (Alexander Kuzmenkov)
- 在 Block::sortColumns() 之后修复列的顺序. #10826 (Azat Khuzhin)
- 修复
ConcatProcessor中可能发生的Pipeline stuck错误,该错误可能在远程查询中发生. #10381 (Nikolai Kochetov) - 不要为聚合预留磁盘. 修复 #9241 #10375 (Azat Khuzhin)
- 修复了时区的日期时间函数的错误行为, 这些时区在 UTC 的正负偏移量之间发生了变化 (例如 Pacific/Kiritimati). 修复 #7202 #10369 (alexey-milovidov)
- 避免在
dictIsIn函数中出现无限循环. 修复 #515. #10365 (alexey-milovidov) - 默认禁用 GROUP BY sharding_key 优化并修复 WITH ROLLUP/CUBE/TOTALS. #10516 (Azat Khuzhin)
- 检查零件时检查错误代码, 如果错误类似于
not enough memory, 请不要将零件标记为损坏. 修复 #6269 #10364 (alexey-milovidov) - 在系统表中显示有关未加载词典的信息. #10234 (Vitaly Baranov)
- 如果服务器在表启动前关闭, 则修复 StorageBuffer 中的 nullptr 取消引用. #10641 (alexey-milovidov)
- 修复了
ReplicatedMergeTree中的DROP与OPTIMIZE竞赛. 如果存在并发的 OPTIMIZE 查询, 则 DROP 可能会在 ZooKeeper 的副本路径中留下一些垃圾. #10312 (tavplubix) - 修复
Logical error: CROSS JOIN has expressions错误, 用于使用逗号和名称连接混合的查询. 修复 #9910 #10311 (Artem Zuikov) - 使用
max_bytes_before_external_group_by修复查询. #10302 (Artem Zuikov) - 修复在某些情况下限制解析器中最大递归深度的问题. 此修复 #10283 此修复可能会引入轻微的不兼容性: 通过 clickhouse-client 进行长时间和深度查询可能会拒绝工作, 您应该调整设置
max_query_size和max_parser_depth相应. #10295 (alexey-milovidov) - 允许对多个 JOIN 使用
count(*). 修复 #9853 #10291 (Artem Zuikov) - 使用
max_rows_to_group_by和group_by_overflow_mode = 'break'修复错误Pipeline stuck. #10279 (Nikolai Kochetov) - 修复使用 DDL 查询创建
range_hashed字典时出现的Cannot add column错误. 修复 #10093. #10235 (alesapin) - 修复罕见的可能异常
Cannot drain connections: cancel first. #10239 (Nikolai Kochetov) - 修复了 ClickHouse 会抛出
Unknown function lambda的错误. 当用户尝试在 ENGINE = Replicated* 的表上运行 ALTER UPDATE/DELETE 时出现错误消息. 检查非确定性函数现在可以正确处理 lambda 表达式. #10237 (Alexander Kazakov) - 修复了当 SELECT ... FROM system.tables 在具有惰性引擎的数据库上运行时发生的 StorageSystemTables 中相当罕见的段错误. #10209 (Alexander Kazakov)
- 当查询实际上应该在 LIMIT 停止时, 修复可能的无限查询执行, 同时从无限源 (如
system.numbers或system.zeros)读取. #10206 (Nikolai Kochetov) - 修复了 Date 类型的
generateRandom函数. 这修复了 #9973. 修复了将 2106 年的日期插入到使用旧式分区的 MergeTree 表但分区以 1970 年命名的边缘情况. #10218 (alexey-milovidov) - 如果 View 的表定义与 SELECT 查询不对应, 则转换类型. 这修复了 #10180 and #10022 #10217 (alexey-milovidov)
- 修复 RFC-2822 中字符串的
parseDateTimeBestEffort, 当一周中的某一天是星期二或星期四时. 这修复了 #10082 #10214 (alexey-milovidov) - 修复 JOIN 内的常量列名可能与 JOIN 外的常量名冲突. #10207 (alexey-milovidov)
- 在存在数组连接函数的情况下修复移动到前置位置优化 (在某些情况下). 这修复了#10092 #10195 (alexey-milovidov)
- 修复本机 mysql-connector-java (JDBC) 的 SCRAMBLE 中出现分隔符的问题. #10140 (BohuTANG)
- 修复未指定数据库时使用当前数据库进行访问检查的问题. #10192 (Vitaly Baranov)
- 用合并部分修复表的 ALTER. #10130 (Anton Popov)
- 添加了通过
allow_nondeterministic_mutations设置放宽对突变中非确定性函数使用限制的能力. #10186 (filimonov) - 修复字典调用
DROP TABLE的问题. #10165 (Azat Khuzhin) - 如果在将
INSERT插入分布式表时结构不匹配, 则转换块. #10135 (Azat Khuzhin) - 当插入的块被带有分区键的部分分割时,记录的行数不正确 (作为所有部分的总和). #10138 (alexey-milovidov)
- 为 MySQL 数据库引擎添加一些参数检查和支持标识符参数. #10077 (Winter Zhang)
- 在创建新副本时修复不正确的
index_granularity_bytes检查. 修复 #10098. #10121 (alesapin) - 当表包含跳过索引时, 修复
CHECK TABLE查询中的错误. #10068 (alesapin) - 修复嵌套表中只有一个分片的 Distributed-over-Distributed 问题. #9997 (Azat Khuzhin)
- 使用
JOIN和UNION ALL修复查询可能丢失的行. 修复 #9826, #10113. ... #10099 (Nikolai Kochetov) - 修复使用本地 clickhouse 服务器作为源时字典中的错误. 如果字典和源中的类型不兼容, 可能会导致内存损坏. #10071 (alesapin)
- 修复了从不存在
/table/replicas/replica_name/metadata节点的旧 ClickHouse 版本更新时复制表启动的问题. 修复 #10037. #10095 (alesapin) - 修复错误
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 #9972 (Artem Zuikov)
- 修复
SYSTEM RESTART REPLICAS中可能出现的死锁. #9955 (tavplubix) - 修复用于远程查询执行的线程数 (性能回归, 自 20.3 起). 当来自
Distributed表的查询在本地和远程分片上同时执行时, 就会发生这种情况. 修复 #9965 #9971 (Nikolai Kochetov) - 修复了
ATTACH PART中的DeleteOnDestroy逻辑, 这可能导致自动删除附加部分并添加了一些测试. #9410 (Vladimir Chebotarev) - 修复
ON CLUSTERDDL 查询在服务器启动时冻结的错误. #9927 (Gagan Arneja) - 修复了在某些数据库查询的处理阶段之一未检索到必要表的错误. 修复 #9699. #9949 (achulkov2)
- 修复
JOIN与TOTALS一起出现时 Not found column in block 错误. 修复 #9839 #9939 (Artem Zuikov) - 修复解析 CREATE USER 命令中设置的多个主机. #9924 (Vitaly Baranov)
- 修复连接表引擎的
TRUNCATE. (#9917). #9920 (Amos Bird) - 修复
ReplicatedMergeTree中删除和优化之间的竞争条件. #9901 (alesapin) - 当设置了
optimize_skip_unused_shards时, 修复分布式的DISTINCT. #9808 (Azat Khuzhin) - 修复 ALTER 中的
scalar does not exist错误 (#9878). ... #9904 (Amos Bird) - 修复
distributed_product_mode=\'local\'中的限定名称错误. 修复 #4756 #9891 (Artem Zuikov) - 对于 INSERT 查询, 分片现在确实将启动器的设置限制到它们的约束, 而不是抛出异常. 此修复允许将 INSERT 查询发送到具有其他约束的分片. 此更改改进了修复 #9447. #9852 (Vitaly Baranov)
- 在向 Kafka 代理提交偏移量时添加一些重试, 因为如果在
offsets.commit.timeout.ms期间没有足够的副本可用于__consumer_offsets主题, 它可以拒绝提交. #9884 (filimonov) - 修复在
WHERE中使用基础表的虚拟列时的分布式引擎行为. #9847 (Azat Khuzhin) - 修复了函数参数的时区使用不正确的一些情况. #9574 (Vasily Nemkov)
- 当查询在分布式表上具有 PREWHERE 和 WHERE 并且
SET分布式产品模式 = 'local'时, 修复Different expressions with the same alias错误. #9871 (Artem Zuikov) - 修复具有复合主键的表的突变过多的内存消耗. 这修复了 #9850. #9860 (alesapin)
- 修复了从设置
allow_introspection_functions计算内省函数的授权. #9840 (Vitaly Baranov) - 修复 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) - 修复
COMMA to CROSS JOIN rewriter is not enabled or cannot rewrite query错误, 以防在表列表中使用 COMMA JOIN 进行子查询 (即在 WHERE 中). 修复 #9782 #9830 (Artem Zuikov) - 修复了设置
optimize_skip_unused_shards时服务器崩溃并且键的表达式无法转换为其字段类型的问题. #9804 (Azat Khuzhin) - 修复
splitByString中的空字符串处理. #9767 (hcz) - 修复损坏的
ALTER TABLE DELETE COLUMN查询合并部分. #9779 (alesapin) - 修复了通过 http (使用处理器管道) 查询时缺少的
rows_before_limit_at_least. 修复 #9730 #9757 (Nikolai Kochetov) - 修复
ALTER查询 (突变) 中的过多内存消耗. 这修复了 #9533 and #9670. #9754 (alesapin) - 修复可能的永久性
Cannot schedule a task错误. #9154 (Azat Khuzhin) - 修复外部字典 DDL 中反引号的错误. 修复 #9619. #9734 (alesapin)
- 修复了
text_log中的数据竞争. 它不对应任何真正的错误. #9726 (alexey-milovidov) - 修复复制中的错误, 如果用户在以前的版本上执行了更改, 则不允许复制工作. 这修复了 #9645. #9652 (alesapin)
- 修复了
sumKahan和sumWithOverflow不正确的内部函数名称. 在远程查询中使用此函数时导致异常. #9636 (Azat Khuzhin) - 添加设置
use_compact_format_in_distributed_parts_names, 它允许将INSERT查询的文件以更紧凑的格式写入Distributed表. 这修复了 #9647. #9653 (alesapin) - 在 JOIN 键中使用低基数修复 RIGHT 和 FULL JOIN. #9610 (Artem Zuikov)
- 修复
MergeTreeRangeReader中可能出现的异常Size of filter does not match size of columnandInvalid number of rows in Chunk和Invalid number of rows in Chunk. 在某些情况下, 它们可能会在执行PREWHERE时出现. #9612 (Anton Popov) - 允许具有内部复制的分布式表的
ALTER ON CLUSTER. 这修复了 #3268 #9617 (shinoi2) - 如果您编写像
time + 1这样的简单算术表达式 (与像time + INTERVAL 1 SECOND这样的表达式相反), 则修复了未保留时区的问题. 这修复了 #5743 #9323 (alexey-milovidov)
改进
- 将 DateTime 与字符串文字进行比较时使用时区. 这修复了 #5206. #10515 (alexey-milovidov)
- 如果无法从文本输入格式解析 Decimal 值, 则打印详细的诊断信息. #10205 (alexey-milovidov)
- 为分布式/缓冲调度池添加任务/内存指标. #10449 (Azat Khuzhin)
- 一旦准备好在 clickhouse-local 和 HTTP 接口中进行 SELECT DISTINCT 查询, 就立即显示结果. 这修复了 #8951 #9559 (alexey-milovidov)
- 允许使用
SAMPLE OFFSET查询代替cityHash64(PRIMARY KEY) % N == n在clickhouse-copier中进行拆分. 要使用此功能, 请将--experimental-use-sample-offset 1作为命令行参数传递. #10414 (Nikita Mikhaylov) - 如果第一列的值中不能包含 BOM, 则允许在 TSV 中解析 BOM. 这修复了 #10301 #10424 (alexey-milovidov)
- 添加 Avro 嵌套字段插入支持. #10354 (Andrew Onyshchuk)
- 指定相同类型时, 允许在非修改数据模式下更改列. #10382 (Vladimir Chebotarev)
- 在 GROUP BY 分片键上自动
distributed_group_by_no_merge(如果设置了optimize_skip_unused_shards). #10341 (Azat 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. #10362 (alexey-milovidov) - 添加配置选项
system_tables_lazy_load. 如果设置为 false, 则在服务器启动时加载带有日志的系统表. Alexander Burmak, Svyatoslav Tkhon Il Pak, #9642 #10359 (alexey-milovidov) - 使用后台线程池 (background_schedule_pool_size) 进行分布式发送. #10263 (Azat Khuzhin)
- 使用后台线程池进行后台缓冲区刷新. #10315 (Azat Khuzhin)
- 支持删除不完整写入部分的一种特殊情况. 这修复了#9940. #10221 (alexey-milovidov)
- 使用 isInjective() 在此类函数的手动列表上进行 GROUP BY 优化. #10342 (Azat Khuzhin)
- 如果客户端在连接时立即发送 RST 数据包, 请避免在日志中打印错误消息. 这是具有 keepalived 和 VRRP 的 IPVS 平衡器的典型行为. 这修复了 #1851 #10274 (alexey-milovidov)
- 允许为浮点类型解析
+inf. 这将关闭 #1839 #10272 (alexey-milovidov) - 为嵌套类型实现了
generateRandom表函数. 这将关闭 #9903 #10219 (alexey-milovidov) - 在 MySQL 兼容接口中提供
max_allowed_packed将帮助一些客户端通过 MySQL 协议与 ClickHouse 通信. #10199 (BohuTANG) - 允许 GLOBAL IN 的文字 (即
SELECT * FROM remote('localhost', system.one) WHERE dummy global in (0)). #10196 (Azat Khuzhin) - 修复 clickhouse-client 交互模式下的各种小问题. #10194 (alexey-milovidov)
- 避免多余的字典加载 (system.tables, DROP/SHOW CREATE TABLE). #10164 (Azat Khuzhin)
- 更新到 RWLock:getLock() + 实现的超时参数重新设计为阶段公平. #10073 (Alexander Kazakov)
- 增强与本机 mysql-connector-java(JDBC) 的兼容性. #10021 (BohuTANG)
toString函数被认为是单调的, 即使在使用 String 或 LowCardinality(String) 参数的重言式情况下也可以用于索引分析. #10110 (Amos Bird)- 向命令
{CREATE|DROP} USER/ROLE/ROW POLICY/SETTINGS PROFILE/QUOTA、GRANT添加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) - 系统日志表现在默认使用多态部分. #9905 (Anton Popov)
- 将类型列添加到 system.settings/merge_tree_settings. #9909 (Azat Khuzhin)
- 尽早在服务器启动时检查可用的 CPU 指令. #9888 (alexey-milovidov)
- 从突变中移除
ORDER BY阶段, 因为我们从单个线程中的单个有序部分读取. 还添加检查突变中的行是否按排序键排序并且不违反此顺序. #9886 (alesapin) - 在左侧为 FixedString 实现运算符 LIKE. 这是更好地支持 TPC-DS 查询所必需的. #9890 (alexey-milovidov)
- 添加
force_optimize_skip_unused_shards_no_nested将禁用嵌套分布式表的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 表达式中检查使用
Date或DateTime列的方法. #9967 (Vladimir Chebotarev) - DiskS3硬链接优化实现. #9760 (Pavel Kovalenko)
- 如果
set multiple_joins_rewriter_version = 2启用多个 JOIN 重写的第二个版本, 以保持列名不冲突. 它支持多个带有USING的JOIN, 并允许select *用于带有子查询的JOIN. #9739 (Artem Zuikov) - StorageMergeTree 的
non-blocking更改的实现. #9606 (alesapin) - 添加 MergeTree 对 DiskS3 的全面支持. #9646 (Pavel Kovalenko)
- 扩展
splitByString以支持空字符串作为分隔符. #9742 (hcz) - 将
timestamp_ns列添加到system.trace_log. 它包含跟踪事件的高清时间戳, 并允许构建线程配置文件的时间线 ("火焰图"). #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. 允许使用 JOIN 重写
dictGet()函数. 它本身并不是向后不兼容的, 但可能会在某些安装中发现 #8400. #10133 (Artem Zuikov) - 当目标表支持时启用物化视图的并行插入. #10052 (vxider)
- 使用单调函数改进指数分析的性能. #9607#10026 (Anton Popov)
- 使用 SSE2 或 SSE4.2 SIMD 内在函数来加速布隆过滤器中的标记化. #9968 (Vasily Nemkov)
- 在
IN运算符的右侧使用显式定义的集合提高查询的性能. 这修复了 20.3 版中的性能回归. #9740 (Anton Popov) - 现在, clickhouse-copier 将每个分区分成几部分并独立复制. #9075 (Nikita Mikhaylov)
- 添加更多聚合方法. 例如,TPC-H 查询 1 现在将选择
FixedHashMap<UInt16, AggregateDataPtr>并获得 25% 的性能提升 #9829 (Amos Bird) - 在预限制转换中对多个流使用单行计数器. 这有助于避免在带有
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 #10511 (alexey-milovidov) - 拆分 fuzzer 和 sanitizer 配置, 使构建配置与 Oss-fuzz 兼容. #10494 (kyprizel)
- 修复了 clang-10 上的 clang-tidy. #10420 (alexey-milovidov)
- 在错误消息中显示绝对路径. 否则 KDevelop 无法导航到正确的文件, 而是打开一个新文件. #10434 (alexey-milovidov)
- 添加了
ASAN_OPTIONS环境变量以使用 Address sanitizer 调查 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 更新为上游主服务器. 修复了 TLS 连接可能失败并显示消息
OpenSSL SSL_read: error:14094438:SSLroutines:ssl3_read_bytes:tlsv1 alert internal error和SSL Exception: error:2400006E:random number generator::error retrieving entropy时的问题. 该问题存在于 20.1 版中. #8956 (alexey-milovidov) - 修复 clang-10 构建. #10238 #10370 (Amos Bird)
- 为[Parallel INSERT for materialized view] (https://github.com/ClickHouse/ClickHouse/pull/10052)添加性能测试. #10345 (vxider)
- 修复片状测试
test_settings_constraints_distributed.test_insert_clamps_settings. #10346 (Vitaly Baranov) - 添加 util 以在 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)
- 对分布式实时视图表的初始支持. #10179 (vzakaznikov)
- 在 MergeTreeIndexFullText 中修复 (false) MSan 报告. 该问题首先出现在 #9968. #10801 (alexey-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)
- 更新
builderdocker 镜像. 此镜像未在 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) - 对于变更日志脚本, 如果合并提交被挑选到发布分支, 则从提交描述中获取 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_lock、pthread_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 修复
- 修复 sharding_key 中的 dictGet (以及类似的地方, 即当函数上下文被永久存储时). #16205 (Azat Khuzhin).
- 如果查询具有
WHERE、PREWHERE和GLOBAL IN, 则修复来自Distributed表的查询的错误空结果. 修复 #15792. #15933 (Nikolai Kochetov). - 修复
TSV/CSVWithNames格式中缺失或过多的标题. 这修复了 #12504. #13343 (Azat Khuzhin).
ClickHouse 版本 v20.3.20.6-lts, 2020-10-09
Bug 修复
- Mutation 可能会在
MOVE或REPLACE PARTITION之后等待一些不存在的部分, 或者在极少数情况下, 在DETACH或DROP PARTITION之后挂起。 已修复. #15724, #15537 (tavplubix). - 修复带有大量子查询的查询挂起到
MySQL引擎的同一个表. 以前, 如果查询中有超过 16 个子查询到同一个MySQL表, 它会永远挂起. #15299 (Anton Popov). - 当查询在 Merge 表上有 JOIN 时,修复 GROUP BY 中的
Unknown identifier. #15242 (Artem Zuikov). - 当子查询包含 finalizeAggregation 函数时, 修复使谓词下推工作. 修复 #14847. #14937 (filimonov).
- 并发
ALTER ... REPLACE/MOVE PARTITION ...查询可能会导致死锁. 已修复. #13626 (tavplubix).
ClickHouse 版本 v20.3.19.4-lts, 2020-09-18
Bug 修复
- 当被查询的列具有
DEFAULT表达式时, 修复SELECT查询中的罕见错误, 该表达式依赖于另一列, 该列也具有DEFAULT并且不存在于选择查询中且不存在于磁盘上. 部分修复 #14531. #14845 (alesapin). - 修复了在赋值表达式和常量值 (如
UPDATE x = 42) 中使用 Nullable 列的ALTER UPDATE突变导致列或段错误中的值不正确时的错误. 修复 #13634, #14045. #14646 (alesapin). - 修复错误的十进制乘法结果导致结果列小数位数错误. #14603 (Artem Zuikov).
改进
- 支持合并部分的自定义编解码器. #12183 (Anton Popov).
ClickHouse 版本 v20.3.18.10-lts, 2020-09-08
Bug 修复
- 如果
PipelineExecutor本身发生异常, 则停止查询执行. 这可以防止罕见的查询挂起. 续 #14334. #14402 (Nikolai Kochetov). - 修复了有时缓存字典从源返回默认值而不是当前值时的行为. #13624 (Nikita Mikhaylov).
- 当数据库或表的名称包含点时, 修复从 users.xml 解析行策略. 这修复了#5779, #12527. #13199 (Vitaly Baranov).
- 修复 CAST(Nullable(String), Enum()). #12745 (Azat Khuzhin).
- 修复了
text_log中的数据竞争. 它不对应任何真正的错误. #9726 (alexey-milovidov).
改进
- 修复长查询的错误错误. 为了正确查询, 可能会出现除
Max query size exceeded之外的语法错误. #13928 (Nikolai Kochetov). - 当在 parseDateTimeBestEffortOrNull/Zero 函数中没有完全解析值时, 返回 NULL/零. 这修复了 #7876. #11653 (alexey-milovidov).
性能改进
- 使用 LowCardinality 稍微优化非常短的查询. #14129 (Anton Popov).
构建/测试/打包改进
- 修复迁移到 clang-10 后出现的 HashTable 中的 UBSan 报告 (向 nullptr 添加零). #10638 (alexey-milovidov).
ClickHouse 版本 v20.3.17.173-lts, 2020-08-15
Bug 修复
- 使用 StorageMerge 和
set enable_optimize_predicate_expression=1修复 JOIN 中的崩溃. #13679 (Artem Zuikov). - 修复无效的返回类型, 用于将元组与
NULL元素进行比较. 修复#12461. #13420 (Nikolai Kochetov). - 使用常量列和主键的
ORDER BY前缀修复查询. #13396 (Anton Popov). - 返回在 roundUpToPowerOfTwoOrZero() 中设置 MSB 的数字的传递数字. #13234 (Azat Khuzhin).
ClickHouse 版本 v20.3.16.165-lts 2020-08-10
Bug 修复
- 修复了当 unix 时间戳作为参数传递时
parseDateTimeBestEffort函数中的错误. 这修复了 #13362. #13441 (alexey-milovidov). - 修复了在具有 NaN 值的 Float 类型上调用的
uniqExact、topK、sumDistinct和类似聚合函数的潜在低性能和稍微不正确的结果. 它还在调试版本中触发断言. 这修复了 #12491. #13254 (alexey-milovidov). - 如果将可空 constexpr 作为不是文字 NULL 的 cond 的固定函数. 修复 #12463. #13226 (alexey-milovidov).
- 在数组元素为 Nullable 且数组下标也可为 Null 的情况下, 修复了
arrayElement函数中的断言. 这修复了 #12172. #13224 (alexey-milovidov). - 修复了对从本地副本进行选择的线程数的不必要限制. #12840 (Nikolai Kochetov).
- 修复了查询
WITH TOTALS时可能出现的数据中可能出现的额外溢出行. #12747 (Nikolai Kochetov). - 修复了大元组的性能, 这些元组在
IN部分被解释为函数. 当用户出于某种晦涩的原因编写WHERE x IN tuple(1, 2, ...)而不是WHERE x IN (1, 2, ...)的情况. #12700 (Anton Popov). - 修复了 input_format_parallel_parsing 的内存跟踪 (通过将线程附加到组). #12672 (Azat Khuzhin).
- 修复了 #12293 当子查询包含 with 子句时允许推送谓词. #12663 (Winter Zhang).
- 修复了 #10572 使用 const 表达式修复布隆过滤器索引. #12659 (Winter Zhang).
- 当代理不可用时 (不仅如此) 修复了 StorageKafka 中的 SIGSEGV. #12658 (Azat Khuzhin).
- 修复了带有缓存布局的外部字典中的竞争条件, 这可能导致服务器崩溃. #12566 (alesapin).
- 修复了当
enable_mixed_granularity_parts=1时, 在ALTER DELETE查询后导致旧部件损坏的错误. 修复 #12536. #12543 (alesapin). - 对于参数数目无效的函数
in更好的异常信息. #12529 (Anton Popov). - 修复了性能问题,同时读取合并部分. #12492 (Anton Popov).
- 修复了启用
text_log时的死锁. #12452 (alexey-milovidov). - 修复了 StorageMerge 时可能出现的段错误. 关闭 #12054. #12401 (tavplubix).
- 修复了带有
-State和Nullable参数的聚合函数的TOTALS/ROLLUP/CUBE. 这修复了 #12163. #12376 (alexey-milovidov). - 修复了
WITH FILL修饰符中列的顺序. 以前不遵守ORDER BY语句的列顺序. #12306 (Anton Popov). - 当存在按虚拟列 (如
Merge表中的_table) 或系统表中的index列过滤数据 (例如从system.tables查询时按数据库名称过滤) 时, 避免bad cast异常, 并且这个表达式返回Nullable类型. 这修复了 #12166. #12305 (alexey-milovidov). TrieDictionary加载失败后显示错误. #12290 (Vitaly Baranov).- 对于可能导致崩溃的空数组, 函数
arrayFill工作不正确. 这修复了 #12263. #12279 (alexey-milovidov). - 实现到
LowCardinality类型的通用类型的转换. 这允许对具有 LowCardinality 列和其他列的表执行 UNION ALL. 这修复了 #8212. This fixes #4342. #12275 (alexey-milovidov). - 修复了在某些特殊类型的
StorageFile标头中多次连续插入期间多次写入时的行为. 这已修复 #6155. #12197 (Nikita Mikhaylov). - 修复了 UInt8 值不等于 0 或 1 时的逻辑函数. #12196 (Alexander Kazakov).
- 在 GROUP BY 内射函数消除期间修复了
dictGet参数检查. #12179 (Azat Khuzhin). - 修复了
ALTER DELETE中的错误逻辑, 当条件评估为 NULL 时会导致删除记录. 这修复了 #9088. This closes #12106. #12153 (alexey-milovidov). - 修复了在存在别名的情况下发送到外部 DBMS (例如 MySQL、ODBC) 的查询转换. 这修复了 #12032. #12151 (alexey-milovidov).
- 修复了整数除法中的潜在溢出. 这修复了 #12119. #12140 (alexey-milovidov).
- 修复了
greatCircleDistance、geoDistance中潜在的无限循环. 这修复了 #12117. #12137 (alexey-milovidov). - 对于带有连接或附加到系统日志 (ystem.query_log、metric_log 等) 或 engine=Buffer 基础表的子查询的物化视图, 避免
There is no query异常. #12120 (filimonov). - 修复了由于线程总数限制错误导致的带有
UNION的选择的性能. 修复 #12030. #12103 (Nikolai Kochetov). - 使用
-StateResample组合器修复了段错误. #12092 (Anton Popov). - 修复了不必要的限制从
VIEW中选择的线程数. 修复 #11937. #12085 (Nikolai Kochetov). - 修复了使用错误类型
PREWHERE时可能发生的崩溃. 修复#12053, #12060. #12060 (Nikolai Kochetov). - 修复了具有
LowCardinality类型的函数defaultValueOfArgumentType的Expected single dictionary argument for function错误. 修复 #11808. #12056 (Nikolai Kochetov). - 修复了带有
Tuple(LowCardinality)参数的高阶函数的错误Cannot capture column. 修复 #9766. #12055 (Nikolai Kochetov). - 加载数据库时并行解析表元数据. 这修复了有大量表时服务器启动缓慢的问题. #12045 (tavplubix).
- 使
topK聚合函数为 Enum 类型返回 Enum. 这修复了 #3740. #12043 (alexey-milovidov). - 修复了否为常量表达式的约束检查. 这修复了 #11360. #12042 (alexey-milovidov).
- 修复了元组与
Nullable列的不正确比较. 修复 #11985. #12039 (Nikolai Kochetov). - 修复了在调用具有不同大小的
FixedString类型参数的函数if时出现错误结果和潜在崩溃的问题. 这修复了#11362. #12021 (alexey-milovidov). - 如果使用偏移量
-9223372036854775808调用函数, 则以函数neighbor作为唯一返回表达式的查询可能会返回空结果. 这修复了 #11367. #12019 (alexey-milovidov). - 修复了 generateRandom 中可能导致崩溃的潜在数组大小溢出. 这修复了 #11371. #12013 (alexey-milovidov).
- 修复了潜在的浮点异常. 这将关闭 #11378. #12005 (alexey-milovidov).
- 修复了服务器启动时日志消息中错误的设置名称. #11997 (alexey-milovidov).
- 修复了
Values格式中的Query parameter was not set问题. 修复 #11918. #11936 (tavplubix). - 在查询 (参数化查询) 中保留替换的别名. 这修复了 #11914. #11916 (alexey-milovidov).
- 修复了解析 DateTime64 时潜在的浮点异常. 这修复了 #11374. #11875 (alexey-milovidov).
- 通过
HTTP接口修复内存记帐 (对于wait_end_of_query=1可能很重要). #11840 (Azat Khuzhin). - 修复了条件为 NULL 的
if()的错误结果. #11807 (Artem Zuikov). - 在检查相等性之前解析存储在 zookeeper 中的元数据. #11739 (Azat Khuzhin).
- 修复了
LIMIT n WITH TIES与ORDER BY语句一起使用的问题, 该语句包含别名. #11689 (Anton Popov). - 修复缓存字典中未初始化内存的潜在读取. #10834 (alexey-milovidov).
性能改进
- 索引不用于带文字的 IN 运算符, 在 v19.3 前后引入了性能回归. 这修复了 #10574. #12062 (nvartolomei).
ClickHouse 版本 v20.3.12.112-lts 2020-06-25
Bug 修复
- 修复在 prewhere 条件下使用
Nullable列导致的罕见崩溃. 续 #11608. #11869 (Nikolai Kochetov). - 不允许在高阶函数中使用 arrayJoin. 它导致协议同步中断. 这关闭了 #3933. #11846 (alexey-milovidov).
- 修复使用过多线程进行查询. #11788 (Nikolai Kochetov).
- 修复像
SELECT *, xyz.*这样的查询的意外行为, 这些查询在预期错误时成功. #11753 (hexiaoting). - 现在复制的提取将在元数据更改期间取消. #11744 (alesapin).
- 修复了由 Values 输入格式中复杂文字的错误类型推导导致的 LOGICAL_ERROR. #11732 (tavplubix).
- 修复
ORDER BY ... WITH FILL在 const 列上. #11697 (Anton Popov). - 与 XDBC 桥通信时传递适当的超时. 最近在检查桥接活性和接收元信息时没有遵守超时. #11690 (alexey-milovidov).
- 修复导致
system.mutations状态不正确的错误. 它可能表明整个突变已经完成, 但服务器在复制队列中仍有MUTATE_PART任务并尝试执行它们. 这修复了 #11611. #11681 (alesapin). - 添加对带有不区分大小写标志的正则表达式的支持. 这修复了 #11101 and fixes #11506. #11649 (alexey-milovidov).
- 如果设置了行级安全性,则删除琐碎的计数查询优化. 在以前的版本中, 用户获取表中记录的总数而不是过滤. 这修复了#11352. #11644 (alexey-milovidov).
- 修复字符串的布隆过滤器 (数据跳过索引). #11638 (Azat Khuzhin).
- 修复在 prewhere 条件下使用
Nullable列导致的罕见崩溃. (可能它以某种方式与 #11572 somehow). #11608 (Nikolai Kochetov). - 修复错误
Block structure mismatch, 用于从Buffer表中采样读取的查询. #11602 (Nikolai Kochetov). - 修复 clickhouse-client 的错误退出代码, 当 exception.code() % 256 = 0 时. #11601 (filimonov).
- 修复服务器启动时有关
Mark cache size was lowered的日志消息中的小错误. 这将关闭 #11399. #11589 (alexey-milovidov). - 修复错误
Size of offsets does not match size of column, 用于查询中的PREWHERE column in (subquery)和ARRAY JOIN. #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. #11496 (alexey-milovidov).
- 当别名可以覆盖限定的列名, 修复分布式查询的错误结果. 修复 #9672 #9714. #9972 (Artem 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设置也很有用 (禁止读取非常过期的键). #10337 (Nikita Mikhaylov).
Bug 修复
- 修复了在启用
min_bytes_to_use_direct_io且 PREWHERE 处于活动状态并使用 SAMPLE 或大量线程时可能发生的Data compressed with different methods错误. 这修复了 #11539. #11540 (alexey-milovidov). - 修复编解码器的返回压缩大小. #11448 (Nikolai Kochetov).
- 当列具有带有非文字参数的压缩编解码器时修复服务器崩溃. 修复 #11365. #11431 (alesapin).
- 以 nan 为点修复 pointInPolygon. 修复 #11375. #11421 (Alexey Ilyukhov).
- 修复 JOIN 在 LowCarinality(T) 和 Nullable(T) 上的崩溃. #11380. #11414 (Artem Zuikov).
- 修复错误
USING键的错误代码. #11373. #11404 (Artem Zuikov). - 修复了带有纬度/经度范围之外的参数的 geohashesInBox. #11403 (Vasily Nemkov).
joinGet()函数更好的错误. #11389 (Artem Zuikov).- 修复具有外部排序和限制的查询可能出现的
Pipeline stuck错误. 修复 #11359. #11366 (Nikolai Kochetov). - 在 ReplicatedMergeTree 中发送零件期间删除冗余锁. #11354 (alesapin).
- 修复了多行模式下 clickhouse-client 对
\G(垂直输出)的支持. 这将关闭 #9933. #11350 (alexey-milovidov). - 修复直接从 StorageJoin 选择 (没有 JOIN) 时的崩溃和错误的可空性. #11340 (Artem Zuikov).
- 修复
quantilesExactWeightedArray中的崩溃问题. #11337 (Nikolai Kochetov). - 现在合并在
ALTER查询中更改元数据之前停止. #11335 (alesapin). - 通过再次设置
parallel_view_processing = 1并行写入MATERIALIZED VIEW. 修复 #10241. #11330 (Nikolai Kochetov). - 当提取的 JSON 具有不平衡的 { 或 [ 字符串时, 修复visitParamExtractRaw. #11318 (Ewout).
- 修复 ThreadPool 中非常罕见的竞争条件. #11314 (alexey-milovidov).
- 修复转换中潜在的未初始化内存. 示例:
SELECT toIntervalSecond(now64()). #11311 (alexey-milovidov). - 修复了如果表的主键中有 Array 列并且查询正在使用
empty或notEmpty函数按此列过滤时索引分析无法工作的问题. 这修复了 #11286. #11303 (alexey-milovidov). - 修复当查询速度估计可能不正确时的错误, 并且如果查询受到
max_network_bandwidth、max_execution_speed或priority设置的限制,min_execution_speed的限制可能无法工作或无法正常工作. 将timeout_before_checking_execution_speed的默认值更改为非零值, 否则设置min_execution_speed和max_execution_speed无效. 这修复了 #11297. 这修复了 #5732. 这修复了 #6228. 可用性改进:避免在clickhouse-client中将异常消息与进度条串联. #11296 (alexey-milovidov). - 修复读取 Protobuf 格式错误数据时崩溃的问题. 这修复了 #5957, fixes #11203. #11258 (Vitaly Baranov).
- 修复了缓存字典可以返回默认值而不是正常值 (只有过期键时) 的错误. 这仅影响字符串字段. #11233 (Nikita Mikhaylov).
- 修复错误
Block structure mismatch in QueryPipeline, 同时从内部查询中的常量读取VIEW. 修复 #11181. #11205 (Nikolai 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).
- 修复简单查询过多的线程预留 (优化减少线程数量, 在管道更改后部分中断). #11114 (Azat Khuzhin).
- 修复分布式查询的谓词优化 (
enable_optimize_predicate_expression=1) 对于带有HAVING部分的查询 (即需要在服务器启动器上进行过滤时), 通过保留表达式的顺序 (这足以修复), 并且还强制 聚合器在索引上使用列名. 修复: #10613, #11413. #10621 (Azat Khuzhin). - 引入提交重试逻辑, 以减少在极少数情况下, 偏移提交失败时从 Kafka 获取重复项的可能性. #9884 (filimonov).
性能改进
- 每次调用读取外部字典的任何函数时, 仅获取一次字典并检查访问权限. #10928 (Vitaly Baranov).
构建/测试/打包改进
ClickHouse 版本 v20.3.10.75-lts 2020-05-23
Bug 修复
- 如果没有最终确定, 则从突变终止任务中删除日志记录. #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中的错误, 该错误可能导致OPTIMIZE查询上的某些ALTER在它变为非活动状态后挂起等待某些副本. #10849 (tavplubix). - 修复
Block::sortColumns()之后的列顺序. #10826 (Azat Khuzhin). - 修复了当不要求引用标识符时
ODBC桥的问题. 修复 #7984. #10821 (alexey-milovidov). - 修复了
DateLUT中的UBSan和MSan报告. #10798 (alexey-milovidov). - 修复了关键条件下错误的类型转换. 修复#6287. #10791 (Andrew Onyshchuk)
- 修复了
parallel_view_processing行为. 现在, 如果发生异常, 所有对MATERIALIZED VIEW的插入都应该无一例外地完成. 修复 #10241. #10757 (Nikolai Kochetov). - 修复了组合符
-OrNull和-OrDefault与-State组合时的问题. #10741 (hcz). - 修复了带有嵌套类型的
generateRandom中的崩溃. 修复 #10583. #10734 (Nikolai Kochetov). - 修复了合并后可能发生的
SummingMergeTree中LowCardinality(FixedString)键列的数据损坏. 修复 #10489. #10721 (Nikolai Kochetov). - 修复了函数
h3EdgeAngle中可能出现的缓冲区溢出. #10711 (alexey-milovidov). - 修复了消失的总数. 如果查询具有连接或具有外部 where 条件的子查询, 则总计可能已被过滤. 修复 #10674. #10698 (Nikolai Kochetov).
- 修复了在一个查询中具有相同集合的
IN运算符的多次使用. #10686 (Anton Popov). - 修复了当
readonly=2和cancel_http_readonly_queries_on_client_close=1时导致 http 请求卡在客户端关闭的错误. 修复 #7939, #7019, #7736, #7091. #10684 (tavplubix). - 修复了
AggregateTransform构造函数中参数的顺序. #10667 (palasonic1). - 修复了启用
distributed_aggregation_memory_efficient时远程查询缺乏并行执行的问题. 修复#10655. #10664 (Nikolai Kochetov). - 修复了使用
LIMIT的查询可能不正确的行数. 修复 #10566, #10709. #10660 (Nikolai Kochetov). - 修复了当表有很多部分时锁定并发更改的错误. #10659 (alesapin).
- 修复了在
SYSTEM DROP DNS CACHE查询也删除缓存时的错误, 用于检查是否允许用户从某些 IP 地址连接. #10608 (tavplubix). - 修复了
MATERIALIZED VIEW内部查询中不正确的标量结果, 以防该查询包含相关表. #10603 (Nikolai Kochetov). - 修复了列
ALIAS的SELECT, 它的默认表达式类型与列类型不同. #10563 (Azat Khuzhin). - 实现了 DateTime64 和 String 值之间的比较. #10560 (Vasily Nemkov).
- 修复索引损坏, 在某些情况下将紧凑部分合并到另一个紧凑部分后可能会发生. #10531 (Anton Popov).
- 修复了所有部分mutation完成后, 在
is_done=0中挂掉的情况. #10526 (alesapin). - 修复了 unix 纪元开始时与
UTC有小数偏移的时区溢出. 这修复了 #9335. #10513 (alexey-milovidov). - 修复了
Distributed存储的不当关闭. #10491 (Azat Khuzhin). - 修复了
simpleLinearRegression中大整数上的数字溢出. #10474 (hcz).
构建/测试/打包改进
- 修复 LZ4 库中的 UBSan 报告. #10631 (alexey-milovidov).
- 修复 clang-10 构建. #10238. #10370 (Amos Bird).
- 添加了关于
max_rows_to_sort设置的失败测试. #10268 (alexey-milovidov). - 添加了在输入格式中打印诊断信息的一些改进. 修复 #10204. #10418 (tavplubix).
- 将 CA 证书添加到 clickhouse-server docker 镜像. #10476 (filimonov).
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
Bug 修复
- 修复了时区的日期时间函数的错误行为, 这些时区在 UTC 的正负偏移量之间发生了变化 (例如 Pacific/Kiritimati). 这修复了#7202 #10369 (alexey-milovidov)
- 修复启用
distributed_group_by_no_merge时可能出现的段错误 (在 20.3.7.46 中由 #10131 引入). #10399 (Nikolai Kochetov) - 修复
Array(Tuple(...))数据类型的错误扁平化. 这修复了 #10259 #10390 (alexey-milovidov) - 在聚合器中删除磁盘预留. 这修复了磁盘空间预留的错误, 该错误可能导致大型外部聚合即使成功完成也可能失败. #10375 (Azat Khuzhin)
- 修复了
ReplicatedMergeTree中的DROP与OPTIMIZE竞赛. 如果存在并发的 OPTIMIZE 查询, 则 DROP 可能会在 ZooKeeper 的副本路径中留下一些垃圾. #10312 (tavplubix) - 修复更改列默认值后服务器无法附加表的错误. #10441 (alesapin)
- 在加载表之前附加数据库失败时不要删除元数据目录. #10442 (Winter Zhang)
- 修复了一些错误, 当某些数据以法定人数插入, 然后以某种方式删除 (DROP PARTITION, TTL) 时, 这会导致插入卡住或 SELECT 中的误报异常. 这修复了 #9946 #10188 (Nikita 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. #10422 (Azat Khuzhin) - 修复带有 ARRAY JOIN、ORDER BY 和 LIMIT 的查询可能返回不完整结果的问题. 这修复了 #10226. 作者: Vadim Plakhtinskiy. #10427 (alexey-milovidov)
- 创建 BloomFilter 索引时检查参数的数量和类型. #9623 #10431 (Winter Zhang)
性能改进
- 在
IN运算符的右侧显式定义的集合和左侧的元组提高了查询的性能. 这修复了 20.3 版中的性能回归. #9740, #10385 (Anton Popov)
ClickHouse 版本 v20.3.7.46, 2020-04-17
Bug 修复
- 修复
Logical error: CROSS JOIN has expressions错误, 用于使用逗号和名称连接混合的查询. #10311 (Artem Zuikov). - 使用
max_bytes_before_external_group_by修复查询. #10302 (Artem Zuikov). - 在存在数组连接函数的情况下修复移动到前置位置优化 (在某些情况下). 这修复了#10092. #10195 (alexey-milovidov).
- 添加放宽对使用
allow_nondeterministic_mutations设置的突变中非确定性函数使用限制的能力. #10186 (filimonov).
ClickHouse 版本 v20.3.6.40, 2020-04-16
新特征
- 添加函数
isConstant. 此函数检查其参数是否为常量表达式并返回 1 或 0. 用于开发、调试和演示目的. #10198 (alexey-milovidov).
Bug 修复
- 使用
max_rows_to_group_by和group_by_overflow_mode = 'break'修复错误Pipeline stuck. #10279 (Nikolai Kochetov). - 修复罕见的可能异常
Cannot drain connections: cancel first. #10239 (Nikolai Kochetov). - 修复了 ClickHouse 会抛出
Unknown function lambda.的错误. 当用户尝试在 ENGINE = Replicated* 的表上运行 ALTER UPDATE/DELETE 时出现错误消息. 检查非确定性函数现在可以正确处理 lambda 表达式. #10237 (Alexander Kazakov). - 修复了 Date 类型的
generateRandom函数. 这修复了 #9973. 修复了将 2106 年的日期插入到使用旧式分区的 MergeTree 表但分区以 1970 年命名的边缘情况. #10218 (alexey-milovidov). - 如果 View 的表定义与 SELECT 查询不对应,则转换类型. 这修复了 #10180 and #10022. #10217 (alexey-milovidov).
- 修复 RFC-2822 中字符串的
parseDateTimeBestEffort, 当一周中的某一天是星期二或星期四时. 这修复了#10082. #10214 (alexey-milovidov). - 修复 JOIN 内的常量列名可能与 JOIN 外的常量名冲突. #10207 (alexey-milovidov).
- 当查询实际上应该在 LIMIT 停止时, 修复可能的无限查询执行, 同时从无限源 (如
system.numbers或system.zeros) 读取. #10206 (Nikolai Kochetov). - 修复未指定数据库时使用当前数据库进行访问检查的问题. #10192 (Vitaly Baranov).
- 如果结构在 INSERT 中不匹配, 则将块转换为 Distributed(). #10135 (Azat Khuzhin).
- 修复处理器管道中极端情况可能导致的错误结果. #10131 (Nikolai Kochetov).
- 用合并部分修复某些类型的改动. #10130 (Anton Popov).
- 在创建新副本时修复不正确的
index_granularity_bytes检查. 修复 #10098. #10121 (alesapin). - 当其结构与基础表不同时, 修复 INSERT 上的 SIGSEGV 到分布式表中. #10105 (Azat Khuzhin).
- 使用
JOIN和UNION ALL修复查询可能丢失的行. 修复 #9826, #10113. #10099 (Nikolai Kochetov). - 修复了从不存在
/table/replicas/replica_name/metadata节点的旧 ClickHouse 版本更新时复制表启动的问题. 修复 #10037. #10095 (alesapin). - 为 MySQL 数据库引擎添加一些参数检查和支持标识符参数. #10077 (Winter Zhang).
- 修复来自 localhost clickhouse 服务器的 clickhouse 字典源中的错误. 如果字典和源中的类型不兼容, 该错误可能会导致内存损坏. #10071 (alesapin).
- 当表包含跳过索引时, 修复
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). #10025 (Alexander Kuzmenkov).
- 修复用于远程查询执行的线程数 (性能回归, 自 20.3 起). 当来自
Distributed表的查询在本地和远程分片上同时执行时, 就会发生这种情况. 修复 #9965. #9971 (Nikolai Kochetov). - 修复了在某些数据库查询的处理阶段之一未检索到必要表的错误. 修复 #9699. #9949 (achulkov2).
- 修复
JOIN与TOTALS一起出现时Not found column in block错误. 修复 #9839. #9939 (Artem Zuikov). - 修复
ON CLUSTERDDL 查询在服务器启动时冻结的错误 #9927 (Gagan Arneja). - 修复解析 CREATE USER 命令中设置的多个主机, 例如
CREATE USER user6 HOST NAME REGEXP 'lo.?*host', NAME REGEXP 'lo*host'. #9924 (Vitaly Baranov). - 修复连接表引擎的
TRUNCATE(#9917). #9920 (Amos Bird). - 修复 ALTER 中的
scalar does not exist错误 (#9878). #9904 (Amos Bird). - 修复
ReplicatedMergeTree中删除和优化之间的竞争条件. #9901 (alesapin). - 修复
distributed_product_mode='local'中的限定名称错误. 修复 #4756. #9891 (Artem Zuikov). - 修复了设置
allow_introspection_functions中内省函数的计算授权. #9840 (Vitaly Baranov).
构建/测试/打包改进
- 修复集成测试
test_settings_constraints. #9962 (Vitaly Baranov). - 删除了对
clock_getres的依赖. #9833 (alexey-milovidov).
ClickHouse 版本 v20.3.5.21, 2020-03-27
Bug 修复
- 当查询在分布式表上具有 PREWHERE 和 WHERE 并且
SET distributed_product_mode = 'local'时, 修复Different expressions with the same alias错误. #9871 (Artem Zuikov). - 修复具有复合主键的表的突变过多的内存消耗. 这修复了#9850. #9860 (alesapin).
- 对于 INSERT 查询, 分片现在将从发起者获得的设置限制在分片的约束中, 而不是抛出异常. 此修复允许将 INSERT 查询发送到具有其他约束的分片. 此更改改进了修复 #9447. #9852 (Vitaly Baranov).
- 修复
COMMA to CROSS JOIN rewriter is not enabled or cannot rewrite query错误, 以防在表列表中使用 COMMA JOIN 进行子查询 (即在 WHERE 中). 修复#9782. #9830 (Artem Zuikov). - 修复客户端上可能出现的异常
Got 0 in totals chunk, expected 1on client. 如果右连接表有零行, 则使用“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).
- 修复损坏的
ALTER TABLE DELETE COLUMN查询合并部分. #9779 (alesapin). - 修复 max_distributed_connections (带和不带处理器). #9673 (Azat Khuzhin).
- 修复了函数参数的时区使用不正确的一些情况. #9574 (Vasily Nemkov).
改进
ClickHouse 版本 v20.3.4.10, 2020-03-20
Bug 修复
- 此版本还包含 20.1.8.41 的所有错误修复.
- 修复丢失的
rows_before_limit_at_least用于通过 http (使用处理器管道) 的查询. 这修复了 #9730. #9757 (Nikolai Kochetov)
ClickHouse 版本 v20.3.3.6, 2020-03-17
Bug 修复
- 此版本还包含 20.1.7.38 的所有错误修复.
- 修复复制中的错误, 如果用户在以前的版本上执行了更改, 则不允许复制工作. 这修复了 #9645. #9652 (alesapin). It makes version 20.3 backward compatible again.
- 添加设置
use_compact_format_in_distributed_parts_names, 它允许将INSERT查询的文件以更紧凑的格式写入Distributed表. 这修复了 #9647. #9653 (alesapin). 它使 20.3 版再次向后兼容.
ClickHouse 版本 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 版本中, 我们将引入一个设置, 允许您逐步启用新格式. - 更改了突变命令的复制日志条目的格式. 在安装新版本之前, 您必须等待旧的突变处理.
- 实现简单的内存分析器, 在超过软分配限制 #8765 ([Ivan](https:// github.com/abyss7)) #9472 (alexey-milovidov) 专栏
system.trace_log的内容从timer_type重命名为trace_type. 这将需要更改第三方性能分析和火焰图处理工具. - 在任何地方使用 OS 线程 id 而不是内部线程号. 这修复了 #7477 当启用设置
send_logs_level时, 旧的clickhouse-client无法接收从服务器发送的日志, 因为名称和结构化日志消息的类型已更改. 另一方面, 不同的服务器版本可以相互发送不同类型的日志. 当你不使用send_logs_level设置时, 你应该不在乎. #8954 (alexey-milovidov) - 移除
indexHint函数. #9542 (alexey-milovidov) - 移除
findClusterIndex、findClusterValue函数. 这修复了 #8641. 如果您正在使用这些功能, 请发送电子邮件至clickhouse-feedback@yandex-team.com. #9543 (alexey-milovidov) - 现在不允许使用
SELECT子查询作为默认表达式创建列或添加列. #9481 (alesapin) - JOIN 中的子查询需要别名. #9274 (Artem Zuikov)
- 改进了
ALTER MODIFY/ADD查询逻辑. 现在你不能在没有类型的情况下ADD列,MODIFY默认表达式不会改变列的类型,MODIFY类型不会丢失默认表达式值. 修复 #8669. #9227 (alesapin) - 需要重新启动服务器以应用日志配置中的更改. 这是一个临时解决方法, 以避免服务器记录到已删除的日志文件的错误 (请参阅 #8696). #8707 (Alexander Kuzmenkov)
- 默认情况下启用设置
experimental_use_processors. 此设置启用新查询管道的使用. 这是内部重构, 我们预计不会有明显的变化. 如果您会看到任何问题, 请将其设置为零. #8768 (alexey-milovidov)
新特征
- 添加
Avro和AvroConfluent输入/输出格式. #8571 (Andrew Onyshchuk) #8957 (Andrew Onyshchuk) #8717 (alexey-milovidov) cache字典中过期键的多线程和非阻塞更新 (具有读取旧键的可选权限). #8303 (Nikita Mikhaylov)- 添加查询
ALTER ... MATERIALIZE TTL. 它运行突变, 强制通过 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 存储和表功能的通配符/通配符的支持. #8851 (Vladimir Chebotarev)
- 为
FixedString(N)数据类型实现bitAnd、bitOr、bitXor、bitNot. #9091 (Guillaume Tassery) - 添加函数
bitCount. 这修复了 #8702. #8708 (alexey-milovidov) #8749 (ikopylov) - 添加
generateRandom表函数以生成具有给定模式的随机行. 允许用数据填充任意测试表. #8994 (Ilya Yatsishin) JSONEachRowFormat: 当对象包含在顶级数组中时支持特殊情况. #8860 (Kruglov Pavel)- 现在可以使用
DEFAULT表达式创建一个列, 该列依赖于具有默认ALIAS表达式的列. #9489 (alesapin) - 允许在
clickhouse-obfuscator中指定大于源数据大小的--limit. 数据将用不同的随机种子重复. #9155 (alexey-milovidov) - 添加了带有储层采样算法的
groupArraySample函数 (类似于group Array). #8286 (Amos Bird) - 现在您可以通过系统指标监控
cache/complex_key_cache字典中更新队列的大小. #9413 (Nikita Mikhaylov) - 允许使用 CRLF 作为 CSV 输出格式的行分隔符, 并将
output_format_csv_crlf_end_of_line设置为 1 #8934 #8935 #8963 (Mikhail Korotov) - 实现H3 API的更多功能:
h3GetBaseCell、h3HexAreaM2、h3IndexesAreNeighbors、h3ToChildren、h3ToString和stringToH3. #8938 (Nico Mandery) - 引入了新设置:
max_parser_depth以控制最大堆栈大小并允许大型复杂查询. 这修复了 #6681 和 #7668. #8647 (Maxim Smirnov) - 如果无法跳过未使用的分片, 则添加设置
force_optimize_skip_unused_shards设置以抛出. #8805 (Azat Khuzhin) - 允许配置多个磁盘/卷来存储数据以在
Distributed引擎中发送. #8756 (Azat Khuzhin) - 支持存储临时数据的存储策略 (
<tmp_policy>). #8750 (Azat Khuzhin) - 添加了
X-ClickHouse-Exception-CodeHTTP 标头, 如果在发送数据之前抛出异常, 则会设置该标头. 这实现了 #4971. #8786 (Mikhail 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.zeros和system.zeros_mt以及故事函数zeros()和zeros_mt(). 表 (和表函数) 包含名称为zero且类型为UInt8的单列. 此列包含零. 出于测试目的需要它作为生成多行的最快方法. 这修复了 #6604 #9593 (Nikolai Kochetov)
实验功能
- 在
MergeTree-family 表中添加新的零件紧凑格式, 其中所有列都存储在一个文件中. 它有助于提高小而频繁的插入的性能. 旧格式 (每列一个文件) 现在称为宽格式. 数据存储格式由设置min_bytes_for_wide_part和min_rows_for_wide_part控制. #8290 (Anton Popov) - 支持对
Log、TinyLog和StripeLog表的S3 存储. #8862 (Pavel Kovalenko)
Bug 修复
- 修复了日志消息中不一致的空格. #9322 (alexey-milovidov)
- 修复未命名元组数组在表创建时被展平为嵌套结构的错误. #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) - 允许逗号 (交叉) 与 IN() 内连接. #9251 (Artem Zuikov)
- 如果 WHERE 部分中有 [NOT] LIKE 运算符, 则允许将 CROSS 重写为 INNER JOIN. #9229 (Artem Zuikov)
- 在启用设置
distributed_aggregation_memory_efficient的情况下修复GROUP BY后可能出现的错误结果. 修复 #9134. #9289 (Nikolai Kochetov) - 找到的键在缓存字典的度量中被计为遗漏. #9411 (Nikita Mikhaylov)
- 修复 #8598 中引入的复制协议不兼容性. #9412 (alesapin)
- 修复了
ReplicatedMergeTree表启动时queue_task_handle上的竞争条件. #9552 (alexey-milovidov) - 令牌
NOT在SHOW TABLES NOT LIKE查询中不起作用. #8727 #8940 (alexey-milovidov) - 添加范围检查功能
h3EdgeLengthM. 如果没有这个检查, 缓冲区溢出是可能的. #8945 (alexey-milovidov) - 修复了多个参数 (超过 10 个) 的三元逻辑 OP 的批量计算中的错误. #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) - 修复突变终止的错误, 当突变可能挂在
parts_to_do=0和is_done=0状态时. #9022 (alesapin) - 使用带有
partial_merge_join设置的新 ANY JOIN 逻辑. 现在可以使用partial_merge_join=1进行ANY|ALL|SEMI LEFT和ALL INNER连接. #8932 (Artem Zuikov) - 分片现在将从发起者获得的设置限制到分片的约束, 而不是抛出异常. 此修复允许将查询发送到具有其他约束的分片. #9447 (Vitaly Baranov)
- 修复了
MergeTreeReadPool中的内存管理问题. #8791 (Vladimir Chebotarev) - 使用字符串
e调用时修复toDecimal*OrNull()函数族. 修复#8312 #8764 (Artem Zuikov) - 确保
FORMAT Null没有向客户端发送数据. #8767 (Alexander Kuzmenkov) - 修复
LiveViewBlockInputStream中的时间戳不会更新的错误.LIVE VIEW是一项实验性功能. #8644 (vxider) #8625 (vxider) - 修复了不允许删除旧 TTL 表达式的
ALTER MODIFY TTL错误行为. #8422 (Vladimir Chebotarev) - 修复了 MergeTreeIndexSet 中的 UBSan 报告. 这修复了 #9250 #9365 (alexey-milovidov)
- 修复了当 haystack 有零字节时
match和extract函数的行为. 当 haystack 不变时, 行为是错误的. 这修复了 #9160 #9163 (alexey-milovidov) #9345 (alexey-milovidov) - 避免从 Apache Avro 3rd 方库中的析构函数抛出. #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)
- 修复
Merge表中的段错误, 这在从File存储读取时可能发生. #9387 (tavplubix) - 在
ATTACH PARTITION FROM、REPLACE PARTITION、MOVE TO TABLE中添加了对存储策略的检查. 否则会导致重启后部分数据无法访问, 导致ClickHouse无法启动. #9383 (Vladimir Chebotarev) - 如果为表设置了 TTL, 则修复更改. #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)
- 修复 not(has()) 数组类型的bloom_filter索引. #9407 (achimbab)
- 允许带有
Log引擎的表中的第一列作为别名 #9231 (Ivan) - 在一个线程中从
MergeTree表读取时修复范围的顺序. 它可能导致MergeTreeRangeReader的异常或错误的查询结果. #9050 (Anton Popov) - 使
reinterpretAsFixedString返回FixedString而不是String. #9052 (Andrew Onyshchuk) - 避免极少数情况下用户可能会收到错误的错误消息 (
Success而不是详细的错误描述). #9457 (alexey-milovidov) - 使用带有空行模板的
Template格式时不会崩溃. #8785 (Alexander Kuzmenkov) - 系统表的元数据文件可能创建在错误的位置 #8653 (tavplubix) Fixes #8581.
- 修复缓存字典中 exception_ptr 的数据竞争 #8303. #9379 (Nikita Mikhaylov)
- 不要为查询
ATTACH TABLE IF NOT EXISTS抛出异常. 以前, 如果表已经存在, 则抛出它, 尽管有IF NOT EXISTS子句. #8967 (Anton Popov) - 修复了异常消息中缺少关闭括号的问题. #8811 (alexey-milovidov)
- 在交互模式下启动 clickhouse-client 时避免消息
Possible deadlock avoid. #9455 (alexey-milovidov) - 修复了 base64 编码值末尾填充可能格式错误的问题. 更新 base64 库. 这修复了 #9491, closes #9492 #9500 (alexey-milovidov)
- 在读取后缀之后但提交之前发生异常时, 在极少数情况下防止在
Kafka中丢失数据. 修复 #9378 #9507 (filimonov) - 修复了
DROP TABLE IF EXISTS中的异常. #8663 (Nikita Vasilev) - 修复当用户尝试为旧格式的
MergeTree表引擎系列ALTER MODIFY SETTING时崩溃. #9435 (alesapin) - 支持 JSON 相关函数中不适合 Int64 的 UInt64 数字. 将 SIMDJSON 更新为 master. 这修复了#9209 #9344 (alexey-milovidov)
- 修复了使用非严格单调函数索引时反向谓词的执行. #9223 (Alexander Kazakov)
- 不要尝试在
GROUP BY中折叠IN常量. #8868 (Amos Bird) - 修复
ALTER DELETE突变中导致索引损坏的错误. 这修复了 #9019 and #8982. Additionally fix extremely rare race conditions inReplicatedMergeTreeALTERqueries. #9048 (alesapin) - 当设置
compile_expressions启用时,当我们使用Nullable类型时,你会在LLVMExecutableFunction中得到unexpected column. #8910 (Guillaume Tassery) Kafka引擎的多项修复: 1) 修复在消费者组重新平衡期间出现的重复项. 2) 修复了当数据从多个分区轮询一次轮询并部分提交时出现的罕见holes(现在我们总是处理/提交整个轮询的消息块). 3) 按块大小修复刷新 (在此之前, 只有超时刷新才能正常工作). 4) 更好的订阅程序 (带有分配反馈). 5) 使测试工作更快 (使用默认间隔和超时). 由于数据之前没有按块大小刷新 (根据文档应该如此), 该 PR 可能会导致默认设置的性能下降 (由于更频繁和更小的刷新不是最佳的). 如果您在更改后遇到性能问题 - 请将表中的kafka_max_block_size增加到更大的值 (例如CREATE TABLE ...Engine=Kafka ... SETTINGS ... kafka_max_block_size=524288). 修复 #7259 #8917 (filimonov)- 修复 PREWHERE 优化后某些查询中的
Parameter out of bound异常. #8914 (Baudouin Giard) - 修复了函数
arrayZip的参数混合常量的情况. #8705 (alexey-milovidov) - 执行
CREATE查询时,在存储引擎参数中折叠常量表达式. 用当前数据库替换空数据库名称. 修复 #6508, #3492 #9262 (tavplubix) - 现在无法创建或添加具有简单循环别名的列, 例如
a DEFAULT b, b DEFAULT a. #9603 (alesapin) - 修复了可能会损坏原始部分的双重移动错误。 如果您使用
ALTER TABLE MOVE, 这是相关的. #8680 (Vladimir Chebotarev) - 允许
interval标识符正确解析而无需反引号. 修复了即使interval标识符包含在反引号或双引号中也无法执行查询的问题. 这修复了 #9124. #9142 (alexey-milovidov) - 修复了
bitTestAll/bitTestAny函数的模糊测试和错误行为. #9143 (alexey-milovidov) - 当有很多行等于第 n 行时, 修复
LIMIT n WITH TIES中可能的崩溃/错误的行数. #9464 (tavplubix) - 修复使用启用的
insert_quorum编写的部分的突变. #9463 (alesapin) - 修复
Poco::HTTPServer破坏时的数据竞争. 当服务器启动并立即关闭时可能会发生这种情况 #9468 (Anton Popov) - 修复运行
SHOW CREATE TABLE a_table_that_does_not_exist时显示误导性错误消息的错误. #8899 (achulkov2) - 当我们有一个 ORDER BY 和一个 LIMIT 子句时, 当我们在 SELECT 子句中有一个常量时, 在一些罕见的情况下修复了
Parameters is out of bound异常. #8892 (Guillaume Tassery) - 修复突变完成, 当已经完成突变时, 可以有状态
is_done=0. #9217 (alesapin) - 防止使用旧语法对 MergeTree 表执行
ALTER ADD INDEX, 因为它不起作用. #8822 (Mikhail Korotov) - 在服务器启动期间不要访问
LIVE VIEW所依赖的表, 因此服务器将能够启动. 分离LIVE VIEW时也要删除LIVE VIEW依赖项.LIVE VIEW是一项实验性功能. #8824 (tavplubix) - 修复了在执行 PREWHERE 时在 MergeTreeRangeReader 中可能出现的段错误. #9106 (Anton Popov)
- 使用列 TTL 修复可能不匹配的校验和. #9451 (Anton Popov)
- 修复了在只有一个卷的情况下部件不会通过 TTL 规则在后台移动的错误. #8672 (Vladimir Chebotarev)
- 修复了
Method createColumn() is not implemented for data type Set实现的问题. 这修复了 #7799. #8674 (alexey-milovidov) - 现在我们将尝试更频繁地完成突变. #9427 (alesapin)
- 通过减去一个常量来修复
intDiv. #9351 (hcz) - 修复
BlockIO中可能的竞争条件. #9356 (Nikolai Kochetov) - 修复在尝试使用/删除使用错误参数创建的
Kafka表时导致服务器终止的错误. #9513 (filimonov) - 如果 OS 为
timer_create函数返回错误结果, 则添加了解决方法. #8837 (alexey-milovidov) - 修复了使用
min_marks_for_seek参数时的错误. 修复了分布式表中没有分片键并且我们尝试跳过未使用的分片时的错误消息. #8908 (Azat Khuzhin)
改进
- 在
ReplicatedMergeTree*引擎系列的突变之上实施ALTER MODIFY/DROP查询. 现在 ALTERS 仅在元数据更新阶段阻塞, 之后不再阻塞. #8701 (alesapin) - 添加使用包含不合格名称的
WHERE部分重写 CROSS 到 INNER JOIN 的能力. #9512 (Artem Zuikov) - 使
SHOW TABLES和SHOW DATABASES查询支持WHERE表达式和FROM/IN. #9076 (sundyli) - 添加了一个设置
deduplicate_blocks_in_dependent_materialized_views. #9070 (urykhy) - 在最近的更改之后, MySQL 客户端开始以十六进制打印二进制字符串, 从而使它们不可读 (#9032). ClickHouse 中的解决方法是将字符串列标记为 UTF-8, 这并非总是如此, 但通常如此. #9079 (Yuriy Baranov)
- 添加对
sumMap的 String 和 FixedString 键的支持. #8903 (Baudouin Giard) - 支持 SummingMergeTree 映射中的字符串键. #8933 (Baudouin Giard)
- 即使线程抛出异常, 也会向线程池发出线程终止信号. #8736 (Ding Xiang Fei)
- 允许在
clickhouse-benchmark中设置query_id. #9416 (Anton Popov) - 不允许在
ALTER TABLE ... PARTITION partition查询中出现奇怪的表达式. 这个地址 #7192 #8835 (alexey-milovidov) - 表
system.table_engines现在提供有关功能支持的信息 (例如supports_ttl或supports_sort_order). #8830 (Max Akhmedov) - 默认启用
system.metric_log. 它将包含具有 ProfileEvents 值的行, CurrentMetrics 以collect_interval_milliseconds间隔 (默认为一秒) 收集. 表很小 (通常以兆字节为单位), 默认收集这些数据是合理的. #9225 (alexey-milovidov) - Initialize query profiler for all threads in a group, e.g. it allows to fully profile insert-queries. Fixes #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 连接池以在字典之间
share它们. 此选项显着减少了与 MySQL 服务器的连接数. #9409 (Clément Rodriguez) - 在
clickhouse-benchmark输出中显示分位数的最近查询执行时间, 而不是内插值. 最好显示与某些查询的执行时间相对应的值. #8712 (alexey-milovidov) - 将数据插入 Kafka 时,可以为消息添加密钥和时间戳. 修复 #7198 #8969 (filimonov)
- 如果服务器从终端运行, 则按颜色突出显示线程编号、查询 ID 和日志优先级. 这是为了提高开发人员对相关日志消息的可读性. #8961 (alexey-milovidov)
- 加载
Ordinary数据库表时更好的异常消息. #9527 (alexey-milovidov) - 为具有聚合函数状态的数组实现
arraySlice. 这修复了 #9388 #9391 (alexey-milovidov) - 允许在 IN 运算符的右侧使用常量函数和常量数组. #8813 (Anton Popov)
- 如果在为 system.replicas 获取数据时发生 zookeeper 异常, 则将其显示在单独的列中. 这实现了 #9137 #9138 (alexey-milovidov)
- 在销毁时原子地删除 MergeTree 数据部分. #8402 (Vladimir Chebotarev)
- 支持分布式表的行级安全. #8926 (Ivan)
- 现在我们在设置值中识别后缀 (如 KB、KiB...). #8072 (Mikhail Korotov)
- 在构建大型 JOIN 的结果时防止内存不足. #8637 (Artem Zuikov)
- 在
clickhouse-client中以交互模式向建议添加集群名称. #8709 (alexey-milovidov) - 为组中的所有线程初始化查询分析器, 例如它允许完全分析插入查询. #8820 (Ivan)
- 在
system.query_log表中添加了列exception_code. #8770 (Mikhail Korotov) - 在默认服务器配置文件中的端口
9004上启用 MySQL 兼容性服务器. 配置示例中的固定密码生成命令. #8771 (Yuriy Baranov) - 如果文件系统是只读的,则防止在关机时中止. 这修复了 #9094 #9100 (alexey-milovidov)
- 在 HTTP POST 查询中需要长度时更好的异常消息. #9453 (alexey-milovidov)
- 将
_path和_file虚拟列添加到HDFS和File引擎以及hdfs和file表函数. #8489 (Olga Khvostikova) - 如果将新列添加到视图的内部表中,则在插入到
MATERIALIZED VIEW时修复错误Cannot find column. #8766 #8788 (vzakaznikov) #8788 #8806 (Nikolai Kochetov) #8803 (Nikolai Kochetov) - 通过在最终更新 (如日志) 后发送进度来修复本地客户端 - 服务器协议的进度. 这可能仅与某些使用本机协议的第三方工具相关. #9495 (Azat Khuzhin)
- 添加使用 MySQL 协议跟踪客户端连接数的系统指标. (#9013). #9015 (Eugene 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聚合函数的性能. 此补丁由英特尔提供. #8652 (alexey-milovidov) - 提高
reinterpretAsFixedString函数的性能. #9342 (alexey-milovidov) - Do not send blocks to client for
Nullformat in processors pipeline. #8797 (Nikolai Kochetov) #8767 (Alexander Kuzmenkov)
构建/测试/打包改进
- 异常处理现在可以在适用于 Linux 的 Windows 子系统上正常工作. 参见 https://github.com/ClickHouse-Extras/libunwind/pull/3 . 这修复了 #6480 #9564 (sobolevsv)
- 将
readline替换为replxx以在clickhouse-client中进行交互式行编辑. #8416 (Ivan) - FunctionsComparison 中更好的构建时间和更少的模板实例化. #9324 (alexey-milovidov)
- 在 CI 中添加了与
clang-tidy的集成. 另见 #6044 #9566 (alexey-milovidov) - 现在我们在 CI 中使用
lld链接 ClickHouse, 即使对于gcc. #9049 (alesapin) - 允许在设置
THREAD_FUZZER_*环境变量时随机化线程调度并插入故障. 这有助于测试. #9459 (alexey-milovidov) - 在无状态测试中启用安全套接字. #9288 (tavplubix)
- 使 SPLIT_SHARED_LIBRARIES=OFF 更健壮. #9156 (Azat Khuzhin)
- 使
performance_introspection_and_logging测试对随机服务器卡住是可靠的. 这可能发生在 CI 环境中. 另见 #9515 #9528 (alexey-milovidov) - 在样式检查中验证 XML. #9550 (alexey-milovidov)
- 修复了测试
00738_lock_for_inner_table中的竞争条件. 这个测试依赖于睡眠. #9555 (alexey-milovidov) - 删除类型为
once的性能测试. 这是在统计比较模式下运行所有性能测试所必需的 (更可靠). #9557 (alexey-milovidov) - 添加了算术函数的性能测试. #9326 (alexey-milovidov)
- 增加了
sumMap和summapwithverflow聚合函数的性能测试. 后续的 #8933 #8947 (alexey-milovidov) - 通过样式检查确保错误代码的样式. #9370 (alexey-milovidov)
- 为测试历史添加脚本. #8796 (alesapin)
- 添加 GCC 警告
-Wsuggest-override以定位和修复所有必须使用override关键字的地方. #8760 (kreuzerkrieg) - 忽略 Mac OS X 下的弱符号,因为它必须被定义. #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 映像. #9213 (Pavel Kovalenko)
- 使用 GRPC 构建时摆脱源代码树文件. #9588 (Amos Bird)
- 通过从上下文中删除 SessionCleaner, 可以稍微加快构建时间. 让SessionCleaner的代码更简单. #9232 (alexey-milovidov)
- 更新了对 clickhouse-test 脚本中挂起查询的检查. #8858 (Alexander Kazakov)
- 从存储库中删除了一些无用的文件. #8843 (alexey-milovidov)
- 将数学性能测试的类型从
once更改为loop. #8783 (Nikolai Kochetov) - 添加 docker 图像,它允许为我们的代码库构建交互式代码浏览器 HTML 报告. #8781 (alesapin) See Woboq Code Browser
- 抑制 MSan 下的一些测试失败. #8780 (Alexander Kuzmenkov)
- 加速
exception while insert测试. 此测试经常在 debug-with-coverage 构建中超时. #8711 (alexey-milovidov) - 将
libcxx和libcxxabi更新为 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-dirsGCC 警告以消除所有不存在的包含 - 主要是由于 CMake 脚本错误. #8704 (kreuzerkrieg) - 如果查询分析器无法工作, 请描述原因. 这适用于 #9049 #9144 (alexey-milovidov)
- 将 OpenSSL 更新为上游主服务器. 修复了 TLS 连接可能失败并显示消息
OpenSSL SSL_read: error:14094438:SSLroutines:ssl3_read_bytes:tlsv1 alert internal error和SSL Exception: error:2400006E:random number generator::error retrieving entropy的问题. 该问题存在于 20.1 版中. #8956 (alexey-milovidov) - 更新服务器的 Dockerfile. #8893 (Ilya Mazaev)
- build-gcc-from-sources 脚本中的小修复. #8774 (Michael Nacharov)
- 在不使用
number列的性能测试中, 将numbers替换为zeros. 这将导致更干净的测试结果. #9600 (Nikolai Kochetov) - 修复在 Column 构造函数中使用 initializer_list 时的堆栈溢出问题. #9367 (Deleted user)
- 将 librdkafka 升级到 v1.3.0。 在 Mac OS X 上启用捆绑的
rdkafka和gsasl库. #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. #11869 (Nikolai Kochetov). - 不允许在高阶函数中使用 arrayJoin. 它导致协议同步中断. 这关闭了 #3933. #11846 (alexey-milovidov).
- 修复像
SELECT *, xyz.*这样的查询的意外行为, 这些查询在预期错误时成功. #11753 (hexiaoting). - 修复了由 Values 输入格式中复杂文字的错误类型推导导致的 LOGICAL_ERROR. #11732 (tavplubix).
- 修复
ORDER BY ... WITH FILL在 const 列上. #11697 (Anton Popov). - 与 XDBC 桥通信时传递适当的超时. 最近在检查桥接活性和接收元信息时没有遵守超时. #11690 (alexey-milovidov).
- 添加对带有不区分大小写标志的正则表达式的支持. 这修复了 #11101 and fixes #11506. #11649 (alexey-milovidov).
- 修复字符串的布隆过滤器 (数据跳过索引). #11638 (Azat Khuzhin).
- 修复在 prewhere 条件下使用
Nullable列导致的罕见崩溃. (可能它以某种方式与 #11572 相关联). #11608 (Nikolai Kochetov). - 修复 clickhouse-client 的错误退出代码, 当 exception.code() % 256 = 0 时. #11601 (filimonov).
- 修复服务器启动时有关
Mark cache size was lowered的日志消息中的小错误. 这将关闭 #11399. #11589 (alexey-milovidov). - 现在 clickhouse-server docker 容器将更喜欢 IPv6 检查服务器活动性. #11550 (Ivan Starkov).
- 使用 -State 函数在聚合过程中抛出异常时修复内存泄漏. 这修复了 #8995. #11496 (alexey-milovidov).
- 修复了使用
FINAL修饰符和ORDER BY优化包装到函数中的主键的使用. #10715 (Anton Popov).
ClickHouse 版本 v20.1.15.109-stable 2020-06-19
Bug 修复
ClickHouse 版本 v20.1.14.107-stable 2020-06-11
Bug 修复
- 修复错误
Size of offsets does not match size of column, 用于查询中的PREWHERE column in (subquery)和ARRAY JOIN. #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. #11540 (alexey-milovidov). - 修复编解码器的返回压缩大小. #11448 (Nikolai Kochetov).
- 修复了当列具有非文字参数的压缩编解码器时服务器崩溃的问题.修复 #11365. #11431 (alesapin).
- 以 nan 为点修复 pointInPolygon. 修复 #11375. #11421 (Alexey Ilyukhov).
- 修复了带有纬度/经度范围之外的参数的 geohashesInBox. #11403 (Vasily Nemkov).
- 修复具有外部排序和限制的查询可能出现的
Pipeline stuck错误. 修复 #11359. #11366 (Nikolai Kochetov). - 修复
quantilesExactWeightedArray中的崩溃问题. #11337 (Nikolai Kochetov). - 通过再次设置
parallel_view_processing = 1并行写入MATERIALIZED VIEW. 修复 #10241. #11330 (Nikolai Kochetov). - 当提取的 JSON 具有不平衡的 { 或 [ 字符串时, 修复visitParamExtractRaw. #11318 (Ewout).
- 修复 ThreadPool 中非常罕见的竞争条件. #11314 (alexey-milovidov).
- 修复转换中潜在的未初始化内存. 示例:
SELECT toIntervalSecond(now64()). #11311 (alexey-milovidov). - 修复了如果表的主键中有 Array 列并且查询正在使用
empty或notEmpty函数按此列过滤时索引分析无法工作的问题. 这修复了 #11286. #11303 (alexey-milovidov). - 修复当查询速度估计可能不正确时的错误, 并且如果查询受到
max_network_bandwidth、max_execution_speed或priority设置的限制,min_execution_speed的限制可能无法工作或无法正常工作. 将timeout_before_checking_execution_speed的默认值更改为非零值, 否则设置min_execution_speed和max_execution_speed无效. 这修复了 #11297. 这修复了 #5732. 这修复了 #6228. 可用性改进: 避免在clickhouse-client中将异常消息与进度条串联. #11296 (alexey-milovidov). - 修复读取 Protobuf 格式错误数据时崩溃的问题. 这修复了 #5957, 修复了 #11203. #11258 (Vitaly Baranov).
- 使用
Array(Array(LowCardinality))捕获参数修复高阶函数的可能错误Cannot capture column. #11185 (Nikolai Kochetov). - 如果数据跳过索引依赖于将在后台合并期间修改的列 (对于 SummingMergeTree、AggregatingMergeTree 以及 TTL GROUP BY), 则计算错误. 此问题已通过合并后移动索引计算得到修复, 因此索引是在合并数据上计算的. #11162 (Azat Khuzhin).
- 如果没有最终确定,则从突变终止任务中删除日志记录. #11109 (alesapin).
- 修复了 parseDateTime64BestEffort 参数解析错误. #10925. #11038 (Vasily Nemkov).
- 修复方法 getRawData() 中不正确的原始数据大小. #10964 (Igr).
- 修复与分布式表中元组的向后兼容性. #10889 (Anton Popov).
- 修复 StringHashTable 中的 SIGSEGV (如果这样的键不存在). #10870 (Azat Khuzhin).
- 修复了
ReplicatedMergeTree中的错误, 该错误可能导致OPTIMIZE查询上的某些ALTER在它变为非活动状态后挂起等待某些副本. #10849 (tavplubix). - 在 Block::sortColumns() 之后修复列顺序 (还添加了一个测试,表明它会影响一些实际用例 - 缓冲区引擎). #10826 (Azat Khuzhin).
- 修复 ODBC 桥在不要求引用标识符时的问题. 这修复了#7984. #10821 (alexey-milovidov).
- 修复 DateLUT 中的 UBSan 和 MSan 报告. #10798 (alexey-milovidov).
- 在关键条件下使用
src_type进行正确的类型转换. 修复#6287. #10791 (Andrew Onyshchuk).
- 在关键条件下使用
- 修复
parallel_view_processing行为. 现在, 如果发生异常, 所有对MATERIALIZED VIEW的插入都应该无一例外地完成. 修复 #10241. #10757 (Nikolai Kochetov). - 与 -State 结合时修复组合器 -OrNull 和 -OrDefault. #10741 (hcz).
- 修复消失的总数. 如果查询具有连接或具有外部 where 条件的子查询, 则总计可能已被过滤. 修复 #10674. #10698 (Nikolai Kochetov).
- 在一个查询中使用相同的集合修复
IN运算符的多次使用. #10686 (Anton Popov). - 修复 AggregateTransform 构造函数中参数的顺序. #10667 (palasonic1).
- 修复启用了
distributed_aggregation_memory_efficient的远程查询缺乏并行执行的问题. 修复#10655. #10664 (Nikolai Kochetov). - 修复分布式查询的谓词优化 (
enable_optimize_predicate_expression=1) 对于带有HAVING部分的查询 (即需要在服务器启动器上进行过滤时), 通过保留表达式的顺序 (这足以修复), 并且还强制 聚合器在索引上使用列名. 修复: #10613, #11413. #10621 (Azat Khuzhin). - 修复错误
the BloomFilter false positive must be a double number between 0 and 1. #10551. #10569 (Winter 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).
- 修复了合并后可能发生的
SummingMergeTree中LowCardinality(FixedString)键列的数据损坏. 修复#10489. #10721 (Nikolai Kochetov). - 修复了当
readonly=2和cancel_http_readonly_queries_on_client_close=1时导致 http 请求卡在客户端关闭的错误. 修复 #7939, #7019, #7736, #7091. #10684 (tavplubix). - 修复了在
SYSTEM DROP DNS CACHE查询也删除缓存时的错误, 用于检查是否允许用户从某些 IP 地址连接. #10608 (tavplubix). - 修复了
MATERIALIZED VIEW内部查询中不正确的标量结果, 以防该查询包含相关表. #10603 (Nikolai Kochetov). - 修复所有部分 mutation 完成, 但是在
is_done=0中挂掉的情况. #10526 (alesapin). - 修复了 unix 纪元开始时与 UTC 有小数偏移的时区的溢出. 这修复了 #9335. #10513 (alexey-milovidov).
- 修复了分布式存储的不当关闭. #10491 (Azat Khuzhin).
- 修复了
simpleLinearRegression中大整数上的数字溢出. #10474 (hcz). - 修复了附加数据库失败时删除元数据目录的问题. #10442 (Winter Zhang).
- 在创建
BloomFilter索引时添加了对参数数量和类型的检查 #9623. #10431 (Winter Zhang). - 修复了使用
ARRAY JOIN、ORDER BY和LIMIT的查询可能返回不完整结果的问题. 这修复了 #10226. #10427 (alexey-milovidov). - 更喜欢
fallback_to_stale_replicas而不是skip_unavailable_shards. #10422 (Azat Khuzhin). - 修复了
Array(Tuple(...))数据类型的错误扁平化. 这修复了#10259. #10390 (alexey-milovidov). - 修复了在尝试从缓冲区读取 HashMap 时导致编译错误的
HashTable中的错误行为. #10386 (palasonic1). - 修复了
ConcatProcessor中可能发生的Pipeline stuck错误, 该错误可能发生在远程查询中. #10381 (Nikolai Kochetov). - 使用
max_rows_to_group_by和group_by_overflow_mode = 'break'修复了错误Pipeline stuck. #10279 (Nikolai Kochetov). - 修复了一些错误, 当某些数据以法定人数插入, 然后以某种方式删除 (DROP PARTITION, TTL) 时, 这会导致插入卡住或 SELECT 中的误报异常. 这修复了 #9946. #10188 (Nikita Mikhaylov).
- 修复了在远程服务器上使用 18.12.17 之前的版本而在启动服务器上使用较新版本时不兼容的问题, 以及 GROUP BY 固定和非固定键, 以及激活两级分组方法时. #3254 (alexey-milovidov).
构建/测试/打包改进
ClickHouse 版本 v20.1.10.70, 2020-04-17
Bug 修复
- 修复罕见的可能异常
Cannot drain connections: cancel first. #10239 (Nikolai Kochetov). - 修复了当用户尝试在带有
ENGINE = Replicated*的表上运行ALTER UPDATE/DELETE时, ClickHouse 会抛出Unknown function lambda.错误消息的错误. 检查非确定性函数现在可以正确处理 lambda 表达式. #10237 (Alexander Kazakov). - 修复 RFC-2822 中字符串的
parseDateTimeBestEffort, 当一周中的某一天是星期二或星期四时. 这修复了 #10082. #10214 (alexey-milovidov). - 修复
JOIN内的常量列名可能与JOIN外的常量名冲突. #10207 (alexey-milovidov). - 修复了可能的无限查询执行, 当查询实际上应该在LIMIT上停止, 而从无限源读取, 如
system.numbers或system.zeros. #10206 (Nikolai Kochetov). - 在存在
array Join函数的情况下修复移动到prewhere优化 (在某些情况下). 这修复了#10092. #10195 (alexey-milovidov). - 添加放宽对使用
allow_nondeterministic_mutations设置的突变中非确定性函数使用限制的能力. #10186 (filimonov). - 如果结构在
INSERT上不匹配,则将块转换为带有Distributed引擎的表. #10135 (Azat Khuzhin). - 当其结构与底层表不同时, 将
INSERT上的SIGSEGV修复到Distributed表中. #10105 (Azat Khuzhin). - 使用
JOIN和UNION ALL修复查询可能丢失的行. 修复 #9826, #10113. #10099 (Nikolai Kochetov). - 为 MySQL 数据库引擎添加参数检查和支持标识符参数. #10077 (Winter Zhang).
- 修复来自 localhost clickhouse 服务器的 clickhouse 字典源中的错误. 如果字典和源中的类型不兼容, 该错误可能会导致内存损坏. #10071 (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). #10025 (Alexander Kuzmenkov). - 修复了在某些数据库查询的处理阶段之一未检索到必要表的错误. 修复 #9699. #9949 (achulkov2).
- 修复
JOIN与TOTALS一起出现时的Not found column in block错误. 修复 #9839. #9939 (Artem Zuikov). - 修复
ON CLUSTERDDL 查询在服务器启动时冻结的错误. #9927 (Gagan Arneja). - 修复连接表引擎的
TRUNCATE(#9917). #9920 (Amos Bird). - 修复 ALTER 查询中的
scalar does not exist错误 (#9878). #9904 (Amos Bird). - 修复
ReplicatedMergeTree中删除和优化之间的竞争条件. #9901 (alesapin). - 修复了
ATTACH PART中的DeleteOnDestroy逻辑, 这可能导致自动删除附加部分并添加了一些测试. #9410 (Vladimir Chebotarev).
构建/测试/打包改进
- 修复单元测试
collapsing_sorted_stream. #9367 (Deleted user).
ClickHouse 版本 v20.1.9.54, 2020-03-28
Bug 修复
- 修正了在分布式表上有
PREWHERE和WHERE以及SET distributed_product_mode = 'local'时出现的Different expressions with the same alias错误. #9871 (Artem Zuikov). - 修复具有复合主键的表的突变过多的内存消耗. 这修复了 #9850. #9860 (alesapin).
- 对于 INSERT 查询, 分片现在将从发起者获得的设置限制在分片的约束中, 而不是抛出异常. 此修复允许将
INSERT查询发送到具有另一个约束的分片. 此更改改进了修复 #9447. #9852 (Vitaly Baranov). - 修复客户端上可能出现的异常
Got 0 in totals chunk, expected 1on client. 如果右连接表有零行, 则使用“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).
改进
构建/测试/打包改进
ClickHouse 版本 v20.1.8.41, 2020-03-20
Bug 修复
- 修复可能的永久性
Cannot schedule a task错误 (由于ParallelAggregatingBlockInputStream::Handler::onFinish/onFinishThread中的未处理异常). 这修复了 #6833. #9154 (Azat Khuzhin) - 修复
ALTER查询 (突变) 中的过多内存消耗. 这修复了 #9533 and #9670. #9754 (alesapin) - 修复外部字典 DDL 中反引号的错误. 这修复了 #9619. #9734 (alesapin)
ClickHouse 版本 v20.1.7.38, 2020-03-18
Bug 修复
- 修复了
sumKahan和sumWithOverflow不正确的内部函数名称. 在远程查询中使用此函数时导致异常. #9636 (Azat Khuzhin). This issue was in all ClickHouse releases. - 允许具有内部复制的
Distributed表的ALTER ON CLUSTER. 这修复了#3268. #9617 (shinoi2). This issue was in all ClickHouse releases. - 修复
MergeTreeRangeReader中可能出现的异常Size of filter does not match size of column和Invalid number of rows in Chunk. 在某些情况下, 它们可能会在执行PREWHERE时出现. 修复 #9132. #9612 (Anton Popov) - 修正了这个问题: 如果你写一个简单的算术表达式, 比如
time + 1(与像time + INTERVAL 1 SECOND这样的表达式相反), 时区不会被保留. 这修复了 #5743. #9323 (alexey-milovidov)。 此问题存在于所有 ClickHouse 版本中. - 现在无法创建或添加具有简单循环别名的列, 例如
a DEFAULT b, b DEFAULT a. #9603 (alesapin) - 修复了 base64 编码值末尾填充可能格式错误的问题. 更新 base64 库. 这修复了 #9491, closes #9492 #9500 (alexey-milovidov)
- 修复
Poco::HTTPServer破坏时的数据竞争. 服务器启动并立即关闭时可能会发生这种情况. #9468 (Anton Popov) - 当有很多行等于第 n 行时, 修复
LIMIT n WITH TIES中可能的崩溃/错误的行数. #9464 (tavplubix) - 使用列 TTL 修复可能不匹配的校验和. #9451 (Anton Popov)
- 修复当用户尝试为旧格式的
MergeTree表引擎系列ALTER MODIFY SETTING时崩溃. #9435 (alesapin) - 现在我们将尝试更频繁地完成突变. #9427 (alesapin)
- 修复 #8598 中引入的复制协议不兼容问题. #9412 (alesapin)
- 修复 not(has()) 数组类型的bloom_filter索引. #9407 (achimbab)
- 修复了当 haystack 有零字节时
match和extract函数的行为. 当 haystack 不变时, 行为是错误的. 这修复了 #9160 #9163 (alexey-milovidov) #9345 (alexey-milovidov)
构建/测试/打包改进
- 异常处理现在可以在适用于 Linux 的 Windows 子系统上正常工作. 参见 https://github.com/ClickHouse-Extras/libunwind/pull/3 这修复了 #6480 #9564 (sobolevsv)
ClickHouse 版本 v20.1.6.30, 2020-03-05
Bug 修复
- 修复使用
T64编解码器压缩时数据不兼容的问题. #9039 (abyss7) - 在一个线程中从 MergeTree 表读取时修复范围的顺序. 修复 #8964. #9050 (CurtizJ)
- 修复在执行
PREWHERE时在MergeTreeRangeReader中可能出现的段错误. 修复#9064. #9106 (CurtizJ) - 修复
reinterpretAsFixedString以返回FixedString而不是String. #9052 (oandrew) - 使用可为空的返回类型修复
joinGet. 修复 #8919#9014 (amosbird) - 修复模糊测试和 bitTestAll/bitTestAny 函数的错误行为. #9143 (alexey-milovidov)
- 修复 haystack 为零字节时匹配和提取函数的行为. 当 haystack 不变时, 行为是错误的. 修复 #9160#9163 (alexey-milovidov)
- 修复了使用非严格单调函数索引时反向谓词的执行. 修复 #9034#9223 (Akazz)
- 如果
WHERE部分中有[NOT] LIKE运算符, 则允许将CROSS重写为INNER JOIN. 修复 #9191#9229 (4ertus2) - 允许带有日志引擎的表中的第一列作为别名. #9231 (abyss7)
- 允许在内部使用逗号连接
IN(). 修复 #7314. #9251 (4ertus2) - 改进
ALTER MODIFY/ADD查询逻辑. 现在你不能在没有类型的情况下ADD列,MODIFY默认表达式不会改变列的类型,MODIFY类型不会丢失默认表达式值. 修复 #8669. #9227 (alesapin) - 修复突变完成, 当已经完成突变时, 状态可以为 is_done=0. #9217 (alesapin)
- 支持 system.numbers 和 system.numbers_mt 的
Processors管道. 这也修复了不遵守max_execution_time时的错误. #7796 (KochetovNicolai) - 修复
DictCacheKeysRequestedFound指标的错误计数. #9411 (nikitamikhaylov) - 在
ATTACH PARTITION FROM、REPLACE PARTITION、MOVE 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 到上游掌握. #8956 (alexey-milovidov) - 执行
CREATE查询时, 在存储引擎参数中折叠常量表达式. 用当前数据库替换空数据库名称. 修复 #6508、#3492. 还修复了 ClickHouseDictionarySource 中本地地址的检查. #9262 (tabplubix) - 修复
StorageMerge中的段错误, 这在从 StorageFile 读取时可能发生 #9387 (tabplubix) - 在读取后缀之后但提交之前发生异常时, 在极少数情况下防止在
Kafka中丢失数据. 修复#9378. Related: #7175#9507 (filimonov) - 修复在尝试使用/删除使用错误参数创建的
Kafka表时导致服务器终止的错误. 修复 #9494. Incorporates #9507. #9513 (filimonov)
新特征
- 添加
deduplicate_blocks_in_dependent_materialized_views选项以控制幂等插入到具有物化视图的表中的行为. 应 Altinity 的特殊要求, 此新功能已添加到错误修复版本中. #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, 您必须在URL 中分别写入a\tb或a\<tab>b以及a%5Ctb或a%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_indices、allow_experimental_cross_to_join_conversion和allow_experimental_multiple_joins_emulation现在已经过时并且什么都不做. #7974 (alexey-milovidov) - 为与
JOIN操作一致的StorageJoin添加新的ANY JOIN逻辑. 要在不改变行为的情况下进行升级, 您需要将SETTINGS any_join_distinct_right_table_keys = 1添加到引擎连接表元数据或在升级后重新创建这些表. #8400 (Artem Zuikov) - 需要重新启动服务器以应用日志配置中的更改. 这是一个临时解决方法, 以避免服务器记录到已删除的日志文件的错误 (请参阅 #8696). #8707 (Alexander Kuzmenkov)
新特征
- 向
system.merges添加了有关部件路径的信息. #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. #8344 (alexey-milovidov) - 添加具有可配置亚秒级精度的
DateTime64数据类型. #7170 (Vasily Nemkov) - 添加表函数
clusterAllReplicas, 允许查询集群中的所有节点. #8493 (kiran sunkari) - 添加聚合函数
categoricalInformationValue, 用于计算离散特征的信息值. #8117 (hcz) - 通过并行执行来加速对
CSV、TSV和JSONEachRow格式的数据文件的解析. #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 t2等于t2 ANY RIGHT JOIN t1. #7665 (Artem Zuikov) - 添加设置
any_join_distinct_right_table_keys以启用ANY INNER JOIN的旧行为. #7665 (Artem Zuikov) - 添加新的
SEMI和ANTI 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>部分, 限制远程表引擎和表函数URL、S3、HDFS的允许主机. #7154 (Mikhail Korotov) - 添加了函数
greatCircleAngle, 以度数计算球体上的距离. #8105 (alexey-milovidov) - 更改地球半径与 H3 库一致. #8105 (alexey-milovidov)
- 为输入和输出添加了
JSONCompactEachRow和JSONCompactEachRowWithNamesAndTypes格式. #7841 (Mikhail Korotov) - 添加了与文件相关的表引擎和表函数 (
File、S3、URL、HDFS) 的功能, 允许根据附加引擎参数或文件扩展名读写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) - 现在默认为
TSV、TSKV、CSV和JSONEachRow格式启用并行解析. #7894 (Nikita Mikhaylov) - 从
H3库添加几个地理函数:h3GetResolution、h3EdgeAngle、h3EdgeLength、h3IsValid和h3kRing. #8034 (Konstantin Malanchev) - 在文件相关的存储和表函数中添加了对 brotli (
br) 压缩的支持. 这修复了 #8156. #8526 (alexey-milovidov) - 为
SimpleAggregationFunction类型添加groupBit*函数. #8485 (Guillaume Tassery)
Bug 修复
- 使用
Distributed引擎修复表的重命名. 修复问题 #7868. #8306 (tavplubix) - 现在字典支持非 ClickHouse SQL 方言中任意字符串中的属性的
EXPRESSION. #8098 (alesapin) - 修复损坏的
INSERT SELECT FROM mysql(...)查询. 这修复了 #8070 和 #7960. #8234 (tavplubix) - 修复从
JSONEachRow插入默认Tuple时出现的错误Mismatch column sizes. 这修复了#5653. #8606 (tavplubix) - 现在,如果将
WITH TIES与LIMIT BY一起使用, 则会引发异常. 还添加了将TOP与LIMIT BY一起使用的功能. 这修复了 #7472. #7637 (Nikita Mikhaylov) - 在
clickhouse-odbc-bridge二进制文件中修复来自新 glibc 版本的意外依赖. #8046 (Amos Bird) - 修复
*MergeTree引擎家族的检查功能错误. 现在, 如果我们在最后一个颗粒和最后一个标记 (非最终) 中有相同数量的行, 它不会失败. #8047 (alesapin) - 当基础数字类型等于表指定类型时, 修复在
ALTER查询后插入Enum*列. 这修复了 #7836. #7908 (Anton Popov) - 允许函数
substring的非常量负size参数. 这是不允许的. 这修复了 #4832. #7703 (alexey-milovidov) - 修复传递给
(O|J)DBC表引擎的参数数量错误时的解析错误. #7709 (alesapin) - 将日志发送到 syslog 时使用正在运行的 clickhouse 进程的命令名称. 在以前的版本中, 使用空字符串代替命令名称. #8460 (Michael Nacharov)
- 修复对
localhost允许主机的检查. 此 PR 修复了 #8241 中提供的解决方案. #8342 (Vitaly Baranov) - 修复在
argMin和argMax函数中, 当结果用于runningAccumulate函数时, 长字符串参数的罕见崩溃. 这修复了 #8325 #8341 (dinosaur) - 使用
Buffer引擎修复表的内存过量使用. #8345 (Azat Khuzhin) - 修复了函数中可以将
NULL作为参数之一并返回非 NULL 的潜在错误. #8196 (alexey-milovidov) - 线程池中更好的度量计算, 用于
MergeTree表引擎的后台进程. #8194 (Vladimir Chebotarev) - 当存在行级表过滤器时, 在
WHERE语句中修复函数IN. 修复 #6687 #8357 (Ivan) - 现在, 如果未完全解析设置值的整数值, 则会引发异常. #7678 (Mikhail Korotov)
- 修复使用聚合函数查询具有两个以上本地分片的分布式表时的异常. #8164 (小路)
- 现在布隆过滤器可以处理零长度数组并且不执行冗余计算. #8242 (achimbab)
- 修复了通过将客户端主机与
users.xml中指定的host_regexp匹配来检查是否允许客户端主机. #8241 (Vitaly Baranov) - 放宽不明确的列检查, 导致多个
JOIN ON部分出现误报. #8385 (Artem Zuikov) - 修复了当服务器无法以
JSON或XML格式发送或写入数据为String数据类型 (需要UTF-8验证) 或压缩时可能出现的服务器崩溃 (std::terminate) Brotli 算法或其他一些罕见情况下的结果数据. 这修复了 #7603 #8384 (alexey-milovidov) - 修复 CI 发现的
StorageDistributedDirectoryMonitor中的竞争条件. 这修复了 #8364. #8383 (Nikolai Kochetov) - 现在
*MergeTree表引擎族中的后台合并更准确地保留存储策略卷顺序. #8549 (Vladimir Chebotarev) - 现在表引擎
Kafka可以正常使用Native格式. 这修复了#6731 #7337 #8003. #8016 (filimonov) - 修复了带有标题的格式 (如
CSVWithNames), 这些格式会为表引擎Kafka抛出有关 EOF 的异常. #8016 (filimonov) - 修复了从
IN部分右侧的子查询进行设置的错误. 这修复了#5767 and #2542. #7755 (Nikita Mikhaylov) - 修复从存储
File读取时可能发生的崩溃. #7756 (Nikolai Kochetov) - 固定读取包含类型为
list的列的arquet格式的文件. #8334 (maxulan) - 如果
max_parallel_replicas > 1, 则使用依赖于采样键的PREWHERE条件修复分布式查询的错误Not found column. #7913 (Nikolai Kochetov) - 如果查询使用依赖于表别名的
PREWHERE, 并且由于主键条件导致结果集为空, 则修复错误Not found column. #7911 (Nikolai Kochetov) - 修复了函数
rand和randConstant在Nullable参数的情况下的返回类型. 现在函数总是返回UInt32而不是Nullable(UInt32). #8204 (Nikolai Kochetov) - 禁用了
WITH FILL表达式的谓词下推. 这修复了#7784. #7789 (Winter Zhang) - 修复了使用
FINAL部分时SummingMergeTree的错误count()结果. #3280 #7786 (Nikita Mikhaylov) - 修复来自远程服务器的常量函数可能的错误结果. 它发生在具有诸如
version()、uptime()等函数的查询中, 这些函数为不同的服务器返回不同的常量值. 这修复了 #7666. #7689 (Nikolai Kochetov) - 修复下推谓词优化中导致错误结果的复杂错误. 这修复了很多关于下推谓词优化的问题. #8503 (Winter Zhang)
- 修复
CREATE TABLE .. AS dictionary查询中的崩溃. #8508 (Azat Khuzhin) .g4文件中的多项改进 ClickHouse 语法. #8294 (taiyang-li)- 修复导致带有引擎
Join的表在JOIN中崩溃的错误. 这修复了 #7556 #8254 #7915 #8100. #8298 (Artem Zuikov) - 修复冗余字典重新加载到
CREATE DATABASE. #7916 (Azat Khuzhin) - 限制从
StorageFile和StorageHDFS读取的最大流数。 修复 #7650. #7981 (alesapin) - 当用户同时指定默认表达式和编解码器时, 修复
ALTER ... MODIFY ... CODEC查询中的错误. 修复 8593. #8614 (alesapin) - 修复具有
SimpleAggregateFunction(LowCardinality)类型的列的后台合并错误 #8613 (Nikolai Kochetov) - 固定类型检查函数
toDateTime64. #8375 (Vasily Nemkov) - 现在服务器不会在
LEFT或FULL JOIN和Join 引擎和不支持的join_use_nulls设置上崩溃. #8479 (Artem Zuikov) - 现在, 如果
db不存在,DROP DICTIONARY IF EXISTS db.dict查询不会抛出异常. #8185 (Vitaly Baranov) - 修复由于使用对已删除的
IStorage对象的引用而导致的表函数 (file、mysql、remote)中可能的崩溃. 修复插入表函数时指定的列的错误解析. #7762 (tavplubix) - 在启动
clickhouse-server之前确保网络已启动. 这修复了 #7507. #8570 (Zhichang Yu) - 修复安全连接的超时处理, 因此查询不会无限期挂起. 这修复了#8126. #8128 (alexey-milovidov)
- 修复并发工作者之间的
clickhouse-copier冗余争用. #7816 (Ding Xiang Fei) - 现在突变不会跳过附加的部分, 即使它们的突变版本大于当前的突变版本. #7812 (Zhichang Yu) #8250 (alesapin)
- 移动到另一个磁盘和服务器重启后, 忽略
*MergeTree数据部分的冗余副本. #7810 (Vladimir Chebotarev) - 使用
JOIN键中的Low Cardinality修复FULL JOIN中的崩溃. #8252 (Artem Zuikov) - 禁止在插入查询中多次使用列名, 例如
INSERT INTO tbl (x, y, x). 这修复了#5465, #7681. #7685 (alesapin) - 添加回退以检测未知 CPU 的物理 CPU 内核数 (使用逻辑 CPU 内核数) . 这修复了 #5239. #7726 (alexey-milovidov)
- 修复物化列和别名列的
There's no column错误. #8210 (Artem Zuikov) - 修复了在没有
TABLE或DICTIONARY限定符的情况下使用EXISTS查询时服务器崩溃的问题. 就像EXISTS t。 这修复了 #8172. 这个错误是在 19.17 版本中引入的. #8213 (alexey-milovidov) - 修复了使用
SimpleAggregateFunction列时可能出现的带有错误"Sizes of columns not match"的罕见错误. #7790 (Boris Granveaud) - 修复具有空
allow_databases的用户可以访问所有数据库的错误 (对于allow_dictionaries也是如此). #7793 (DeifyTheGod) - 当服务器已经与客户端断开连接时修复客户端崩溃. #8071 (Azat Khuzhin)
- 在按主键前缀和非主键后缀排序的情况下修复
ORDER BY行为. #7759 (Anton Popov) - 检查表中是否存在合格的列. 这修复了 #6836. #7758 (Artem Zuikov)
- 修复了在合并完成移动指定的超部分后立即运行的
ALTER MOVE行为. 修复 #8103. #8104 (Vladimir Chebotarev) - 修复使用具有不同列数的
UNION时可能出现的服务器崩溃. 修复 #7279. #7929 (Nikolai Kochetov) - 修复具有负大小的函数
substr的结果子字符串的大小. #8589 (Nikolai Kochetov) - 现在,如果后台池中没有足够的空闲线程, 服务器不会在
MergeTree中执行部分突变. #8588 (tavplubix) - 修复格式化
UNION ALLAST 时的一个小错误. #7999 (litao91) - 修复了负数的错误布隆过滤器结果. 这修复了 #8317. #8566 (Winter Zhang)
- 修复了解压缩中潜在的缓冲区溢出. 恶意用户可以传递伪造的压缩数据, 这将导致缓冲区后读取. 这个问题是由 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)
- 修复聚合位图和标量位图相交时的
bitmapAnd函数错误. #8082 (Yue Huang) - 根据修复了
clickhouse-cluster-copier中的错误的 ZooKeeper 程序员指南细化ZXid的定义. #8088 (Ding Xiang Fei) odbc表函数现在尊重external_table_functions_use_nulls设置. #7506 (Vasily Nemkov)- 修复了导致罕见数据竞争的错误. #8143 (Alexander Kazakov)
- 现在
SYSTEM RELOAD DICTIONARY完全重新加载字典, 忽略update_field. 这修复了 #7440. #8037 (Vitaly Baranov) - 添加检查创建查询中是否存在字典的功能. #8032 (alesapin)
- 以
Values格式修复Float*解析. 这修复了 #7817. #7870 (tavplubix) - 修复当我们无法在
*MergeTree表引擎系列的某些后台操作中保留空间时崩溃. #7873 (Vladimir Chebotarev) - 修复当表包含
SimpleAggregateFunction(LowCardinality)列时合并操作的崩溃. 这修复了 #8515. #8522 (Azat Khuzhin) - 恢复对所有 ICU 语言环境的支持, 并添加对常量表达式应用排序规则的功能. 还将语言名称添加到
system.collations表. #8051 (alesapin) - 修复了最小生命周期为零 (
LIFETIME(MIN 0 MAX N),LIFETIME(N)) 的外部字典不在后台更新时的错误. #7983 (alesapin) - 修复带有 ClickHouse 源的外部字典在查询中有子查询时崩溃. #8351 (Nikolai Kochetov)
- 使用引擎
URL修复表中文件扩展名的错误解析. 这修复了 #8157. #8419 (Andrey Bodrov) - 修复没有键的
*MergeTree表的CHECK TABLE查询. 修复#7543. #7979 (alesapin) - 修复了
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. #7747 (hcz) - 修复了另一个正在运行的
clickhouse-server的pid-file可能会被删除的问题. #8487 (Weiqing Xu) - 修复字典重新加载, 如果它有
invalidate_query,它会停止更新, 并且在之前的更新尝试中出现一些异常. #8029 (alesapin) - 修复了函数
arrayReduce中可能导致double free的错误和聚合函数组合器Resample中可能导致内存泄漏的错误. 添加了聚合函数aggThrow. 此功能可用于测试目的. #8446 (alexey-milovidov)
改进
- 使用
S3表引擎时改进了日志记录. #8251 (Grigory Pervakov) - 调用
clickhouse-local时没有传递参数时打印帮助消息. 这修复了 #5335. #8230 (Andrey 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)
- 修复错误
Column ... already exists, 同时使用FINAL和SAMPLE, 例如select count() from table final sample 1/2. 修复 #5186. #7907 (Nikolai Kochetov) - 现在表
joinGet函数的第一个参数可以是表标识符. #7707 (Amos Bird) - 允许将
MaterializedView与Kafka表上方的子查询一起使用. #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函数可以处理Decimal和UUID类型. 修复 #5184. #7693 (Mikhail Korotov) - 从系统日志中删除了固定索引粒度 (它是 1024), 因为它在实现自适应粒度后已过时. #7698 (alexey-milovidov)
- 在不使用 SSL 的情况下编译 ClickHouse 时启用 MySQL 兼容性服务器. #7852 (Yuriy Baranov)
- 现在服务器校验和分布式批处理, 这会在批处理损坏的数据的情况下提供更详细的错误. #7914 (Azat Khuzhin)
- 支持
DROP DATABASE、DETACH TABLE、DROP TABLE和ATTACH TABLE用于MySQL数据库引擎. #8202 (Winter Zhang) - 在 S3 表函数和表引擎中添加身份验证. #7623 (Vladimir Chebotarev)
- 添加了对不同磁盘上
MergeTree额外部分的检查, 以免遗漏未定义磁盘上的数据部分. #8118 (Vladimir Chebotarev) - 为 Mac 客户端和服务器启用 SSL 支持. #8297 (Ivan)
- 现在 ClickHouse 可以用作 MySQL 联合服务器 (请参阅 https://dev.mysql.com/doc/refman/5.7/en/federated-create-server.html). #7717 (Maxim Fedotov)
clickhouse-client现在仅在开启多查询且关闭多行时启用bracketed-paste. 这修复了 #7757. #7761 (Amos Bird)- 在
if函数中支持Array(Decimal). #7721 (Artem Zuikov) - 在
arrayDifference、arrayCumSum和arrayCumSumNegative函数中支持小数. #7724 (Artem Zuikov) - 向
system.dictionaries表添加了lifetime列. #6820 #7727 (kekekekule) - 改进了对
*MergeTree表引擎不同磁盘上现有部分的检查. 地址 #7660. #8440 (Vladimir Chebotarev) - 与用于
S3交互的AWS SDK集成, 允许开箱即用地使用所有 S3 功能. #8011 (Pavel Kovalenko) - 添加了对
Live View表中子查询的支持. #7792 (vzakaznikov) - 删除了从
TTL表达式中检查使用Date或DateTime列的情况. #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引擎的各种格式的消息. #8035 (Ivan) - 更好地兼容不支持
sha2_password认证插件的 MySQL 客户端. #8036 (Yuriy Baranov) - 在 MySQL 兼容服务器中支持更多的列类型. #7975 (Yuriy Baranov)
- 为带有底层
MergeTree表的Merge、Buffer和Materialized View存储实现ORDER BY优化. #8130 (Anton Popov) - 现在我们总是使用
getrandom的POSIX实现来更好地兼容旧内核 (< 3.17). #7940 (Amos Bird) - 更好地检查移动 TTL 规则中的有效目的地. #8410 (Vladimir Chebotarev)
- 更好地检查
Distributed表引擎的损坏插入批次. #7933 (Azat Khuzhin) - 将带有突变必须在未来处理的部分名称数组的列添加到
system.mutations表. #8179 (alesapin) - 处理器的并行归并排序优化. #8552 (Nikolai Kochetov)
- 设置
mark_cache_min_lifetime现在已经过时并且什么都不做. 在以前的版本中, 标记缓存可以在大于mark_cache_size的内存中增长, 以在mark_cache_min_lifetime秒内容纳数据. 这导致混乱和比预期更高的内存使用量, 这在内存受限的系统上尤其糟糕. 如果您在安装此版本后发现性能下降, 您应该增加mark_cache_size. #8484 (alexey-milovidov) - 准备在任何地方使用
tid. 这是 #7477 所必需的. #8276 (alexey-milovidov)
性能改进
- 处理器管道中的性能优化. #7988 (Nikolai Kochetov)
- 缓存字典中过期键的非阻塞更新 (具有读取旧键的权限). #8303 (Nikita Mikhaylov)
- 全局编译不带
-fno-omit-frame-pointer的 ClickHouse 以节省一个寄存器. #8097 (Amos Bird) - 加速
greatCircleDistance函数并为其添加性能测试. #7307 (Olga Khvostikova) - 改进功能
roundDown的性能. #8465 (alexey-milovidov) - 改进了
DateTime64数据类型的max、min、argMin、argMax的性能. #8199 (Vasily Nemkov) - 改进了无限制或大限制和外部排序的排序性能. #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) - 改进
round和roundBankers处理负数的方式. #8229 (hcz) - 将
DoubleDelta和Gorilla编解码器的解码性能提高了大约 30-40%. 这修复了 #7082. #8019 (Vasily Nemkov) - 改进了
base64相关功能的性能. #8444 (alexey-milovidov) - 添加了一个功能
geoDistance. 它类似于greatCircleDistance, 但使用对 WGS-84 椭球模型的近似. 两种功能的性能几乎相同. #8086 (alexey-milovidov) Decimal数据类型的更快的min和max聚合函数. #8144 (Artem Zuikov)- 向量化处理
arrayReduce. #7608 (Amos Bird) if链现在优化为multiIf. #8355 (kamalov-ruslan)- 修复了 19.15 中引入的
Kafka表引擎的性能回归. 这修复了 #7261. #7935 (filimonov) - 删除了 Debian 软件包中的
gcc偶尔会在默认情况下带来的 'pie' 代码生成. #8483 (alexey-milovidov) - 并行解析数据格式. #6553 (Nikita Mikhaylov)
- 默认情况下启用带有表达式的“值”的优化解析器 (
input_format_values_deduce_templates_of_expressions=1). #8231 (tavplubix)
构建/测试/打包改进
- 为
ARM和最小模式构建修复. #8304 (proller) - 未调用 std::atexit 时为
clickhouse-server添加覆盖文件刷新. 还略微改进了具有覆盖率的无状态测试的日志记录. #8267 (alesapin) - 在 contrib 中更新 LLVM 库. 避免使用 OS 包中的 LLVM. #8258 (alexey-milovidov)
- 使捆绑的
curl构建完全安静. #8232 #8203 (Pavel Kovalenko) - 修复一些
MemorySanitizer警告. #8235 (Alexander Kuzmenkov) - 在
CMakeLists.txt中使用add_warning和no_warning宏. #8604 (Ivan) - 添加对 Minio S3 兼容对象 (https://min.io/) 的支持以进行更好的集成测试. #7863 #7875 (Pavel Kovalenko)
- 将
libc头文件导入到 contrib. 它允许在各种系统之间使构建更加一致 (仅适用于x86_64-linux-gnu). #5773 (alexey-milovidov) - 从某些库中删除
-fPIC. #8464 (alexey-milovidov) - 为 curl 清理
CMakeLists.txt. 见 https://github.com/ClickHouse/ClickHouse/pull/8011#issuecomment-569478910 #8459 (alexey-milovidov) CapNProto库中的静默警告. #8220 (alexey-milovidov)- 为短字符串优化哈希表添加性能测试. #7679 (Amos Bird)
- 现在, 即使
MADV_FREE不可用, ClickHouse 也将构建在AArch64上. 这修复了 #8027. #8243 (Amos Bird) - 更新
zlib-ng以修复内存清理器问题. #7182 #8206 (Alexander Kuzmenkov) - 在非 Linux 系统上启用内部 MySQL 库, 因为 OS 包的使用非常脆弱, 通常根本不起作用. 这修复了 #5765. #8426 (alexey-milovidov)
- 修复了启用
libc++后在某些系统上的构建. 这取代了 #8374. #8380 (alexey-milovidov) - 使
Field方法更加类型安全以查找更多错误. #7386 #8209 (Alexander Kuzmenkov) - 将缺失的文件添加到
libc-headers子模块. #8507 (alexey-milovidov) - 修复性能测试输出中错误的
JSON引用. #8497 (Nikolai Kochetov) - 现在为
std::exception和Poco::Exception显示堆栈跟踪. 在以前的版本中, 它仅适用于DB::Exception. 这改进了诊断. #8501 (alexey-milovidov) - 为新的 glibc 版本移植
clock_gettime和clock_nanosleep. #8054 (Amos Bird) - 在示例配置中为开发人员启用
part_log. #8609 (alexey-milovidov) - 修复
01036_no_superfluous_dict_reload_on_create_database*中重新加载的异步性质. #8111 (Azat Khuzhin) - 修复编解码器性能测试. #8615 (Vasily Nemkov)
- 为
.tgz构建和文档添加安装脚本. #8612 #8591 (alesapin) - 删除了旧的
ZSTD测试 (它是在 2016 年创建的, 用于重现 ZSTD 1.0 版之前的错误). 这修复了 #8618. #8619 (alexey-milovidov) - 修复了 Mac OS Catalina 上的构建. #8600 (meo)
- 增加编解码器性能测试中的行数, 使结果更显着. #8574 (Vasily Nemkov)
- 在调试版本中, 将
LOGICAL_ERROR异常视为断言失败, 以便它们更容易被注意到. #8475 (Alexander Kuzmenkov) - 使与格式相关的性能测试更具确定性. #8477 (alexey-milovidov)
- 更新
lz4以修复 MemorySanitizer 故障. #8181 (Alexander Kuzmenkov) - 在异常处理中抑制已知的 MemorySanitizer 误报. #8182 (Alexander Kuzmenkov)
- 将
gcc和g++更新到build/docker/build.sh中的版本 9. #7766 (TLightSky) - 添加性能测试用例来测试
PREWHERE比WHERE差. #7768 (Amos Bird) - 修复一个不稳定的测试的进展. #8621 (alexey-milovidov)
- 避免对来自
libunwind的数据进行 MemorySanitizer 报告. #8539 (alexey-milovidov) - 将
libc++更新到最新版本. #8324 (alexey-milovidov) - 从源代码构建 ICU 库. 这修复了 #6460. #8219 (alexey-milovidov)
- 从
libressl切换到openssl. 在此更改后,ClickHouse 应支持 TLS 1.3 和 SNI. 这修复了#8171. #8218 (alexey-milovidov) - 修复了从 SSL 使用
chacha20_poly1305时的 UBSan 报告 (发生在连接到 https://yandex.ru/ 时). #8214 (alexey-milovidov) - 修复
.deblinux 发行版的默认密码文件模式. #8075 (proller) - 改进了在
clickhouse-test中获取clickhouse-serverPID 的表达式. #8063 (Alexander Kazakov) - 将 contrib/googletest 更新到 v1.10.0. #8587 (Alexander Burmak)
- 修复了
base64库中的 ThreadSaninitizer 报告. 也把这个库更新到了最新版本, 不过没关系. 这修复了 #8397. #8403 (alexey-milovidov) - 修复处理器的
00600_replace_running_query. #8272 (Nikolai Kochetov) - 删除对
tcmalloc的支持, 使CMakeLists.txt更简单. #8310 (alexey-milovidov) - 发布 gcc 构建现在使用
libc++而不是libstdc++. 最近libc++只与clang 一起使用. 这将提高构建配置和可移植性的一致性. #8311 (alexey-milovidov) - 启用 ICU 库以使用 MemorySanitizer 进行构建. #8222 (alexey-milovidov)
- 抑制来自
CapNProto库的警告. #8224 (alexey-milovidov) - 删除了
tcmalloc代码的特殊情况, 因为它不再受支持. #8225 (alexey-milovidov) - 在 CI 覆盖任务中, 优雅地杀死服务器以允许它保存覆盖报告. 这修复了我们最近看到的不完整的覆盖报告. #8142 (alesapin)
- 针对
Float64和UInt64值对所有编解码器进行性能测试. #8349 (Vasily Nemkov) termcap非常不推荐使用并导致各种问题 (例如, 缺少“up”cap 和回显^J而不是多行). 支持terminfo或捆绑ncurses. #7737 (Amos Bird)- 修复
test_storage_s3集成测试. #7734 (Nikolai Kochetov) - 支持
StorageFile(<format>, null)将块插入给定的格式文件而不实际写入磁盘. 这是性能测试所必需的. #8455 (Amos Bird) - 向功能测试添加了参数
--print-time, 用于打印每个测试的执行时间. #8001 (Nikolai Kochetov) - 在评估 RPN 时向
KeyCondition添加断言. 这将修复来自 gcc-9 的警告. #8279 (alexey-milovidov) - 在 CI 构建中转储 cmake 选项. #8273 (Alexander Kuzmenkov)
- 不要为某些胖库生成调试信息. #8271 (alexey-milovidov)
- 使
log_to_console.xml始终登录到 stderr, 无论它是否交互. #8395 (Alexander Kuzmenkov) - 从
clickhouse-performance-test工具中删除了一些未使用的功能. #8555 (alexey-milovidov) - 现在我们还将搜索带有相应
clang-X版本的lld-X. #8092 (alesapin) - Parquet 构建改进. #8421 (maxulan)
- 更多 GCC 警告. #8221 (kreuzerkrieg)
- Arch Linux 软件包现在允许运行 ClickHouse 服务器, 而不仅仅是客户端. #8534 (Vladimir Chebotarev)
- 使用处理器修复测试. 微小的性能修复. #7672 (Nikolai Kochetov)
- 更新 contrib/protobuf. #8256 (Matwey V. Kornilov)
- 准备切换到 c++20 作为新年庆祝活动. "May the C++ force be with ClickHouse". #8447 (Amos Bird)
实验功能
- 添加了实验设置
min_bytes_to_use_mmap_io. 它允许读取大文件而无需将数据从内核复制到用户空间. 默认情况下禁用该设置. 推荐的阈值大约是 64 MB, 因为 mmap/munmap 很慢. #8520 (alexey-milovidov) - 重新设计配额作为访问控制系统的一部分. 添加了新表
system.quotas、新函数currentQuota、currentQuotaKey、新SQL语法CREATE QUOTA、ALTER QUOTA、DROP QUOTA、SHOW QUOTA. #7257 (Vitaly Baranov) - 允许跳过带有警告的未知设置而不是抛出异常. #7653 (Vitaly Baranov)
- 重新设计行策略作为访问控制系统的一部分. 添加新表
system.row_policies、新函数currentRowPolicies()、新SQL语法CREATE POLICY、ALTER POLICY、DROP POLICY、SHOW CREATE POLICY、SHOW POLICIES. #7808 (Vitaly Baranov)
Security Fix
- 修复了使用
File表引擎读取表中目录结构的可能性. 这修复了 #8536. #8537 (alexey-milovidov)