Learning Platform
Глоссарий Troubleshooting
Урок 15.06 · 40 мин
Продвинутый
Apache PaimonFlinkSparkStarRocksTrinoPrestoDorisIceberg CompatibilityPyPaimonREST CatalogComparison

Ecosystem + Interoperability

В предыдущих уроках мы разобрали внутренности Paimon: LSM-деревья, merge engine’ы, changelog producer, bucket/partition design и data management. Теперь — как Paimon интегрируется с экосистемой обработки данных и как сравнивается с другими lakehouse-форматами.

Apache Paimon изначально создавался как Flink Table Store (2022), и Flink остаётся primary engine. Это значит: максимальная интеграция, все features доступны first-class, streaming read/write — нативные операции.

Flink + Paimon: полная интеграция
Flink SQLПолная поддержка Flink SQL: CREATE TABLE, INSERT INTO, SELECT, UPDATE, DELETE, MERGE INTO. Streaming и batch режимы. Каталог Paimon регистрируется как Flink catalog — таблицы доступны через SQL без конфигурации путей.
Flink DataStream APILow-level API для custom логики: FlinkSourceBuilder и FlinkSinkBuilder. Позволяет настроить commit interval, parallelism, watermark strategy. Для advanced use cases: CDC pipeline с custom transform, multi-table ingestion.
Flink CDC ConnectorsPaimon + Flink CDC: прямой ingestion из MySQL/PostgreSQL/MongoDB без промежуточного Kafka. Flink CDC connector читает binlog → Flink job → Paimon table. Одна Flink job может синхронизировать сотни таблиц.
Flink-native features

Streaming Read Changelog как CDC-stream

Changelog streaming read: Flink читает changelog из Paimon-таблицы как unbounded stream. Каждый snapshot diff → CDC-события. Changelog producer mode определяет полноту (input/lookup/full-compaction — см. Урок 03).

Managed Compaction Dedicated compaction job

Managed compaction: Flink job может управлять компакцией Paimon-таблицы как отдельный процесс. Dedicated compaction job с configurable parallelism и trigger strategy.

Lookup Join Dimension table caching

Lookup join: Flink streaming job выполняет lookup join с Paimon-таблицей как dimension table. Paimon кэширует бакет в memory для быстрого point lookup. Primary key таблицы — идеальный кандидат.
NOTE

Paimon поддерживает Flink 1.18, 1.19, 1.20 и 2.0. Connector JAR: paimon-flink-{version}-{paimon-version}.jar. Для Flink 2.0 (релиз 2025): paimon-flink-2.0-1.3.jar.

Spark Connector

Spark — второй по важности engine после Flink. Paimon Spark connector обеспечивает batch и streaming read/write.

Spark + Paimon: возможности и ограничения
Что поддерживаетсяSpark 3.3 — 4.0. Batch read/write, streaming read (Structured Streaming), DDL (CREATE/ALTER/DROP), DML (INSERT, MERGE INTO, UPDATE, DELETE), partition management, time travel, tag management, call procedures (compact, expire, create_tag).
Ограничения vs FlinkSpark не поддерживает: changelog streaming read (только snapshot read), lookup join с Paimon dimension table (Flink-specific), managed compaction as Spark job. Changelog producer — Flink-only feature. Spark читает snapshot'ы, не changelog.
# PySpark + Paimon
spark = SparkSession.builder \
 .config("spark.sql.catalog.paimon", "org.apache.paimon.spark.SparkCatalog") \
 .config("spark.sql.catalog.paimon.warehouse", "s3://bucket/warehouse") \
 .getOrCreate()

# Batch read
df = spark.sql("SELECT * FROM paimon.db.orders WHERE dt = '2025-03-27'")

# Time travel
df_hist = spark.sql("""
 SELECT * FROM paimon.db.orders 
 VERSION AS OF 720
""")

OLAP-движки: StarRocks, Trino, Presto, Doris

Paimon интегрируется с популярными OLAP-движками для аналитических запросов поверх lake-данных.

OLAP-движки: уровень интеграции с Paimon
StarRocksStarRocks 3.1+: нативный Paimon External Catalog. Читает Paimon-таблицы через catalog registration. Поддерживает partition pruning, data skipping, predicate pushdown. Используется для interactive analytics на Paimon-данных.
Trino (PrestoSQL)Trino 403+: Paimon connector (community-maintained). Поддерживает read, partition pruning, time travel. Или: Iceberg connector через Iceberg compatibility layer (см. ниже) — более зрелый, production-tested.
Apache DorisDoris 2.0+: Paimon External Table. Поддерживает чтение через JNI-bridge или Paimon reader. Partition pruning, predicate pushdown. Для lakehouse federation — один Doris кластер читает Paimon, Iceberg, Hudi.
PrestoPresto (Meta fork): community Paimon connector. Менее зрелый, чем Trino. Альтернатива: Iceberg compatibility layer — Presto имеет production-grade Iceberg connector.
TIP

Для OLAP-движков, где Paimon connector ещё не зрелый, используйте Iceberg compatibility layer — Paimon автоматически генерирует Iceberg metadata, и движок читает через свой Iceberg connector (обычно production-grade).

Iceberg Compatibility Layer

Одна из уникальных возможностей Paimon — автоматическая генерация Iceberg metadata. Paimon-таблица продолжает работать как Paimon (LSM-дерево, merge engine, changelog), но одновременно экспортирует snapshot’ы в формате Iceberg.

Iceberg Compatibility: одни данные — два формата metadata
Paimon TableОсновная таблица: Paimon metadata + Paimon SST-файлы (Parquet-backed). LSM-дерево, merge engine, changelog — все Paimon-features работают. Writer: Flink или Spark через Paimon connector.
metadata.iceberg.storage = 'hadoop-catalog'
Paimon MetadataPaimon snapshot, manifest, schema — стандартный Paimon путь. Используется Flink/Spark через Paimon connector для всех операций: write, streaming read, compaction, tag management.
Iceberg Metadata (auto-generated)При каждом Paimon commit — автоматически генерируются Iceberg manifest list + manifest files + table metadata JSON. Data файлы те же (Parquet) — metadata-only overhead. Iceberg readers видят таблицу как обычную Iceberg-таблицу.
Iceberg readers

Trino (Iceberg connector)

Trino читает через свой Iceberg connector — production-grade, optimized. Не нужен Paimon connector для Trino. Partition pruning, predicate pushdown, time travel — всё через Iceberg API.

DuckDB (Iceberg ext)

DuckDB с Iceberg extension: читает Paimon-данные как Iceberg-таблицу. Подходит для ad-hoc analytics на ноутбуке — без настройки Paimon.

Athena / BigQuery / Snowflake

Любой Iceberg-compatible движок: Athena, BigQuery, Snowflake (через Iceberg external table). Paimon-таблица доступна из любого движка с Iceberg support — без специфического Paimon connector.
-- Включить Iceberg compatibility layer
ALTER TABLE orders SET (
 'metadata.iceberg.storage' = 'hadoop-catalog',
 'metadata.iceberg.uri' = '' -- опционально: REST catalog URI
);
-- Каждый Paimon commit теперь генерирует Iceberg metadata
-- Trino: SELECT * FROM iceberg.db.orders -- та же таблица!
WARNING

Iceberg compatibility — read-only для Iceberg-стороны. Писать в таблицу можно только через Paimon writer (Flink/Spark + Paimon connector). Iceberg readers видят snapshot’ы, но не могут создавать новые commit’ы. Это не full bi-directional interop — это metadata export.

PyPaimon: Pure Python SDK

Начиная с Paimon 1.3 (ноябрь 2025), pypaimon переписан на чистый Python — без JVM-зависимости. Старый SDK (pre-1.3) использовал Py4J bridge к Java, что требовало JVM и было медленным.

PyPaimon: архитектура чистого Python SDK
PyPaimon (pre-1.3)Старая архитектура: Python → Py4J → JVM → Paimon Java. Требовала установленную JVM (Java 8+). Медленный startup (~10 секунд). Сериализация Python ↔ Java через Py4J — overhead на каждом вызове.
1.3 rewrite
PyPaimon (1.3+)Новая архитектура: чистый Python. Парсит Paimon metadata (snapshot, manifest, schema) нативно. Читает SST-файлы через PyArrow (Parquet reader). Пишет через PyArrow + Paimon commit protocol. Нет JVM — pip install pypaimon и всё работает.
API

Read: scan → PyArrow Table Partition pruning Predicate pushdown

Read API: CatalogFactory → Catalog → Table → ReadBuilder → scan → splits → read. Возвращает PyArrow Table или Pandas DataFrame. Поддержка partition pruning, predicate pushdown, projection.

Write: arrow_batch → commit Insert / Upsert / Delete Транзакционные commit’ы

Write API: Table → WriteBuilder → TableWrite → write(arrow_batch) → commit. Поддержка insert, upsert (с merge engine), delete. Транзакционные commit'ы — атомарные, как Flink/Spark.
from pypaimon import CatalogFactory

# Создать catalog (filesystem)
catalog = CatalogFactory.create({
 'warehouse': 's3://bucket/warehouse'
})

# Получить таблицу
table = catalog.get_table('db.orders')

# Прочитать данные
read_builder = table.new_read_builder()
scan = read_builder.new_scan()
splits = scan.plan().splits()
reader = read_builder.new_read()

for split in splits:
 arrow_table = reader.read(split)
 print(arrow_table.to_pandas())

# Записать данные
import pyarrow as pa
write_builder = table.new_write_builder()
writer = write_builder.new_write()
committer = write_builder.new_commit()

batch = pa.RecordBatch.from_pydict({
 'order_id': [1, 2, 3],
 'amount': [99.5, 150.0, 75.0],
 'dt': ['2025-03-27', '2025-03-27', '2025-03-27']
})
writer.write(batch)
committer.commit(writer.prepare_commit())
NOTE

PyPaimon 1.3 поддерживает filesystem catalog (S3, HDFS, local). REST catalog support находится в разработке. Для Hive Metastore catalog — используйте Flink/Spark. Сравнение с аналогами: deltalake (Delta Lake Python, Rust-based) и pyiceberg (Iceberg Python, чистый Python) — все три поддерживают read/write без JVM.

REST Catalog

Paimon разрабатывает REST catalog — HTTP API для управления metadata, аналогичный Iceberg REST Catalog. По состоянию на 1.3:

REST Catalog: текущий статус и roadmap
Filesystem Catalog (production)Основной production-ready каталог. Metadata хранится в файловой системе (S3/HDFS/local) рядом с данными. Нет dedicated catalog server. Multi-client доступ через file locking (атомарные rename на S3 через DynamoDB/consistent listing).
REST Catalog (in development)HTTP API: list_databases, list_tables, get_table, create_table, alter_table. Server-side concurrency control (CAS). Совместимость с Iceberg REST Catalog spec — в планах. Статус: experimental в 1.3, active development.

Сравнение с Hudi, Delta Lake и Iceberg

4 lakehouse-формата: сводная матрица
Storage EngineФундаментальное архитектурное различие: как формат организует данные на storage.
Primary Use CaseДля чего формат оптимизирован в первую очередь. Delta — Spark-экосистема. Iceberg — multi-engine. Hudi — CDC/incremental. Paimon — streaming.
Update MechanismКак обрабатываются upsert/delete. Delta: CoW (full rewrite) или DV. Iceberg: CoW, MoR (position deletes), DV (V3). Hudi: CoW или MOR (log append). Paimon: LSM merge (in-place в sorted runs).
Streaming SupportStreaming read/write — ключевое отличие Paimon. Delta: Spark Structured Streaming (batch-oriented). Iceberg: incremental scan (polling). Hudi: incremental query (timeline). Paimon: native changelog streaming (CDC).
Матрица engine support: кто читает/пишет какой формат
SparkВсе четыре формата поддерживают Spark. Delta: нативный (Databricks). Iceberg: нативный (полная поддержка). Hudi: нативный (hudi-spark-bundle). Paimon: connector JAR (полная поддержка batch, ограниченный streaming).
FlinkPaimon: нативный (primary engine). Hudi: нативный (streaming write/read). Iceberg: connector (хорошая поддержка). Delta: ограниченный (community connector).
Trino / PrestoIceberg: production-grade connector в Trino/Presto. Delta: connector в Trino (хороший). Hudi: connector (ограниченный). Paimon: community connector или через Iceberg compat layer.
Python SDK (без JVM)Delta: deltalake (Rust-based, read+write, mature). Iceberg: pyiceberg (pure Python, read+write, production). Hudi: hudi (Rust-based, read-only). Paimon: pypaimon (pure Python, read+write, 1.3+).

Когда выбирать Paimon?

Decision tree: когда Paimon — лучший выбор

Какой primary workload?

Ключевой вопрос: какой ваш primary workload? Выбор формата определяется основным use case, а не теоретическими преимуществами.

Streaming-first (Flink) CDC, event processing → Paimon

Streaming-first: CDC из OLTP, event processing, real-time aggregation. Flink — primary engine. Нужен changelog для streaming joins/aggregations. → Paimon. LSM-дерево оптимизировано для streaming write, changelog producer — уникальная feature.

Batch analytics (Spark) BI, ML features → Delta Lake / Iceberg

Batch analytics: Spark/SQL warehouse, BI dashboards, ML feature engineering. Databricks ecosystem. → Delta Lake или Iceberg. Оба оптимизированы для batch read (columnar, statistics, partition pruning). Delta — если Databricks, Iceberg — если multi-engine.

Incremental ETL CDC + upsert heavy → Hudi

Incremental ETL: CDC + upsert + incremental query. Mixed streaming + batch. Record-level indexing критичен. → Hudi. Timeline + FileGroup + indexing subsystem оптимизированы для upsert-heavy workloads. NBCC для multi-writer.

Multi-engine (open standard) Spark + Trino + DuckDB + Snowflake → Iceberg

Multi-engine (engine-agnostic): данные читаются из Spark, Trino, DuckDB, Athena, Snowflake. Максимальная совместимость важнее specialized features. → Iceberg. Самый широкий engine support, open spec, REST Catalog standard.

Подводим итоги

Apache Paimon занимает уникальную нишу в lakehouse-экосистеме: streaming-first формат с LSM-деревом в основе. Его сильные стороны:

  1. Flink integration — нативный streaming read/write, changelog, lookup join, managed compaction. Если Flink — ваш primary engine, Paimon — естественный выбор.

  2. Changelog producer — уникальная feature: генерация CDC-потока из lake-таблицы. Три режима (input, lookup, full-compaction) покрывают спектр от zero-overhead до guaranteed-complete.

  3. Merge engine’ы — deduplicate, partial-update, aggregate, first-row. Обработка upsert на уровне storage, не engine.

  4. Iceberg compatibility — metadata export позволяет читать Paimon-таблицы через любой Iceberg-compatible движок. Прагматичное решение проблемы engine support.

  5. PyPaimon — чистый Python SDK (1.3+) для read/write без JVM. Наравне с deltalake и pyiceberg.

Ограничения:

  • Engine support уже, чем у Iceberg/Delta — primary engine = Flink
  • REST Catalog — в разработке (Iceberg REST Catalog — production-grade)
  • Community меньше (21 committer), чем у Delta (Databricks) или Iceberg (Tabular/Snowflake + community)
  • Ecosystem integrations (Trino, Presto, DuckDB) менее зрелые — Iceberg compat layer компенсирует

В экосистеме lakehouse-форматов нет «лучшего» выбора — есть выбор, оптимальный для конкретного workload. Четыре формата (Delta Lake, Iceberg, Hudi, Paimon) конкурируют и одновременно конвергируют: Delta добавляет Iceberg compat (UniForm), Hudi — XTable, Paimon — Iceberg metadata export. Будущее — interoperability, а не winner-takes-all.

Paimon в Spark — connector и use-cases

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 4. Какое ключевое преимущество Paimon перед Delta Lake и Iceberg для Flink-centric streaming pipeline?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 6