Export Pixeltable Tables to Apache Iceberg for Lakehouse Analytics
All Stories
2026-06-133 min read
IcebergLakehouseData ExportAnalyticsPyArrowOLAPPixeltableMultimodal AI

Export Pixeltable Tables to Apache Iceberg for Lakehouse Analytics

Process multimodal AI pipelines in Pixeltable, then stream curated results to Apache Iceberg for Spark, DuckDB, Snowflake, and BI tools—with automatic PyArrow batching and schema mapping.

Pixeltable Team

Pixeltable Team

Pixeltable Team

Pixeltable 0.6.5 adds export_iceberg(): stream a table or query result into an Apache Iceberg table. Process multimodal data in declarative pipelines, then hand curated tabular columns to Spark, DuckDB, Snowflake, or any Iceberg-compatible analytics stack.

Why Iceberg export?#

Pixeltable is your AI data infrastructure layer—storage, computed columns, embeddings, versioning, and lineage for multimodal workflows. Analytics teams often need the same curated outputs in a lakehouse format for SQL dashboards, feature stores, or warehouse joins.

Pixeltable already supports several export paths:

  • export_sql() — push rows to PostgreSQL, SQLite, Snowflake, and other OLTP databases
  • export_lancedb() — vector-focused analytics with LanceDB
  • export_parquet() / export_csv() — file-based handoff

Iceberg fills the gap when you need open table format semantics—ACID commits, schema evolution, time travel, and catalog-backed tables shared across engines. Export after your Pixeltable pipeline produces the columns downstream teams actually want: summaries, labels, scores, structured JSON fields—not raw video blobs.

When to use which export#

ExportBest for
IcebergLakehouse analytics, Spark/DuckDB/Trino, catalog-managed tables
SQLOperational serving DB, app-facing replicas
LanceDBVector similarity at analytics scale
Parquet / CSVAd hoc files, one-off shares

Getting started#

bash

export_iceberg() streams data via PyArrow RecordBatches. Control batch size with batch_size_bytes (default 128 MB) for memory-efficient exports of large tables.

Basic export#

python

The table_name argument is a fully qualified Iceberg identifier (e.g. 'namespace.table'). If the namespace does not exist, it is created. Use if_exists='append' when the destination table already exists and schemas are compatible.

Export a query, not just a table#

Pass any Pixeltable Query—filters, projections, and joins applied before export:

python

Schema overrides#

By default, Pixeltable maps column types to Arrow types automatically. Pass schema_overrides when you need explicit PyArrow types for specific columns:

python

Multimodal pipeline pattern#

A typical flow:

  1. Ingest documents, images, or video into Pixeltable tables
  2. Run computed columns—transcription, summarization, classification, embedding
  3. Export structured columns (text, labels, scores, JSON metadata) to Iceberg
  4. Query in DuckDB, Spark, or Snowflake for BI and downstream ML features

Media files stay in Pixeltable's storage layer (or your configured S3/R2 destination); Iceberg carries the derived tabular artifacts your warehouse expects. That split matches how teams already use cloud blob storage for raw assets and warehouses for analytics tables.

Documentation note#

A dedicated Iceberg cookbook is in progress. Until then, refer to the I/O SDK reference for parameter details and the changelog for release notes.

Learn more#

Ready to Build?

Declarative. Multimodal. Incremental.

Focus on innovation, not infrastructure.