risingwavelabs/risingwave · error
path scheme `{scheme}` is not supported
Error message
path scheme `{scheme}` is not supported What it means
Error from bytes_from_url, a schema-fetch helper supporting only file and http/https (plus s3 with AWS config) URL schemes: the supplied schema-location URL used some other scheme, so the fetch was refused. It is a scheme allow-list guard — the scheme value in the message identifies what the user passed (e.g. ftp, gcs) and what to change.
Source
Thrown at src/connector/src/parser/utils.rs:116
/// * http/https, for common usage.
/// * s3 file location format: <s3://bucket_name/file_name>
pub(super) async fn bytes_from_url(
url: &Url,
config: Option<&AwsAuthProps>,
) -> ConnectorResult<Vec<u8>> {
match (url.scheme(), config) {
// TODO(Tao): support local file only when it's compiled in debug mode.
("file", _) => {
let path = url
.to_file_path()
.ok()
.with_context(|| format!("illegal path: {url}"))?;
Ok(std::fs::read(&path)
.with_context(|| format!("failed to read file from `{}`", path.display()))?)
}
("https" | "http", _) => Ok(download_from_http(url).await?.into()),
("s3", Some(config)) => load_file_descriptor_from_s3(url, config).await,
(scheme, _) => bail!("path scheme `{scheme}` is not supported"),
}
}
pub fn extract_timestamp_from_meta(meta: &SourceMeta) -> DatumRef<'_> {
match meta {
SourceMeta::Kafka(kafka_meta) => kafka_meta.extract_timestamp(),
SourceMeta::DebeziumCdc(cdc_meta) => cdc_meta.extract_timestamp(),
SourceMeta::Kinesis(kinesis_meta) => kinesis_meta.extract_timestamp(),
_ => None,
}
}
pub fn extract_cdc_meta_column<'a>(
cdc_meta: &'a DebeziumCdcMeta,
column_type: &additional_column::ColumnType,
column_name: &str,
) -> AccessResult<DatumRef<'a>> {
match column_type {View on GitHub (pinned to 6469eb736d)
Solutions
- Change schema.location to a supported scheme: an https:// URL, an s3:// path (with the S3 config options), or a local file path.
- For GCS/Azure schemas, download or mirror the file to S3/HTTP or a local path reachable by the RisingWave node.
- Fix scheme typos (s3a:// -> s3://, missing scheme -> file path).
Example fix
// before schema.location = 'gs://my-bucket/schema.json' // after schema.location = 'https://my-bucket.s3.amazonaws.com/schema.json' // or s3://my-bucket/schema.json
Defensive patterns
Strategy: validation
Validate before calling
fn validate_schema_location(loc: &str) -> Result<(), String> {
let ok = loc.starts_with("http://") || loc.starts_with("https://")
|| loc.starts_with("s3://") || loc.starts_with("file://")
|| std::path::Path::new(loc).is_file();
if ok { Ok(()) } else { Err(format!("unsupported scheme in schema.location: {loc}")) }
} Prevention
- Restrict schema.location to http(s), s3, or local file paths.
- Mirror schemas from GCS/Azure/HDFS to S3 or HTTP for RisingWave.
- Lint DDL for scheme typos (s3a://, gs://).
When it happens
Trigger: Setting schema.location (used by fetch_json_schema_and_map_to_columns and access builder 'new') to a URL whose scheme is not file/http/https/s3 — e.g. 'gs://bucket/schema.json' or 'hdfs://...'.
Common situations: GCS or Azure storage URLs pasted into schema.location; typos like 's3a://' or 'files://'; HDFS-hosted schemas in on-prem clusters.
Understand the failure class
Background: "Invalid URL" / "URL cannot be empty": fix the malformed or missing URL behind request-construction failures — this error's family across 50 libraries.
Related errors
- failed to parse meta address `{1}`: {0}
- credentials_url must be a valid URL (s3://, file://) or an a
- Invalid option: {message}
- path should start with 's3://','s3a://'(s3) ,gs://(gcs) or f
- Can't get fe host from url
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/6529d086b88d3501.
Report an issue: GitHub.