【Latest Release: 2.1.7】Release note for Apache Doris 2.1.x

Viewed 230

亲爱的社区小伙伴们,Apache Doris 2.1.7 版本已于 2024 年 11 月 10 日正式发布。2.1.7 版本持续升级改进,同时在湖仓一体、异步物化视图、半结构化数据管理、查询优化器、执行引擎、存储管理、以及权限管理等方面完成了若干修复。欢迎大家下载使用。

版本升级说明

Doris 升级请遵守不要跨两个二位版本升级的原则,依次往后升级。

比如从 0.15.x 升级到 2.0.x 版本,则建议先升级至 1.1 最新版本,然后升级到最新的 1.2 版本,最后升级到最新的 2.0 版本,以此类推。

7 Answers

【Release Note】Apache Doris 2.1.7

行为变更

  • 以下全局变量会被强制设置到下列默认值
    • enable_nereids_dml: true
    • enable_nereids_dml_with_pipeline: true
    • enable_nereids_planner: true
    • enable_fallback_to_original_planner: true
    • enable_pipeline_x_engine: true
  • 审计日志增加了新的列 #42262

新功能

异步物化视图

  • 异步物化视图增加了一个属性 use_for_rewrite 用于控制是否参与透明改写 #40332

查询执行引擎

  • 在 Profile 中输出变更的session variable 列表。#41016
  • 增加了trim_inltrim_inrtrim_in 函数的支持。#42641
  • 增加了一些 URL 函数,包括对 to``p_level_domainfirst_significant_subdomaincut_to_first_significant_subdomain 支持。#42916
  • 增加了 bit_set 函数。#42099
  • 增加了count_substrings 函数。#42055
  • 增加 translateurl_encode 函数。#41051
  • 增加 normal_cdf, to_iso8601, from_iso8601_date 函数。 #40695
  • 增加 trim_inltrim_inrtrim_in 函数。#42641

存储管理

  • 增加了 information_schema.table_optionsinformation_schema.``table_properties 系统表,支持查询建表时设置的一些属性。#34384
  • 支持 bitmap_empty 作为默认值。#40364
  • 增加了一个新的 Session 变量require_sequence_in_insert 来控制向 Unique Key 表进行insert into select 写入时,是否必须提供 Sequence 列。#41655

其他

允许在 BE WebUI 页面生成火焰图。#41044

改进提升

湖仓一体

异步物化视图

  • 细化了异步物化视图中构建时锁持有的粒度。#40402 #41010

查询优化器

  • 优化了极端情况下统计信息收集和使用的准确性,以提升规划稳定性。#40457
  • 现在可以在更多情况下生成 Runtime Filter,以提升查询性能。 #40815
  • 提升数值,日期和字符串函数的常量折叠能力,以提升查询性能。#40820
  • 优化了列裁剪的算法,以提升查询性能。#41548

查询执行引擎

  • 支持并行的 Prepare 降低短查询的耗时。#40270
  • 修正了 Profile 中一些 Counter的名字,保持跟审计日志一致。#41993
  • 增加了新的 Local Shuffle 规则,使得部分查询更快。#40637

存储管理

  • Show Partitions 命令支持显示 Commit Version。 #28274
  • 建表时检查不合理的 Partition EXPR。#40158
  • 优化 Routine Load EOF 时的调度逻辑。#40509
  • Routine Load感知 Schema 变化。#40508
  • 优化 Routine Load Task 超时逻辑。#41135

其他

  • 支持通过 BE 配置关闭 BRPC 的内置服务端口。#41047
  • 修复审计日志缺失字段以及重复记录的问题。#41047

Bug 修复

湖仓一体

  • 修复了 INSERT OVERWRITE 的行为跟 Hive 不一致的问题。#39840
  • 清理临时创建的文件夹,解决 HDFS 上空文件夹太多的问题。#40424
  • 修复某些情况下,使用 JDBC Catalog 导致 FE 内存泄露的问题。#40923
  • 修复某些情况下,使用 JDBC Catalog 导致 BE 内存泄露的问题。#41266
  • 修复某些情况下,读取 Snappy 压缩格式错误的问题。#40862
  • 修复某些情况下,FE 端 FileSystem 可能泄露的问题。#41108
  • 修复某些情况下,通过 EXPLAIN VERBOSE 查看外表执行计划可能导致空指针的问题。#41231
  • 修复无法读取 Paimon parquet 格式表的问题。#41487
  • 修复 JDBC Oracle Catalog 兼容性改动引入的性能问题。#41407
  • 禁止下推隐式转换后的谓词条件已解决 JDBC Catalog 某些情况下查询结果不正确的问题。#42242
  • 修复 External Catalog 中表名大小写访问异常的一些问题。#42261

异步物化视图

  • 修复用户指定的 Start Time 不生效的问题。#39573
  • 修复嵌套物化视图不刷新的问题。#40433
  • 修复删除重建基表后,物化视图可能不刷新的问题。#41762
  • 修复分区补偿改写可能导致结果错误的问题。#40803
  • sql_select_limit 设置时,改写结果可能错误的问题。#40106

半结构化管理

  • 修复了索引文件句柄泄露的问题。#41915
  • 修复了特殊情况下倒排索引 count() 不准确的问题。#41127
  • 修复了未开启 Light Schema Change 时 Variant 异常的问题。#40908
  • 修复了 Variant 返回数组时内存泄漏的问题。#41339

查询优化器

  • 修正了外表查询时,可能存在过滤条件 nullable 计算错误,导致执行异常的问题。#41014
  • 修复范围比较表达式优化可能发生错误的问题。#41356

查询执行引擎

  • match_regexp 函数不能正确处理空字符串的问题。#39503
  • 解决在高并发场景下,Scanner 线程池卡死的问题。#40495
  • 修复了 data_floor 函数结果错误的问题。#41948
  • 修复了部分场景下,Cancel 消息不正确的问题。#41798
  • 修复 Arrow Flight 打印太多的 Warn 日志的问题。[#41770] (https://github.com/apache/doris/pull/41770)
  • 解决部分场景下 Runtime Filter 发送失败的问题。#41698
  • 修复了一些系统表查询的时候不能正常结束或者卡住的问题。#41592
  • 修复了窗口函数结果不正确的问题。#40761
  • 修复 ENCRYPT 和 DECRYPT 函数导致 BE Core 的问题。#40726
  • 修复 CONV 函数结果错误的问题。#40530

存储管理

  • Memtable 前移在多副本情况下,有机器宕机时导入失败的问题。#38003
  • 导入过程中,Memtable 在 Flush 阶段时,统计的内存不准确。#39536
  • 修复 Memtable前移多副本容错的问题。#40477
  • 修复 Memtable前移 bvar 统计不准的问题。#40985
  • 修复 s3 Load 进度汇报不准的问题。#40987

权限管理

  • 修复了SHOW COLUMNS, SHOW SYNC, SHOW DATA FROM DB.TABLE 相关的权限问题。 #39726

Others

  • 修复 2.0 版本的审计日志插件在 2.1 版本无法使用的问题#41400

【Release Note】Apache Doris 2.1.6

Apache Doris 2.1.6 版本已于 2024 年 9 月 10 日正式发布。2.1.6 版本在湖仓一体、异步物化视图、半结构化数据管理持续升级改进,同时在查询优化器、执行引擎、存储管理、数据导入与导出以及权限管理等方面完成了若干修复。

行为变更

  • 移除 create repository 命令中的 delete_if_exists 选项。#38192

  • 新增会话变量 enable_prepared_stmt_audit_log,用于控制 JDBC 预编译语句是否记录审计日志,默认不记录。#38624 #39009

  • 采用文件描述符限制和内存限制来管理 Segment Cache。#39689

  • sys_log_mode 配置项设置为 BRIEF 时,在日志中增加文件位置信息,以提供更详细的上下文。#39571

  • 将会话变量 max_allowed_packet 的默认值调整为 16MB,提高数据传输限制。#38697

  • 在单次请求中,若包含多个 SQL 语句,各语句间必须使用分号进行分隔,以增强语句的清晰度和执行效率。#38670

  • 现在支持 SQL 语句以分号开始,提供更灵活的语句书写方式。#39399

  • 在执行如 show create table 等语句时,类型格式与 MySQL 保持一致,提升与 MySQL 的兼容性。#38012

  • 当新优化器规划查询超时后,不再回退到旧优化器,以避免潜在的性能下降问题。#39499

新功能

Lakehouse

  • 实现 Iceberg 表的写回功能。

    • 更多信息,请查看文档数据湖构建-Iceberg
  • 增强 SQL 拦截规则,支持对外表的拦截处理。

    • 更多信息,请查看文档查询管理-SQL 拦截
  • 新增系统表file_cache_statistics,用于查看 BE 节点的数据缓存性能指标。

异步物化视图

  • 支持在 Insert 中进行透明改写。#38115

  • 支持对查询中存在 VARIANT 类型时的透明改写。#37929

半结构化数据管理

  • 支持 ARRAY MAP 类型到 JSON 类型的 CAST 转换功能。#36548

  • 引入json_keys函数,用于提取 JSON 中的键名。#36411

  • 支持在导入 JSON 时指定json path$``#38213

  • ARRAY / MAP / STRUCT 类型支持replace_if_not_null#38304

  • 允许调整 ARRAY / MAP / STRUCT 类型的列顺序。#39210

  • 新增multi_match函数,支持在多个字段中匹配关键词,并利用倒排索引加速查询。#37722

查询优化器

  • 完善 MySQL 协议返回列的信息,包括原始数据库名、表名、列名和别名。#38126

  • 增强聚合函数group_concat,支持同时使用order bydistinct进行复杂数据聚合。#38080

  • 改进了 SQL 缓存机制,支持通过注释区分不同的查询以复用缓存结果。#40049

  • 增强分区裁剪功能,支持在过滤条件中使用date_truncdate函数。#38025 #38743

  • 允许在表别名前使用数据库名作为限定名前缀。#38640

  • 支持 Hint 格式注释。#39113

执行引擎

  • Group concat函数现支持distinctorder by选项。#38744

Others

  • 新增系统表table_properties,便于用户查看和管理表的各项属性。

  • 新增 FE 中死锁和慢锁检测功能。

改进提升

湖仓一体

  • 革新外表元数据缓存机制。

  • 新增会话变量keep_carriage_return,默认关闭。读取 Hive Text 格式表时,默认将\r\n\n均视为换行符。#38099

  • 优化 Parquet / ORC 文件读写内存统计。#37257

  • Paimon 表支持 IN/ NOT IN 谓词下推。#38390

  • 升级优化器,支持 Hudi 表的 Time Travel 语法。#38591

  • Kerberos 认证流程优化,提升安全认证效率与稳定性。#37301

  • 支持 Rename column 操作后读取 Hive 表。#38809

  • 提升外表分区列读取性能。#38810

  • 优化外表查询规划,优化数据分片合并策略,有效避免小分片对查询性能的影响。#38964

  • SHOW CREATE DATABASE / TABLE 新增 Location 等属性展示。#39644

  • MaxCompute Catalog 扩展支持复杂类型。#39822

  • 优化文件缓存加载策略,通过异步加载方式避免 BE 启动时间过长的问题。#39036

  • 升级文件缓存淘汰策略,有效管理长时间占用锁的资源。#39721

异步物化视图

  • 支持小时、周及季度级别的分区上卷构建。#37678

  • 基于 Hive 外表的物化视图,在刷新前自动更新元数据缓存,以保证每次刷新可以获取最新数据。#38212

  • 通过批量获取元数据,优化存算分离模式下的透明改写规划性能。#39301

  • 通过禁止重复枚举,进一步提升透明改写的规划性能。#39541

  • 优化基于 Hive 外表分区刷新物化视图的透明改写性能。#38525

半结构化数据管理

  • 优化 TOPN 查询内存分配,显著提升查询性能。#37429

  • 优化倒排索引字符串处理性能。#37395

  • 优化倒排索引在 MOW 表中的性能。#37428

  • 建表时支持指定行存 page_size,以控制压缩效果。#37145

查询优化器

  • 调整 Mark Join 行数估计算法,提高基数估算准确性。#38270

  • 优化 Semi / Anti Join 代价估计算法,能够正确选择最佳 Join 顺序。#37951

  • 调整部分列无统计信息情况下的过滤估计算法,使估算更精准。#39592

  • 改进 Set Operation 算子 Instance 计算逻辑,防止在极端情况下并行度不足的问题。#39999

  • 优化 Bucket Shuffle 使用策略,数据打散不充分时也能获得更好的性能。#36784

  • 窗口函数数据提前过滤,支持单投影中存在多窗口函数的情况。#38393

  • 过滤条件含 NullLiteral 时,智能折叠为 False,转换为 EmptySet,减少不必要的数据扫描量。#38135

  • 扩大谓词推导适用范围,在特定模式的查询下能够大幅减少数据扫描量。#37314

  • 在分区裁剪中支持部分短路计算逻辑,以提升分区裁剪性能。在特定场景下,性能提升超过 100%。#38191

  • 在用户变量中,支持计算任意的标量函数。#39144

  • 当查询中存在别名冲突时,报错信息能够保持与 MySQL 一致。#38104

执行引擎

  • 实现 AggState 从 2.1 到 3.x 版本的兼容,并解决了 coredump 问题。#37104

  • 重构无 Join 操作时的 Local Shuffle 策略选择机制。#37282

  • 将内部表查询的 scanner 调整为异步模式,以防止查询内部表时出现卡顿。#38403

  • 优化 Join 算子在构建 Hash 表时的 Block Merge 流程。#37471

  • 缩短 MultiCast 持有锁的时间。#37462

  • 优化 gRPC 的 keepAliveTime 设置并增加了链接监测机制,降低了因 RPC 错误导致的查询失败率。#37304

  • 当内存超出限制时,将清理 jemalloc 中的所有 Dirty Pages。#37164

  • 提升 aes_encrypt/decrypt 函数对常量类型的处理效率。#37194

  • 加快 json_extract 函数对常量数据的处理速度。#36927

  • 提高 ParseUrl 函数处理常量数据的性能。#36882

存储管理

备份恢复 / 跨集群同步

  • Restore 功能现已支持删除多余的 Tablet 和分区选项。#39363

  • 在创建 Repository 时,支持检查存储连通性。#39538

  • Binlog 支持 Drop 表操作,使 CCR 能够支持 Drop 表的增量同步。#38541

Compaction

  • 改进高优 Compaction 任务不受并发控制限制的问题。#38189

  • 根据数据特性自动调整 Compaction 的内存消耗。#37486

  • 修复顺序数据优化策略可能引发的聚合表或 MOR UNIQUE 表数据准确性问题。#38299

  • 优化补副本期间 Compaction 选择 rowset 的策略,以避免触发 -235 错误。#39262

Merge-on-Write

  • 解决了列更新和 Compaction 并发时列更新慢的问题。#38682

  • 修复一次导入大量数据时,Segcompaction 可能导致 MOW 数据不正确的问题。#38992 #39707

  • 解决 BE 重启后,可能导致列更新数据丢失的问题。#39035

其他

  • 增加了 FE 配置,用于控制冷热分层下查询是否优先访问本地数据的副本。#38322

  • 解决了过期的 BE 汇报消息未包含新创建 Tablet 的问题。#38839 #39605

  • 优化副本调度优先级策略,优先调度缺少数据的副本。#38884

  • 对于有未完成 ALTER JOB 的 Tablet,不进行均衡调度。#39202

  • List 分区方式的表现支持修改分桶数。#39688

  • 优先选择在线的磁盘服务进行查询。#39654

  • 改进了同步物化视图的 Base 表不支持删除时的提示信息。#39857

  • 改进了单列超过 4G 时的报错信息。#39897

  • 修复了 Insert 语句遇到 Plan 错误时未正确中止事务的问题。#38260

  • 修复了 SSL 链接关闭时的异常问题。#38677

  • 修复了使用 Label 中止事务时未持有表锁的问题。#38842

  • 修复了 Gson Pretty 导致 Image 过大的问题。#39135

  • 修复了 CREAT TABLE 语句在新优化器下未检查 Bucket 为 0 的问题。#38999

  • 修复了 DELETE 条件谓词中包含中文列时报错的问题。#39500

  • 修复了分区均衡模式下频繁均衡 Tablet 的问题。#39606

  • 修复了分区丢失 Storage Policy 属性的问题。#39677

  • 修复了事务内导入多个表时统计信息不正确的问题。#39548

  • 修复了 Random 分桶表删除时报错的问题。#39830

  • 修复了 UDF 不存在导致 FE 无法启动的问题。#39868

  • 修复了 FE 主从 Last Failed Version 不一致的问题。#39947

  • 修复了 Schema Change Job 被取消时,相关 Tablet 可能仍处于 Schema Change 状态的问题。#39327

  • 修复了单个语句修改类型和列顺序 SC 时出现的报错问题。#39107

数据导入

  • 改进了导入发生 -238 错误时的错误信息提示。#39182

  • 实现在 Restore 分区时,其他分区可以同时进行导入。#39915

  • 优化了 Group Commit FE 选择 BE 的策略。#37830 #39010

  • 对于一些常见的 Stream Load 错误信息,避免了程序栈的打印,简化了错误处理。#38418

  • 改进下线的 BE 可能影响导入出错的问题。#38256

权限管理

  • 优化了开启 Ranger 鉴权插件后的访问性能。#38575

  • 优化了 Refresh Catalog / Database / Table 操作的权限策略,用户仅需 SHOW 权限即可执行此操作。#39008

Bug 修复

湖仓一体

  • 修复切换 Catalog 时可能出现的数据库找不到问题。#38114

  • 解决了读取 S3 上不存在的数据时出现的异常报错。#38253

  • 修正导出操作时,指定异常路径可能导致导出位置异常的问题。#38602

  • 修复 Paimon 表时间列时区问题。#37716

  • 临时关闭 Parquet PageIndex 功能以避免部分错误行为。

  • 修复外表查询时,错误选取黑名单中 Backend 节点的问题。#38984

  • 解决读取 Parquet Struct 列类型中缺失子列导致查询错误的问题。#39192

  • 修复 JDBC Catalog 的谓词下推问题。#39082

  • 修正 Parquet 格式读取时,历史格式导致查询结果错误的问题。#39375

  • 增强了 Oracle JDBC Catalog 对 OJDBC6 驱动的兼容性。#39408

  • 解决了 Refresh Catalog/Database/Table 操作可能导致的 FE 内存泄漏问题。#39186 #39871

  • 修复了 JDBC Catalog 在某些情况下的线程泄漏问题。 #39666 #39582

  • 修复开启 Hive Metastore 事件订阅后,可能出现事件处理失败的问题。#39239

  • 禁止读取自定义 Escape CHAR 和 NULL Format 的 Hive Text 格式表,防止数据错误。#39869

  • 修复某些情况下,无法访问通过 Iceberg API 创建的 Iceberg 表的问题。#39203

  • 修复无法读取存储在开启高可用的 HDFS 集群上的 Paimon 表的问题。#39876

  • 修复开启文件缓存后,读取 Paimon 表 Deletion Vector 可能导致错误的问题。#39875

  • 修复某些情况下读取 Parquet 可能导致死锁的问题 #39945

异步物化视图

  • 修复无法在 Follower FE 上使用 show create materialized view 命令的问题。#38794

  • 统一异步物化视图在元数据中的对象类型,使其在数据工具中正常显示。#38797

  • 修复嵌套异步物化视图总是进行全量刷新的问题。#38698

  • 修正 Cancel 任务在重启 FE 后状态可能显示为 running 的问题。 #39424

  • 修复错误使用上下文,导致刷新物化视图任务可能非预期失败的问题。#39690

  • 修复基于外表创建异步物化视图时,VARCHAR 类型因长度不合理导致写入失败的问题。#37668

  • 修复 FE 重启或 Catalog 重建后,基于外表的异步物化视图可能失效的问题。#39355

  • 禁止 List 分区的物化视图使用分区上卷,以防止生成错误数据。#38124

  • 修复在聚合上卷透明改写时,SELECT List 中存在字面量导致的结果错误问题。#38958

  • 修复当查询中存在形如a = a的过滤条件时,透明改写可能出错的问题。#39629

  • 修复透明改写直查外表无法成功的问题。#39041

半结构化数据管理

  • 删除老优化器上 PreparedStatement 的支持。#39465

  • 修复 JSON 转义字符处理的问题。#37251

  • 修复 JSON 字段重复处理的问题。 #38490

  • 修复部分 ARRAY MAP 函数的问题。#39307 #39699 #39757

  • 修复倒排索引查询和 LIKE 查询复杂组合的问题。#36687

查询优化器

  • 修复分区过滤条件中存在 or 时,可能导致分区裁剪错误的问题。#38897

  • 修复存在复杂表达式时,可能导致的分区裁剪错误的问题。#39298

  • 修复 AGG_STATE 类型中的子类型,Nullable 可能规划不正确导致执行报错的问题。#37489

  • 修复 Set Operation 算子 Nullable 可能规划不正确,导致执行报错的问题。#39109

  • 修复 Intersect 算子执行优先级不正确的问题。 #39095

  • 修复当查询中存在最大合法日期字面量时,可能出现 NPE 的问题。#39482

  • 修复偶现的规划报错,导致的执行时报错 Slot 不合法的问题。#39640

  • 修复重复引用 CTE 中的列,可能导致结果缺少部分列数据的问题。#39850

  • 修复在查询中存在 CASE WHEN 时,偶现的规划报错问题。#38491

  • 修复不能将 IP 类型隐式转换为 STRING 类型的问题。#39318

  • 修复在使用多维聚合时,当 SELECT List 中存在相同列和其别名时,可能出现的规划报错问题。#38166

  • 修复使用 BE 常量折叠时,处理 BOOLEAN 类型可能不正确的问题。#39019

  • 修复在表达式中存在 default_cluster: 作为 Database 名称前缀导致的规划报错问题。#39114

  • 修复 Insert Into 可能导致的死锁问题。#38660

  • 修复没有在规划全过程持有表锁导致可能出现规划报错的问题。 #38950

  • 修复创建表时不能正确处理 CHAR(0), VARCHAR(0) 的问题。#38427

  • 修复 SHOW CREAT TABLE 可能错误的显示出隐藏列的问题。#38796

  • 修复创建表时没有禁止使用和隐藏列同名列的问题。 #38796

  • 修复在执行 INSERT INTO AS SELECT 时,如果存在 CTE,偶现的规划报错问题。#38526

  • 修复 INSERT INTO VALUES 无法自动填充 NULL 默认值的问题。#39122

  • 修复在 DELETE 中使用 CTE,但是没有使用 USING 时,导致的 NPE 问题。#39379

  • 修复对随机分布的聚合模型表执行删除操作会失败的问题。#37985

执行引擎

  • 修复多个场景下,Pipeline 执行引擎被卡顿,导致查询不结束的问题。#38657 #38206 #38885

  • 修复了 NULL 和非 NULL 列在差集计算时导致的 Coredump 问题。#38737

  • 修复了 width_bucket 函数结果错误的问题。#37892

  • 修复了当单行数据很大且返回结果集也很大时(超过 2GB)查询报错的问题。#37990

  • 修复了 stddevDecimalV2 类型下结果错误的问题。#38731

  • 修复了 MULTI_MATCH_ANY 函数导致的 Coredump 问题。#37959

  • 修复了 INSERT OVERWRITE AUTO PARTITION 导致事务回滚的问题。#38103

  • 修复了 convert_tz 函数结果错误的问题。#37358 #38764

  • 修复了 collect_set 函数结合窗口函数使用时 Coredump 的问题。#38234

  • 修复了 mod 函数在异常输入时导致的 Coredump 问题。#37999

  • 修复了多线程下执行相同表达式可能导致 Java UDF 结果错误的问题。#38612

  • 修复了 conv 函数返回类型错误导致的溢出问题。#38001

  • 修复了 histogram 函数结果不稳定的问题。#38608

存储管理

  • 修复备份恢复后,写入数据时可能出现不可读的问题。#38343

  • 修复跨版本 Restore Version 使用问题。#38396

  • 修复 Backup 失败时 Job 没有取消的问题。#38993

  • 修复 2.1.4 升级到 2.1.5 CCR 报 NPE,导致 FE 不能启动的问题。#39910

  • 修复 Restore 之后视图和物化视图不能使用的问题。#38072 #39848

数据导入

Routine Load

  • 修复 Routine Load 一流多表可能得内存泄露的问题。 #38824

  • 修复 Routine Load 包围符和转义符不生效的问题。#38825

  • 修复 Routine Load 任务名包含大写字母时 show routineload 结果不正确的问题。#38826

  • 修复改变 Routine Load Topic 时没有重置 Offset Cache 的问题。#38474

  • 修复并发情况下 show routineload 可能触发异常的问题。#39525

  • 修复 Routine Load 可能重复导入数据的问题。#39526

Group Commit

  • 修复 JDBC 方式下打开 Group Commit 时 setNull 导致的数据报错问题 #38276

  • 修复打开 group commit insert 发往非 Master FE 时可能导致 NPE 问题 #38345

  • 修复 Group Commit 内部写数据错误处理不正确的问题。#38997

  • 修复 Group Commit 执行规划失败时可能触发的 Coredump。#39396

其它

  • 修复并发导入 Auto Partition 表可能报 Tablet 不存在的问题。#38793

  • 修复可能的 Load Stream 泄露问题。#39039

  • 修复 INSERT INTO SELECT 没有数据时开启事务的问题。#39108

  • 使用 Memtable 前移时忽略单副本导入的配置。#39154

  • 修复后台导入 stream load record 遇见 Database 删除时异常中止的问题。 #39527

  • 修复 Strict Mode 模式下,出现数据错误时错误信息提示不准确的问题。#39587

  • 修复 Stream Load 遇见错误数据不返回 Error URL 的问题。#38417

  • 修复 Insert Overwrite 和 Auto Partition 配合使用的问题。#38442

  • 修复 CSV 遇到行分隔符被包围符包围数据时解析错误的问题。#38445

数据导出

  • 修复导出操作中指定 delete_existing_files 属性后,可能会重复删除导出数据的问题。#39304

权限管理

  • 修复创建物化视图时,错误地要求拥有 ALTER TABLE 的权限的问题。#38011

  • 修复 show routine load 时,Database 显式为空的问题。#38365

  • 修复 create table like 错误的要求拥有对原表的创建权限的问题。#37879

  • 修复赋权操作没有检查对象是否存在的问题。#39597

【Release Note】Apache Doris 2.1.5

Apache Doris 2.1.5 版本已于 2024 年 7 月 24 日正式发布。2.1.5 版本在湖仓一体、多表物化视图、半结构化数据分析等方面进行了全面更新及改进,同时在倒排索引、查询优化器、查询引擎、存储管理等 10 余方向上完成了若干问题修复。

行为变更

  • JDBC Catalog 的默认连接池大小从 10 调整为 30。#37023

  • 创建 JDBC Catalog 时,参数 connection_pool_max_size 的默认值改为 30,以避免高并发场景下连接池耗尽的问题。

  • 将系统的保留内存的最小值,即 low water mark 调整为 min (6.4G, MemTotal * 5%),以更好地防止 BE 出现 OOM 问题。

  • 修改了单请求多个语句的处理逻辑,当客户端未设置 CLIENT_MULTI_STATEMENTS 标志位时,将仅返回最后一个语句的结果,而非所有语句结果。

  • 不再允许直接更改异步物化视图的数据。#37129

  • 增加会话变量 use_max_length_of_varchar_in_ctas,用于控制 CTAS 时 VARCHAR 和 CHAR 类型长度的生成行为。默认值是 true。当设置为 false 时,使用推导出的 VARCHAR 长度,而不是使用最大长度。#37284

  • 统计信息收集,默认开启了通过文件大小预估 Hive 表行数的功能。#37694

  • 默认开启异步物化视图透明改写机制。#35897

  • 透明改写利用分区物化视图,如果分物物化视图部分分区失效,默认行为是将所有基础表与物化视图联合,以保证查询数据的正确性。 #35897

新功能

湖仓一体

  • 会话变量 read_csv_empty_line_as_null 用于控制在读取 CSV 格式文件时,是否忽略空行。默认情况下忽略空行,当设置为 true 时,空行将被读取为所有列均为 Null 的行。#37153

    • 更多信息,请参考文档
  • 新增兼容 Presto 的复杂类型输出格式。通过设置 set serde_dialect="presto",可以控制复杂类型的输出格式 与 Presto 一致,用于平滑迁移 Presto 业务。#37253

多表物化视图

  • 支持在构建物化视图中使用非确定性函数。#37651

  • 支持原子替换异步物化视图定义。#37147

  • 支持通过 show create materialized view 查看异步物化视图创建语句。 #37125

  • 支持对多维聚合查询的透明改写。#37436

  • 支持对非聚合物化视图的聚合查询进行透明改写。 #37497

  • 支持使用 Key 列,对查询中的 DISTINCT 聚合做透明改写。#37651

  • 支持对物化视图进行分区,通过使用 date_trunc 对分区进行汇总。#31812 #35562

  • 支持分区表值函数(TVF) #36479

半结构化数据分析

  • 使用 VARIANT 类型的表支持部分列更新。 #34925

  • 支持默认开启 PreparedStatement。 #36581

  • VARIANT 类型支持导出为 CSV 格式。#37857

  • 支持 explode_json_object 函数,用于将 JSON Object 行转列。 #36887

  • ES Catalog 将 ES 的 NESTED 或者 OBJECT 类型映射成 Doris JSON 类型。#37101

  • 默认情况下,对于具有指定分词器的倒排索引,默认开启 support_phrase 以提升 match_phrase 系列查询性能。#37949

查询优化器

  • 支持 explain DELETE FROM 语句。#37100

  • 支持常量表达式参数的 Hint 形式。#37988

内存管理

  • 增加了 HTTP API 以清除缓存。 #36599

权限管理

  • 支持对表值函数(TVF)中的资源进行鉴权。 #37132

改进提升

湖仓一体

  • 将 Paimon 升级至 0.8.1 版本。

  • 修复在部分情况下,查询 Paimon 表时导致 org.apache.commons.lang.StringUtils 的问题。#37512

  • 支持腾讯云 LakeFS。 #36891

  • 优化了外部表查询时获取文件列表的超时时间。 #36842

  • 可通过会话变量 fetch_splits_max_wait_time_ms 进行设置

  • 改进了 SQLServer JDBC Catalog 的默认连接逻辑。 #36971

    • 默认情况下,不干预连接加密设置。仅当 force_sqlserver_jdbc_encrypt_false 设置为 true 时,才会强制在 JDBC URL 中添加 encrypt=false 以减少认证错误,从而提供更灵活的控制加密行为的能力。
  • Hive 表的 show create table 语句增加序列化/反序列化。#37096

  • FE 端 Hive 表列表默认缓存时间由 1 天改为 4 小时

  • 数据导出(Export/Outfile)支持指定 Parquet 和 ORC 的压缩格式。

    • 更多信息,请参考文档
  • 当使用 CTAS+TVF 创建表时,TVF 中的分区列将被自动映射为 Varchar(65533)而非 String,以便该分区列能够作为内表的分区列使用。 #37161

  • 优化 Hive 写入操作元数据的访问次数。#37127

  • ES Catalog 支持将 NESTED/OBJECT 类型映射到 Doris 的 JSON 类型。#37182

  • 优化使用低版本 OBJECT 驱动连接 Oracle 时的报错信息。#37634

  • 当 Hudi 表 Incremental Read 返回空集时,Doris 同样返回空集而非报错。#37636

  • 修复部分情况下内外表关联查询可能导致 FE 超时的问题。#37757

  • 修复了在从旧版本升级到新版本时,如果开启了 Hive Metastore Even Listener 情况下,可能出现 FE 元数据回放错误的问题。 #37757

多表物化视图

  • 创建异步物化视图时,支持自动选择 Key 列。 #36601

  • 异步物化视图分区刷新支持定义中使用 date_trunc 函数。#35562

  • 嵌套物化视图中,当下层命中聚合上卷改写后,上层现在依然可以继续进行透明改写。 #37651

  • 当 Schema Change 不影响异步物化视图数据正确性时,异步物化视图保持可用状态。 #37122

  • 提升了透明改写的规划速度。#37935

  • 计算异步物化视图可用性时,不再考虑当前的刷新状态。#36617

半结构化数据管理

  • 通过采样优化 DESC 查看 VARIANT 子列的性能。 #37217

  • 行存 page_size 默认从 4K 调到 16K 压缩率提升 30%,而且支持表级别可配置。

  • JSON 类型支持 Key 为空的特殊 JSON 数据。 #36762

倒排索引

  • 减少倒排索引 Exists 调用避免对象存储访问延迟。#36945

  • 优化倒排索引查询流程额外开销。#35357

  • 在物化视图中不创建倒排索引。 #36869

查询优化器

  • 当比较表达式两侧都是 Literal 时,String Literal 会尝试向另一侧的类型转换。 #36921

  • 重构了 VARIANT 类型的子路径下推功能,现在可以更好地支持复杂的下推场景。 #36923

  • 优化了物化视图代价计算的逻辑,能够更准确的选择代价更低的物化视图。 #37098

  • 提升了 SQL 中使用用户变量时的 SQL 缓存规划速度。 #37119

  • 优化了 NOT NULL 表达式的估行逻辑,当查询中存在 NOT NULL 时可以获得更好的性能。 #37498

  • 优化了 LIKE 表达式的 NULL 拒绝推导逻辑。#37864

  • 优化查询指定分区失败时的报错信息,可以更清楚看到是哪个表导致的问题。 #37280

查询引擎

  • 将某些场景下 BITMAP_UNION 算子的性能提升了 3 倍。

  • 提升 Arrow Flight 在 ARM 环境下的读取性能。

  • 优化了 explodeexplode_mapexplode_json 函数的执行性能。

数据导入

  • 支持为 INSERT INTO ... FROM TABLE VALUE FUNCTION 语句设置 max_filter_ratio 参数。

    • 更多信息,请参考文档

Bug 修复

湖仓一体

  • 修复部分情况下查询 Parquet 格式导致 BE 宕机的问题。#37086

  • 修复查询 Parquet 格式,BE 端打印大量日志的问题。#37012

  • 修复部分情况下 FE 端重复创建大量 FileSystem 对象的问题。#37142

  • 修复部分情况下,写入 Hive 后的事务信息未清理的问题。#37172

  • 修复部分情况下,Hive 表写入操作导致线程泄露的问题。#37247

  • 修复部分情况下,无法正确获取 Hive Text 格式行列分隔符的问题。#37188

  • 修复部分情况下,读取 lz4 压缩块时的并发问题。#37187

  • 修复部分情况下,Iceberg 表 count(*) 返回错误的问题。#37810

  • 修复部分情况下,创建基于 MinIO 的 Paimon Catalog 导致 FE 元数据回放错误的问题。#37249

  • 修复部分情况下使用 Ranger 创建 Catalog 客户端卡死的问题。 #37551

多表物化视图

  • 修复当基表增加新的分区时,可能导致的分区聚合上卷改写后结果错误的问题。 #37651

  • 修复关联的基表分区删除后,物化视图分区状态没有被置为不同步的问题。 #36602

  • 修复异步物化视图构建偶现的死锁问题。 #37133

  • 修复异步物化视图单次刷新大量分区时偶现的,报错 nereids cost too much time 问题。#37589

  • 修复创建异步物化视图时,如果最终的 Select List 中存在 Null Literal,则无法创建的问题。#37281

  • 修复单表物化视图,如果构建了聚合的物化视图,虽然改写成功,但是 CBO 没有选择的问题。 #35721 #36058

  • 修复 Join 输入都是聚合的情况下,构建分区物化视图,分区推导失败的问题。#34781

半结构化数据管理

  • 修复 VARIANT 在并发/异常数据等特殊情况下的问题。#37976 #37839 #37794 #37674 #36997

  • 修复 VARIANT 用在不支持的 SQL 中 Coredump 的问题。 #37640

  • 修复 1.x 版本升级到 2.x 或者更高版本时因为 MAP 数据类型 Coredump 的问题。 #36937

  • 修复 ES Catalog 对 Array 的支持。 #36936

倒排索引

  • 修复倒排索引 v2 DROP INDEX 元数据没有删除的问题。 #37646

  • 修复字符串长度超过“ignore above”时查询准确性问题。 #37679

  • 修复索引大小统计的问题。 #37232 #37564

查询优化器

  • 修复部分因为保留关键字而导致导入无法执行的问题。#35938

  • 修复了在创建表时 CHAR(255) 类型错误的记录为 CHAR(1) 的问题。 #37671

  • 修复了在相关子查询中的连接表达式为复杂表达式时返回错误结果的问题。#37683

  • 修复了 DECIMAL 类型分桶裁剪有可能错误的问题。#38013

  • 修复了部分场景下开启 Pipeline Local Shuffle 后,聚合算子计算结果错误的问题。#38061

  • 修复当聚合算子中存在相等的表达式时,可能出现的规划报错问题。#36622

  • 修复当聚合算子中存在 Lambda 表达式时,可能出现的规划报错问题。#37285

  • 修复了由窗口函数生成的字面量在优化为字面量时类型错误导致无法执行的问题。 #37283

  • 修复了聚合函数 foreach combinator 错误输出 Null 属性问题。#37980

  • 修复了 acos 函数在参数为超越范围值的字面量时不能规划的问题。#37996

  • 修复当查询指定的同步物化视图时,显示指定查询分区导致规划报错的问题。#36982

  • 修复了在规划过程中偶尔出现 NPE 的问题。#38024

查询引擎

  • 修复 DELETE WHERE 语句中,在 DECIMAL 数据类型作为条件报错的问题。#37801

  • 修复查询执行结束,但是 BE 内存不释放的问题。#37792 #37297

  • 修复在千级别 QPS 场景下,Audit Log 占用 FE 内存太多的问题。https://github.com/apache/doris/pull/37786

  • 修复 sleep 函数在输入非法值时 BE Core 的问题。#37681

  • 修复执行过程中 sync filter size meet error 的问题。 #37103

  • 修复执行过程中,使用时区时结果不对的问题。#37062

  • 修复 cast stringint 时结果不对的问题。 #36788

  • 修复 Arrow Flight 协议在开启 Pipelinex 时查询报错的问题。 #35804

  • 修复 cast string to date/datetime 报错的问题。 #35637

  • 修复使用 <=> 做大表关联查询时 BE Core 的问题。 #36263

存储管理

  • 修复列更新写入时遇到 DELETE SIGN 数据不可见问题。#36755

  • 优化 Schema Change 期间 FE 的内存占用。#36756

  • 修复 BE 重启时事务没有 Abort 导致的 BE 下线卡住问题。#36437

  • 修复 NOT-NULL 到 NULL 类型变更的偶发报错问题。 #36389

  • 优化 BE 宕机时的副本修复调度。 #36897

  • 单个 BE 创建 Tablet 时支持 round-robin 选择磁盘。 #36900

  • 修复 Publish 慢导致的查询 -230 错误。 #36222

  • 优化 Partition Balance 的速度。 #36976

  • 使用 FD 数目和内存控制 Segment Cache 避免 FD 不足。 #37035

  • 修复 Clone 和 Alter 并发可能导致的副本丢失问题。 #36858

  • 修复不能调整列顺序问题。#37226

  • 禁止自增列的部分 Schema Change 操作。 #37331

  • 修复 Delete 操作报错不准确。 #37374

  • BE 侧 Trash 过期时间调整为一天。 #37409

  • 优化 Compaction 内存占用和调度。 #37491

  • 检查潜在的过大 Backup 导致 FE 重启的问题。#37466

  • 恢复动态分区删除策略以及交叉分区的行为到 2.1.3。#37570 #37506

  • 修复 DELETE 谓词重部分 DECIMAL 报错问题。 #37710

数据导入

  • 修复导入时错误处理竞争导致的数据不可见问题。#36744

  • Stream Load 导入支持 hhl_from_base64#36819

  • 修复潜在的单表非常多 Tablet 导入失败时可能导致 FE OOM 的问题。 #36944

  • 修复 FE 主从切换时自增列可能重复的问题。#36961

  • 修复 INSERT INTO SELECT 自增列报错问题。 #37029

  • 降低数据下刷线程数,优化内存占用。 #37092

  • 优化 Routine Load 任务自动恢复和错误信息。 #37371

  • 增加 Routine Load 默认攒批大小。 #37388

  • 修复 Routine Load 在 Kafka EOF 过期的任务停止问题。#37983

  • 修复一流多表 Coredump。 #37370

  • 修复 Group Commit 内存估计不准导致的提前反压问题。#37379

  • 优化 Group Commit BE 侧线程占用。 #37380

  • 修复数据没有分区时没有错误 URL 的问题。 #37401

  • 修复导入时潜在的内存误操作问题。 #38021

主键模型

  • 降低主键表 Compaction 的内存占用。 #36968

  • 修复主键副本 Clone 失败时可能的重复数据问题。 #37229

内存管理

  • 修复 Jemalloc Cache 统计不准的问题。#37464

  • 修复在 K8s / CGroup 中不能正确获取内存大小的问题。 #36966

权限管理

  • 修复 Table Valued Function 引用 Resource 时没有鉴权的问题。 #37132

  • 修复 Show Role 语句中没有 Workload Group 权限的问题。 #36032

  • 修复创建 Row Policy 时,同时执行两条语句,导致 FE 重启失败的问题。#37342

  • 修复部分情况下,老版本升级后,因为 Row Policy 导致 FE 元数据回放失败的问题。#37342

其他

  • 修复计算节点参与内部表创建的问题。#37961

  • 修复 enable_strong_read_consistency = true 时从延迟问题。 #37641

【Release Note】Apache Doris 2.1.4

Apache Doris 2.1.4 版本已于 2024 年 6 月 26 日正式发布。 在 2.1.4 版本中,我们对数据湖分析场景进行了多项功能体验优化,重点修复了旧版本中异常内存占用的问题,同时提交了若干改进项以及问题修复,进一步提升了系统的性能、稳定性及易用性。

行为变更

  • 通过 Catalog 查询外部表(如 Hive 数据表)时,系统将忽略不存在的文件: 当从元数据缓存中获取文件列表时,由于缓存更新并非实时,因此可能存在实际的文件列表已删除、而元数据缓存中仍存在该文件的情况。为了避免由于尝试访问不存在的文件而导致的查询错误,系统会忽略这些不存在的文件。 #35319

  • 默认情况下,创建 Bitmap Index 不再默认变更为 Inverted Index。该行为由 FE 配置项 enable_create_bitmap_index_as_inverted_index 控制,默认为 FALSE。#35521

  • 当使用 --console 启动 FE、BE 进程时,所有日志将输出到标准输出,并通过前缀区分不同类型的日志。#35679

    关于更多信息,请参考文档:

    • BE 日志管理

    • FE 日志管理

  • 如果建表时没有填写表注释,默认注释为空,不再使用表类型作为默认表注释。 #36025

  • DECIMALV3 的默认精度从 (9, 0) 调整为 (38,9) ,以和最初发布此功能的版本保持兼容。 #36316

新增功能

查询优化器

  • 支持 FE 火焰图工具:在 FE 部署目录 ${DORIS_FE_HOME}/bin 中会增加profile_fe.sh 脚本,可以利用 async-profiler 工具生成 FE 的火焰图,用以发现性能瓶颈点。

    关于更多信息,请参考文档:使用 FE Profiler 生成火焰图

  • 支持 SELECT DISTINCT 与聚合函数同时使用:支持 SELECT DISTINCT 与聚合函数同时使用,在一个查询中同时去重和进行聚合操作,如 SUM、MIN/MAX 等。

  • 支持无 GROUP BY 的单表查询重写:无 GROUP BY 的单表查询重写功能允许数据库优化器在不需要分组的情况下,根据查询的复杂性和数据表的结构,自动选择最佳的执行计划来执行查询,这可以提高查询的性能,减少不必要的资源消耗,并简化查询逻辑。 #35242.

  • 查询优化器全面支持高并发点查询功能:在 2.1.4 版本之后,查询优化器全面支持高并发点查询功能,所有符合点查询条件的 SQL 语句会自动走短路径查询,无需用户在客户端额外设置 set experimental_enable_nereids_planner = false#36205.

湖仓一体

  • 支持 Paimon 的原生读取器来处理 Deletion Vector: Deletion Vector 主要用于标记或追踪哪些数据已被删除或标记为删除,通常应用在需要保留历史数据的场景,基于本优化可以提升大量数据更新或删除时的处理效率。 #35241

    关于更多信息,请参考文档:数据湖分析 - Paimon

  • 支持在表值函数(TVF)中使用 Resource:TVF 功能为 Apache Doris 提供了直接将对象存储或 HDFS 上的文件作为 Table 进行查询分析的能力。通过在 TVF 中引用 Resource,可以避免重复填写连接信息,提升使用体验。 #35139

    关于更多信息,请参考文档:表函数 - HDFS

  • 支持通过 Ranger 插件实现数据脱敏:开启 Ranger 鉴权功能后,支持使用 Ranger 中的 Data Mask 功能进行数据脱敏。

    关于更多信息,请参考文档:基于 Apache Ranger 的鉴权管理

异步物化视图

  • 构建支持内表触发式更新,如果物化视图使用的是内表,如果内表数据发生变化,可以触发物化视图刷新,需要在创建物化视图时指定 REFRESH ON COMMIT。

  • 支持单表透明改写。

    关于更多信息,请参考文档:查询异步物化视图

  • 透明改写支持 agg_state, agg_union 类型的聚合上卷,物化视图可以定义为 agg_state 或者 agg_union,查询使用具体的聚合函数,或者使用 agg_merge

    关于更多信息,请参考文档:AGG_STATE

其他

  • 新增 replace_empty 函数:将字符串中的子字符串进行替换,当旧字符串为空时,会将新字符串插入到原有字符串的每个字符前以及最后。

    关于更多信息,请参考文档:字符串函数 - REPLACE_EMPTY

  • 支持 show storage policy using 语句:支持查看所有或指定存储策略关联的表和分区。

    关于更多信息,请参考文档:SQL 语句 - SHOW

  • 支持 BE 侧的 JVM 指标: 通过在 be.conf 配置文件中设置enable_jvm_monitor=true,可以启用对 BE 节点 JVM 的监控和指标收集,有助于了解 BE JVM 的资源使用情况,以便进行故障排除和性能优化。

改进优化

  • 支持为中文列名创建倒排索引。#36321

  • 优化 Segment Cache 所消耗内存的估算准确度,以便能够更快地释放未使用的内存。#35751

  • 在使用 Export 功能导出数据时,提前过滤空分区以提升导出效率。#35542

  • 优化 Routine Load 任务分配算法以平衡 BE 节点之间的负载压力。#34778

  • 在设置错误的会话变量名时,自动识别近似变量值并给出更详细的错误提示。#35775

  • 支持将 Java UDF Jar 文件放到 FE 的 custom_lib 目录中并默认加载。#35984

  • 为审计日志导入作业添加超时的全局变量audit_plugin_load_timeout ,以控制在加载审计插件或处理审计日志时允许的最大执行时间。

  • 优化了异步物化视图透明改写规划的性能。

  • INSERT 源数据为空时,BE 将不会执行任何操作。#34418

  • 支持分批获取 Hudi 和 Hive 文件列表,当存在大量数据文件时可以提升数据扫描性能。 #35107

    • 120 万文件场景中,获取文件列表的时间由 390 秒缩减到 46 秒。
  • 创建异步物化试图时,禁止使用动态分区。

  • 支持检测 Hive 外表分区数据是否和异步物化试图同步。

  • 允许异步物化试图创建索引。

缺陷修复

查询优化器

  • 修复 SQL Cache 在 truncate paritition 后依然返回旧结果的问题。#34698

  • 修复从 JSON Cast 到其他类型 Nullable 属性不对的问题。#34707

  • 修复偶现的 DATETIMEV2 Literal 化简错误。 #35153

  • 修复窗口函数中不能使用 COUNT(*) 的问题。#35220

  • 修复 UNION ALL 下全部是无 FROM 的 SELECT` 时,Nullable 属性可能错误的问题。
    #35074

  • 修复 bitmap in join 和子查询解嵌套无法同时使用的问题。#35435

  • 修复在特定情况下过滤条件不能下推到 CTE Producer 导致的性能问题。#35463

  • 修复聚合 Combinator 为大写时,无法找到函数的问题。#35540

  • 修复窗口函数没有被列裁剪正确裁剪导致的性能问题。#35504

  • 修复多个同名不同库的表同时出现在查询中时,可能解析错误导致结果错误的问题。#35571

  • 修复对于 Schema 表扫描时,由于生成了 Runtime Filter 导致查询报错的问题。#35655

  • 修复关联子查询解嵌套,关联条件被折叠为 Null Literal 导致无法执行的问题。#35811

  • 修复规划时,偶现的 Decimal Literal 被错误设置精度的问题。 #36055

  • 修复偶现的多层聚合被合并后规划错误的问题。#36145

  • 修复偶现的聚合扩展规划报错输入输出不匹配的问题。#36207

  • 修复偶现的 <=> 被错误转换为 = 的问题。#36521

查询执行

  • 修复 Pipeline 引擎上达到限定的行数且内存没有释放时查询被挂起的问题。 #35746

  • 修复当设置 enable_decimal256 =true 且查询优化器回退到旧版本时 BE 发生 Core 的问题。#35731

物化视图

  • 修复构建异步物化试图指定 store_row_column 属性,be core 的问题。

  • 修复构建异步物化视图指定 storage_medium 不生效的问题。

  • 修复基表删除后,异步物化视图 show partitions 报错的问题。

  • 修复异步物化视图引起备份恢复异常的问题。

  • 修复分区改写可能导致错误结果的问题。

半结构化数据分析

  • 修复带有空 Key 的 VARIANT 类型发生 Core 的问题。#35671

  • Bitmap 索引和 BloomFilter 索引不应支持轻量级索引变更。#35225

主键模型

  • 修复在有部分列更新导入的情况下发生异常重启,可能会产生重复 Key 的问题。#35678

  • 修复在内存紧张时发生 Clone 时 BE 可能会发生 Core 的问题。#34702

湖仓一体

  • 修复创建 Hive 表时无法使用完全限定名(如 ctl.db.tbl)的问题。 #34984

  • 修复 Refresh 操作时 Hive Metastore 连接未关闭的问题。#35426

  • 修复从 2.0.x 升级到 2.1.x 时可能的元数据回放问题。 #35532

  • 修复 TVF 表函数无法读取空 Snappy 压缩文件的问题。#34926

  • 修复无法读取具有无效最小/最大列统计信息的 Parquet 文件的问题。#35041

  • 修复 Parquet/ORC Reader 中无法处理带有 null-aware 函数下推谓词的问题。#35335

  • 修复创建 Hive 表时分区列顺序的问题。 #35347

  • 修复当分区值包含空格时无法将 Hive 表写入 S3 的问题。 #35645

  • 修复 Doris 写入 Parquet 格式 Hive 表无法被 Hive 读取的问题。 #34981

  • 修复 Hive 表 Schema 变更后无法读取 ORC 文件的问题。#35583

  • 修复了部分情况下,启用 Hive Metastore Listener 后 FE 无法启动的问题。#36533

  • 修复由 Hadoop FS 缓存引起的 FE OOM 问题。#36403

  • 修复写出 Parquet 格式文件写出 Row Group 过小的问题。#36042 #36143

  • 修复 Paimon 表 Schema 变更后无法通过 JNI 读取 Paimon 表的问题。#35309

  • 修复 Paimon 表 Schema 变更后由于表字段长度判断错误导致无法读取的问题。 #36049

  • 修复了读取 Iceberg 中的时间戳列类型时的时区问题。 #36435

  • 修复了 Iceberg 表上的日期时间转换错误和数据路径错误的问题。#35708

  • 修复阿里云 OSS Endpoint 不正确的问题。#34907

  • 修复了大量文件导致的查询性能下降问题。#36431

  • 允许用户定义的属性通过表函数传递给 S3 SDK。#35515

数据导入

  • 修复 CANCEL LOAD 命令不生效的问题。#35352

  • 修复导入事务 Publish 阶段空指针错误导致导入事务无法完成的问题。#35977

  • 修复 bRPC 通过 HTTP 发送大数据文件序列化的问题。 #36169

数据管控

  • 修复了在将 DDL 或 DML 转发到主 FE 后,ConnectionContext 中的资源标签未设置的问题。 #35618

  • 修复了在启用 lower_case_table_names 时,Restore 表名不正确的问题。 #35508

  • 修复了清理无用数据或文件的管理命令不生效的问题。 #35271

  • 修复了无法从分区中删除存储策略的问题。#35874

  • 修复了向多副本自动分区表导入数据时的数据丢失问题。#36586

  • 修复了使用旧优化器查询或插入自动分区表时,表的分区列发生变化的问题。 #36514

内存管理

  • 修复日志中频繁报错 Cgroup meminfo 获取失败的问题。 #35425

  • 修复使用 BloomFilter 时 Segment 缓存大小不受控制导致进程内存异常增长的问题。#34871

权限

  • 修复开启表名大小写不敏感后,权限设置无效的问题。#36557

  • 修复通过非 Master FE 节点设置 LDAP 密码不生效的问题。#36598

  • 修复了无法检查 SELECT COUNT(*) 语句授权的问题。#35465

其他

  • 修复 MySQL 连接损坏情况下,客户端 JDBC 程序无法关闭连接的问题。 #36616

  • 修改 SHOW PROCEDURE STATUS 语句返回值与 MySQL 协议不兼容的问题。#35350

  • libevent 库强制开启 Keepalive 以解决部分情况下连接泄露的问题。 #36088

【Release Note】Apache Doris 2.1.3

Apache Doris 2.1.3 版本已于 2024 年 5 月 21 日正式发布。该版本更新带来了若干改进项,包括支持向 Hive 回写数据、物化视图、新函数等功能,同时改善权限管理并修复若干问题,进一步提升了系统的性能及稳定性。

功能特性

1. 支持通过 Hive Catalog 向 Hive 表中回写数据

从 2.1.3 版本开始,Apache Doris 支持对 Hive 的 DDL 和 DML 操作。用户可以直接通过 Apache Doris 在 Hive 中创建库表,通过执行INSERT INTO语句来向 Hive 表中写入数据。通过该功能,用户可以通过 Apache Doris 对 Hive 进行完整的数据查询和写入操作,进一步帮助用户简化湖仓一体架构。

参考文档:https://doris.apache.org/docs/lakehouse/datalake-building/hive-build/

2. 支持在异步物化视图之上构建新的异步物化视图

用户可以在异步物化视图之上来创建新的异步物化视图,直接复用计算好的中间结果进行数据加工处理,简化复杂的聚合和计算操作带来的资源消耗和维护成本,进一步加速查询性能、提升数据可用性。

3. 支持通过物化视图嵌套物化视图进行重写

物化视图(Materialized View,MV)是用于存储查询结果的数据库对象。现在,Apache Doris 支持通过 MV 嵌套物化视图进行重写,这有助于优化查询性能。

4. 新增 SHOW VIEWS 语句

可以使用SHOW VIEWS语句来查询数据库中的视图,有助于更好地管理和理解数据库中的视图对象。

5. Workload Group 支持绑定到特定的 BE 节点

Workload Group 可以绑定到特定的 BE 节点,实现查询执行的更精细化控制,以优化资源使用和提高性能。

6. Broker Load 支持压缩的 JSON 格式

Broker Load 支持导入压缩的 JSON 格式数据,可以显著减少数据传输的带宽需求、加速数据导入性能。

7. TRUNCATE 函数可以使用列作为 scale 参数

TRUNCATE 函数现在可以接受列作为 scale 参数,这使得在处理数值数据时可以更加灵活。

8. 添加新的函数 uuid_to_intint_to_uuid

这两个函数允许用户在 UUID 和整数之间进行转换,对于需要处理 UUID 数据的场景有明显帮助。

9. 添加 bypass_workload_group Session Variable 以绕过查询队列

会话变量 bypass_workload_group 允许某些查询绕过 Workload Group 队列直接执行,这可以用于处理需要快速响应的关键查询。

10. 添加 strcmp 函数

strcmp 函数用于比较两个字符串并返回它们的比较结果,帮助文本数据的处理更加简易。

11. 支持 HLL 函数 hll_from_base64hll_to_base64

HLL(HyperLogLog)是一种用于基数估计的算法,以上两个函数允许用户将 HLL 数据从 Base64 编码的字符串中解码,或将 HLL 数据编码为 Base64 字符串,这对于存储和传输 HLL 数据非常有用。

优化改进

1. 替换 SipHash 为 XXHash 以改善 Shuffle 性能

SipHash 和 XXHash 都是哈希函数,但 XXHash 在某些场景下可能提供更快的哈希速度和更好的性能,此优化旨在通过采用 XXHash 来提高数据 Shuffle 过程中的性能。

2. 异步物化视图支持 OLAP 表分区列为可以为 NULL:

允许异步物化视图支持 OLAP 表的分区列可以为 NULL,从而增强了数据处理的灵活性。

3. 收集列统计信息时限制最大字符串长度为 1024 以控制 BE 内存使用

在收集列统计信息时,限制字符串的长度可以防止过大的数据消耗过多的 BE 内存,有助于保持系统的稳定性和性能。

4. 支持动态删除 Bitmap Cache 以提高性能

通过支持动态删除不再需要的 Bitmap Cache,可以释放内存并改善系统性能。

5. 在 ALTER 操作中减少内存使用

减少 ALTER 操作中的内存使用,以提高系统资源的利用效率。

6. 支持复杂类型的常量折叠

支持 Array/Map/Struct 复杂类型的常量折叠;

7. 在 Aggregate Key 聚合模型中增加对 Variant 类型的支持

Variant 数据类型能够存储多种数据类型,在此优化中允许对 Variant 类型的数据进行聚合操作,从而增强了半结构化数据分析的灵活性。

8. 在 CCR 中支持新的倒排索引格式

9. 优化嵌套物化视图的重写性能

10. 支持 decimal256 类型的行存格式

在行存格式中支持 decimal 256 类型,以以扩展系统对高精度数值数据的处理能力。

行为变更

1. 授权(Authorization)

  • Grant_priv 权限更改Grant_priv不能再被任意授予。执行 GRANT 操作时,用户不仅需要具有Grant_priv,还需要具有要授予的权限。例如,如果想要授予对table1SELECT 权限,那么该用户不仅需要具有 GRANT 权限,还需要具有对table1SELECT 权限,这增加了权限管理的安全性和一致性。

  • Workload Group 和 Resource 的 Usage_privUsage_priv 对 Workload Group 和 Resource 的权限不再是全局级别的,而是仅限于 Resource 和 Workload Group 内,权限的授予和使用将更加具体。

  • 操作的授权:之前未被授权的操作现在都有了相应的授权,以实现更加细致和全面地操作权限控制。

2. LOG 目录配置

FE 和 BE 的日志目录配置现在统一使用LOG_DIR环境变量,所有其他不同类型的日志都将以LOG_DIR作为根目录进行存储。同时为了保持版本间的兼容性,以前的配置项sys_log_dir仍然可以使用。

3. S3 表函数(TVF)

由于之前的解析方式在某些情况下可能无法正确识别或处理 S3 的 URL,因此将对象存储路径的解析逻辑进行重构。对于 S3 表函数中的文件路径,需要传递force_parsing_by_standard_uri参数来确保被正确解析。

升级问题

由于许多用户将某些关键字用作列名或属性值,因此将如下关键字设置为非保留关键字,允许用户将其用作标识符使用。

问题修复

1. 修复在腾讯云 COSN 上读取 Hive 表时的无数据错误

解决了在腾讯云 COSN 存储上读取 Hive 表时可能遇到的无数据错误,增强了与腾讯云存储服务的兼容性。

2. 修复 milliseconds_diff 函数返回错误结果

修复milliseconds_diff函数在某些情况下返回错误结果的问题,确保了时间差计算的准确性。

3. 用户定义变量应转发到 Master 节点

确保用户定义的变量能够正确地传递到 Master 节点,以便在整个系统中保持一致性和正确的执行逻辑。

4. 修复添加复杂类型列时遇到的 Schema Change 问题

在添加复杂类型列时,可能会遇到 Schema Change 问题,此修复确保了 Schema Change 的正确性。

  1. 修复 FE master 节点更改时 Routine Load 的数据丢失问题

Routine Load常用于订阅 Kafka 消息队列中的数据,此修复解决了在 FE Master 节点更改时可能导致的数据丢失问题。

6. 修复当找不到 Workload Group 时 Routine Load 失败的问题

修复了当Routine Load找不到指定 Workload Group 时导致的失败问题。

7. 支持 column string64,以避免在 string size 溢出 unit32 时 Join 失败的问题

在某些情况下,字符串的大小可能会超过 unit32 的限制,支持string64类型可以确保字符串 JOIN 操作的正确执行。

8. 允许 Hadoop 用户创建 Paimon Catalog

允许具有权限的对应 Hadoop 用户来创建 Paimon Catalog。

9. 修复 function_ipxx_cidr 函数与常量参数的问题

修复了function_ipxx_cidr函数在处理常量参数时可能出现的问题,保证函数执行的正确性。

10. 修复使用 HDFS 进行还原时的文件下载错误

解决了在使用 HDFS 进行数据还原时遇到的“failed to download”错误,确保了数据恢复的正确性和可靠性。

11. 修复隐藏列相关的列权限问题

在某些情况下,隐藏列的权限设置可能不正确,此修复确保了列权限设置的正确性和安全性。

12. 修复在 K8s 部署中 Arrow Flight 无法获取正确 IP 的问题

此修复解决了在 Kubernetes 部署环境中 Arrow Flight 无法正确获取 IP 地址的问题。

【Release Note】Apache Doris 2.1.2

Apache Doris 2.1.2 版本已于 2024 年 4 月 12 日正式发布。该版本提交了若干改进项以及问题修复,进一步提升了系统的性能及稳定性。

1 行为变更

  1. 将 EXPORT 命令中 data_consistence 属性的默认值调整为 Partition,这可以使得并发导入的同时做 EXPORT 操作更容易成功。

  2. 兼容部分 MySQL Connector(如 MySQL.Data for .NET)将 SELECT @``@autocommit 的返回值类型变更为 BIGINT。

  3. Auto Partition 语法变化,详见 https://doris.apache.org/zh-CN/docs/table-design/data-partition#%E8%87%AA%E5%8A%A8%E5%88%86%E5%8C%BA

  4. Auto Partition 禁止和 Dynamic Partition 同时作用在一张表上

2 升级问题

  1. 修复正常 Workload Group 从 2.0 或者更早版本升级到 2.1 时没有默认创建的问题。

3 新功能

  1. 增加 processlist 系统表功能,用户可以通过查询系统表获得活跃的链接信息。

  2. 增加新的表函数 LOCAL 以访问部分共享存储上的文件。

4 改进与优化

  1. 跳过部分不必要检查,加速在 K8s 环境下优雅退出的速度。

  2. 在 Profile 中增加已命中的物化视图信息,能够方便地定位物化视图是否命中。

  3. 针对 DB2 Catalog,增加测试链接是否通畅的功能,能够在建立 Catalog 时做部分链接检查。

  4. 增加 DNS Cache,解决 K8s 环境下域名解析较慢,从而影响查询的问题。

  5. 增加异步刷新 Catalog 中表的行数信息,避免查询抖动。

5 Bug 修复

  1. 修复 Iceberg Catalog 中,不支持 Iceberg 自定义属性的问题,例如 "io.manifest.cache-enabled"。

  2. LEAD/LAG 函数的 Offset 起始位置可以设置为 0。

  3. 修复部分导入过程中可能出现的 Timeout 的问题。

  4. 修复部分 ARRAY / MAP / STRUCT 类型在 Compaction 中引起 Core 的问题。

  5. 修复查询过程中 Runtime Filter 部分等待超时的问题。

  6. 修复 unix_timestamp 函数在 Auto Partition 中可能导致 Core 的问题。

#【Release Note】Apache Doris 2.1.1
2024 年 4 月 3 日正式发布。该版本针对 2.1.0 版本出现的问题进行较为全面的优化,提交了若干改进项以及问题修复,进一步提升了系统的性能及稳定性。

1 行为变更

  1. 改变了 Float 类型字段返回值序列化的方式,可以提升大数据量下 Float 返回的性能。

  2. 将部分 Table Valued Function 变更为系统表 active_queries(), workload_groups()

  3. 由于 show query``/l``oad profile stmt 语句在实际用户场景中使用较少,该语句将不再支持与维护。同时该功能在 Pipeline 与 PipelineX 引擎中不支持。

  4. 升级 Arrow Flight 版本至 15.0.2,同时用户需要使用 ADBC 15.0.2 版本访问 Doris。

2 升级问题

  1. 修复了从 2.0.x 滚动升级至 2.1.x 的过程中,部分 BE 节点升级出现 Core 的问题。

  2. 修复了在 2.0.x 滚动升级至 2.1.x 过程中,使用 JDBC Catalog 会出现 Query 报错的问题。

3 新功能

  1. 默认开启列级权限。

  2. Pipeline 和 PipelineX 引擎能够在 K8S 下准确获取 CPU 核数。

  3. 支持读取 Parquet INT96 类型

  4. 支持 IP 透传的协议,以方便在 FE 之前启用代理的同时还能获取客户端准确的 IP 地址,实现白名单权限控制。

  5. 增加对 Workload Queue 检测指标。

  6. 增加系统表 backend_active_tasks ,以实时监测每个 BE 上活跃任务以及消耗的资源信息。

  7. 在 Spark Doris Connector 中增加 IPV4 和 IPV6 的支持。

  8. CCR 支持倒排索引。

  9. 支持查询 Experimental 的 Session Variable。

  10. 支持建立 bitmap_union(bitmap_from_array()) 函数的物化视图。

  11. 支持对 Hive 中 HIVE_DEFAULT_PARTITION 分区进行列裁剪。

  12. 支持 set variable 语句中使用函数。

  13. Arrow 序列化方式增加对 Variant 类型的支持。

4 改进与优化

  1. 当系统自动重启或者滚动升级之后,自动启动 Routine Load 导入任务。

  2. 优化了 Routine Load 任务在各个 BE 上的分布方式,让各个 BE 负载更加均衡。

  3. 升级 Spark 的版本,解决部分 Spark Load 的安全问题。

  4. 在冷热分离过程中,自动跳过被删除的 Tablet.

  5. Workload Group 支持对 Routine Load 的资源进行限制。

  6. 大幅度优化多表物化视图查询改写性能。

  7. 优化 Broker Load 任务对 FE 的内存使用

  8. 优化 Partition 的裁剪逻辑。

  9. 优化 Tablet Schema Cache 对 BE 内存使用。

  10. 多表物化视图增加更多对 JOIN 类型的支持,包括 INNER JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOIN、LEFT SEMI JOIN、RIGHT SEMI JOIN、LEFT ANTI JOIN、RIGHT ANTI JOIN

5 Bugs 修复

  1. 修复 TopN 下推导致的问题。

  2. 修复 JAVA UDF 带来的内存泄露问题。

  3. 修复 ODBC 表备份恢复问题。

  4. 修复对 Variant 类型进行运算时常量折叠会导致 BE 出错的问题

  5. 修复了部分导入任务失败时 Routine Load 卡住的问题。

  6. 修复 SEMI JOIN 结果不正确的问题。

  7. 当列的数据为空时,修复建立倒排索引会出错的问题。

  8. 修复<=> join 操作会出现 Core 的问题。

  9. 修复部分列更新在有 Sequence 列结果准确性的问题。

  10. 修复 Select Outfile 导出到 Parquet 或者 ORC 格式的列类型映射问题。

  11. 修复在 Restore 过程中 BE 有时候会 Core 的问题。

  12. 修复 array_agg 函数结果不对的问题。

  13. 使 Variant 类型应当一直是 nullable.

  14. 修复 Schema Change 没有正确处理空 Block 的问题。

  15. 修复使用 json_length() 函数时部分场景会出错的问题。

  16. 修复 Iceberg 表没有正确处理 Date Cast 转换的问题。

  17. 修复 Variant 类型建立 Index 时出现的部分 Bug。

  18. 修复当多个 map_agg 函数同时使用时结果不正确的问题。

  19. 修复 money_format 函数的返回结果不正确的问题。

  20. 修复在高并发的建立链接时部分请求会卡住的问题。