❝睡梦之中,又一次被数据bug叫醒的你,是否曾幻想过一个理想的数据世界:查询秒回、数据不丢、costs省到老板笑逐颜开...听起来像是还在梦里?不!这一切正在变成现实。 记得那个被数据分区搞崩溃的夜晚,产品经理疯狂催进度,而你正在和一堆分散的数据死磕。跨源查询慢得像蜗牛在爬山,Schema变更需要协调七个部门... 但现在,这些痛点正在被改写。 Apache Doris和Iceberg的"双剑合璧",正在重新定义数据湖的玩法。它不是简单的1+1=2,而是带来了质的飞跃:秒级查询、无感知Schema演进、真正的数据一致性保证...

在数据工程领域,我们经常遇到这样的问题:
小张正在处理一个数据分析需求,需要分析近三个月的用户行为数据。数据分散在Hive数仓、业务数据库和对象存储中。跨源Join性能差,查询耗时超过40分钟,而且经常出现数据不一致。
并且小张还要面对数据治理工作,每次表结构变更都让他头疼不已。多个下游应用依赖这些表,Schema变更需要协调多个团队,可能一个变更要持续一周才能完成。
这些问题在数据量激增的今天变得更加突出。传统数据仓库和数据湖各自为营的方式已经不能满足需求。

恰巧,在 Doris 2.1 版本中,Apache Doris 湖仓一体架构得到全面加强,不仅增强了主流数据湖格式(Hudi、Iceberg、Paimon 等)的读取和写入能力,还引入了多 SQL 方言兼容、可从原有系统无缝切换至 Apache Doris。在数据科学及大规模数据读取场景上,Doris 集成了 Arrow Flight 高速读取接口,使得数据传输效率实现 100 倍的提升。
于是,小张拍脑袋决定,选用了Doris+Iceberg进行自我救赎...

Apache Doris 对 Iceberg 多项核心特性提供了原生支持:
另外,Doris 2.1.6版本中带来了Doris+Iceberg的重磅升级:
Apache Doris 支持对 Iceberg 的 DDL 和 DML 操作。即用户可以直接通过 Apache Doris 在 Iceberg 中创建库表,并将数据写入到 Iceberg 表中。
通过该功能,可以通过 Apache Doris 对 Iceberg 进行完整的数据查询和写入操作,进一步帮助用户简化湖仓一体架构。
因此,小张可以基于 Apache Doris + Apache Iceberg 快速构建高效的湖仓一体解决方案,以灵活应对实时数据分析与处理的各种需求:
这已不再是简单的外表对接,而是深度的湖仓架构融合!
经过一番跌宕起伏的摸索和实践,小张有了一些Doris+Iceberg实战小结:
传统方案中,元数据管理是个老大难问题。表的分区信息、文件位置、Schema变更历史分散在各处,导致查询性能差、运维复杂。
Doris+Iceberg提供了统一的元数据管理层:

这一架构带来几个关键价值:
小张现在只需要一条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隐藏了强大的技术机制:
基于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}
-- 管理快照
...
这套工具链提供:

通过这些实践,小张基于Doris+Iceberg的数据平台达到了新的高度:
......
Doris湖仓之旅的精彩永无止境。
下期,我们将一起探讨其它更有趣有用有价值的内容,敬请期待!