risingwavelabs/risingwave · error

not implemented

Error message

not implemented

What it means

The `IcebergSource` implementation's `new` constructor is intentionally left `unimplemented!()`. Iceberg data is not read through this streaming-source reader path (it goes through the batch/file-scan planner instead), so calling this constructor always panics. It exists only to satisfy the source reader trait interface.

Source

Thrown at src/connector/src/source/iceberg/mod.rs:668

    DataChunk::from_parts(columns.into(), visibility)
}

#[derive(Debug)]
pub struct IcebergFileReader {}

#[async_trait]
impl SplitReader for IcebergFileReader {
    type Properties = IcebergProperties;
    type Split = IcebergSplit;

    async fn new(
        _props: IcebergProperties,
        _splits: Vec<IcebergSplit>,
        _parser_config: ParserConfig,
        _source_ctx: SourceContextRef,
        _columns: Option<Vec<Column>>,
    ) -> ConnectorResult<Self> {
        unimplemented!()
    }

    fn into_stream(self) -> BoxSourceChunkStream {
        unimplemented!()
    }
}

#[cfg(test)]
mod tests {
    use std::collections::HashMap;
    use std::sync::Arc;

    use iceberg::scan::FileScanTask;
    use iceberg::spec::{
        FormatVersion, MAIN_BRANCH, NestedField, Operation, PrimitiveType, Schema, Snapshot,
        SortOrder, Struct, Summary, TableMetadataBuilder, Type, UnboundPartitionSpec,
    };

View on GitHub (pinned to 6469eb736d)

Solutions

  1. Do not use iceberg as a streaming source; create an Iceberg table or batch query instead of a source/MV.
  2. Use the iceberg scan/planner path (list_scan_tasks -> splits -> batch executors) rather than the source reader.
  3. If continuous ingestion is needed, use the appropriate external streaming source and periodically query Iceberg.
  4. Update the job to use batch query semantics (e.g. MV on iceberg is not supported via this path).
Defensive patterns

Strategy: validation

Validate before calling

if connector == "iceberg" && job_type == Source {
    return Err("iceberg is only supported as a table/batch scan, not a streaming source");
}

Prevention

When it happens

Trigger: Any code path that constructs a streaming source reader via `IcebergSource::new` with the given properties/splits/parser config — e.g. registering Iceberg as a regular streaming connector source instead of using the Iceberg table scan path.

Common situations: Attempting `CREATE SOURCE` with the iceberg connector for continuous streaming ingestion; misconfiguring a MV/source to consume iceberg as a push-based source; code regression calling the wrong reader factory.

Related errors


AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11). Data as JSON: /api/errors/ac383f957e98bb72. Report an issue: GitHub.