dbt-labs/dbt-core · error
enrich is only available for Databricks relations
Error message
enrich is only available for Databricks relations
What it means
relation_enrich (backing get_column_and_constraints_sql) downcasts the inner relation to the Databricks Relation implementation; on any other adapter's relation type the downcast fails and this guard fires — enrichment with constraints is a Databricks-only capability.
Solutions
- Call enrich only for Databricks relations (gate in the macro)
- Add an enrich path for other adapters if constraints support is needed there
- Return a structured error instead of a bare minijinja InvalidOperation
Defensive patterns
Strategy: type-guard
When it happens
Trigger: Thrown at crates/dbt-adapter/src/relation/relation_object.rs:100 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/94a1652dac3f4b26.
Report an issue: GitHub.
Appendix: source
Thrown at crates/dbt-adapter/src/relation/relation_object.rs:100
}
}
pub fn has_filter(&self) -> bool {
self.run_filter.is_some()
}
pub fn event_time(&self) -> Option<&str> {
self.event_time.as_deref()
}
/// Databricks: enrich relation with constraints (for get_column_and_constraints_sql)
fn relation_enrich(self: &Arc<Self>, args: &[Value]) -> Result<Value, minijinja::Error> {
let dbx = self
.relation
.as_any()
.downcast_ref::<Relation>()
.ok_or_else(|| {
minijinja::Error::new(
minijinja::ErrorKind::InvalidOperation,
"enrich is only available for Databricks relations",
)
})?;
let constraints_val = args.first().cloned().unwrap_or_default();
let constraints: Vec<TypedConstraint> = constraints_val
.try_iter()
.map_err(|e| {
minijinja::Error::new(
minijinja::ErrorKind::InvalidOperation,
format!("enrich constraints must be iterable: {e}"),
)
})?
.map(|v| {
v.downcast_object_ref::<TypedConstraint>()
.cloned()
.ok_or_else(|| {
minijinja::Error::new(View on GitHub (pinned to 0267ce9170)