risingwavelabs/risingwave · error

connector '{}' is not supported

Error message

connector '{}' is not supported

What it means

After the `connector` key is found, ConnectorProperties::extract dispatches through match_source_name_str! to the connector's PropType parser. If the lowercased connector name matches no known connector, this bail fires with the offending name.

Source

Thrown at src/connector/src/source/base.rs:679

    /// `deny_unknown_fields`: Since `WITH` options are persisted in meta, we do not deny unknown fields when restoring from
    /// existing data to avoid breaking backwards compatibility. We only deny unknown fields when creating new sources.
    pub fn extract(
        with_properties: WithOptionsSecResolved,
        deny_unknown_fields: bool,
    ) -> Result<Self> {
        let (options, secret_refs) = with_properties.into_parts();
        let mut options_with_secret =
            LocalSecretManager::global().fill_secrets(options, secret_refs)?;
        let connector = options_with_secret
            .remove(UPSTREAM_SOURCE_KEY)
            .ok_or_else(|| anyhow!("Must specify 'connector' in WITH clause"))?
            .to_lowercase();
        match_source_name_str!(
            connector.as_str(),
            PropType,
            PropType::try_from_btreemap(options_with_secret, deny_unknown_fields)
                .map(ConnectorProperties::from),
            |other| bail!("connector '{}' is not supported", other)
        )
    }

    pub fn enforce_secret_source(
        with_properties: &impl WithPropertiesExt,
    ) -> crate::error::ConnectorResult<()> {
        let connector = with_properties
            .get_connector()
            .ok_or_else(|| anyhow!("Must specify 'connector' in WITH clause"))?
            .to_lowercase();
        let key_iter = with_properties.key_iter();
        match_source_name_str!(
            connector.as_str(),
            PropType,
            PropType::enforce_secret(key_iter),
            |other| bail!("connector '{}' is not supported", other)
        )
    }

View on GitHub (pinned to 6469eb736d)

Solutions

  1. Use a supported connector name (kafka, kinesis, pulsar, s3, datagen, nats, opensearch, etc.) — names are case-insensitive but must match the registry
  2. Run SHOW CREATE / check docs for the list of supported connectors in your RisingWave version
  3. Add match arms for the new connector in match_source_name_str! if extending the codebase

Example fix

// before
WITH (connector='eventhubs', ...)
// after
WITH (connector='kafka', ...)
Defensive patterns

Strategy: validation

Validate before calling

const SUPPORTED: &[&str] = &["kafka","kinesis","pulsar","s3","datagen","nats","opensearch","cdc"];
assert!(SUPPORTED.contains(&connector_name.to_lowercase().as_str()));

Prevention

When it happens

Trigger: Passing an unrecognized connector name, e.g. WITH (connector='rediss') or connector='kafk', or a connector removed/renamed in the running RisingWave version.

Common situations: Typos in connector name; relying on a third-party/renamed connector; older SQL scripts referencing a deprecated connector name.

Related errors


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