Data Engineering

Apache Iceberg 2026: Table Format Thống Lĩnh Data Lakehouse

Từ kiến trúc đến triển khai production — bài viết đầy đủ nhất giúp bạn hiểu rõ Apache Iceberg và cách nó đang thay đổi toàn bộ ngành data engineering

05/07/2026 25 phút đọc Võ Đào Huy Hoàng

1. Giới thiệu

Năm 2026, Data Lakehouse không còn là khái niệm trừu tượng — nó là kiến trúc tiêu chuẩn cho mọi tổ chức xử lý dữ liệu ở quy mô lớn. Và đứng giữa trung tâm của cuộc cách mạng này là Apache Iceberg, một open table format mã nguồn mở đã vượt qua Delta Lake và Hudi để trở thành chuẩn mực mới nhất trong ngành Data Engineering. 🔥

Apache Iceberg được phát triển ban đầu tại Netflix 🎬 (2018), sau đó đóng góp cho Apache Software Foundation. Năm 2026, nó được sử dụng rộng rãi bởi Apple 🍎, Netflix, LinkedIn, Expedia, và hàng ngàn công ty khác trên toàn thế giới. Với hơn 7,000+ GitHub stars 🌟 và ecosystem ngày càng lớn mạnh, Iceberg đang định hình cách chúng ta quản lý dữ liệu trên cloud.

💡 Tại sao bạn nên quan tâm? Nếu bạn là Data Engineer, Analytics Engineer, hay Backend Developer làm việc với dữ liệu, Apache Iceberg sẽ sớm xuất hiện trong stack của bạn. Virtually mọi cloud provider lớn (AWS, GCP, Azure) đều đã tích hợp native support cho Iceberg. 🚀

2. Data Lakehouse là gì?

Tại sao cần Data Lakehouse?

Trước khi hiểu Iceberg, chúng ta cần hiểu Data Lakehouse — mô hình kết hợp điểm mạnh của Data Warehouse 🏛️ (ACID transactions, schema enforcement) với Data Lake 🌊 (chi phí thấp, open formats, scalability). Trong mô hình truyền thống:

  • Data Warehouse (Snowflake, Redshift): Tốn 💰, proprietary format, vendor lock-in
  • Data Lake (raw Parquet trên S3): Không có ACID, không có time travel, data quality kém 😟
  • ETL hai lần: Copy dữ liệu từ Lake → Warehouse, waste resources ⏰

Data Lakehouse giải quyết tất cả: chạy BI queries 📊, ML workloads 🤖, và streaming 📡 trực tiếp trên dữ liệu trong data lake — không cần duplicate. Và open table format (như Iceberg) chính là lớp keo biến raw files thành một data lakehouse thực thụ. 🎯

🔥 Key Insight: Open table format là middleware giữa file storage (S3/GCS/ADLS) và query engine (Spark/Trino/Flink). Nó quản lý metadata, transactions, và schema — biến một đống files Parquet thành một "virtual table" thông minh. 🧠

3. Kiến Trúc Apache Iceberg

Kiến trúc Iceberg được thiết kế theo mô hình layered architecture 🏗️, tách biệt hoàn toàn giữa metadata và data. Đây là khác biệt cốt lõi so với các table format khác.

📝
Catalog (HMS/Glue/Nessie)
📋
Metadata Files
📊
Manifest Lists
📦
Manifest Files
💾
Data Files (Parquet/ORC/Avro)

Snapshot & Time Travel ⏰

Mỗi lần ghi dữ liệu (write/append/delete), Iceberg tạo một snapshot mới. Snapshot là một bản chụp immutable của toàn bộ table tại một thời điểm. Bạn có thể:

  • 🔍 Query lịch sử — truy vấn dữ liệu tại bất kỳ thời điểm nào trong quá khứ
  • 🔄 Rollback — hoàn nguyên table về snapshot trước đó trong vài giây
  • 📋 Audit trail — biết chính xác ai, khi nào, thay đổi gì
  • Snapshot isolation — reader không bị block bởi writer
-- Query dữ liệu tại thời điểm cụ thể trong Spark SQL SELECT * FROM my_catalog.sales SYSTEM.TIME.TRAVEL('2026-07-01 10:00:00'); -- Rollback table về snapshot trước CALL my_catalog.system.rollback_to_snapshot( 'sales', snapshot_id => 1234567890 );

Metadata Layer 🗂️

Iceberg sử dụng cấu trúc metadata three-level hierarchy:

  1. Snapshot Log — danh sách tất cả snapshots (history của table)
  2. Manifest List — mỗi snapshot trỏ đến một manifest list (JSON)
  3. Manifest File — mỗi manifest chứa metadata về data files (Avro): partition values, column stats, record counts
🎯 Tại sao cấu trúc này quan trọng? Khi query Iceberg table, engine chỉ cần đọc manifest files (nhỏ, nhanh) để xác định data files nào cần scan — thay vì liệt kê hàng triệu files trên S3 (cách cũ, chậm 💀). Kết quả: query planning nhanh gấp 10-100x so với raw Parquet files. ⚡

Partition Evolution 🔄

Một trong những killer feature của Iceberg: partition evolution. Bạn có thể thay đổi strategy phân vùng (partitioning) mà không cần rewrite data. 🤯 Data cũ giữ nguyên partition cũ, data mới dùng partition mới — Iceberg tự động handle cả hai khi query.

-- Ban đầu: partition theo ngày ALTER TABLE my_catalog.events ADD PARTITION FIELD days(created_at); -- Sau 6 tháng: chuyển sang partition theo tháng (không cần rewrite!) ALTER TABLE my_catalog.events DROP PARTITION FIELD days(created_at); ALTER TABLE my_catalog.events ADD PARTITION FIELD months(created_at); -- Query vẫn hoạt động bình thường với cả hai partition scheme ✅ SELECT date_trunc('month', created_at), COUNT(*) FROM my_catalog.events GROUP BY 1;
⚠️ So sánh: Delta Lake và Hudi không hỗ trợ partition evolution. Để thay đổi partition strategy, bạn phải rewrite toàn bộ data — tốn kém về thời gian và chi phí 💸 với bảng lớn (TBs-PBs).

4. Tính Năng Đặc Biệt Của Iceberg ✨

Schema Evolution 🧬

Iceberg hỗ trợ full schema evolution — thêm/xóa/cột, đổi tên column, đổi kiểu dữ liệu — tất cả đều an toàn và backward-compatible. Iceberg lưu trữ column IDs trong metadata, nên khi đổi tên column từ user_namefull_name, queries cũ vẫn hoạt động vì chúng match theo ID, không phải tên. 🎯

-- Schema evolution trong Spark SQL — an toàn, không downtime ⚡ ALTER TABLE my_catalog.users ADD COLUMN phone STRING; ALTER TABLE my_catalog.users RENAME COLUMN name TO full_name; ALTER TABLE my_catalog.users ALTER COLUMN age TYPE BIGINT; -- Queries cũ vẫn hoạt động ✅ SELECT full_name, age FROM my_catalog.users;

Hidden Partitioning 🙈

Iceberg ẩn partitioning khỏi người dùng. Bạn viết query theo business column (WHERE created_at > '2026-01-01'), và Iceberg tự động translate thành partition filter. Không cần nhớ partition column, không cần viết partition key trong WHERE clause. 😎

-- Bạn viết query đơn giản 👇 SELECT * FROM orders WHERE order_date = '2026-07-05'; -- Iceberg tự động push partition filter 🚀 -- (không cần WHERE dt = '2026-07-05')! -- Query plan: SKIP partitions không match → nhanh gấp 50x 🏎️
💡 Hidden Partitioning = Zero Mistakes: Trong Hive/Spark truyền thống, developers thường quên partition filter → full table scan 💀. Iceberg loại bỏ hoàn toàn lỗi này. Đây là lý do query trên Iceberg nhanh hơn 10-50x so với Hive tables. ⚡

Compaction & Cleanup 🧹

Sau thời gian chạy, data lake tích lũy nhiều small files (micro-batches từ streaming 💧) và old snapshots. Iceberg cung cấp built-in tools để handle:

# Compaction: gộp nhiều small files thành large files 📦 spark-submit \ --class org.apache.iceberg.spark.actions.SparkActions \ --conf spark.sql.catalog.myCatalog=org.apache.iceberg.spark.SparkCatalog \ --jars iceberg-spark-runtime-3.5_2.12-1.9.0.jar \ iceberg-actions.jar \ rewrite-data my_catalog.orders \ --strategy binpack \ --target-file-size-bytes 134217728 # 128MB # Expire old snapshots: giữ 10 snapshots gần nhất 🗑️ CALL my_catalog.system.expire_snapshots( 'orders', retain_last => 10 ); # Remove orphan files: dọn files không thuộc snapshot nào 🧹 CALL my_catalog.system.remove_orphan_files( 'orders', older_than => TIMESTAMP '2026-06-01 00:00:00' );

5. So Sánh: Iceberg vs Delta Lake vs Hudi 🏆

Bảng so sánh tính năng

Tính năng Apache Iceberg 🧊 Delta Lake 🔶 Apache Hudi 🐘
ACID Transactions ✅ Có (snapshot isolation) ✅ Có (OPTIMIZE + Z-Order) ✅ Có (COW + MOR)
Schema Evolution ⚡ Full (add/rename/alter/drop) ✅ Hỗ trợ cơ bản ❌ Hạn chế
Partition Evolution ✅ Có — không rewrite data 🚀 ❌ Không hỗ trợ ❌ Không hỗ trợ
Hidden Partitioning ✅ Tự động partition pruning 🙈 ❌ Phải partition key trong WHERE ❌ Tương tự Delta
Time Travel ✅ Snapshot-based ✅ Delta Log-based ✅ Commit timeline
Query Engines hỗ trợ 👑 Spark, Trino, Flink, Dremio, StarRocks, DuckDB, BigQuery, Snowflake... Spark, Trino, Databricks Spark, Flink, Presto
Cloud Provider Support 🔥 AWS, GCP, Azure (native) 🌩️ Databricks-centric AWS EMR
Streaming Support ✅ Flink Iceberg Sink/Source 📡 ✅ Structured Streaming ✅ Record-level upsert ⚡
Upsert/Delete ✅ Row-level (merge on read) ✅ MERGE INTO ✅ COW/MOR optimized
Maturity (2026) 🔥 Very mature 📈 Mature (Databricks-backed) Growing (Uber-backed)
Vendor Lock-in 🟢 Zero — fully open 🔓 🟡 Low (Databricks influence) 🟢 Low

Khi nào chọn Table Format nào? 🤔

✅ Chọn Apache Iceberg khi:
  • Dùng multi-engine strategy (Spark + Trino + Flink) 🔧
  • Cần partition evolution (thay đổi partition mà không rewrite) 🔄
  • Cloud-agnostic (AWS + GCP + Azure) ☁️
  • Mục tiêu zero vendor lock-in 🔓
  • Team analytics dùng nhiều BI tools (Superset, Tableau, Looker) 📊
  • Dữ liệu lớn (TBs-PBs) và query pattern thay đổi thường xuyên 🌊
🔶 Chọn Delta Lake khi:
  • Đã đầu tư sâu vào Databricks ecosystem 🧱
  • Cần Unity Catalog integration native 📋
  • Team chỉ dùng Spark làm query engine chính ⚡
  • Cần Delta Sharing protocol cho data sharing 🔗
🐘 Chọn Apache Hudi khi:
  • Workload chính là upsert/ CDC (Change Data Capture) 📡
  • Cần record-level granular operations ⚙️
  • Dữ liệu source thay đổi liên tục (IoT, logs, transactions) 🔄
  • Đang dùng AWS EMR và muốn managed Hudi experience ☁️

6. Triển Khai Iceberg Production 🚀

Apache Spark + Iceberg ⚡

Spark là query engine phổ biến nhất với Iceberg. Setup cực kỳ đơn giản — chỉ cần thêm Iceberg JAR vào Spark config:

# spark-submit với Iceberg support spark-submit \ --conf spark.sql.catalog.myCatalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.myCatalog.type=hadoop \ --conf spark.sql.catalog.myCatalog.warehouse=s3://my-bucket/warehouse \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \ --jars iceberg-spark-runtime-3.5_2.12-1.9.0.jar \ my_etl_job.py

Hoặc với AWS Glue Catalog (khuyến nghị cho production trên AWS ☁️):

# AWS Glue Catalog — managed, serverless metadata 🌩️ --conf spark.sql.catalog.myCatalog=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.myCatalog.type=glue \ --conf spark.sql.catalog.myCatalog.client.region=ap-southeast-1 \ --conf spark.sql.catalog.myCatalog.warehouse=s3://my-bucket/iceberg-warehouse \ --conf spark.sql.catalog.myCatalog.io-impl=org.apache.iceberg.aws.s3.S3FileIO \ --conf spark.sql.catalog.myCatalog.lock-impl=org.apache.iceberg.aws.dynamodb.DynamoDbLockManager
🔥 Glue Catalog: Managed service của AWS — không cần chạy Hive Metastore, auto-scaling, integrated với Athena, Redshift Spectrum, và EMR. Chi phí ~$1/tháng cho 1M objects. 💰

Trino Query Engine 🧊

Trino (trước đây PrestoSQL) là query engine OLAP lý tưởng cho Iceberg. Query trực tiếp trên S3/GCS với performance cực tốt — không cần ETL vào warehouse:

# Trino catalog config cho Iceberg # catalog/iceberg.properties connector.name=iceberg iceberg.catalog.type=hive hive.metastore.uri=thrift://metastore:9083 iceberg.file-format=parquet iceberg.compression-codec=zstd # Trino query — blazing fast ⚡ trino --catalog iceberg --schema mydb SELECT region, product_category, SUM(revenue) AS total_revenue, COUNT(DISTINCT customer_id) AS unique_customers FROM orders WHERE order_date BETWEEN '2026-01-01' AND '2026-06-30' GROUP BY 1, 2 ORDER BY total_revenue DESC LIMIT 100;

7. Case Study Thực Tế 📊

🏢 Case 1: Netflix — 100PB+ on Iceberg

Netflix chuyển đổi toàn bộ data warehouse (trên Hive) sang Iceberg. Kết quả 🎬:

  • ⚡ Query performance: nhanh hơn 10-50x cho analytical queries
  • 💰 Chi phí S3 giảm 40% nhờ compaction + partition evolution
  • 🔄 Zero downtime migration — chạy song song Hive + Iceberg, gradually switch
  • 📈 Xử lý 100PB+ dữ liệu mỗi ngày
🍎 Case 2: Apple — Analytics Platform

Apple dùng Iceberg làm foundation cho analytics platform nội bộ. Với hàng ngàn data analysts chạy queries trên hàng trăm PB dữ liệu, Iceberg cung cấp:

  • 🔒 Security — column-level security + row-level filtering qua Iceberg metadata
  • 🧬 Schema evolution — hàng trăm schema changes mỗi tuần mà không break existing queries
  • 📊 Multi-engine — Spark cho ETL, Trino cho ad-hoc, Presto cho dashboards 📈
🏨 Case 3: Expedia — Cost Optimization 💰

Expedia Group migrate từ Redshift warehouse sang Iceberg trên S3. Kết quả 🌍:

  • 💸 Chi phí data infrastructure: giảm 60% ($2M → $800K/năm)
  • ⚡ Query latency: giảm 3x cho BI dashboards
  • 🔓 Zero vendor lock-in — dùng Athena, Trino, Spark tùy ý
  • 📅 Migration hoàn thành trong 8 tháng cho 500+ tables

9. Kết Luận 🎯

Apache Iceberg đã trở thành de facto standard cho open table format trong data lakehouse architecture năm 2026. Với:

  • 🧊 Architecture thông minh — layered metadata, snapshot isolation, partition evolution
  • Performance vượt trội — hidden partitioning, manifest pruning, 10-50x nhanh hơn Hive
  • 🔓 Zero vendor lock-in — tương thích mọi query engine, mọi cloud provider
  • 📈 Ecosystem lớn mạnh — Spark, Flink, Trino, DuckDB, BigQuery, Snowflake, Redshift...
  • 🌍 Community — Netflix, Apple, LinkedIn, Alibaba, và hàng ngàn companies production

Nếu bạn đang xây dựng data platform mới, bắt đầu với Iceberg — bạn sẽ tiết kiệm hàng trăm ngàn dollar 💰 và avoid vendor lock-in. Nếu bạn đang dùng Hive/Parquet truyền thống, đây là thời điểm migrate — công cụ hỗ trợ đã mature, migration path đã rõ ràng, và ROI là immediate. 🚀

Tương lai của data engineering là open, interoperable, và multi-engine. Apache Iceberg là nền tảng vững chắc nhất để xây dựng tương lai đó. Bắt đầu ngay hôm nay — dataspace awaits! 🌟

🎯 Quick Start Checklist:
  • ☐ Cài Spark 3.5+ với Iceberg JAR
  • ☐ Setup Iceberg Catalog (Glue/Nessie/HMS)
  • ☐ Tạo first Iceberg table với CREATE TABLE USING iceberg
  • ☐ Benchmark query performance so với Hive table cũ
  • ☐ Setup compaction job định kỳ (daily/weekly)
  • ☐ Integrate Trino/DuckDB cho ad-hoc analytics
  • ☐ Plan migration cho production tables 📋