{"record":{"id":"9f700e966cf2e36b","repo":"risingwavelabs/risingwave","slug":"lon-name-must-be-set-to-float64-or-float32","errorCode":null,"errorMessage":"`{LON_NAME}` must be set to `float64` or `float32` or `varchar`","messagePattern":"`(.+?)` must be set to `float64` or `float32` or `varchar`","errorType":"validation","errorClass":"SinkError::Config","httpStatus":null,"severity":"error","filePath":"src/connector/src/sink/redis.rs","lineNumber":396,"sourceCode":"                    })?;\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                    {\n                        // do nothing\n                    } else {\n                        return Err(SinkError::Config(anyhow!(\n                            \"`{LON_NAME}` must be set to `float64` or `float32` or `varchar`\"\n                        )));\n                    }\n                    if let Some(lat_type) = all_map.get(lat_name)\n                        && (lat_type == &DataType::Float64\n                            || lat_type == &DataType::Float32\n                            || lat_type == &DataType::Varchar)\n                    {\n                        // do nothing\n                    } else {\n                        return Err(SinkError::Config(anyhow!(\n                            \"`{LAT_NAME}` must be set to `float64` or `float32` or `varchar`\"\n                        )));\n                    }\n                    if let Some(member_type) = pk_map.get(member_name)\n                        && member_type == &DataType::Varchar\n                    {\n                        // do nothing","sourceCodeStart":378,"sourceCodeEnd":414,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/redis.rs#L378-L414","documentation":"For a Redis geospatial sink, the `longitude` option must point at a column whose type is float64, float32, or varchar. RedisSink::validate rejects the sink with this SinkError::Config when the referenced column is missing from the schema or has any other data type (e.g. int, decimal), since Redis GEOADD requires numeric coordinates.","triggerScenarios":"CREATE SINK with encode template, redis_value_type = 'geospatial', where the `longitude = '<col>'` option names a column that does not exist in the sink schema or is typed as something other than FLOAT64/FLOAT32/VARCHAR (src/connector/src/sink/redis.rs:389-399).","commonSituations":"Pointing `longitude` at an INTEGER or DECIMAL longitude column; referencing a column renamed after the sink config was written; a typo in the column name so the all_map lookup returns None.","solutions":["Change the source/table column type to DOUBLE (float64), REAL (float32), or VARCHAR","Or point the `longitude` option at an existing numeric/varchar column of an allowed type","Verify the option value exactly matches a column name in the sink schema"],"exampleFix":"-- before: longitude = 'lon_deg' where lon_deg is INTEGER\nALTER TABLE t ADD COLUMN lon DOUBLE;  -- or cast via an upstream mv\n-- after\n... encode template (redis_value_type = 'geospatial', longitude = 'lon', ...)","handlingStrategy":"type-guard","validationCode":"-- guard before CREATE SINK:\n-- SELECT data_type FROM schema_of(t) WHERE name = options['longitude']\n-- allowed: 'double precision', 'real', 'character varying'","typeGuard":null,"tryCatchPattern":"match result.err() { Some(e) if e.contains(\"longitude\") => cast_column_to_double(), _ => propagate(result) }","preventionTips":["Declare longitude columns as DOUBLE or REAL at table creation time","Confirm option values exactly match existing column names","Avoid storing coordinates as INT/DECIMAL in tables feeding Redis GEO sinks"],"tags":["redis","sink","type-mismatch","geospatial"],"backgroundTag":"invalid-config-value","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"}