Ecosystem + Interoperability
В предыдущих уроках мы разобрали внутренности Paimon: LSM-деревья, merge engine’ы, changelog producer, bucket/partition design и data management. Теперь — как Paimon интегрируется с экосистемой обработки данных и как сравнивается с другими lakehouse-форматами.
Flink: Primary Engine
Apache Paimon изначально создавался как Flink Table Store (2022), и Flink остаётся primary engine. Это значит: максимальная интеграция, все features доступны first-class, streaming read/write — нативные операции.
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 таблицы — идеальный кандидат.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.
# 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 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.
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 -- та же таблица!
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 и было медленным.
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())
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:
Сравнение с Hudi, Delta Lake и Iceberg
Когда выбирать 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-деревом в основе. Его сильные стороны:
-
Flink integration — нативный streaming read/write, changelog, lookup join, managed compaction. Если Flink — ваш primary engine, Paimon — естественный выбор.
-
Changelog producer — уникальная feature: генерация CDC-потока из lake-таблицы. Три режима (input, lookup, full-compaction) покрывают спектр от zero-overhead до guaranteed-complete.
-
Merge engine’ы — deduplicate, partial-update, aggregate, first-row. Обработка upsert на уровне storage, не engine.
-
Iceberg compatibility — metadata export позволяет читать Paimon-таблицы через любой Iceberg-compatible движок. Прагматичное решение проблемы engine support.
-
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