1. Data Lakehouse da Iceberg nima uchun kerak
Apache Iceberg — zamonaviy data lakehouse arxitekturalari uchun de-fakto standartga aylangan open table format. Iceberg object storage (S3, HDFS, MinIO) ustida klassik DBBT ga xos kafolatlar bilan jadval maʼlumotlarini ishonchli saqlashni taʼminlaydi.
Anʼanaviy arxitekturalarning asosiy muammosi — maʼlumotlar tizimlar oʼrtasida koʼchiriladi. ETL maʼlumotlarni koʼldan DWH ga, undan vitrinalarga, keyin BI ga olib oʼtadi. Har bir nusxa — desinxronizatsiya, xarajatlarning ikki barobarligi va latency oʼsishi. Iceberg buni hal qiladi: maʼlumotlar bir marta saqlanadi, turli dvigatellardan soʼraladi.
Iceberg ning asosiy imkoniyatlari:
- ACID transactions — atomik commitlar, oʼquvchilarni yozuvchilardan izolyatsiyalash.
- Schema evolution — maʼlumotlarni qayta yozmasdan ustunlarni qoʼshish, oʼchirish, nomini oʼzgartirish.
- Partition evolution — mavjud maʼlumotlarni koʼchirmasdan partitsiyalash sxemasini oʼzgartirish.
- Time travel — timestamp yoki snapshot ID boʼyicha tarixiy maʼlumotlar snapshotlariga soʼrovlar.
- Hidden partitioning — soʼrovlarda koʼrinadigan partition-ustunlarsiz avtomatik partitsiyalash.
Apache Doris Multi-Catalog Iceberg-jadvallarni maʼlumotlarni koʼchirmasdan toʼgʼridan-toʼgʼri soʼrash imkonini beradi. «Query where data lives» tamoyili — nolga teng dublikatsiya, ichki va tashqi jadvallar uchun yagona SQL-interfeys.
Qoʼllab-quvvatlanadigan kataloglar: Hive Metastore, AWS Glue, REST Catalog, Hadoop Catalog.
2. Arxitektura: Doris Multi-Catalog + Iceberg
Doris Multi-Catalog — tashqi maʼlumotlar ustidagi virtual abstraksiya. Uch darajali arxitektura:
| Catalog | Yuqori daraja. Bitta Catalog = bitta tashqi ombor (Iceberg, Hudi, Hive). CREATE CATALOG orqali yaratiladi. |
| Database | Oʼrta daraja. Katalog ichidagi maʼlumotlar bazalari — Iceberg namespace ini aks ettiradi. |
| Table | Quyi daraja. Standart SQL orqali foydalanish mumkin boʼlgan Iceberg-jadvallar. |
| Data Flow | SQL soʼrov → Doris FE (reja) → Doris BE (S3/HDFS dan Parquet/ORC fayllarni oʼqish) → mijozga natija. |
Muhimi: Doris Parquet/ORC fayllarni toʼgʼridan-toʼgʼri oʼqiydi, partition pruning uchun Iceberg metadata dan foydalanadi. ETL yoʼq, oraliq saqlash yoʼq. Bitta SQL-soʼrovda Iceberg-jadvallar va ichki Doris-jadvallar oʼrtasida JOIN qilish mumkin.
3. Quick Start: Iceberg katalogini ulash
Iceberg katalogini Doris ga ulash bitta SQL-soʼrov oladi. Quyida — turli metastorlar uchun uchta variant.
// ICEBERG CATALOG: HIVE METASTORE -- Create Iceberg catalog (Hive Metastore) CREATE CATALOG iceberg_catalog PROPERTIES (
'type' = 'iceberg',
'iceberg.catalog.type' = 'hms',
'hive.metastore.uris' = 'thrift://hive-metastore:9083'
);
-- Switch to catalog SWITCH iceberg_catalog;
-- List databases SHOW DATABASES;
-- Query Iceberg table SELECT * FROM iceberg_catalog.my_db.my_table LIMIT 10; REST Catalog uchun (Apache Polaris, Tabular, Nessie):
// ICEBERG CATALOG: REST CREATE CATALOG iceberg_rest PROPERTIES (
'type' = 'iceberg',
'iceberg.catalog.type' = 'rest',
'uri' = 'http://iceberg-rest:8181'
); S3 / MinIO va Hive Metastore uchun:
// ICEBERG CATALOG: S3 / MINIO CREATE CATALOG iceberg_s3 PROPERTIES (
'type' = 'iceberg',
'iceberg.catalog.type' = 'hms',
'hive.metastore.uris' = 'thrift://hms:9083',
's3.endpoint' = 'http://minio:9000',
's3.access_key' = 'minioadmin',
's3.secret_key' = 'minioadmin'
); 4. Federativ soʼrovlar: ichki va Iceberg jadvallarning JOIN i
Integratsiyaning asosiy qiymati — federativ soʼrovlar. Bitta SQL Doris ichki jadvallaridan va tashqi Iceberg-jadvallardan maʼlumotlarni bir vaqtda oladi:
// FEDERATED JOIN: DORIS + ICEBERG SELECT
d.customer_id,
d.customer_name,
i.total_purchases,
i.last_purchase_date
FROM internal.analytics.dim_customers d
JOIN iceberg_catalog.data_lake.fact_purchases i
ON d.customer_id = i.customer_id
WHERE i.last_purchase_date >= '2026-01-01' ORDER BY i.total_purchases DESC LIMIT 100; Doris nima qiladi:
- Predikatlarni pushdown: WHERE-shartlar Iceberg metadata darajasiga beriladi — partition pruning va column pruning oʼqish hajmini qisqartiradi.
- Iceberg-soʼrovlar ustida Materialized Views: Doris ichki storage da issiq maʼlumotlarni avtomatik keshlash.
- Transparent rewrite: Iceberg-jadvalga soʼrov, maʼlumotlar yangi boʼlsa, avtomatik MV ga yoʼnaltiriladi.
- Query optimizer (CBO): Doris optimal ijro rejasini tanlash uchun Iceberg statistics dan foydalanadi.
5. Write-back: Doris dan Iceberg ga yozish
Doris Iceberg-jadvallarni nafaqat oʼqiydi, balki ularga yozishni ham qoʼllab-quvvatlaydi:
- INSERT INTO iceberg_catalog.db.table SELECT ... — SQL-soʼrov natijalarini Iceberg ga yozish.
- CREATE TABLE AS SELECT (CTAS) — SQL-soʼrovlardan yangi Iceberg-jadvallar yaratish.
- Yozish formati: Parquet.
- Use case: Doris da ETL-transformatsiyalar → natijalar Iceberg da → Spark, Trino, Presto orqali foydalanish mumkin.
- Schema evolution: Doris orqali ALTER TABLE Iceberg metadata ga qoʼllaniladi.
- Partitioned writes: Doris maʼlumotlarni toʼgʼri partition directories ga avtomatik yozadi.
6. Time Travel va versiyalash
Iceberg snapshots orqali oʼzgarishlar tarixini saqlaydi. Doris oʼtgan istalgan paytdagi maʼlumotlarni soʼrash imkonini beradi:
// ICEBERG TIME TRAVEL -- Query data at a specific point in time SELECT * FROM iceberg_catalog.db.events
FOR TIME AS OF '2026-03-01 00:00:00';
-- Query by snapshot ID SELECT * FROM iceberg_catalog.db.events
FOR VERSION AS OF 12345678901234; Amaliy ssenariylar:
- Audit: «hisobot paytida tizimda qanday maʼlumotlar bor edi?» — berilgan sanaga aniq holatni qayta tiklash.
- Debug: anomaliyalar va ETL xatolarini tahlil qilish uchun maʼlumotlarning oldingi holatiga qaytish.
- Tartibga soluvchi talablar: compliance uchun tarixiy snapshotlarni saqlash (SOX, GDPR).
7. Production: monitoring va optimizatsiya
Iceberg + Doris production-ekspluatatsiyasi uchun tavsiyalar:
- File size: Iceberg 100–500 MB fayllarni tavsiya qiladi. Mayda fayllar oʼqish unumdorligini pasaytiradi.
- Compaction: Spark maintenance jobs yoki Iceberg actions orqali mayda fayllarni davriy kompaktatsiya qilish.
- Metadata refresh: REFRESH CATALOG iceberg_catalog — katalogdagi oʼzgarishlarda metamaʼlumotlarni yangilash.
- Cache: Doris Iceberg metadata ni takroriy soʼrovlarni tezlashtirish uchun keshlaydi. TTL vaqti sozlanadi.
- Monitoring: EXPLAIN pushdown va partition pruning tahlili uchun. Predikatlarning katalog darajasiga oʼtishini tekshiring.
- Scaling: Doris BE-nodlari turli fayllarni parallel oʼqiydi — nod qoʼshganda chiziqli masshtablash.
- Column statistics: Iceberg statistics + Doris CBO = qoʼlda sozlashsiz optimal ijro rejalari.