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。这也是为什么在为 ClickHouse 的 String 数据类型选择 Arrow 数据类型时,可以在 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)。 - 修复了一个与物化视图相关的安全问题,该问题允许用户在未获得所需授权的情况下向表中插入数据。该修复会验证用户是否具有插入权限,不仅针对物化视图本身,还包括所有底层表。这意味着某些之前可以正常执行的查询,现在可能会因
Not enough privileges而失败。为解决这一问题,本次发布为视图引入了一个新的 SQL 安全性特性 https://clickhouse.com/docs/sql-reference/statements/create/view#sql_security。 #54901 (pufit)
新功能
- 支持返回值计数及其误差的 topk/topkweighed 模式。 #54508 (UnamedRus).
- 新增语法,允许在视图/物化视图中指定定义者用户(definer user)。这样可以在未对底层表显式授予权限的情况下,通过视图执行 SELECT/INSERT 操作。#54901 (pufit)。
- 实现了将不同类型的 MergeTree 表自动转换为 Replicated 引擎的功能。在表的数据目录(
/clickhouse/store/xxx/xxxyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy/)中创建一个空的convert_to_replicated文件,该表将在下次服务器启动时自动完成转换。 #57798 (Kirill)。 - 新增了表函数
mergeTreeIndex。它表示MergeTree表的索引文件和标记文件的内容,可用于内部检查。语法:mergeTreeIndex(database, table, [with_marks = true]),其中database.table是一个使用MergeTree引擎的现有表。#58140(Anton Popov)。 - 在
file/s3/hdfs/url/azureBlobStorage引擎中,如果文件格式未知,则在进行模式推断时尝试自动检测其格式。修复了 #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(豪肥肥)。
- 新增语法,允许在视图/物化视图中指定定义者(definer)用户。这样即使未对底层表授予显式权限,也可以通过视图执行 SELECT/INSERT 操作。#60439 (pufit)。
- 为
StorageMemory(memory 引擎)添加四个属性: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和big decimal类型的条件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控制,默认开启。这样带来几个优点:- 对未使用的表不会加载主键;- 如果内存不足,将在首次使用时抛出异常,而不是在服务器启动时抛出异常。同时也有一些缺点:- 主键加载带来的延迟会在第一次查询时承担,而不是在开始接受连接之前;这在理论上可能引发“惊群”问题。此变更关闭了 #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).
- 优化针对可为空数字或可为空字符串的
insertManyFrom。 #60846 (李扬)。 - 优化了函数
dotProduct,省去了不必要且开销昂贵的内存拷贝。#60928(Robert Schulze)。 - 对 filesystem cache 的操作将更少受到锁竞争的影响。#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 意味着“抽象(abstract)”,这意味着它不应包含重量级对象。AST 的部分内容在解析期间可以被创建和丢弃,这其中包括大量的回溯操作。这会导致解析端变慢,从而允许只读用户实施 DoS 攻击。但主要问题在于它妨碍了 fuzzers 的进展。#61543(Alexey Milovidov)。
改进
- 在对物化视图运行 MODIFY COLUMN 查询时,检查内部表的结构以确保所有列均存在。#47427 (sunny)。
- 新增了表
system.keywords,其中包含解析器中的所有关键字。主要是为了更好地支持模糊测试和语法高亮。 #51808 (Nikita Mikhaylov)。 - 为带有分析器的参数化视图添加支持,以避免对 CREATE PARAMETERIZED VIEW 语句进行分析。重构现有参数化视图逻辑,同样避免对 CREATE PARAMETERIZED VIEW 语句进行分析。#54211 (SmitaRKulkarni)。
- Ordinary 数据库引擎已弃用。如果您的服务器正在使用它,您将在 clickhouse-client 中收到警告。已关闭 #52229。#56942(shabroo)。
- 与某个表相关的所有零拷贝锁在该表被删除时必须全部删除。包含这些锁的目录也必须一并移除。#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). - 现在,对象存储不再使用常量 key,而是生成用于确定是否具备删除对象能力的 key。#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 编解码器状态不是 QPL_STS_BEING_PROCESSED。 #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 中使用它。 #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有超过 1 个分片(num_layers> 1),后台刷新将会在多个线程中并行处理所有分片。#60111(alesapin)。 - 现在支持在配置中通过
user键为特定的 S3 设置指定用户。#60144 (Antonio Andelic)。 - 在通过 GCP 复制 S3 文件时,如果 GCP 返回带有
GATEWAY_TIMEOUTHTTP 状态码的Internal Error,则回退为缓冲区复制。#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).
- 默认启用处理器性能分析(统计在排序、聚合等操作中花费的时间以及输入/输出字节数)。#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(李扬)。
- 修复
has()函数在Nullable列上的问题(修复了 #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 时,为备份 I/O 使用托管身份。添加一个配置项,防止 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 参数下的 bug #59243 (Yarik Briukhovetskyi)。 - 修复 wingfuzz 发现的 kql 问题 #59626 (Yong Wang).
- 修复 AsynchronousBoundedReadBuffer 中出现的 “Read beyond last offset” 错误 #59630 (Vitaly Baranov).
- rabbitmq:修复既未被 ack 也未被 nack 的消息问题 #59775 (Kseniia Sumarokova).
- 修复 analyzer 在
GROUP BY const时对const和LowCardinality的函数执行问题 #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:同一 part 的无效范围 #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)。 - 允许将字符串形式的 bool 值转换为真实的布尔值 #60160 (Robert Schulze)。
- 修复 system.s3queue_log #60166 (Kseniia Sumarokova).
- 修复在聚合函数名称可为空时的 arrayReduce 问题 #60188(Raúl Marín)。
- 修复在预过滤阶段(PK、分区裁剪)执行动作时的问题 #60196 (Azat Khuzhin)。
- 隐藏 s3queue 中的敏感信息 #60233 (Kseniia Sumarokova).
- 回滚 "将
ORDER BY ALL替换为ORDER BY *的更改" #60248 (Robert Schulze). - Azure Blob Storage:修复端点和前缀相关问题 #60251 (SmitaRKulkarni).
- 修复 HTTP 异常状态码。 #60252 (Austin Kothig).
- 修复 LRUResource 缓存 Bug(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)。
- 修复 plain metadata 类型与新的 disks 配置选项搭配使用时的问题 #60396(Kseniia Sumarokova)。
- 不允许将 max_parallel_replicas 设置为 0,因为这样是没有意义的 #60430 (Kruglov Pavel)。
- 尝试修复 mapContainsKeyLike 中的逻辑错误 “Cannot capture column because it has incompatible type” #60451 (Kruglov Pavel)。
- 修复在参数为 null 时的 OptimizeDateOrDateTimeConverterWithPreimageVisitor 问题 #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错误 #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).
- 修复异步 RESTORE 与 Replicated 数据库配合使用时的问题 #60934 (Antonio Andelic).
- 修复通过原生协议向
Log表进行异步插入时发生的死锁问题 #61055 (Anton Popov)。 - 修复
RangeHashedDictionary中dictGetOrDefault默认参数惰性求值的问题 #61196(Kruglov Pavel)。 - 修复 groupArraySorted 中的多个问题 #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). - 修复带有 MATERIALIZED 列的 RabbitMQ 存储中的逻辑错误 #61320 (vdimir)。
- 修复 CREATE OR REPLACE DICTIONARY #61356(Vitaly Baranov)。
- 修复使用 external 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时的 bug(issue 61220)。 #61479 (Dan Wu). - 修复 Window 视图中的崩溃问题 #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).