[VELODB.IO]
DATANOMIX.PRO // ИНТЕГРАЦИИ // ICEBERG FEDERATION

Apache Iceberg + Doris: lakehouse federation на SQL

Multi-Catalog, федеративные JOIN, time travel, write-back. Полный гайд по интеграции.

Подготовлено:
Datanomix.pro
Время чтения:
~12 мин

1. Зачем Iceberg в Data Lakehouse

Apache Iceberg — open table format, ставший стандартом де-факто для современных data lakehouse архитектур. 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Средний уровень. Базы данных внутри каталога — отражают namespace Iceberg.
TableНижний уровень. Iceberg-таблицы, доступные через стандартный SQL.
Data FlowSQL запрос → Doris FE (план) → Doris BE (чтение Parquet/ORC файлов из S3/HDFS) → результат клиенту.

Ключевое: Doris читает Parquet/ORC файлы напрямую, используя Iceberg metadata для partition pruning. Нет ETL, нет промежуточного хранения. При этом можно комбинировать: JOIN между Iceberg-таблицами и внутренними таблицами Doris в одном SQL-запросе.

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. Федеративные запросы: JOIN внутренних и Iceberg таблиц

Главная ценность интеграции — федеративные запросы. Один 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 сокращают объём чтения.
  • Materialized Views поверх Iceberg-запросов: автоматическое кеширование горячих данных во внутреннем storage Doris.
  • Transparent rewrite: запрос к Iceberg-таблице автоматически перенаправляется на MV, если данные свежие.
  • Query optimizer (CBO): Doris использует Iceberg statistics для выбора оптимального плана выполнения.

5. Write-back: запись в Iceberg из Doris

Doris поддерживает не только чтение, но и запись в Iceberg-таблицы:

  • INSERT INTO iceberg_catalog.db.table SELECT ... — запись результатов SQL-запросов в Iceberg.
  • CREATE TABLE AS SELECT (CTAS) — создание новых Iceberg-таблиц из SQL-запросов.
  • Формат записи: Parquet.
  • Use case: ETL-трансформации в Doris → результаты в Iceberg → доступ из Spark, Trino, Presto.
  • Schema evolution: ALTER TABLE через Doris применяется к 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: мониторинг и оптимизация

Рекомендации для production-эксплуатации Iceberg + Doris:

  1. File size: Iceberg рекомендует 100–500 MB файлы. Мелкие файлы снижают производительность чтения.
  2. Compaction: периодическая компакция мелких файлов через Spark maintenance jobs или Iceberg actions.
  3. Metadata refresh: REFRESH CATALOG iceberg_catalog — обновление метаданных при изменениях в каталоге.
  4. Cache: Doris кеширует Iceberg metadata для ускорения повторных запросов. Время TTL настраивается.
  5. Monitoring: EXPLAIN для анализа pushdown и partition pruning. Проверяйте, что предикаты уходят на уровень каталога.
  6. Scaling: Doris BE-ноды параллельно читают разные файлы — линейное масштабирование при добавлении нод.
  7. Column statistics: Iceberg statistics + Doris CBO = оптимальные планы выполнения без ручной настройки.

Источники

FAQ

Какие table formats поддерживает Doris?

Apache Iceberg, Apache Hudi, Apache Paimon, Delta Lake, Apache Hive. Все через единый Multi-Catalog API.

Нужно ли копировать данные из Iceberg в Doris?

Нет. Doris читает Iceberg-файлы напрямую из S3/HDFS. Для горячих данных можно создать Materialized View для кеширования.

Можно ли писать в Iceberg из Doris?

Да. INSERT INTO и CTAS поддерживаются. Данные записываются в Parquet-формате в Iceberg-таблицы.

Как работает partition pruning?

Doris использует Iceberg metadata для пропуска нерелевантных partition-файлов. Предикаты из WHERE автоматически pushdown на уровень каталога.

Хотите построить lakehouse на Iceberg + Doris?

./ОБСУДИТЬ_АРХИТЕКТУРУ.sh
© 2026 DATANOMIX.PRO — ЭКСКЛЮЗИВНЫЙ ПАРТНЁР VELODB В ЦЕНТРАЛЬНОЙ АЗИИ
VeloDB — Data Lakehouse /ГЛАВНАЯ