1. Data Lakehouse-та Iceberg не үшін қажет
Apache Iceberg — заманауи data lakehouse архитектуралары үшін де-факто стандартқа айналған open table format. Iceberg object storage (S3, HDFS, MinIO) үстінде классикалық ДББЖ-ге тән кепілдіктермен кестелік деректерді сенімді сақтауды қамтамасыз етеді.
Дәстүрлі архитектуралардың басты мәселесі — деректер жүйелер арасында көшіріледі. ETL деректерді көлден DWH-ға, одан витриналарға, содан кейін BI-ға тасиды. Әрбір көшірме — десинхронизация, шығындардың екі еселенуі және latency өсуі. Iceberg мұны шешеді: деректер бір рет сақталады, әр түрлі қозғалтқыштардан сұралады.
Iceberg-тің негізгі мүмкіндіктері:
- ACID transactions — атомарлық коммиттер, оқушыларды жазушылардан оқшаулау.
- Schema evolution — деректерді қайта жазбай колонкаларды қосу, жою, атын өзгерту.
- Partition evolution — бар деректерді көшірмей партициялау схемасын өзгерту.
- Time travel — timestamp немесе snapshot ID бойынша тарихи деректер снимкаларына сұраныстар.
- Hidden partitioning — сұраныстарда көрінетін partition-колонкаларсыз автоматты партициялау.
Apache Doris Multi-Catalog Iceberg-кестелерді деректерді көшірмей тікелей сұрауға мүмкіндік береді. «Query where data lives» қағидасы — нөлдік дубликация, ішкі және сыртқы кестелер үшін бірыңғай SQL-интерфейс.
Қолдау көрсетілетін каталогтар: Hive Metastore, AWS Glue, REST Catalog, Hadoop Catalog.
2. Архитектура: Doris Multi-Catalog + Iceberg
Doris Multi-Catalog — сыртқы деректер үстіндегі виртуалды абстракция. Үш деңгейлі архитектура:
| Catalog | Жоғарғы деңгей. Бір Catalog = бір сыртқы қоймалау (Iceberg, Hudi, Hive). CREATE CATALOG арқылы құрылады. |
| Database | Орта деңгей. Каталог ішіндегі дерекқорлар — Iceberg namespace-ін көрсетеді. |
| Table | Төменгі деңгей. Стандартты SQL арқылы қолжетімді Iceberg-кестелер. |
| Data Flow | SQL сұранысы → Doris FE (жоспар) → Doris BE (S3/HDFS-тен Parquet/ORC файлдарын оқу) → клиентке нәтиже. |
Маңыздысы: Doris Parquet/ORC файлдарды тікелей оқиды, partition pruning үшін Iceberg metadata пайдаланады. ETL жоқ, аралық сақтау жоқ. Бір SQL-сұраныста Iceberg-кестелер мен ішкі Doris-кестелер арасында JOIN жасауға болады.
3. Quick Start: Iceberg каталогын қосу
Iceberg каталогын Doris-ке қосу бір SQL-сұраныс алады. Төменде — әр түрлі метасторлар үшін үш нұсқа.
// 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 үшін (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 және Hive Metastore үшін:
// 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. Федеративтік сұраныстар: ішкі және Iceberg кестелерінің JOIN-ы
Интеграцияның басты құндылығы — федеративтік сұраныстар. Бір SQL Doris ішкі кестелерінен және сыртқы Iceberg-кестелерден деректерді бір уақытта алады:
// 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 не істейді:
- Предикаттарды pushdown: WHERE-шарттар Iceberg metadata деңгейіне беріледі — partition pruning және column pruning оқу көлемін қысқартады.
- Iceberg-сұраныстар үстінде Materialized Views: Doris ішкі storage-де ыстық деректерді автоматты кештеу.
- Transparent rewrite: Iceberg-кестеге сұраныс, деректер жаңа болса, автоматты MV-ге бағытталады.
- Query optimizer (CBO): Doris оңтайлы орындау жоспарын таңдау үшін Iceberg statistics пайдаланады.
5. Write-back: Doris-тен Iceberg-ке жазу
Doris Iceberg-кестелерді оқып қана қоймай, оларға жазуды да қолдайды:
- INSERT INTO iceberg_catalog.db.table SELECT ... — SQL-сұраныс нәтижелерін Iceberg-ке жазу.
- CREATE TABLE AS SELECT (CTAS) — SQL-сұраныстардан жаңа Iceberg-кестелер құру.
- Жазу форматы: Parquet.
- Use case: Doris-те ETL-трансформациялар → нәтижелер Iceberg-те → Spark, Trino, Presto арқылы қолжетімді.
- Schema evolution: Doris арқылы ALTER TABLE Iceberg metadata-ға қолданылады.
- Partitioned writes: Doris деректерді дұрыс partition directories-ге автоматты жазады.
6. Time Travel және нұсқалау
Iceberg snapshots арқылы өзгерістер тарихын сақтайды. Doris өткен кез келген сәттегі деректерді сұрауға мүмкіндік береді:
// 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; Практикалық сценарийлер:
- Аудит: «есеп сәтінде жүйеде қандай деректер болды?» — берілген күнге нақты күйді қайта жаңғырту.
- Debug: аномалиялар мен ETL қателерін талдау үшін деректердің алдыңғы күйіне оралу.
- Реттеуші талаптар: compliance үшін тарихи снимкаларды сақтау (SOX, GDPR, ҰБ).
7. Production: мониторинг және оптимизация
Iceberg + Doris production-эксплуатациясы үшін ұсыныстар:
- File size: Iceberg 100–500 MB файлдарды ұсынады. Ұсақ файлдар оқу өнімділігін төмендетеді.
- Compaction: Spark maintenance jobs немесе Iceberg actions арқылы ұсақ файлдарды кезеңді компакциялау.
- Metadata refresh: REFRESH CATALOG iceberg_catalog — каталогтағы өзгерістерде метадеректерді жаңарту.
- Cache: Doris Iceberg metadata-ны қайталанатын сұраныстарды жеделдету үшін кештейді. TTL уақыты баптауға болады.
- Monitoring: EXPLAIN pushdown және partition pruning талдауы үшін. Предикаттардың каталог деңгейіне өтуін тексеріңіз.
- Scaling: Doris BE-нодтары әр түрлі файлдарды параллель оқиды — нод қосқанда сызықтық масштабтау.
- Column statistics: Iceberg statistics + Doris CBO = қолмен баптаусыз оңтайлы орындау жоспарлары.