{"record":{"id":"25483466e78b7b96","repo":"risingwavelabs/risingwave","slug":"cannot-find-lon-name-please-set-it-or-use-jso","errorCode":null,"errorMessage":"Cannot find `{LON_NAME}`, please set it or use JSON or set `{REDIS_VALUE_TYPE}` to `{REDIS_VALUE_TYPE_STRING}`","messagePattern":"Cannot find `(.+?)`, please set it or use JSON or set `(.+?)` to `(.+?)`","errorType":"validation","errorClass":"SinkError::Config","httpStatus":null,"severity":"error","filePath":"src/connector/src/sink/redis.rs","lineNumber":375,"sourceCode":"                    TemplateStringEncoder::check_string_format(key_format, &pk_map)?;\n                    let value_format =\n                        self.format_desc.options.get(VALUE_FORMAT).ok_or_else(|| {\n                            SinkError::Config(anyhow!(\n                                \"Cannot find `{VALUE_FORMAT}`, please set it or use JSON\"\n                            ))\n                        })?;\n                    TemplateStringEncoder::check_string_format(value_format, &all_map)?;\n                }\n                Some(REDIS_VALUE_TYPE_GEO) => {\n                    let key_format = self.format_desc.options.get(KEY_FORMAT).ok_or_else(|| {\n                        SinkError::Config(anyhow!(\n                            \"Cannot find '{KEY_FORMAT}', please set it or use JSON\"\n                        ))\n                    })?;\n                    TemplateStringEncoder::check_string_format(key_format, &pk_map)?;\n\n                    let lon_name = self.format_desc.options.get(LON_NAME).ok_or_else(|| {\n                        SinkError::Config(anyhow!(\n                            \"Cannot find `{LON_NAME}`, please set it or use JSON or set `{REDIS_VALUE_TYPE}` to `{REDIS_VALUE_TYPE_STRING}`\"\n                        ))\n                    })?;\n                    let lat_name = self.format_desc.options.get(LAT_NAME).ok_or_else(|| {\n                        SinkError::Config(anyhow!(\n                            \"Cannot find `{LAT_NAME}`, please set it or use JSON or set `{REDIS_VALUE_TYPE}` to `{REDIS_VALUE_TYPE_STRING}`\"\n                        ))\n                    })?;\n                    let member_name = self.format_desc.options.get(MEMBER_NAME).ok_or_else(|| {\n                        SinkError::Config(anyhow!(\n                            \"Cannot find `{MEMBER_NAME}`, please set it or use JSON or set `{REDIS_VALUE_TYPE}` to `{REDIS_VALUE_TYPE_STRING}`\"\n                        ))\n                    })?;\n                    if let Some(lon_type) = all_map.get(lon_name)\n                        && (lon_type == &DataType::Float64\n                            || lon_type == &DataType::Float32\n                            || lon_type == &DataType::Varchar)\n                    {","sourceCodeStart":357,"sourceCodeEnd":393,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/redis.rs#L357-L393","documentation":"A Redis geospatial sink (template encoding, redis_value_type='geospatial') needs to know which column holds the longitude. RedisSink::validate throws this SinkError::Config when the `longitude` option is absent, telling the user to set it, use JSON encoding instead, or switch redis_value_type to 'string'.","triggerScenarios":"CREATE SINK with encode template, redis_value_type = 'geospatial', key_format set, but no `longitude = '<column>'` option pointing at the longitude column (src/connector/src/sink/redis.rs:374-378).","commonSituations":"GEO sink configs missing the longitude option; specifying latitude but not longitude; using JSON-oriented examples that derive lon/lat automatically; option typos such as `lon`.","solutions":["Add `longitude = '<column_name>'` to the sink options, pointing at a float/varchar column","Or switch redis_value_type to 'string' if GEO semantics are not needed","Or use a JSON encoding which does not require this option"],"exampleFix":"-- before\n... encode template (redis_value_type = 'geospatial', key_format = 'geo::{pk}', latitude = 'lat', member = 'm')\n-- after\n... encode template (redis_value_type = 'geospatial', key_format = 'geo::{pk}', longitude = 'lon', latitude = 'lat', member = 'm')","handlingStrategy":"validation","validationCode":"-- for redis_value_type='geospatial', verify longitude option present and column exists:\n-- options.contains_key(\"longitude\") && schema.contains(options[\"longitude\"])","typeGuard":null,"tryCatchPattern":"match result.err() { Some(e) if e.contains(\"longitude\") => add_option(\"longitude\", numeric_column), _ => propagate(result) }","preventionTips":["Always set longitude/latitude/member as a group for geospatial sinks","Confirm option values match actual column names in the source schema","Switch to redis_value_type='string' if GEO features are not required"],"tags":["redis","sink","configuration","geospatial"],"backgroundTag":"missing-required-config-field","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}