databendlabs/databend · error

{}

Error message

{}

What it means

When binding a URI location whose scheme resolves to Azure Blob storage, the connection options must include 'endpoint_url'. parse_azure_params returns this InvalidInput error when it is absent, because the azblob storage params cannot be constructed without an explicit account endpoint.

Solutions

  1. Add `ENDPOINT_URL = 'https://<account>.blob.core.windows.net'` to the CONNECTION_OPTIONS of the stage/location.
  2. Verify the URL scheme really is azblob and that you are not accidentally routing an S3 location through the Azure parser.
  3. Check the connection options for typos — the key must be exactly `endpoint_url` (case-insensitive option name).
  4. Consult current Databend docs in case newer versions support account-name/key options instead of a raw endpoint URL.

Example fix

// before
CREATE STAGE s LOCATION = 'azblob://container/path/';
// after
CREATE STAGE s LOCATION = 'azblob://container/path/' CONNECTION_OPTIONS = (ENDPOINT_URL = 'https://myaccount.blob.core.windows.net');
Defensive patterns

Strategy: validation

Validate before calling

// pre-validate the stage DDL
if location.starts_with("azblob://") && !options.contains_key("endpoint_url") {
    return Err("azblob locations require CONNECTION_OPTIONS = (ENDPOINT_URL = 'https://<account>.blob.core.windows.net')");
}

Try / catch

// catch in client code
match exec(ddl).await { Err(e) if e.to_string().contains("endpoint_url is required for storage azblob") => hint_user_azure_endpoint(e), Err(e) => Err(e) }

Prevention

When it happens

Trigger: Running a statement like `CREATE STAGE ... LOCATION = 'azblob://bucket/path/'` (or ATTACH/ COPY with an azblob URI) without `CONNECTION_OPTIONS = (ENDPOINT_URL = '...')`.

Common situations: Users accustomed to AWS S3 (which derives the endpoint from the bucket) omitting the Azure account URL; copying an S3 stage definition for Azure; missing the account-specific `https://<account>.blob.core.windows.net` endpoint.

Understand the failure class

Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.

Related errors


AI-assisted analysis of databendlabs/databend@288d84d76e (2026-09-11). Data as JSON: /api/errors/e4fd492822c69268. Report an issue: GitHub.

Appendix: source

Thrown at src/query/service/src/table_functions/async_crash_me.rs:156

        ctx: Arc<dyn TableContext>,
        output: Arc<OutputPort>,
        message: Option<String>,
    ) -> Result<ProcessorPtr> {
        AsyncSourcer::create(ctx.get_scan_progress(), output, AsyncCrashMeSource {
            message,
        })
    }
}

#[async_trait::async_trait]
impl AsyncSource for AsyncCrashMeSource {
    const NAME: &'static str = "async_crash_me";

    #[async_backtrace::framed]
    async fn generate(&mut self) -> Result<Option<DataBlock>> {
        match &self.message {
            None => panic!("async crash me panic"),
            Some(message) => panic!("{}", message),
        }
    }
}

impl TableFunction for AsyncCrashMeTable {
    fn function_name(&self) -> &str {
        self.name()
    }

    fn as_table<'a>(self: Arc<Self>) -> Arc<dyn Table + 'a>
    where Self: 'a {
        self
    }
}

View on GitHub (pinned to 288d84d76e)