2023 年 3 月,在阿里云瑶池数据库峰会上,阿里云与飞轮科技正式达成战略合作协议,双方旨在共同研发名为“阿里云数据库 SelectDB 版”的新一代实时数据仓库,为用户提供在阿里云上的全托管服务。
SelectDB 是飞轮科技基于 Apache Doris 内核打造的聚焦于企业大数据实时分析需求的企业级产品。因此阿里云数据库 SelectDB 版也延续了 Apache Doris 性能优异、架构精简、稳定可靠、生态丰富等核心特性,同时还融入了云服务随需而用的特性,通过云原生存算分离的创新架构,为企业带来分钟级弹性伸缩、高性价比、简单易用、安全稳定的一键式云上实时分析体验。
为了更深度的了解阿里云数据库 SelectDB 版,我们可以全面多角度的了解 Apache Doris 的应用实践和经验。
亲爱的社区小伙伴们,Apache Doris 2.0.3 版本已于 2023 年 12 月 14 日正式发布,该版本对复杂数据类型、统计信息收集、倒排索引、数据湖分析、分布式副本管理等多个功能进行了优化,欢迎大家下载体验。
此外,由衷感谢 104 位贡献者,他们为 Apache Doris 2.0.3 版本提交了超过 1000 个功能优化项以及问题修复,为性能及稳定性提升做出重要贡献。
GitHub下载:https://github.com/apache/doris/releases
官网下载页:https://doris.apache.org/download/
新增特性
自动统计信息收集
统计信息是 CBO 优化器进行代价估算时的依赖,通过收集统计信息有助于优化器了解数据分布特性、执行计划成本估算以及执行计划选择,用于查询效率的提升。
从 2.0.3 版本开始,Apache Doris 支持了自动统计信息收集,并默认为开启状态。在每次导入事务提交后,Apache Doris 会记录导入事务更新的表信息,并估算表统计信息的健康度。当健康度低于配置参数时,Doris 将自动触发统计信息收集作业。为了降低统计信息作业的资源开销,Apache Doris 会自动采取采样的方式收集统计信息,用户也可根据需求调整参数以获得更准确的数据分布信息。
更多信息请参考:https://doris.apache.org/docs/query-acceleration/statistics/
数据湖框架支持复杂数据类型
Java UDF、JDBC catalog、Hudi MOR 表等功能支持复杂数据类型
Paimon catalog 支持复杂数据类型
Paimon catalog 支持 Paimon 0.5 版本
增加更多内置函数
新优化器支持 BitmapAgg 函数
支持 SHA 系列摘要函数
聚合函数 min_by 和 max_by 支持 bitmap 数据类型
增加 milliseconds/microseconds_add/sub/diff 函数
增加 json_insert, json_replace, json_set JSON 函数
改进优化
性能优化
- 在过滤率高的倒排索引 match where 条件和过滤率低的普通 where 条件组合时,大幅降低索引列的 IO
- 优化经过 where 条件过滤后随机读数据的效率
- 优化在 JSON 数据类型上使用老的 get_json_xx 函数的性能,提升 2-4 倍
- 支持配置降低读数据线程的优先级,保证写入的 CPU 资源和实时性
- 增加返回 largeint 的 uuid-numeric 函数,性能比返回 string 的 uuid 函数快 20 倍
- Case when 的性能提升 3 倍
- 在存储引擎执行中裁剪不必要的谓词计算
- 支持 count 算子下推到存储层
- 优化支持 and or 表达式中包含 nullable 类型的计算性能
- 支持更多场景下 limit 算子提前到 join 前执行的改写,以提升执行效率
- 增加消除 inline view 中的无用的 order by 算子,以提升执行效率
- 优化了部分情况下的基数估计和代价模型的准确性,以提升执行效率
- 优化了 JDBC catalog 的谓词下推逻辑和大小写逻辑
- 优化了 file cache 的第一次开启后的读取效率
- 优化 Hive 表 SQL cache 策略,使用 HMS 中存储的分区更新时间作为 cache 是否失效的判断,提高 cache 命中率
- 优化了 Merge-on-Write compaction 效率
- 优化了外表查询的线程分配逻辑,降低内存使用
- 优化 column reader 的内存使用
分布式副本管理改进
优化跳过删除分区、colocate group、持续写时均衡失败、冷热分层表不能均衡等;
安全性提升
审计日志插件的配置使用 token 代替明文密码以增强安全性
log4j 配置安全性增强
日志中不显示用户敏感信息
Bugfix 和稳定性提升
复杂数据类型
修复了 map/struct 对定长 CHAR(n) 没有正确截断的问题
修复了 struct 嵌套 map/array 写入失败的问题
修复了 count distinct 不支持 array/map/struct 的问题
解决 query 中出现 delete 复杂类型之后,升级过程中出现 BE crash 的问题
修复了 jsonb 在 where 条件中 BE crash 问题
修复了 outer join 中有 array 类型时 BE crash 的问题
修复 orc 格式 decimal 类型读取错误的问题
倒排索引
修复了关闭倒排索引查询时 OR NOT 组合 where 条件结果错误的问题
修复了空数组的倒排索引写入时 BE crash 的问题
修复输出为空的情况下index compaction BE crash 的问题
修复新增列没有写入数据时,增加倒排索引 BE crash 的问题
修复 1.2 版本误建倒排索引后升级 2.0 等情况下倒排索引硬链缺失和泄露的问题
物化视图
修复 group by 语句中包括重复表达式导致 BE crash 的问题
禁止视图创建时 group by 子句中使用 float/doubld 类型
增强支持了 select 查询命中物化视图的功能
修复当使用了表的 alias 时物化视图不能命中的问题
修复了创建物化视图中使用 percentile_approx 的问题
采样查询
修复 table sample 功能在 partition table 上无法正常工作的问题
修复 table sample 指定 tablet 无法工作的问题
主键表
修复基于主键条件更新的空指针异常
修复部分列更新字段名大小写问题
修复 schema change 时 mow 会出现重复 key 的问题
导入和 Compaction
修复 routine load 一流多表时 unkown slot descriptor 错误
修复内存统计并发访问导致 BE crash 问题
修复重复取消导入导致 BE crash 的问题
修复 broker load 时 broker 连接报错问题
修复 compaction 和 scan 并发下 delete 谓词可能导致查询结果不对的问题
修复 compaction task 存在时打印大量 stacktrace 日志的问题
数据湖兼容性
解决 iceberg 表中包含特殊字符导致查询失败的问题
修复 Hive metastore 不同版本的兼容性问题
修复读取 MaxCompute 分区表错误的问题
修复备份到对象存储失败的问题
JDBC 外表兼容性
修复 JDBC catalog 处理 Oracle 日期类型格式错误的问题
修复 JDBC catalog 读取 MySQL 0000-00-00 日期异常的问题
修复从 MariaDB 读取数据时间类型默认值为 current_timestamp 时空指针异常问题
修复 JDBC catalog 处理 bitmap 类型时 BE crash 的问题
SQL规划和优化
修复了部分场景下分区裁剪错误的问题
修复了部分场景下子查询处理不正确的问题
修复了部分语义解析的错误
修复 right outer/anti join 时,有可能丢失数据的问题
修复了谓词被错误的下推穿过聚合算子的问题
修正了部分情况下返回的结果 header 不正确的问题
包含有 nullsafeEquals 表达式(<=>)作为连接条件时,可以正确对规划出 hash join
修复了 set operation 算子中无法正确列裁剪的问题
行为变更
复杂数据类型 array/map/struct 的输出格式改成跟输入格式以及 JSON 规范保持一致,跟之前版本的主要变化是日期和字符串用双引号括起来,array/map 内部的空值显示为 null 而不是 NULL。
默认情况下,当用户属性
resource_tags.location
没有设置时,只能使用 default 资源组的节点,而之前版本中可以访问任意节点。支持 SHOW_VIEW 权限,拥有 SELECT 或 LOAD 权限的用户将不再能够执行
SHOW CREATE VIEW
语句,必须单独授予 SHOW_VIEW 权限。