亲爱的社区小伙伴们,Apache Doris 2.1.4 版本已于 2024 年 6 月 26 日正式发布。在 2.1.4 版本中,我们对数据湖分析场景进行了多项功能体验优化,重点修复了旧版本中异常内存占用的问题,同时提交了若干改进项以及问题修复,进一步提升了系统的性能、稳定性及易用性,欢迎大家下载使用。
行为变更
通过 Catalog 查询外部表(如 Hive 数据表)时,系统将忽略不存在的文件:当从元数据缓存中获取文件列表时,由于缓存更新并非实时,因此可能存在实际的文件列表已删除、而元数据缓存中仍存在该文件的情况。为了避免由于尝试访问不存在的文件而导致的查询错误,系统会忽略这些不存在的文件。
默认情况下,创建 Bitmap Index 不再默认变更为 Inverted Index。该行为由 FE 配置项enable_create_bitmap_index_as_inverted_index控制,默认为 false。
当使用--console 启动 FE、BE进程时,所有日志将输出到标准输出,并通过前缀区分不同类型的日志。具体文档地址如下:
https://doris.apache.org/zh-CN/docs/admin-manual/log-management/be-log
https://doris.apache.org/zh-CN/docs/admin-manual/log-management/fe-log
如果建表时没有填写表注释,默认注释为空,不再使用表类型作为默认表注释。
decimalv3 的默认精度从 (9, 0) 调整为 (38,9) ,以和最初发布此功能的版本保持兼容。
新功能
01 查询优化器
支持 FE 火焰图工具:在 FE 部署目录${DORIS_FE_HOME}/bin中会增加profile_fe.sh脚本,可以利用 async-profiler 工具生成 FE 的火焰图,用以发现性能瓶颈点。参考文档:https://doris.apache.org/zh-CN/community/developer-guide/fe-profiler/
支持 SELECT DISTINCT 与聚合函数同时使用:支持SELECT DISTINCT与聚合函数同时使用,在一个查询中同时去重和进行聚合操作,如 SUM、MIN/MAX 等。
支持无 GROUP BY 的单表查询重写:无GROUP BY的单表查询重写功能允许数据库优化器在不需要分组的情况下,根据查询的复杂性和数据表的结构,自动选择执行计划来执行查询,这可以提高查询的性能,减少不必要的资源消耗,并简化查询逻辑。
查询优化器全面支持高并发点查询功能:在 2.1.4 版本之后,查询优化器全面支持高并发点查询功能,所有符合点查询条件的 SQL 语句会自动走短路径查询,无需用户在客户端额外设置set experimental_enable_nereids_planner = false。
02 湖仓一体
支持 Paimon 的原生读取器来处理 Deletion Vector:Deletion Vector 主要用于标记或追踪哪些数据已被删除或标记为删除,通常应用在需要保留历史数据的场景,基于本优化可以提升大量数据更新或删除时的处理效率。参考文档:https://doris.apache.org/zh-CN/docs/lakehouse/datalake-analytics/paimon
支持在表值函数(TVF)中使用 Resource:TVF 功能为 Apache Doris 提供了直接将对象存储或 HDFS 上的文件作为 Table 进行查询分析的能力。通过在 TVF 中引用 Resource,可以避免重复填写连接信息,提升使用体验。参考文档:https://doris.apache.org/zh-CN/docs/sql-manual/sql-functions/table-functions/hdfs/
支持通过 Ranger 插件实现数据脱敏:开启 Ranger 鉴权功能后,支持使用 Ranger 中的 Data Mask 功能进行数据脱敏。参考文档:https://doris.apache.org/zh-CN/docs/admin-manual/auth/ranger/
03 异步物化视图
构建支持内表触发式更新,如果物化视图使用的是内表,如果内表数据发生变化,可以触发物化视图刷新,需要在创建物化视图时指定REFRESH ON COMMIT。
支持单表透明改写。参考文档:https://doris.apache.org/zh-CN/docs/query/view-materialized-view/query-async-materialized-view
透明改写支持 agg_state, agg_union类型的聚合上卷,物化视图可以定义为agg_state或者agg_union,查询使用具体的聚合函数或者 agg_merge。agg_state 参考文档:https://doris.apache.org/zh-CN/docs/sql-manual/sql-types/Data-Types/AGG_STATE#agg_state
04 其他
新增replace_empty函数:将字符串中的子字符串进行替换,当旧字符串为空时,会将新字符串插入到原有字符串的每个字符前以及最后。参考文档:https://doris.apache.org/zh-CN/docs/sql-manual/sql-functions/string-functions/replace_empty
支持show storage policy using语句:支持查看所有或指定存储策略关联的表和分区。参考文档:https://doris.apache.org/zh-CN/docs/sql-manual/sql-statements/Show-Statements/SHOW-STORAGE-POLICY-USING
支持 BE 侧的 JVM 指标:通过在be.conf配置文件中设置enable_jvm_monitor=true,可以启用对 BE 节点 JVM 的监控和指标收集,有助于了解 BE JVM 的资源使用情况,以便进行故障排除和性能优化。
功能优化
支持为中文列名创建倒排索引。
优化 Segment Cache 所消耗内存的估算准确度,以便能够更快地释放未使用的内存。
在使用 Export 功能导出数据时,提前过滤空分区以提升导出效率。
优化 Routine Load 任务分配算法以平衡 BE 节点之间的负载压力。
在设置错误的会话变量名时,自动识别近似变量值并给出更详细的错误提示。
支持将 Java UDF Jar 文件放到 FE 的custom_lib目录中并默认加载。
为审计日志导入作业添加超时的全局变量 audit_plugin_load_timeout ,以控制处理审计日志时允许的最大执行时间。
优化了异步物化视图透明改写规划的性能。
当INSERT源数据为空时,BE 将不会执行任何操作。
支持分批获取 Hudi 和 Hive 文件列表,当存在大量数据文件时可以提升数据扫描性能。例如在 120 万文件场景下,获取文件列表的时间可由 390 秒缩减到46 秒。
创建异步物化视图时,禁止使用动态分区。
支持检测 Hive 外表分区数据是否和异步物化视图同步。
允许异步物化视图创建索引。
问题修复
01 查询优化器
修复 SQL Cache 在truncate paritition后依然返回旧结果的问题。
修复从 JSON Cast 到其他类型 Nullable 属性不对的问题。
修复偶现的 Datetimev2 Literal 化简错误。
修复窗口函数中不能使用count(*)的问题。
修复UNION ALL下全部是无 FROM 的SELECT时,Nullable 属性可能错误的问题。
修复 Bitmap in Join 和子查询解嵌套无法同时使用的问题。
修复在特定情况下过滤条件不能下推到 CTE Producer 导致的性能问题。
修复聚合 Combinator 为大写时,无法找到函数的问题。
修复窗口函数没有被列裁剪正确裁剪导致的性能问题。
修复多个同名不同库的表同时出现在查询中时,可能解析错误导致结果错误的问题。
修复对于 Schema 表扫描时,由于生成了 Runtime Filter 导致查询报错的问题。
修复关联子查询解嵌套,关联条件被折叠为 Null Literal 导致无法执行的问题。
修复规划时,偶现的 Decimal Literal 被错误设置精度的问题。
修复偶现的多层聚合被合并后规划错误的问题。
修复偶现的聚合扩展规划报错输入输出不匹配的问题。
修复偶现的 <=> 被错误转换为 = 的问题。
02 查询执行
修复 Pipeline 引擎上达到限定的行数且内存没有释放时查询被挂起的问题。
修复当设置enable_decimal256 =true 且查询优化器回退到旧版本时 BE 发生 Core 的问题。
03 物化视图
修复构建异步物化视图指定store_row_column属性时,出现 be core 的问题。
修复构建异步物化视图指定 storage medium 不生效的问题。
修复基表删除后,异步物化视图 show partitions 报错的问题。
修复异步物化视图引起备份恢复异常的问题。
修复分区改写可能导致错误结果的问题。
04 半结构化数据分析
修复带有空 Key 的 Variant 类型发生 Core 的问题。
Bitmap 索引和 Bloom Filter 索引不应支持轻量级索引变更。
05 主键模型
修复在有部分列更新导入的情况下发生异常重启,可能会产生重复 Key 的问题。
修复在内存紧张时发生 Clone 时 BE 可能会发生 core 的问题。
06 湖仓一体
修复创建 Hive 表时无法使用完全限定名(如 ctl.db.tbl)的问题。
修复 Refresh 操作时 Hive Metastore 连接未关闭的问题。
修复从 2.0.x 升级到 2.1.x 时可能的元数据回放问题。
修复 TVF 表函数无法读取空 Snappy 压缩文件的问题。
修复无法读取具有无效最小/最大列统计信息的 Parquet 文件的问题。
修复 Parquet/ORC Reader 中无法处理带有 null-aware 函数下推谓词的问题。
修复创建 Hive 表时分区列顺序的问题。
修复当分区值包含空格时无法将 Hive 表写入 S3 的问题。
修复 Doris 写入 Parquet 格式 Hive 表无法被 Hive 读取的问题。
修复 Hive 表 Schema 变更后无法读取 ORC 文件的问题
修复了部分情况下,启用 Hive Metastore Listener 后 FE 无法启动的问题。
修复由 Hadoop FS 缓存引起的 FE OOM 问题。
修复写出 Parquet 格式文件写出 Row Group 过小的问题。
修复 Paimon 表 Schema 变更后无法通过 JNI 读取 Paimon 表的问题。
修复 Paimon 表 Schema 变更后由于表字段长度判断错误导致无法读取的问题。
修复了读取 Iceberg 中的时间戳列类型时的时区问题。
修复了 Iceberg 表上的日期时间转换错误和数据路径错误的问题。
修复阿里云 OSS Endpoint 不正确的问题。
修复了大量文件导致的查询性能下降问题。
允许用户定义的属性通过表函数传递给 S3 SDK。
07 数据导入
修复CANCEL LOAD命令不生效的问题。
修复导入事务 Publish 阶段空指针错误导致导入事务无法完成的问题。
修复 bRPC 通过 HTTP 发送大数据文件序列化的问题。
08 数据管控
修复了在将 DDL 或 DML 转发到主 FE 后,ConnectionContext 中的资源标签未设置的问题。
修复了在启用lower_case_table_names时,Restore 表名不正确的问题。
修复了清理无用数据或文件的管理命令不生效的问题。
修复了无法从分区中删除存储策略的问题。
修复了向多副本自动分区表导入数据时的数据丢失问题。
修复了使用旧优化器查询或插入自动分区表时,表的分区列发生变化的问题。
09 内存管理
修复日志中频繁报错 Cgroup meminfo 获取失败的问题
修复使用 Bloom filter 时 Segment 缓存大小不受控制导致进程内存异常增长的问题。
10 权限
修复开启表名大小写不敏感后,权限设置无效的问题。
修复通过非Master FE 节点设置 LDAP 密码不生效的问题。
修复了无法检查SELECT COUNT(*)语句授权的问题。
11 其他
修复 MySQL 连接损坏情况下,客户端 JDBC 程序无法关闭连接的问题。
修改SHOW PROCEDURE STATUS语句返回值与 MySQL 协议不兼容的问题。
libevent 库强制开启 Keepalive 以解决部分情况下连接泄露的问题。