当Doris遇上Iceberg:一个数据工程师の自我救赎

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

[]

Doris与Iceberg的完美交响

在数据工程领域,我们经常遇到这样的问题:

小张正在处理一个数据分析需求,需要分析近三个月的用户行为数据。数据分散在Hive数仓、业务数据库和对象存储中。跨源Join性能差,查询耗时超过40分钟,而且经常出现数据不一致。

并且小张还要面对数据治理工作,每次表结构变更都让他头疼不已。多个下游应用依赖这些表,Schema变更需要协调多个团队,可能一个变更要持续一周才能完成。

这些问题在数据量激增的今天变得更加突出。传统数据仓库和数据湖各自为营的方式已经不能满足需求。

[传统-湖仓区别 tu]

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

于是,小张拍脑袋决定,选用了Doris+Iceberg进行自我救赎…

[使用 Doris 和 Iceberg的架构图]

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]

这一架构带来几个关键价值:

  1. Schema演进无忧:表结构变更不再需要停机维护,Doris+Iceberg支持增删改字段,分区方式调整等操作
  2. 数据版本管理:通过Iceberg快照机制,可以回溯任意时间点的数据状态
  3. 统一目录服务:支持 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]

通过这些实践,小张基于Doris+Iceberg的数据平台达到了新的高度:

  • 查询性能提升300%
  • 存储成本降低40%
  • 运维效率提升200%

Doris湖仓之旅的精彩永无止境。

下期,我们将一起探讨其它更有趣有用有价值的内容,敬请期待!

### DorisIceberg 集成及其在数据处理中的应用场景 #### DorisIceberg 的特性概述 Apache Iceberg 是一种用于大型分析型表格的数据湖表格式,能够转换表数据到分区值并维持关系的同时收集列级别的统计信息[^1]。这种设计使得 Iceberg 能够高效支持大规模数据分析操作。 StarRocks (原名Doris) 则是一个现代化的分布式SQL数据库,专为实时多维分析而构建。它提供了快速查询性能以及强大的聚合计算能力,在线性扩展性和高可用方面表现出色。 #### DorisIceberg 的集成优势 通过将 StarRocks 与 Apache Iceberg 结合起来使用,可以获得如下好处: - **高效的外部表访问**:利用 Iceberg 表结构的优势,可以更加快捷方便地读取存储于对象存储上的海量半结构化/非结构化文件作为外部表供 StarRocks 查询。 - **无缝衔接大数据生态**:由于 Iceberg 已经广泛应用于 Hadoop 生态系统之中,因此借助这一桥梁作用可以让 StarRocks 更容易接入整个大数据生态圈内的其他组件和服务。 - **增强元数据管理功能**:Iceberg 提供了一套完整的 API 来管理和维护表模式变更历史记录等功能;这些都可以被 StarRocks 所借用从而提升自身的灵活性和易用性。 #### 应用场景实例 在一个典型的大规模互联网公司日志分析平台中,可能涉及到每天数十亿条甚至更多数量级的日志事件录入工作。此时如果采用传统的关系型数据库来保存原始日志显然不太现实——不仅成本高昂而且效率低下。相反,选择基于云的对象存储服务(如 AWS S3 或阿里云 OSS)配合 Iceberg 构建起一套离线数仓架构则显得更为合理可行。而对于那些需要即时响应业务需求变化、频繁执行复杂 OLAP 类型查询请求的应用来说,则完全可以考虑引入 StarRocks 这样的高性能 MPP 数据库产品来进行加速优化处理。 ```sql CREATE EXTERNAL TABLE IF NOT EXISTS logs_iceberg ( event_time TIMESTAMP, user_id STRING, action STRING, ... ) STORED AS ICEBERG LOCATION 's3://bucket/path/to/table'; ``` 上述 SQL 创建了一个指向位于 Amazon S3 上某个特定路径下的 Iceberg 表格 `logs_iceberg` 的外部表定义语句。之后就可以像对待普通本地表一样对其进行各种 DDL/DML 操作了。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值