risingwavelabs/risingwave · error

Invalid properties for ADBC Snowflake source: {:?}

Error message

Invalid properties for ADBC Snowflake source: {:?}

What it means

`extract_adbc_snowflake_columns` returns an `anyhow!` error when the source's properties do not form a valid ADBC Snowflake property set (`FromStr`/extraction into the ADBC Snowflake properties struct failed). Column binding for a Snowflake source via ADBC requires database/schema/table (or query) properties; anything else is rejected before attempting to read the remote schema.

Source

Thrown at src/frontend/src/handler/create_source/external_schema/adbc_snowflake.rs:59

                    ColumnId::new((i + 1).try_into().unwrap()),
                    converter.type_from_field(field).unwrap(),
                );
                ColumnCatalog {
                    column_desc,
                    is_hidden: false,
                }
            })
            .collect();

        tracing::info!(
            "ADBC Snowflake inferred {} columns from table {}",
            columns.len(),
            properties.table
        );

        Ok(columns)
    } else {
        Err(anyhow!(format!(
            "Invalid properties for ADBC Snowflake source: {:?}",
            props
        )))
    }
}

View on GitHub (pinned to 6469eb736d)

Solutions

  1. Check the WITH options against the Snowflake source docs: include `connector='snowflake'`, `snowflake_url`, and `database`/`schema`/`table` as required.
  2. Fix typos and casing in property keys — the error prints the offending props for comparison.
  3. Confirm you are not reusing CDC (`schema-registry`/`aws.*`) style options for the ADBC direct-read source.
  4. If properties look correct, test the same connection parameters outside RisingWave to rule out auth/URL errors masquerading as property errors.

Example fix

// before
CREATE SOURCE s WITH (connector='snowflake', tablename='T1');
// after
CREATE SOURCE s WITH (connector='snowflake', database='DB', schema='PUBLIC', table='T1');
Defensive patterns

Strategy: validation

Validate before calling

// verify required Snowflake ADBC properties exist before issuing CREATE SOURCE
function validateSnowflakeProps(p) {
  const required = ['snowflake_url', 'database', 'schema', 'table'];
  const missing = required.filter(k => !(k in p));
  if (missing.length) throw new Error('missing snowflake props: ' + missing.join(','));
}

Prevention

When it happens

Trigger: `CREATE SOURCE ... WITH (connector = 'snowflake', ...)` routed through the ADBC path where `props` fails to deserialize into the expected ADBC Snowflake properties — missing `database_name`/`schema_name`/`table_name` keys, wrong key names, or unexpected extra properties.

Common situations: Typos in WITH options (e.g. `tablename` instead of `table_name`); omitting required Snowflake properties; mixing CDC and non-CDC Snowflake option shapes; upgrading RisingWave so previously accepted property keys changed.

Understand the failure class

Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.

Related errors


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