dbt-labs/dbt-core · error

schema is required

Error message

schema is required

What it means

Invariant expect in finalize_python_code: the model value must carry a `schema` attribute as a string (Snowflake models always have one), but it was missing or not a string. The Python job's fully-qualified target cannot be rendered without it; the at-fault input is the model object's schema field.

Solutions

  1. Ensure the model node has a schema set via profile/custom schema configuration
  2. Verify the model value passed to submit_python_job is a fully populated model node
  3. Report as an internal bug if schema is absent in a valid run
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at crates/dbt-adapter/src/python/snowflake/mod.rs:25 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of dbt-labs/dbt-core@0267ce9170 (2026-09-07). Data as JSON: /api/errors/c90bddd714d2dc49. Report an issue: GitHub.

Appendix: source

Thrown at crates/dbt-adapter/src/python/snowflake/mod.rs:25

    state: &State,
    model: &Value,
    compiled_code: &str,
) -> AdapterResult<String> {
    // Extract config from model
    let config = model
        .get_attr("config")
        .map_err(|e| AdapterError::new(AdapterErrorKind::Internal, e.to_string()))?;

    let database = model
        .get_attr("database")
        .ok()
        .and_then(|v| v.as_str().map(|s| s.to_string()))
        .expect("database is required");
    let schema = model
        .get_attr("schema")
        .ok()
        .and_then(|v| v.as_str().map(|s| s.to_string()))
        .expect("schema is required");
    let alias = model
        .get_attr("alias")
        .ok()
        .and_then(|v| v.as_str().map(|s| s.to_string()))
        .unwrap_or_default();

    // Get python_version from config, default to "3.11"
    let python_version = config
        .get_attr("python_version")
        .ok()
        .and_then(|v| v.as_str().map(|s| s.to_string()))
        .unwrap_or_else(|| "3.11".to_string());

    // Get packages list
    let packages = config
        .get_attr("packages")
        .ok()
        .and_then(|v| v.try_iter().ok())

View on GitHub (pinned to 0267ce9170)