当Doris遇上Iceberg:一个数据工程师の自我救赎
睡梦之中,又一次被数据bug叫醒的你,是否曾幻想过一个理想的数据世界:查询秒回、数据不丢、costs省到老板笑逐颜开…听起来像是还在梦里?不!这一切正在变成现实。
记得那个被数据分区搞崩溃的夜晚,产品经理疯狂催进度,而你正在和一堆分散的数据死磕。跨源查询慢得像蜗牛在爬山,Schema变更需要协调七个部门…
但现在,这些痛点正在被改写。Apache Doris和Iceberg的"双剑合璧",正在重新定义数据湖的玩法。它不是简单的1+1=2,而是带来了质的飞跃:秒级查询、无感知Schema演进、真正的数据一致性保证…
![[]](https://i-blog.csdnimg.cn/direct/50065a619e3c433ea549bd2580333c83.png)
Doris与Iceberg的完美交响
在数据工程领域,我们经常遇到这样的问题:
小张正在处理一个数据分析需求,需要分析近三个月的用户行为数据。数据分散在Hive数仓、业务数据库和对象存储中。跨源Join性能差,查询耗时超过40分钟,而且经常出现数据不一致。
并且小张还要面对数据治理工作,每次表结构变更都让他头疼不已。多个下游应用依赖这些表,Schema变更需要协调多个团队,可能一个变更要持续一周才能完成。
这些问题在数据量激增的今天变得更加突出。传统数据仓库和数据湖各自为营的方式已经不能满足需求。
![[传统-湖仓区别 tu]](https://i-blog.csdnimg.cn/direct/e8bd2e4745dc4dccafd79840947691e5.png)
恰巧,在 Doris 2.1 版本中,Apache Doris 湖仓一体架构得到全面加强,不仅增强了主流数据湖格式(Hudi、Iceberg、Paimon 等)的读取和写入能力,还引入了多 SQL 方言兼容、可从原有系统无缝切换至 Apache Doris。在数据科学及大规模数据读取场景上,Doris 集成了 Arrow Flight 高速读取接口,使得数据传输效率实现 100 倍的提升。
于是,小张拍脑袋决定,选用了Doris+Iceberg进行自我救赎…
![[使用 Doris 和 Iceberg的架构图]](https://i-blog.csdnimg.cn/direct/e97eec0139394c58b853851c3c8d9e14.png)
Apache Doris 对 Iceberg 多项核心特性提供了原生支持:
- 支持 Hive Metastore、Hadoop、REST、Glue、Google Dataproc Metastore、DLF 等多种 Iceberg Catalog 类型。
- 原生支持 Iceberg V1/V2 表格式,以及 Position Delete、Equality Delete 文件的读取。
- 支持通过表函数查询 Iceberg 表快照历史。
- 支持时间旅行(Time Travel)功能。
- 原生支持 Iceberg 表引擎。可以通过 Apache Doris 直接创建、管理以及将数据写入到 Iceberg 表。支持完善的分区 Transform 函数,从而提供隐藏分区和分区布局演进等能力。
另外,Doris 2.1.6 版本中带来了Doris+Iceberg的重磅升级:
Apache Doris 支持对 Iceberg 的 DDL 和 DML 操作。即用户可以直接通过 Apache Doris 在 Iceberg 中创建库表,并将数据写入到 Iceberg 表中。
通过该功能,可以通过 Apache Doris 对 Iceberg 进行完整的数据查询和写入操作,进一步帮助用户简化湖仓一体架构。
因此,小张可以基于 Apache Doris + Apache Iceberg 快速构建高效的湖仓一体解决方案,以灵活应对实时数据分析与处理的各种需求:
- 通过 Doris 高性能查询引擎对 Iceberg 表数据和其他数据源进行关联数据分析,构建统一的联邦数据分析平台。
- 通过 Doris 直接管理和构建 Iceberg 表,在 Doris 中完成对数据的清洗、加工并写入到 Iceberg 表,构建统一的湖仓数据处理平台。
- 通过 Iceberg 表引擎,将 Doris 数据共享给其他上下游系统做进一步处理,构建统一的开放数据存储平台。
这已不再是简单的外表对接,而是深度的湖仓架构融合!
Doris与Iceberg的实战小结
经过一番跌宕起伏的摸索和实践,小张有了一些Doris+Iceberg实战小结:
元数据智能管理
传统方案中,元数据管理是个老大难问题。表的分区信息、文件位置、Schema变更历史分散在各处,导致查询性能差、运维复杂。
Doris+Iceberg提供了统一的元数据管理层:
![[tu]](https://i-blog.csdnimg.cn/direct/b9277acb7632489ba919b06b9f5086c3.png)
这一架构带来几个关键价值:
- Schema演进无忧:表结构变更不再需要停机维护,Doris+Iceberg支持增删改字段,分区方式调整等操作
- 数据版本管理:通过Iceberg快照机制,可以回溯任意时间点的数据状态
- 统一目录服务:支持 Hive Metastore、Hadoop、REST、Glue、Google Dataproc Metastore、DLF 等多种 Iceberg Catalog 类型,无缝对接现有基础设施
小张现在只需要一条ALTER TABLE语句就能完成Schema变更,系统自动处理兼容性,下游应用全程无感知。
高效数据组织
Doris创新性地将MPP引擎与Iceberg的数据组织方式结合:
-- Create partitioned iceberg table
-- The partition columns must be in table's column definition list
CREATE TABLE sales (
ts DATETIME,
user_id BIGINT,
amount DOUBLE,
pt1 STRING,
pt2 STRING
) ENGINE=iceberg
-- Iceberg 中的分区类型对应 Doris 中的 List 分区
PARTITION BY LIST (DAY(ts), pt1, pt2) ()
PROPERTIES (
-- 压缩格式
-- Parquet:snappy,zstd(默认),plain。(plain 就是不采用压缩)
-- ORC:snappy,zlib(默认),zstd,plain。(plain 就是不采用压缩)
'write-format'='orc',
'compression-codec'='zlib'
);
这段SQL隐藏了强大的技术机制:
- 文件组织:支持通用的HDFS和对象存储存储介质
- 智能分区:支持分区转换函数来支持 Iceberg 隐式分区以及分区演进的功能
- 存储优化:支持Parquet、ORC等列式存储,配合各种压缩方式提升性能
基于Doris对 Iceberg 的 DDL 和 DML 操作支持,数据一致性问题也彻底解决了。
运维管理
小张为了确保数据平台的稳定性。他使用以下方式监控和管理Iceberg表:
-- 查看表快照信息
SELECT * FROM iceberg_meta(
"table" = "iceberg.nyc.taxis",
"query_type" = "snapshots"
);
-- FOR VERSION AS OF 语句查询指定快照
SELECT * FROM iceberg.nyc.taxis FOR VERSION AS OF {snapshot_id}
-- FOR TIME AS OF 语句查询指定快照
SELECT * FROM iceberg.nyc.taxis FOR TIME AS OF {committed_at}
-- 管理快照
...
这套工具链提供:
- 指标监控:实时掌控表状态和快照指标
- 快照管理:清理过期快照释放存储空间
- 故障恢复:支持回滚到任意历史版本(根据快照 ID 或者快照产生的时间读取历史版本的数据)
![[tu]](https://i-blog.csdnimg.cn/direct/9769c71470c445af9ceb3c31e646418a.png)
通过这些实践,小张基于Doris+Iceberg的数据平台达到了新的高度:
- 查询性能提升300%
- 存储成本降低40%
- 运维效率提升200%
…
Doris湖仓之旅的精彩永无止境。
下期,我们将一起探讨其它更有趣有用有价值的内容,敬请期待!

1万+






