Skip to main content
What this does: Creates a continuously running sink that writes RisingWave data to an Iceberg table, with RisingWave managing compaction, small-file cleanup, and snapshot maintenance automatically. When to use this: You need durable, open-format storage for streaming data that is also queryable by Spark, Trino, DuckDB, or other analytical engines.

Setup

1. Ingest source data

2. Create a materialized view to transform data

3. Create the Iceberg sink

4. Query the Iceberg table from another engine (optional)

Key points

  • type = 'append-only' for event streams; type = 'upsert' for tables with primary keys (requires primary_key option)
  • RisingWave automatically handles Iceberg compaction, small-file optimization, and snapshot cleanup — no external scheduler needed
  • Data written to Iceberg is immediately readable by Spark, Trino, DuckDB, and other Iceberg-compatible engines
  • For upsert mode: CREATE SINK ... WITH (type = 'upsert', primary_key = 'id', ...)

Next steps