risingwavelabs/risingwave · error
position-delete file
Error message
position-delete file {} has unsupported format {:?}; expected Puffin or Parquet What it means
When reading Iceberg position-delete files to build delete vectors, only Puffin (deletion vector) and Parquet formats are supported. If the delete file's `DataFileFormat` is anything else (e.g. Avat/Orc-style formats), the reader bails because it cannot interpret the file's delete records.
Solutions
- Rewrite the source table's delete files to Puffin/Parquet (e.g. run a compaction/rewrite with a Spark/Flink job) so RisingWave can read them.
- Re-create or rewrite the table avoiding non-Puffin/Parquet position deletes (use copy-on-write or DVs).
- Check which engine/format produced the delete files and whether upgrading RisingWave adds support for that format.
- File/verify support for the specific `DataFileFormat` you hit, since the match already covers Puffin and Parquet.
Example fix
// before: engine wrote ORC position-deletes, unreadable here
// after: compact/rewrite deletes to Puffin or Parquet, e.g. Spark:
// CALL catalog.system.rewrite_deletes(table => 'db.tbl', options => map('format','parquet')) Defensive patterns
Strategy: validation
Validate before calling
fn check_delete_file_format(fmt: &str) -> Result<(), String> {
match fmt {
"puffin" | "parquet" => Ok(()),
other => Err(format!("unsupported position-delete format {other}; rewrite deletes as puffin/parquet")),
}
} Prevention
- Inspect table metadata for delete file formats before pointing a RisingWave iceberg sink at an external table.
- Configure upstream writers to use Puffin DVs or Parquet position deletes.
- Run periodic compaction on the source table to rewrite legacy delete formats.
When it happens
Trigger: Encountering a position-delete entry in the Iceberg table metadata whose format is neither `puffin` nor `parquet` — typically from tables written by another engine with different delete-file formats — while the sink collects input DVs or flushes.
Common situations: Consuming an Iceberg table produced by third-party writers (Spark/Flink with ORC deletes); tables where a writer stored position deletes in an unsupported format; stale/mismatched metadata after a writer upgrade.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- backfill iceberg pk-index sink delete files failed…
- `compaction.write_parquet_compression` must be one of
- `compaction.write_parquet_max_row_group_bytes` must be…
- `compaction.write_parquet_max_row_group_rows` must be…
- `compaction.write_parquet_max_row_group_rows` must be…
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/604e117e688995c0.
Report an issue: GitHub.
Appendix: source
Thrown at src/connector/src/sink/iceberg/position_delete.rs:142
})?;
delete_vector.insert(pos as u64);
}
}
Ok(delete_vector)
}
/// Reads the deleted positions of a single position-delete `DataFile` regardless of on-disk format,
pub async fn read_position_deletes_from_file(
file_io: &FileIO,
delete_file: &DataFile,
) -> Result<DeleteVector> {
match delete_file.file_format() {
DataFileFormat::Puffin => read_dv_positions_from_data_file(file_io, delete_file).await,
DataFileFormat::Parquet => {
read_parquet_position_deletes_from_file(file_io, delete_file).await
}
other => bail!(
"position-delete file {} has unsupported format {:?}; expected Puffin or Parquet",
delete_file.file_path(),
other
),
}
}
/// Writes `delete_vector` as a single Puffin deletion-vector blob referencing `data_file_path`,
/// and returns its [`DataFile`] metadata (content `PositionDeletes`, format `Puffin`) with
/// `referenced_data_file` set.
pub async fn write_dv_puffin_file(
table: &Table,
location_generator: &DefaultLocationGenerator,
file_name_generator: &DefaultFileNameGenerator,
data_file_path: String,
delete_vector: &DeleteVector,
partition_key: Option<&PartitionKey>,
) -> Result<DataFile> {View on GitHub (pinned to 6469eb736d)