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

  1. Change schema.location to a supported scheme: an https:// URL, an s3:// path (with the S3 config options), or a local file path.
  2. For GCS/Azure schemas, download or mirror the file to S3/HTTP or a local path reachable by the RisingWave node.
  3. 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

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


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