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.

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)

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.