risingwavelabs/risingwave · error · SinkError::DynamoDb

vector is not supported yet

Error message

vector is not supported yet

What it means

The DynamoDB sink's map_data has no implementation for RisingWave VECTOR-typed columns, so it fails the row with this explicit error. Vector columns (embedding data) have no DynamoDB AttributeValue representation in this connector.

Solutions

  1. Exclude the VECTOR column from the sinked relation (sink only non-vector columns).
  2. Cast the vector to JSONB or VARCHAR in the materialized view if a text representation is acceptable.
  3. Store vectors in a purpose-built store (e.g. a vector sink/index) instead of DynamoDB.
  4. Track/await Vector support in the DynamoDB sink.

Example fix

// before
CREATE MATERIALIZED VIEW mv AS SELECT id, embedding FROM docs;
CREATE SINK s FROM mv WITH (connector='dynamodb', table='docs');
// after
CREATE MATERIALIZED VIEW mv AS SELECT id, embedding::JSONB AS embedding FROM docs;
Defensive patterns

Strategy: validation

Validate before calling

-- ensure no VECTOR columns before sinking to DynamoDB
SELECT count(*) FROM rw_catalog.rw_columns WHERE relation_id = <mv_id> AND data_type LIKE 'VECTOR%';

Prevention

When it happens

Trigger: A row with a VECTOR-typed column is formatted for the DynamoDB sink (format_row -> map_data reaches DataType::Vector arm).

Common situations: Embedding pipelines storing vectors in RisingWave whose tables are also sunk to DynamoDB; adding a vector column for AI workloads to an existing DynamoDB-sunk table.

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


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

Appendix: source

Thrown at src/connector/src/sink/dynamodb.rs:392

            AttributeValue::L(list_attr)
        }
        DataType::Struct(st) => {
            let mut map = HashMap::with_capacity(st.len());
            for (sub_datum_ref, (name, data_type)) in scalar_ref
                .into_struct()
                .iter_fields_ref()
                .zip_eq_debug(st.iter())
            {
                let attr = map_data(sub_datum_ref, data_type)?;
                map.insert(name.to_owned(), attr);
            }
            AttributeValue::M(map)
        }
        DataType::Map(_m) => {
            return Err(SinkError::DynamoDb(anyhow!("map is not supported yet")));
        }
        DataType::Vector(_) => {
            return Err(SinkError::DynamoDb(anyhow!("vector is not supported yet")));
        }
    };
    Ok(attr)
}

fn rw_pk_names(schema: &Schema, pk_indices: &[usize]) -> Result<Vec<String>> {
    pk_indices
        .iter()
        .map(|pk_idx| {
            schema
                .fields()
                .get(*pk_idx)
                .map(|field| field.name.clone())
                .ok_or_else(|| {
                    SinkError::DynamoDb(anyhow!(
                        "RisingWave primary key column index {} is out of range",
                        pk_idx
                    ))

View on GitHub (pinned to 6469eb736d)