risingwavelabs/risingwave · error · SinkError::Config

Cannot find ` `, please set it or use JSON or set ` ` to

Error message

Cannot find `{MEMBER_NAME}`, please set it or use JSON or set `{REDIS_VALUE_TYPE}` to `{REDIS_VALUE_TYPE_STRING}`

What it means

A Redis geospatial sink (template encoding, redis_value_type='geospatial') requires the `member` option naming the primary-key varchar column used as the GEOSET member. RedisSink::validate throws this SinkError::Config when `member` is absent, telling the user to set it, use JSON encoding, or switch redis_value_type to 'string'.

Solutions

  1. Add `member = '<pk_column_name>'` to the sink options, naming a varchar primary-key column
  2. Or switch redis_value_type to 'string' if GEO semantics are not needed
  3. Or use a JSON encoding which does not require this option

Example fix

-- before
... encode template (redis_value_type = 'geospatial', key_format = 'geo::{pk}', longitude = 'lon', latitude = 'lat')
-- after
... encode template (redis_value_type = 'geospatial', key_format = 'geo::{pk}', longitude = 'lon', latitude = 'lat', member = 'm')
Defensive patterns

Strategy: validation

Validate before calling

-- for redis_value_type='geospatial', verify member option present:
-- options.contains_key("member") && schema.contains(options["member"])

Try / catch

match result.err() { Some(e) if e.contains("member") => add_option("member", pk_varchar_column), _ => propagate(result) }

Prevention

When it happens

Trigger: CREATE SINK with encode template, redis_value_type = 'geospatial', with key_format/longitude/latitude set but no `member = '<column>'` option (src/connector/src/sink/redis.rs:384-388).

Common situations: GEO sink configs missing the member option entirely; confusing `member` with a column alias; typos such as `member_name` in the SQL option list.

Understand the failure class

Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.

Related errors


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

Appendix: source

Thrown at src/connector/src/sink/redis.rs:385

                    let key_format = self.format_desc.options.get(KEY_FORMAT).ok_or_else(|| {
                        SinkError::Config(anyhow!(
                            "Cannot find '{KEY_FORMAT}', please set it or use JSON"
                        ))
                    })?;
                    TemplateStringEncoder::check_string_format(key_format, &pk_map)?;

                    let lon_name = self.format_desc.options.get(LON_NAME).ok_or_else(|| {
                        SinkError::Config(anyhow!(
                            "Cannot find `{LON_NAME}`, please set it or use JSON or set `{REDIS_VALUE_TYPE}` to `{REDIS_VALUE_TYPE_STRING}`"
                        ))
                    })?;
                    let lat_name = self.format_desc.options.get(LAT_NAME).ok_or_else(|| {
                        SinkError::Config(anyhow!(
                            "Cannot find `{LAT_NAME}`, please set it or use JSON or set `{REDIS_VALUE_TYPE}` to `{REDIS_VALUE_TYPE_STRING}`"
                        ))
                    })?;
                    let member_name = self.format_desc.options.get(MEMBER_NAME).ok_or_else(|| {
                        SinkError::Config(anyhow!(
                            "Cannot find `{MEMBER_NAME}`, please set it or use JSON or set `{REDIS_VALUE_TYPE}` to `{REDIS_VALUE_TYPE_STRING}`"
                        ))
                    })?;
                    if let Some(lon_type) = all_map.get(lon_name)
                        && (lon_type == &DataType::Float64
                            || lon_type == &DataType::Float32
                            || lon_type == &DataType::Varchar)
                    {
                        // do nothing
                    } else {
                        return Err(SinkError::Config(anyhow!(
                            "`{LON_NAME}` must be set to `float64` or `float32` or `varchar`"
                        )));
                    }
                    if let Some(lat_type) = all_map.get(lat_name)
                        && (lat_type == &DataType::Float64
                            || lat_type == &DataType::Float32
                            || lat_type == &DataType::Varchar)

View on GitHub (pinned to 6469eb736d)