v24.2 变更日志
ClickHouse 发布标签:24.2.2.15987
不向后兼容的更改
- 在嵌套类型中验证可疑/实验性类型。此前我们不会在 Array/Tuple/Map 等嵌套类型中验证此类类型(JSON 除外)。#59385 (Kruglov Pavel)。
- 排序子句
ORDER BY ALL(在 v23.12 中引入)被替换为ORDER BY *。之前的语法对于包含名为all的列的表而言过于容易出错。#59450 (Robert Schulze)。 - 添加对线程数和块大小的合理性检查。 #60138 (Raúl Marín).
- 当查询级别设置
async_insert和deduplicate_blocks_in_dependent_materialized_views同时启用时,拒绝处理传入的 INSERT 查询。此行为由设置throw_if_deduplication_in_dependent_materialized_views_enabled_with_async_insert控制,且默认启用。该改动是 https://github.com/ClickHouse/ClickHouse/pull/59699 的延续,用于解锁 https://github.com/ClickHouse/ClickHouse/pull/59915。#60888(Nikita Mikhaylov)。 - 实用工具
clickhouse-copier已迁移到 GitHub 上的独立仓库:https://github.com/ClickHouse/copier。它不再随发行包一同提供,但仍可作为单独下载获取。此更改关闭:#60734 此更改关闭:#60540 此更改关闭:#60250 此更改关闭:#52917 此更改关闭:#51140 此更改关闭:#47517 此更改关闭:#47189 此更改关闭:#46598 此更改关闭:#40257 此更改关闭:#36504 此更改关闭:#35485 此更改关闭:#33702 此更改关闭:#26702 ### 面向用户变更的文档条目。#61058 (Nikita Mikhaylov). - 为了提高与 MySQL 的兼容性,函数
locate现在默认采用参数顺序(needle, haystack[, start_pos])。可以通过将function_locate_has_mysql_compatible_argument_order设置为 0 来恢复之前的参数顺序(haystack, needle, [, start_pos])。#61092(Robert Schulze)。 - 自 23.5 版本起,过时的内存型分区片段已被弃用,自 23.10 版本起不再受支持,现在剩余的相关代码已被移除。此变更是对 #55186 和 #45409 的延续。你很可能没有使用内存型分区片段,因为它们只在 23.5 版本之前可用,并且仅在你通过为 MergeTree 表手动指定对应的 SETTINGS 启用后才会生效。要检查是否存在内存型分区片段,请运行以下查询:
SELECT part_type, count() FROM system.parts GROUP BY part_type ORDER BY part_type。要禁用内存型分区片段的使用,请执行:ALTER TABLE ... MODIFY SETTING min_bytes_for_compact_part = DEFAULT, min_rows_for_compact_part = DEFAULT。在从旧版本 ClickHouse 升级之前,请先检查是否存在内存型分区片段。如果存在内存型分区片段,请先禁用它们,然后等待所有内存型分区片段都消失后再继续升级。#61127(Alexey Milovidov)。 - 默认禁止在
MergeTree表的ORDER BY中使用SimpleAggregateFunction(与AggregateFunction一样被禁止,不过这里的原因是它们不可比较),如需允许请使用allow_suspicious_primary_key。#61399 (Azat Khuzhin). - ClickHouse 在
String数据类型中允许任意二进制数据,尽管其典型用法是存储 UTF-8。Parquet/ORC/Arrow 中的 String 仅支持 UTF-8。因此,在 Arrow 中可以为 ClickHouse 的String数据类型选择使用哪种数据类型——String或Binary。这由output_format_parquet_string_as_string、output_format_orc_string_as_string、output_format_arrow_string_as_string这些设置控制。虽然使用Binary在语义上更正确且兼容性更好,但在大多数情况下,默认使用String更符合用户预期。Parquet/ORC/Arrow 支持多种压缩方法,包括lz4和zstd。ClickHouse 支持所有这些压缩方法。一些能力较弱的工具不支持更快的lz4压缩方法,因此我们默认设置为zstd。这由output_format_parquet_compression_method、output_format_orc_compression_method和output_format_arrow_compression_method这些设置控制。我们已将 Parquet 和 ORC 的默认值更改为zstd,但对 Arrow 没有更改(其主要面向底层使用场景)。#61817(Alexey Milovidov)。 - 修复了一个 materialized view 的安全问题,该问题允许用户在未获得相应权限的情况下向表中插入数据。该修复会校验用户是否拥有插入权限,不仅针对 materialized view 本身,还包括所有底层表。这意味着某些之前可以正常执行的查询,现在可能会因为 “Not enough privileges” 错误而失败。为解决此问题,本次发布在 views 中引入了 SQL security 新功能 https://clickhouse.com/docs/sql-reference/statements/create/view#sql_security。 #54901 (pufit)
新功能
- Topk/topkweighed 模式支持返回值的数量及其误差。#54508 (UnamedRus)。
- 添加了新的语法,允许在 view/materialized view 中指定 definer 用户。这样就可以在未对底层表显式授予权限的情况下,从视图中执行 SELECT/INSERT 操作。#54901 (pufit)。
- 实现了将不同类型的 MergeTree 表自动转换为 Replicated 引擎的功能。只需在表的数据目录(
/clickhouse/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/)中创建一个空的convert_to_replicated文件,该表将在下次服务器启动时自动完成转换。#57798 (Kirill)。 - 新增了表函数
mergeTreeIndex。用于表示MergeTree表的索引文件和标记文件(marks files)的内容,可用于内部自省。语法:mergeTreeIndex(database, table, [with_marks = true]),其中database.table是一个已存在且使用MergeTree引擎的表。#58140 (Anton Popov)。 - 在
file/s3/hdfs/url/azureBlobStorage引擎中进行 schema 推断时,如果文件格式未知,则尝试自动检测其格式。关闭 #50576。#59092(Kruglov Pavel)。 - 将 generate_series 添加为一个表函数。此函数会生成一个由自然数组成的等差数列表。#59390 (divanik).
- 新增了查询语句
ALTER TABLE table FORGET PARTITION partition,用于删除与空分区相关的 ZooKeeper 节点。#59507 (Sergei Trifonov)。 - 支持以 tar 归档文件的形式读取和写入备份。#59535 (josh-hildred)。
- 新增聚合函数 'groupArrayIntersect'。跟进:#49862。#59598(Yarik Briukhovetskyi)。
- 新增 system.dns_cache 表,可用于调试 DNS 问题。 #59856 (Kirill Nikiforov).
- 已实现对 S3Express 存储桶的支持。 #59965 (Nikita Taranov).
- 编解码器
LZ4HC将支持新的压缩级别 2,它比之前的最小级别 3 更快,但压缩率略低。在之前的版本中,LZ4HC(2)及更低级别与LZ4HC(3)是相同的。作者:Cyan4973。#60090(Alexey Milovidov)。 - 实现了 system.dns_cache 表,可用于调试 DNS 问题;新增服务器设置项 dns_cache_max_size。#60257 (Kirill Nikiforov).
- 添加了函数
toMillisecond,用于返回DateTime或DateTime64类型值的毫秒部分。#60281(Shaun Struwig)。 - 为
merge表函数添加对单参数形式的支持,形式为merge(['db_name', ] 'tables_regexp')。#60372(豪肥肥)。 - 使所有格式名称不区分大小写,例如 Tsv、TSV、tsv,甚至 rowbinary 均可。#60420(豪肥肥)。
- 新增语法,支持在 view/materialized view 中指定定义者用户(definer user)。这样即可在未对底层表授予显式权限的情况下,从视图执行 SELECT/INSERT 操作。#60439 (pufit).
- 为
StorageMemory(内存引擎)添加四个属性min_bytes_to_keep, max_bytes_to_keep, min_rows_to_keep和max_rows_to_keep—— 添加测试以反映这些更改 —— 更新memory.md文档 —— 为MemorySink添加表级context属性,以便访问表参数上下限。#60612 (Jake Bamrah). - 新增函数
toMillisecond,用于返回DateTime或DateTime64类型值的毫秒部分。#60649 (Robert Schulze)。 - 将等待查询与执行中查询的数量限制分开。新增服务器设置
max_waiting_queries,用于限制因async_load_databases而处于等待状态的查询数量。现有的执行中查询数量限制不再统计等待中的查询。#61053 (Sergei Trifonov)。 - 新增对
ATTACH PARTITION ALL的支持。#61107 (Kirill Nikiforov).
性能优化
- 在
SELECT子句中消除对GROUP BY键的min/max/any/anyLast聚合函数。#52230 (JackyWoo)。 - 在处理多个 [Nullable] 列时提升序列化聚合方法的性能。这是 #51399 的通用版本,并不会牺牲抽象层的完整性。#55809(Amos Bird)。
- 对 ALL JOIN 的输出采用惰性构建以提升性能。 #58278 (LiuNeng).
- 对聚合函数 ArgMin / ArgMax / any / anyLast / anyHeavy,以及
ORDER BY {u8/u16/u32/u64/i8/i16/u32/i64) LIMIT 1查询进行了优化。 #58640 (Raúl Marín). - 通过减少分支预测失败,有条件地优化
bigint和 BigDecimal 类型的sum/avg性能。#59504 (李扬). - 在存在正在执行的 mutation 时提升 SELECT 查询的性能。#59531 (Azat Khuzhin).
- 对列过滤进行了简单优化。避免对底层数据类型为非数值的过滤列使用
result_size_hint = -1。在某些情况下,峰值内存可降至原来的 44%。#59698(李扬)。 - 主键将占用更少内存。#60049 (Alexey Milovidov)。
- 优化主键及部分其他操作的内存使用。 #60050 (Alexey Milovidov).
- 表的主键将在首次访问时按需(懒加载)载入内存。该行为由新的 MergeTree 设置
primary_key_lazy_load控制,默认开启。这样带来了一些优势:- 不会为未使用的表加载主键;- 如果内存不足,将在首次使用时抛出异常,而不是在服务器启动时抛出。与此同时,这也带来了一些劣势:- 加载主键带来的延迟会在第一次查询时产生,而不是在接受连接之前;理论上这可能引入“羊群效应”(thundering-herd problem)。此更改关闭了 #11188。#60093(Alexey Milovidov)。 - 向量化函数
dotProduct,适用于向量搜索。#60202 (Robert Schulze)。 - 如果表的主键中大部分是无用的列,就不要让这些列常驻内存。可以通过一个新的设置项
primary_key_ratio_of_unique_prefix_values_to_skip_suffix_columns来控制,默认值为0.9,其含义是:对于复合主键,如果某一列在至少 90% 的记录中其值都会发生变化,那么在它之后的列将不会被加载。#60255(Alexey Milovidov)。 - 当
result_type的基础类型为数值类型时,以列式方式执行 multiIf 函数。 #60384 (李扬). - 如图 1 所示,将“&&”替换为“&”可以使编译器生成 SIMD 代码。
图 1. 由“&&”(左)和“&”(右)编译生成的代码。 #60498 (Zhiguo Zhou).
- 互斥锁速度更快(几乎提升 2 倍;之前由于 ThreadFuzzer 而较慢)。 #60823 (Azat Khuzhin).
- 将连接排空操作从 prepare 阶段移到 work 阶段,并并行排空多个连接。 #60845 (lizhuoyu5).
- 优化对 Nullable 数字或 Nullable 字符串的 insertManyFrom。 #60846 (李扬).
- 对函数
dotProduct进行了优化,以避免不必要且开销巨大的内存拷贝。 #60928 (Robert Schulze). - 对文件系统缓存的操作将更少受到锁竞争的影响。 #61066 (Alexey Milovidov).
- 优化 ColumnString::replicate,并防止 memcpySmallAllowReadWriteOverflow15Impl 被优化为内置 memcpy。关闭 #61074。在 x86-64 上,ColumnString::replicate 性能提升了 2.46 倍。#61075 (李扬)。
- 256 位整数的打印速度提升 30 倍。 #61100 (Raúl Marín).
- 如果一个带有语法错误的查询中包含带正则表达式的 COLUMNS 匹配器,那么在解析器回溯的每一次尝试中都会重新编译该正则表达式,而不是只编译一次。这是一个根本性错误。已编译的正则表达式被放入 AST 中。但 AST 中的字母 A 意为“抽象”,这意味着其中不应包含重量级对象。AST 的部分节点在解析过程中可能被创建和丢弃,包括在大量回溯的情况下。这会导致解析阶段变慢,从而使只读用户可以实施 DoS 攻击。但主要问题在于,它阻碍了模糊测试工具(fuzzers)的进展。#61543 (Alexey Milovidov)。
改进
- 在对 materialized view 执行 MODIFY COLUMN 查询时,应检查内部表的结构,确保每一列都存在。#47427 (sunny)。
- 新增了表
system.keywords,其中包含来自解析器的所有关键字,主要用于改进模糊测试和语法高亮。#51808 (Nikita Mikhaylov). - 通过在分析器中为参数化视图添加支持,使其不再对 CREATE PARAMETERIZED VIEW 语句进行分析。重构了现有的参数化视图逻辑,同样避免分析 CREATE PARAMETERIZED VIEW 语句。#54211 (SmitaRKulkarni).
- Ordinary 数据库引擎已被弃用。如果你的服务器正在使用它,你将在 clickhouse-client 中收到一条警告。由此关闭了 #52229。#56942(shabroo)。
- 在删除表时,必须删除与该表相关的所有 zero-copy 锁,并同时删除包含这些锁的目录。#57575 (Sema Checherinda)。
- 为
dictGetOrDefault函数添加短路特性。关闭 #52098。#57767 (jsc0218)。 - 允许在外部表结构中声明枚举类型。 #57857 (Duc Canh Le).
- 在对包含
DEFAULT或MATERIALIZED表达式的列运行ALTER COLUMN MATERIALIZE时,现在会写入正确的值:对于已有且应使用默认值的分区片段,会写入默认值;对于已有且应使用非默认值的分区片段,会写入非默认值。此前,所有已有分区片段都会被写入默认值。#58023(Duc Canh Le)。 - 已启用退避逻辑(例如指数退避),从而降低 CPU 使用率、内存占用和日志文件大小。#58036 (MikhailBurdukov)。
- 在选择要合并的分区片段时考虑已被轻量级删除的行。#58223 (Zhuo Qiu)。
- 现在允许在
storage_configuration中定义volume_priority。 #58533 (Andrey Zvonov). - 在 T64 编解码器中新增对 Date32 类型的支持。#58738 (Hongbin Ma)。
- 此 PR 使 http/https 连接在所有用例中都可复用,即使响应为 3xx 或 4xx。 #58845 (Sema Checherinda).
- 为更多系统表的列添加了注释。是对 https://github.com/ClickHouse/ClickHouse/pull/58356 的延续。#59016(Nikita Mikhaylov)。
- 现在我们可以在 PREWHERE 中使用虚拟列了。对于像
_part_offset这样的非常量虚拟列,这尤其有用。#59033 (Amos Bird)。 - 现在可以在服务器配置文件中指定 Distributed 表引擎的设置(类似于 MergeTree 的设置),例如
<distributed> <flush_on_detach>false</flush_on_detach> </distributed>。 #59291 (Azat Khuzhin). - Keeper 改进:仅在内存中缓存由
latest_logs_cache_size_threshold和commit_logs_cache_size_threshold控制的一定数量的日志。#59460 (Antonio Andelic). - 现在,对象存储不再使用固定的常量密钥,而是生成密钥来判断是否具备删除对象的能力。#59495 (Sema Checherinda)。
- 默认情况下不再将指数表示法推断为浮点数。新增设置项
input_format_try_infer_exponent_floats,用于恢复之前的行为(默认关闭)。关闭 #59476。#59500(Kruglov Pavel)。 - 允许使用括号将 ALTER 操作括起来。是否输出括号可以通过
format_alter_operations_with_parentheses配置进行控制。默认情况下,在格式化查询中会输出括号,因为我们在某些地方将格式化后的 ALTER 操作作为元数据进行存储(例如:mutations)。新的语法澄清了一些以 ALTER 操作列表结尾的查询。例如:ALTER TABLE x MODIFY TTL date GROUP BY a, b, DROP COLUMN c在旧语法下无法被正确解析。在新语法中,查询ALTER TABLE x (MODIFY TTL date GROUP BY a, b), (DROP COLUMN c)的含义就很清晰。旧版本无法读取新语法,因此如果在同一个集群中混用新旧版本的 ClickHouse,使用新语法可能会导致问题。#59532 (János Benjamin Antal)。 - 将 Intel QPL(
DEFLATE_QPL编解码器所使用)从 v1.3.1 升级到 v1.4.0。同时修复了轮询超时机制中的一个 bug,我们观察到在某些情况下超时机制不会正常生效;如果发生超时,IAA 和 CPU 可能会并发处理缓冲区。目前的做法是先确保 IAA codec 的状态不是 QPL_STS_BEING_PROCESSED,然后再回退到 SW codec。#59551(jasperzhu)。 - 在 libhdfs3 中添加按位置读取(pread)功能。如果需要在 libhdfs3 中调用按位置读取,请在
hdfs.h中按如下方式使用hdfsPread函数:tSize hdfsPread(hdfsFS fs, hdfsFile file, void * buffer, tSize length, tOffset position);。#59624(M1eyu)。 - 即使用户误将
max_parser_depth设置配置为一个非常大的值,解析器中仍会检查栈溢出。此更改修复了 #59622。#59697(Alexey Milovidov)。 - 统一了在 Kafka 存储中通过 XML 和 SQL 创建命名集合时的行为。#59710 (Pervakov Grigorii).
- 如果在
CREATE TABLE语句中显式指定了uuid,则允许在replica_path中包含该uuid。 #59908 (Azat Khuzhin). - 在
system.tables系统表中为 ReplicatedMergeTree 表新增metadata_version列。#59942 (Maksim Kita)。 - Keeper 改进:为磁盘相关操作添加失败重试机制。#59980(Antonio Andelic)。
- 新增配置项
backups.remove_backup_files_after_failure:<clickhouse> <backups> <remove_backup_files_after_failure>true</remove_backup_files_after_failure> </backups> </clickhouse>。#60002(Vitaly Baranov)。 - 在执行 RESTORE 命令时,从备份中读取表元数据的过程改为使用多线程。#60040 (Vitaly Baranov)。
- 现在,如果
StorageBuffer具有多个分片(num_layers> 1),则所有分片的后台刷新将会在多个线程中并行执行。#60111 (alesapin)。 - 支持在配置文件中通过
user键为特定的 S3 设置指定用户。 #60144 (Antonio Andelic). - 当 GCP 返回带有 HTTP 错误码
GATEWAY_TIMEOUT的Internal Error时,回退为将 S3 文件复制到缓冲区。#60164 (Maksim Kita). - 允许使用 "local" 作为对象存储类型,替代 "local_blob_storage"。#60165 (Kseniia Sumarokova)。
- 为
Variant值实现比较运算符,以及将 Field 正确插入到Variant列中。默认情况下不允许创建具有相似变体类型的Variant类型(可通过设置allow_suspicious_variant_types予以允许)。关闭 #59996。关闭 #59850。#60198(Kruglov Pavel)。 - 改进了虚拟列的整体可用性。现在允许在
PREWHERE中使用虚拟列(对于_part_offset这类非常量虚拟列尤其有用)。同时还为虚拟列提供了内置文档:在启用describe_include_virtual_columns设置后,它会作为列注释显示在DESCRIBE查询中。 #60205 (Anton Popov). - 为
ULIDStringToDateTime实现短路执行。 #60211 (Juan Madurga). - 为表
system.backups和system.backup_log新增了query_id列。为error列新增了错误堆栈跟踪信息。 #60220 (Maksim Kita). - 在
DETACH/ 服务器关闭以及执行SYSTEM FLUSH DISTRIBUTED时,对 Distributed 引擎中待处理的 INSERT 数据块进行并行刷新(仅当表配置了多磁盘策略时才会启用并行——当前 Distributed 引擎中的所有表均为此配置)。 #60225 (Azat Khuzhin). joinRightColumnsSwitchNullability中的过滤设置不当,已在 #59625 中修复。#60259 (lgbo)。- 添加一个设置,用于在合并时强制使用读透缓存。 #60308 (Kseniia Sumarokova)。
- Issue #57598 提及了一个与事务处理相关的行为差异:在没有活动事务时执行 COMMIT/ROLLBACK 会被报告为错误,这与 MySQL 的行为不一致。#60338(PapaToemmsn)。
- 在
distributed_ddl_output_mode设置中新增none_only_active模式。#60340 (Alexander Tokmakov)。 - 现在,通过 MySQL 端口的连接会自动在设置
prefer_column_name_to_alias = 1下运行,以便开箱即用地支持 QuickSight。此外,设置mysql_map_string_to_text_in_show_columns和mysql_map_fixed_string_to_text_in_show_columns现已默认启用,同样只影响 MySQL 连接。这提高了与更多 BI 工具的兼容性。#60365(Robert Schulze)。 - 当输出格式为 Pretty 格式且一个数据块只包含一个超过一百万的数值时,会在表格右侧显示对应的可读数值。例如:
┌──────count()─┐ │ 233765663884 │ -- 233.77 billion └──────────────┘。 #60379 (rogeryk)。 - 允许为 clickhouse-server 配置 HTTP 重定向处理程序。例如,可以将
/重定向到 Play UI。#60390 (Alexey Milovidov). - 高级仪表板中的多折线图颜色略有优化。 #60391 (Alexey Milovidov).
- 修复 JavaScript 代码中的竞态条件,该问题会导致多个图表相互重叠显示。#60392 (Alexey Milovidov)。
- 即使用户将
max_parser_depth设置错误配置为非常大的值,也要在解析器中检查栈溢出。修复了 #59622。#60434(Alexey Milovidov)。 - 函数
substring新增了一个别名byteSlice。 #60494 (Robert Schulze). - 将服务器设置项
dns_cache_max_size重命名为dns_cache_max_entries,以减少歧义。#60500(Kirill Nikiforov)。 SHOW INDEX | INDEXES | INDICES | KEYS不再按照主键列进行排序(此前这种行为并不直观)。#60514 (Robert Schulze)。- Keeper 改进:在启动时如果检测到无效快照则中止启动,以避免数据丢失。 #60537 (Antonio Andelic).
- 通过
merge_tree_read_split_ranges_into_intersecting_and_non_intersecting_fault_probability设置,为 MergeTree 读取拆分范围添加了相交和不相交的故障注入。 #60548 (Maksim Kita). - 高级仪表板现在在滚动页面时始终显示控件。因此,您可以在无需向上滚动的情况下添加新图表。#60692(Alexey Milovidov)。
- 字符串类型和 Enum 可以在相同的上下文中使用,例如数组、UNION 查询和条件表达式。此更改关闭了 #60726。#60727(Alexey Milovidov)。
- 将 tzdata 更新到 2024a。 #60768 (Raúl Marín)。
- 在 Filesystem 数据库中支持无扩展名文件。#60795 (Kruglov Pavel)。
- Keeper 改进:在 Keeper 的设置中支持
leadership_expiry_ms。#60806 (Brokenice0415). - 无论
input_format_try_infer_exponent_floats的设置为何,始终在 JSON 格式中推断指数形式的数值。新增设置input_format_json_use_string_type_for_ambiguous_paths_in_named_tuples_inference_from_objects,允许在根据 JSON 对象推断命名 Tuple 时,对存在歧义的路径使用 String 类型,而不是抛出异常。 #60808 (Kruglov Pavel). - 为 SMJ 添加一个标志位,用于将 null 视为最大值或最小值,从而使其行为与其他 SQL 系统(例如 Apache Spark)保持兼容。#60896 (loudongfeng)。
- 已将 ClickHouse 版本添加到 Docker 标签。解决了 #54224。#60949(Nikolay Monkov)。
- 添加设置
parallel_replicas_allow_in_with_subquery = 1,该设置允许IN子查询与并行副本配合使用。#60950 (Nikolai Kochetov)。 - DNSResolver 会对解析得到的 IP 地址集合进行随机打乱。#60965 (Sema Checherinda)。
- 在
clickhouse-client和clickhouse-local中支持根据文件扩展名检测输出格式。 #61036 (豪肥肥). - 定期检查内存限制是否已更新。#61049 (Han Fei).
- 默认启用处理器 profiling 功能(用于统计排序、聚合等操作的耗时以及输入/输出字节数)。 #61096 (Azat Khuzhin)。
- 添加此前因疏忽遗漏的函数
toUInt128OrZero(该疏漏与 https://github.com/ClickHouse/ClickHouse/pull/945 相关)。兼容性别名FROM_UNIXTIME和DATE_FORMAT(它们并非 ClickHouse 原生函数,仅为 MySQL 兼容性而存在)现已改为大小写不敏感,以符合 SQL 兼容别名的预期行为。#61114(Alexey Milovidov)。 - 对访问检查进行了改进:即使目标用户也不具备可撤销的授权记录时,仍然允许撤销其实际上并不拥有的权限。示例:```sql GRANT SELECT ON . TO user1; REVOKE SELECT ON system.* FROM user1;. #61115 (pufit).
- 修复之前优化中的错误:https://github.com/ClickHouse/ClickHouse/pull/59698:移除
break,以确保第一个过滤列满足最小大小要求 cc @jsc0218。#61145 (李扬)。 - 修复
Nullable列上has()函数的问题(修复 #60214)。#61249(Mikhail Koviazin)。 - 现在可以在配置替换中,为子树
<include from_zk="/path" merge="true">指定属性merge="true"。如果指定了该属性,ClickHouse 会将该子树与现有配置进行合并;否则,默认行为是将新内容追加到配置中。#61299 (alesapin)。 - 为虚拟内存映射添加异步指标:VMMaxMapCount 和 VMNumMaps。解决了 #60662。#61354(Tuan Pham Anh)。
- 在所有会创建临时数据的场景中使用
temporary_files_codec设置,例如外部内存排序和外部内存 GROUP BY。此前它仅在partial_mergeJOIN 算法中生效。#61456 (Maksim Kita)。 - 移除重复的
containing_part.empty()检查,该检查已在此处执行:https://github.com/ClickHouse/ClickHouse/blob/1296dac3c7e47670872c15e3f5e58f869e0bd2f2/src/Storages/MergeTree/MergeTreeData.cpp#L6141。#61467(William Schoeffel)。 - 新增设置项
max_parser_backtracks,用于限制查询解析的复杂度。#61502 (Alexey Milovidov)。 - 在动态调整文件系统缓存大小时减少争用。#61524 (Kseniia Sumarokova).
- 禁止使用 StorageS3 队列的分片模式,因为其实现即将被重写。 #61537 (Kseniia Sumarokova).
- 修正拼写错误:将
use_leagcy_max_level更正为use_legacy_max_level。 #61545 (William Schoeffel)。 - 删除
blob_storage_log中的一些重复记录。 #61622 (YenchangChan). - 将
current_user函数添加为与 MySQL 兼容的别名。#61770 (Yarik Briukhovetskyi)。 - 在使用 Azure Blob Storage 时,为备份 IO 使用托管标识。新增一个设置,以防止 ClickHouse 尝试创建不存在的容器(该操作需要存储账户级别的权限)。 #61785 (Daniel Pozo Escalona)。
- 在之前的版本中,Pretty 格式中某些数字的显示效果还不够理想。 #61794 (Alexey Milovidov).
- 在 Pretty 格式中,如果结果集中只有一个值(例如
SHOW CREATE TABLE查询的结果),则该较长的值不会被截断。 #61795 (Alexey Milovidov)。 - 与
clickhouse-local类似,clickhouse-client也接受--output-format选项,将其视为--format选项的同义选项。此更改关闭了 #59848。#61797(Alexey Milovidov)。 - 如果 stdout 是终端且未指定输出格式,
clickhouse-client和类似工具将默认使用PrettyCompact,与交互模式类似。clickhouse-client和clickhouse-local将以统一的方式处理用于指定输入和输出格式的命令行参数。这解决了 #61272。#61800(Alexey Milovidov)。 - 在 Pretty 格式中为数字分组添加下划线以提升可读性。该行为由一个新的设置
output_format_pretty_highlight_digit_groups控制。#61802(Alexey Milovidov)。
Bug 修复(官方稳定版本中用户可见的异常行为)
- 修复
intDiv在 decimal 参数上的问题 #59243 (Yarik Briukhovetskyi)。 - 修复 wingfuzz 发现的 KQL 问题 #59626 (Yong Wang)。
- 修复 AsynchronousBoundedReadBuffer 的 "Read beyond last offset" 错误 #59630 (Vitaly Baranov)。
- rabbitmq:修复既未 ack 也未 nack 的消息 #59775 (Kseniia Sumarokova).
- 修复 analyzer 中在 const 和 LowCardinality 上使用 GROUP BY const 时的函数执行问题 #59986 (Azat Khuzhin).
- 修复 DateTime64 的精度转换问题 #60004 (Yarik Briukhovetskyi)。
- 修复向 SQLite 执行包含单引号的 INSERT 语句时的问题(通过使用单引号本身而不是反斜杠来转义单引号) #60015 (Azat Khuzhin).
- 修复
optimize_uniq_to_count移除列别名的问题 #60026 (Raúl Marín). - 修复 MergeTree 中
finished_mutations_to_keep=0的行为,使其与文档说明一致(其中 0 表示保留所有内容) #60031 (Azat Khuzhin). - 修复在删除 s3queue 表时可能出现的异常 #60036 (Kseniia Sumarokova).
- 修复 PartsSplitter 针对同一分区片段生成无效区间的问题 #60041 (Maksim Kita)。
- 在 DDLLogEntry 中使用来自上下文的 max_query_size,而不是将其硬编码为 4096 #60083 (Kruglov Pavel).
- 修复查询格式不统一的问题 #60095 (Alexey Milovidov).
- 修复子查询中
EXPLAIN格式不一致的问题 #60102(Alexey Milovidov)。 - 修复在处理 Nullable 时导致的 cosineDistance 崩溃 #60150(Raúl Marín)。
- 允许将字符串形式的布尔值转换为布尔类型 #60160 (Robert Schulze).
- 修复 system.s3queue_log #60166 (Kseniia Sumarokova)。
- 修复
arrayReduce在聚合函数名称可为空时的问题 #60188 (Raúl Marín). - 修复在预过滤阶段(PK、分区裁剪)执行 actions 时的问题 #60196 (Azat Khuzhin).
- 在 s3queue 中隐藏敏感信息 #60233 (Kseniia Sumarokova).
- 回滚 "将
ORDER BY ALL替换为ORDER BY *" #60248 (Robert Schulze). - Azure Blob Storage:修复 endpoint 和前缀相关问题 #60251 (SmitaRKulkarni).
- 修复 HTTP 异常状态码。 #60252 (Austin Kothig).
- 修复 LRUResource Cache 中的一个问题(Hive 缓存) #60262 (shanfengp).
- s3queue:修复 bug(同时修复不稳定的测试用例 test_storage_s3_queue/test.py::test_shards_distributed) #60282 (Kseniia Sumarokova)。
- 修复在处理 IPv6 时的哈希函数中使用未初始化的值以及产生无效结果的问题 #60359 (Kruglov Pavel)。
- 如果并行副本发生变化,则强制重新分析 #60362 (Raúl Marín).
- 修复在新的
disks配置选项中对plain元数据类型的使用问题 #60396 (Kseniia Sumarokova)。 - 不再允许将 max_parallel_replicas 设置为 0,因为这样没有意义 #60430 (Kruglov Pavel)。
- 尝试修复 mapContainsKeyLike 中的逻辑错误“无法捕获列,因为其类型不兼容” #60451 (Kruglov Pavel)。
- 修复 OptimizeDateOrDateTimeConverterWithPreimageVisitor 在 null 参数时的处理 #60453 (Raúl Marín)。
- 在执行 CREATE TABLE 时避免计算标量子查询。#60464 (Nikolai Kochetov)。
- 合并 #59674。#60470(Alexey Milovidov)。
- 在 s3Cluster 中正确校验键 #60477 (Antonio Andelic).
- 修复在并行解析中,由于错误导致大量行被跳过时发生的死锁问题 #60516 (Kruglov Pavel).
- 修复 kql 复合运算符的 max_query_size: #60534 (Yong Wang).
- Keeper 修复:在等待提交日志时添加超时机制 #60544 (Antonio Andelic).
- 减少从
system.numbers读取的行数 #60546 (JackyWoo)。 - 不再为日期类型输出数值提示 #60577 (Raúl Marín)。
- 修复在过滤条件中使用非确定性函数时从 MergeTree 读取的数据问题 #60586 (Kruglov Pavel).
- 修复由于兼容性设置值类型错误导致的逻辑错误 #60596(Kruglov Pavel)。
- 修复在混合 x86-64 / ARM 集群中聚合函数的状态不一致的问题 #60610 (Harry Lee)。
- fix(prql): 更健壮的 panic 处理程序 #60615 (Maximilian Roos).
- 修复
intDiv对 decimal 和 date 参数的处理 #60672 (Yarik Briukhovetskyi)。 - 修复:在 ALTER MODIFY 查询中展开 CTE #60682 (Yakov Olkhovskiy).
- 修复在非 Atomic/Ordinary 数据库引擎(例如 Memory)上对 system.parts 的支持 #60689 (Azat Khuzhin)。
- 修复参数化视图出现 “Invalid storage definition in metadata file” 错误的问题 #60708 (Azat Khuzhin).
- 修复 CompressionCodecMultiple 中的缓冲区溢出问题 #60731(Alexey Milovidov)。
- 从 SQL/JSON 中移除无效数据 #60738 (Alexey Milovidov).
- 移除聚合函数 quantileGK 中不正确的 sanitize 检查 #60740 (李扬)。
- 通过将 streams 设置为 1,修复 insert-select + insert_deduplication_token 的 bug #60745 (Jordi Villar)。
- 禁止在不受支持的分片上传操作中设置自定义元数据头 #60748 (Francisco J. Jurado Moreno).
- 修复 toStartOfInterval 函数 #60763(Andrey Zvonov)。
- 修复 arrayEnumerateRanked 中的崩溃问题 #60764 (Raúl Marín).
- 修复在
INSERT SELECT JOIN中使用input()时导致的崩溃 #60765 (Kruglov Pavel). - 修复了在子查询中
allow_experimental_analyzer取不同值时导致的崩溃问题 #60770 (Dmitry Novik)。 - 从 S3 读取数据时取消递归 #60849 (Antonio Andelic).
- 修复 HashedDictionaryParallelLoader 在发生错误时可能卡死的问题 #60926 (vdimir)。
- 修复在 Replicated 数据库上异步执行 RESTORE 的问题 #60934 (Antonio Andelic).
- 修复通过原生协议向
Log表进行异步插入时出现的死锁 #61055 (Anton Popov). - 修复 RangeHashedDictionary 中
dictGetOrDefault默认参数的惰性求值问题 #61196 (Kruglov Pavel). - 修复
groupArraySorted中的多个 Bug #61203(Raúl Marín)。 - 修复独立二进制版本中 Keeper 重新配置的问题 #61233(Antonio Andelic)。
- 修复 S3 引擎中 session_token 的使用方式 #61234 (Kruglov Pavel).
- 修复聚合函数
uniqExact可能产生错误结果的问题 #61257 (Anton Popov). - 修复
show database命令中的错误 #61269(Raúl Marín)。 - 修复 RabbitMQ 存储在使用 MATERIALIZED 列时的逻辑错误 #61320 (vdimir).
- 修复 CREATE OR REPLACE DICTIONARY #61356 (Vitaly Baranov).
- 修复包含外部 ON CLUSTER 的 ATTACH 查询 #61365 (Nikolay Degterinsky)。
- 修复 actions DAG 拆分问题 #61458 (Raúl Marín).
- 修复在结束失败的 RESTORE 操作时的问题 #61466 (Vitaly Baranov)。
- 使用兼容性设置正确禁用 async_insert_use_adaptive_busy_timeout #61468(Raúl Marín)。
- 允许在 restore 池中排队 #61475 (Nikita Taranov)。
- 修复使用 UUID 读取 system.parts 时的错误(问题 61220)。#61479(Dan Wu)。
- 修复 window view 中的崩溃 #61526 (Alexey Milovidov)。
- 修复
repeat在处理非原生整数类型时的问题 #61527 (Antonio Andelic). - 修复客户端的
-s参数 #61530(Mikhail f. Shiryaev)。 - 修复
arrayPartialReverseSort中的崩溃问题 #61539 (Raúl Marín)。 - 修复带常量位置参数的字符串搜索 #61547 (Antonio Andelic).
- 修复
addDays与datetime64一起使用时导致错误的问题 #61561 (Shuai li)。 - 修复在使用去重的异步插入时的
system.part_log问题 #61620 (Antonio Andelic). - 修复 system.parts 的未就绪集合问题。#61666 (Nikolai Kochetov).