{"record":{"id":"c1f43e0d284d96ba","repo":"risingwavelabs/risingwave","slug":"path-should-start-with-s3-s3a-s3-gs","errorCode":null,"errorMessage":"path should start with 's3://','s3a://'(s3) ,gs://(gcs) or file://(local)","messagePattern":"path should start with 's3://','s3a://'\\(s3\\) ,gs://\\(gcs\\) or file://\\(local\\)","errorType":"validation","errorClass":"SinkError::DeltaLake","httpStatus":null,"severity":"error","filePath":"src/connector/src/sink/deltalake.rs","lineNumber":137,"sourceCode":"                    })?,\n                );\n                deltalake::gcp::register_handlers(None);\n                let url = Url::parse(&gcs_path).map_err(|e| SinkError::DeltaLake(anyhow!(e)))?;\n                deltalake::open_table_with_storage_options(url, storage_options).await?\n            }\n        };\n        Ok(table)\n    }\n\n    fn get_table_url(path: &str) -> Result<DeltaTableUrl> {\n        if path.starts_with(\"s3://\") || path.starts_with(\"s3a://\") {\n            Ok(DeltaTableUrl::S3(path.to_owned()))\n        } else if path.starts_with(\"gs://\") {\n            Ok(DeltaTableUrl::Gcs(path.to_owned()))\n        } else if let Some(path) = path.strip_prefix(\"file://\") {\n            Ok(DeltaTableUrl::Local(path.to_owned()))\n        } else {\n            Err(SinkError::DeltaLake(anyhow!(\n                \"path should start with 's3://','s3a://'(s3) ,gs://(gcs) or file://(local)\"\n            )))\n        }\n    }\n\n    async fn build_delta_lake_config_for_aws(&self) -> Result<HashMap<String, String>> {\n        let mut storage_options = HashMap::new();\n        storage_options.insert(AWS_ALLOW_HTTP.to_owned(), \"true\".to_owned());\n        storage_options.insert(AWS_S3_ALLOW_UNSAFE_RENAME.to_owned(), \"true\".to_owned());\n        let sdk_config = self.aws_auth_props.build_config().await?;\n        let credentials = sdk_config\n            .credentials_provider()\n            .ok_or_else(|| {\n                SinkError::Config(anyhow!(\n                    \"s3.access.key and s3.secret.key is required with aws s3\"\n                ))\n            })?\n            .as_ref()","sourceCodeStart":119,"sourceCodeEnd":155,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/deltalake.rs#L119-L155","documentation":"get_table_url classifies the deltalake location by prefix into S3 (s3://, s3a://), GCS (gs://) or Local (file://). A location with none of these prefixes cannot be routed to a storage handler, so it raises SinkError::DeltaLake listing the accepted schemes.","triggerScenarios":"create_deltalake_client calls get_table_url with a location lacking any recognized prefix — e.g. '/local/path' without file://, 'https://...', 'abfs://...', or an empty string.","commonSituations":"Passing a bare local path instead of file:///path; using an Azure Blob or other unsupported scheme; empty or mistyped location option.","solutions":["Prefix local paths with file:// (e.g. file:///absolute/path).","Use s3:// or s3a:// for AWS S3 locations and gs:// for GCS locations.","Check the configured location value for typos or a missing scheme; Azure/other backends are not supported here."],"exampleFix":"// before\nLOCATION = '/data/delta_table'\n// after\nLOCATION = 'file:///data/delta_table'","handlingStrategy":"validation","validationCode":"const SCHEMES: [&str; 4] = [\"s3://\", \"s3a://\", \"gs://\", \"file://\"];\nif !SCHEMES.iter().any(|s| location.starts_with(s)) {\n    return Err(format!(\"deltalake location must start with one of {:?}\", SCHEMES));\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always specify an explicit supported scheme (s3://, s3a://, gs://, file://) in the location.","Remember bare local paths are rejected — prefix with file://.","Validate location scheme at DDL time before deploying the sink."],"tags":["rust","deltalake","config","url"],"backgroundTag":"invalid-url","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"}