dbt-labs/dbt-core · error
Available only for BigQuery and Redshift
Error message
Available only for BigQuery and Redshift
What it means
This method on the relation config computes a changeset of alterations, but only the BigQuery and Redshift arms of the match are implemented; any other adapter type falls to the catch-all and panics with unimplemented!("Available only for BigQuery and Redshift"). It reflects that change-detection semantics (e.g. column/option diffs) are only defined for those two platforms.
Solutions
- Only call the changeset method for BigQuery/Redshift relations; branch on adapter type before diffing.
- For other adapters, implement platform-specific diff logic or compare relation columns/options manually.
- If BigQuery/Redshift behavior is intended, verify the relation's adapter_type is set correctly (e.g. fix an adapter-type mislabeling in the profile).
Example fix
// before
let changeset = relation_config.changeset();
// after
let changeset = match adapter_type {
AdapterType::Bigquery | AdapterType::Redshift => relation_config.changeset(),
_ => None,
}; Defensive patterns
Strategy: validation
Validate before calling
let supported = matches!(adapter_type, AdapterType::Bigquery | AdapterType::Redshift);
if !supported { /* skip changeset diff */ } Type guard
fn supports_changeset(t: &AdapterType) -> bool { matches!(t, AdapterType::Bigquery | AdapterType::Redshift) } Prevention
- Gate alteration-diff logic on BigQuery/Redshift adapter types.
- Implement per-adapter diff strategies for incremental materializations.
- Keep shared macros free of changeset calls unless all target adapters support it.
When it happens
Trigger: Invoking the changeset/alteration-diff method on a relation config whose adapter type is neither BigQuery nor Redshift — e.g. computing a column changeset on Snowflake, Databricks, or Postgres relations.
Common situations: Incremental materialization logic that diffs model config against the existing relation; macros shared across warehouses calling the changeset helper; adapters whose materialized-view workflows are not yet migrated to RelationConfig v2 (see the adjacent FIXME about Redshift).
Related errors
- 'flatten' is only implemented for Bigquery
- get_bq_table
- list_relations_schemas_by_patterns for BigQuery
- list_relations_schemas_by_patterns for Redshift
- only available with BigQuery adapter
AI-assisted analysis of dbt-labs/dbt-core@0267ce9170 (2026-09-07).
Data as JSON: /api/errors/4fcdf084e5e9efea.
Report an issue: GitHub.
Appendix: source
Thrown at crates/dbt-adapter/src/relation/relation_impl.rs:1329
return Err(minijinja::Error::new(
minijinja::ErrorKind::InvalidOperation,
"Expected a model node",
));
}
};
let desired_state =
crate::relation::bigquery::config::relation_types::materialized_view::new_loader()
.from_local_config(local_config.as_ref())?;
let changeset = RelationConfig::diff(&desired_state, current_state);
if changeset.is_empty() {
Ok(none_value())
} else {
Ok(Value::from_object(changeset))
}
}
_ => unimplemented!("Available only for BigQuery and Redshift"),
}
}
}
// FIXME(serramatutu): this should be deleted from here once Redshift Materialized
// Views are migrated to RelationConfig v2.
fn node_value_to_redshift_materialized_view(
node_value: &Value,
) -> Result<RedshiftMaterializedViewConfig, minijinja::Error> {
let config_wrapper = InternalDbtNodeWrapper::deserialize(node_value).map_err(|e| {
minijinja::Error::new(
minijinja::ErrorKind::SerdeDeserializeError,
format!("Failed to deserialize InternalDbtNodeWrapper: {e}"),
)
})?;
let model = match config_wrapper {
InternalDbtNodeWrapper::Model(model) => model,View on GitHub (pinned to 0267ce9170)