上周Doris社区发布了Doris3.0版本,3.0版本被定位成湖仓一体演化路线上的重要里程碑版本。
同时Doris官方社区已经更新了3.0版本的文档。
3.0新特性很多,我们还是着重讲新特性中哪些是和真正开发息息相关的。哪些是需要你特别需要关注的。
存算分离架构
从 3.0 版本开始,Doris 开始支持存算分离模式,用户可以在集群部署时选择采用存算一体模式或存算分离模式。
存算分离对计算与存储进行解耦,计算节点不再存储主数据,而是引入共享存储层(HDFS与对象存储)作为统一的数据主存储空间。
这么做的好处显而易见,例如多个集群可以共享一份存储数据,成本大幅降低。
在2.0时期,存算分离特性支持较弱,大家在用的时候大概率是用它的外部表功能,Doris作为计算引擎。说直白点,2.0仅仅初步实现了外表查询的存算分离,以及支持冷热分层功能。
湖仓一体
湖仓这个方向在数据这个领域未来的几年内会是持续热点。尤其是Paimon这样的框架出现,传统的数仓的开发方式已经开始在慢慢受到挑战,这个方向在很多大厂其实已经逐步在探索并且在很多场景进行了落地,需要大家特别关注。
Doris2.0版本我们使用湖仓能力一般是把数据读到Doris进行处理,但是无法写回。3.0增加了Hive、Iceberg数据写回功能,写回功能支持用户直接通过Doris创建 Hive、Iceberg表,并将数据写入到表中。基于此,用户可以将 Apache Doris 中的内表数据写回离线湖仓,或者对离线湖仓中的数据利用 Apache Doris 进行数据加工后落地回离线湖仓,从而实现更简化和高效的数据湖构建。
半结构化数据分析增强
我们简单的说,Doris2.0版本引入了倒排索引、N-Gram Bloom Filter、Variant数据类型,但是复杂结构化数据的查询性能其实很差。
3.0版本优化了Variant数据类型,处理JSON数据更加快速。对于Variant这个数据类型,我这里贴一个链接,需要大家自己去看。
https://doris.apache.org/zh-CN/docs/3.0/sql-manual/sql-data-types/semi-structured/VARIANT/
1. Variant 数据类型支持创建索引加速查询,包括倒排索引、Bloom Filter 索引以及内置的 ZoneMap 索引;
2. 对于包含 Variant 数据类型的 Unique 模型表,支持灵活的部分列更新;
3. Variant 数据类型支持在存算分离模式上使用,并对其元数据存储进行了优化;
4. 支持将 Variant 数据类型导出成 Parquet、CSV 等格式。
ETL能力增强
主要体现在事务性增强和可观测性增强。
其中事务性增强指的是3.0对insert into select、delete和update操作提供了显式事务支持,从而避免类似幻读的情况出现:
BEGIN;
DELETE FROM table WHERE date >= "2024-07-01" AND date <= "2024-07-31";
INSERT INTO table SELECT * FROM stage_table;
COMMIT;
可观测性这个就很值得一提了,2.0版本中部分复杂查询由于Plan 的原因或者数据的原因,导致计算量特别大,开发者只有在查询结束后才能拿到Profile做性能分析以发现问题,有可能对线上系统产生影响。
多表物化视图
生产环境中一些复杂查询经常被执行且性能较低,这些查询可以考虑使用物化视图来优化。
3.0版本对多表物化视图的构建能力进行了增强并提高稳定性,重构了同步物化视图的透明改写逻辑并拓展了透明改写的能力,同时在异步物化视图的易用性上做了增强,让物化视图在查询加速,数据建模等场景更好用、更稳定。
Java UDTF
3.0版本开始支持增加对Java UDTF的支持。虽然没咋用过,但是很强。