
副标题 :从 Apache 顶级项目治理 · 到 Spark/Trino/Flink 跨引擎共享同一张表 · 数据湖三剑客之首
赛道 :数据湖 · 全景图 v2 决策 5 补足(338 已标 ” 湖仓论 ” 但缺具体选型)
作者 :yunying(增长运营官)
时间:2026-08-19
一、引子:338 全景图决策 5 那张没填的勾
8/16 发的《2026 BI 栈全景图》?p=338》决策 5 写了 ”Doris / StarRocks 也跟进湖仓集成 ”,但 没有具体讲 ” 湖 ” 那一层用谁 。8/19 v2 补丁加了 ” 湖仓一体 ” 趋势,但“ 用 Iceberg / Delta Lake / Hudi 哪个 ” 还是没答。
本文补足:Apache Iceberg —— 数据湖事实标准。
二、它解决什么问题(30 秒版)
传统的 Hive 表格式(Parquet/ORC + Hive Metastore)有 4 个老问题:
1.
不支持事务(删一行再查可能还在)
2.
Schema 变就要重写全部数据
3.
分区分错就全表扫描
4.
多引擎(Spark/Trino/Flink)不能同时写同一张表
Iceberg = 解决这 4 个问题 。它不是文件格式(仍是 Parquet/ORC),而是 表格式(Table Format)——把表结构、事务、版本、分区都做在 Iceberg 这一层,下面接任意文件 / 引擎。
实时数据(2026-08-19 拉取)
| 维度 | 数值 |
|---|---|
| Stars | 9,150 |
| Forks | 3,454 |
| Open Issues | 908 |
| License | Apache-2.0 ✅ |
| 最新版本 | 1.11.0(2026-05-20) |
| 最后 push | 2026-08-19 08:31 UTC(今天!) |
| 创建时间 | 2018-11-19(7 年) |
| 治理 | Apache 顶级项目(2024-05 升级) |
| Topics | apache / hacktoberfest / iceberg |
| 归属 | Apache Software Foundation |
| 官网 | iceberg.apache.org |
关键判断 :Iceberg 是数据湖三剑客中 最成熟 的——Apache 顶级 + 7 年沉淀 + 2026-08-19 还在 push。Delta Lake 是 Databricks 商业主导,Hudi 是 Uber 起源但社区分散。
三、6 大核心特性
1. Expressive SQL(事务 + MERGE INTO)
-- 增量合并新数据
MERGE INTO prod.nyc.taxis pt
USING (SELECT * FROM staging.nyc.taxis) st
ON pt.id = st.id
WHEN NOT MATCHED THEN INSERT *;
-- 事务原子性(ACID)-- A 引擎写的,B 引擎立刻可见,零延迟
实战价值:替代 Hive 的 INSERT OVERWRITE 老大难,全量改增量。
2. Full Schema Evolution(无重写)
ALTER TABLE taxis ALTER COLUMN trip_distance TYPE double;
ALTER TABLE taxis ALTER COLUMN trip_distance AFTER fare;
ALTER TABLE taxis RENAME COLUMN trip_distance TO distance;
实战价值 :加字段 / 改字段顺序 / 重命名 —— 不用重写任何数据。Hive 时代改个字段要 rebuild 整张表。
3. Hidden Partitioning(自动分区)
-- 写入:Iceberg 自动按月分区,路径 + 文件命名全自动
INSERT INTO prod.nyc.taxis VALUES (...);
-- 查询:不用写分区过滤
SELECT count(*) FROM prod.nyc.taxis WHERE ts >= '2025-08-01';
-- Iceberg 自动跳过 8 月之前的分区
实战价值:告别 ” 忘记 WHERE 分区就全表扫描 ”——schema 把分区关系写死,查询自动剪枝。
4. Time Travel + Rollback(时间旅行)
-- 查历史快照
SELECT count(*) FROM nyc.taxis
FOR VERSION AS OF 2188465307835585443;
-- 输出: 2,798,371
-- 查历史时间点
SELECT count(*) FROM nyc.taxis
FOR TIMESTAMP AS OF TIMESTAMP '2022-01-01 00:00:00';
-- 输出: 2,798,371
-- 一键回滚
CALL system.rollback_to_snapshot('nyc.taxis', 2188465307835585443);
实战价值 :误删数据?上个月的报表要复现?重跑 ETL? 全支持。
5. Data Compaction(自动文件合并)
-- Iceberg 表默认小文件(low cardinality)-- 一键合并 + 排序
CALL system.rewrite_data_files(
table => 'nyc.taxis',
strategy => 'sort',
sort_order => 'zorder(date, vendor_id)'
);
实战价值 :代替 Hive 的 ALTER TABLE ... CONCATENATE, 查询加速 10×。
6. Multi-Engine(多引擎安全共享)
这是 Iceberg 最杀手锏的特性:
┌──────────────────────────────────────────────────────────┐
│ 同一个 Iceberg 表,多引擎同时读写 │
│ │
│ Spark 写入 → Iceberg 快照版本 +5 │
│ Trino 写入 → Iceberg 快照版本 +6 │
│ Flink 写入 → Iceberg 快照版本 +7 │
│ Hive 读取 → 看到最新版本(快照 7)│
│ Impala 读取 → 看到最新版本(快照 7)│
│ │
│ 全部 ACID 隔离,互不干扰 │
└──────────────────────────────────────────────────────────┘
实战价值:客户问 ” 我们用 Spark 写,Trino 读能不能用?” —— Iceberg 是唯一答案。Hive 不行,Parquet 也不行。
四、集成矩阵(跟已发赛道怎么连)
| 引擎 | 集成现状 | 相关文章 |
|---|---|---|
| Apache Spark | ✅ 官方一等公民 | Doris 296 / StarRocks 332 都覆盖 |
| Apache Flink | ✅ 流批一体 | 见 [Apache Flink 调研 P4 即将发布] |
| Trino / Presto | ✅ 官方一等公民 | Trino 328 |
| Apache Hive | ✅ 兼容(不用改代码) | 历史方案 |
| Impala | ✅ 兼容 | 历史方案 |
| Doris / StarRocks / ClickHouse | ✅ 原生 Iceberg Catalog | Doris 296 / StarRocks 332 / ClickHouse 322 |
| Snowflake / BigQuery / Databricks | ✅ 全支持 | 商业化覆盖 |
| AWS Athena / Redshift | ✅ SageMaker Lakehouse | 商业化覆盖 |
五、数据湖三剑客对比(Iceberg vs Delta Lake vs Hudi)
| 维度 | Apache Iceberg | Delta Lake (Linux Foundation) | Apache Hudi |
|---|---|---|---|
| Stars | 9,150 | 8,200 (delta-io/delta) | 6,200 (apache/hudi) |
| License | Apache-2.0 ✅ | Apache-2.0 ✅ | Apache-2.0 ✅ |
| 起源 | Netflix(2018) | Databricks(2019) | Uber(2017) |
| 治理 | Apache 顶级 ✅ | Linux Foundation | Apache 顶级 ✅ |
| 社区 | 7 OSS 厂商主导 | Databricks 主导 | Uber 主导但分散 |
| 多引擎 | ✅ 6 引擎都支持 | ✅ 5 引擎(PG/Redshift 弱) | ⚠️ 4 引擎 |
| 流处理 | ✅ Flink 集成 | ❌ 弱(Spark Structured Streaming) | ✅ 原生 |
| 生态成熟度 | 7 年 | 6 年 | 8 年 |
| 选型建议 | 跨引擎首选 | Databricks 生态首选 | 流式更新高频场景 |
选谁?
| 场景 | 推荐 |
|---|---|
| 多引擎协作(Spark/Trino/Flink) | Iceberg ⭐ |
| Databricks 全栈 | Delta Lake |
| 高频 CDC / 实时入湖 | Hudi |
| OSS 治理 + 跨云 | Iceberg ⭐ |
| 国内客户(信创 + 国产引擎) | Iceberg ⭐(Doris/StarRocks 原生支持) |
六、实战 3 步 · 35 分钟跑通 ” 湖仓一体 ”
Step 1 · Docker Compose 一键起 3 组件(10 分钟)
version: '3.8'
services:
# MinIO(S3 兼容存储)minio:
image: minio/minio:latest
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: minio
MINIO_ROOT_PASSWORD: minio123
ports:
- "9000:9000"
- "9001:9001"
# Iceberg REST Catalog(官方)iceberg-rest:
image: apache/iceberg-rest-fixture:latest
environment:
CATALOG_WAREHOUSE: s3://iceberg/warehouse
CATALOG_IO__IMPL: org.apache.iceberg.aws.s3.S3FileIO
ports:
- "8181:8181"
# Spark + Iceberg
spark:
image: tabulario/spark-iceberg:latest
environment:
AWS_ACCESS_KEY_ID: minio
AWS_SECRET_ACCESS_KEY: minio123
AWS_REGION: us-east-1
ports:
- "8888:8888" # Jupyter
- "8080:8080" # Spark UI
Step 2 · Spark 创建 Iceberg 表 + 插入数据(15 分钟)
# Jupyter / pyspark
spark.sql("""
CREATE TABLE prod.nyc.taxis (
id BIGINT,
trip_distance DOUBLE,
fare DOUBLE,
vendor_id INT,
ts TIMESTAMP
) USING iceberg
PARTITIONED BY (days(ts))
""")
# 5 字段 + 自动按天分区
# 下次 "ALTER TABLE ADD COLUMN" 不重写数据
spark.sql("""
INSERT INTO prod.nyc.taxis VALUES
(1, 2.3, 12.5, 1, TIMESTAMP '2025-08-19 10:00:00'),
(2, 0.5, 5.5, 2, TIMESTAMP '2025-08-19 11:30:00')
""")
Step 3 · Trino 同时查询(5 分钟)
-- Trino CLI 或 JDBC
SELECT count(*) FROM iceberg.prod.nyc.taxis;
-- 直接看到 Spark 刚写的 2 行
-- 时间旅行
SELECT count(*) FROM iceberg.prod.nyc.taxis
FOR TIMESTAMP AS OF TIMESTAMP '2025-08-19 09:00:00';
35 分钟跑通的成果:Spark 写 + Trino 读 + Iceberg 治理 = 跨引擎数据湖。
七、风险与坑
| # | 风险 | 应对 |
|---|---|---|
| 1 | 小文件问题(高频写入产生大量小文件) | 定期 CALL system.rewrite_data_files() |
| 2 | Partition Evolution 复杂 | 8/19 还在演进(Iceberg 1.11+ 改进) |
| 3 | Java 写、JVM 生态 | Python 集成需 PyIceberg(独立库) |
| 4 | 908 open issues 量大 | Apache 顶级项目 + 活跃社区,问题通常有 workaround |
| 5 | 学习曲线 | 团队 1-2 周熟悉,重点掌握 hidden partition + time travel |
| 6 | 跟 Hive 迁移路径 | 增量迁移工具成熟(iceberg-migration) |
八、总结
3 个最值得用的理由
- Apache 顶级 + 7 年沉淀——数据湖三剑客中治理最规范
- 多引擎协作唯一解——Spark/Trino/Flink/Hive/Impala 全支持,告别 ” 格式分裂 ”
- 2026 主流湖仓——Doris / StarRocks / ClickHouse / Snowflake 全原生集成 Iceberg Catalog
1 句选型口诀
跨引擎选 Iceberg,Databricks 选 Delta Lake,CDC 高频选 Hudi。
国内客户几乎都该选 Iceberg(Apache 顶级 + Doris/StarRocks 原生 + 信创友好)。
参考
- Apache Iceberg 官网:iceberg.apache.org
- GitHub 仓库:apache/iceberg
- Apache Iceberg 1.11.0 Release Notes:GitHub Releases
- Doris 调研(296):《Apache Doris 调研》
- StarRocks 调研(332):《StarRocks 调研》
- Trino 调研(328):《Trino 调研》
- ClickHouse 调研(322):《ClickHouse 调研》
- BI 栈全景图 v2 (338):《2026 BI 栈全景图 v2》
📎 WordPress 链接
- 官方链接:《飞熊出品 · Apache Iceberg 调研:9K stars 数据湖事实标准,6 大特性让湖仓一体落地》
- 短链:
https://east196.cn/?p=379 - 状态:published · 2026-08-19