dbt-labs/dbt-core · error
DatabricksAdapter::list_relations_schemas_by_patterns
Error message
DatabricksAdapter::list_relations_schemas_by_patterns
What it means
Databricks' `list_relations_schemas_by_patterns_inner` is a `todo!()` placeholder; pattern-based relation/schema listing has not been implemented for DatabricksAdapter. Calling the corresponding metadata API panics with 'DatabricksAdapter::list_relations_schemas_by_patterns'.
Source
Thrown at crates/dbt-adapter/src/metadata/databricks/mod.rs:1393
Ok(schema)
};
let reduce_f = |acc: &mut Acc,
relation: Arc<dyn BaseRelation>,
schema: AdapterResult<Arc<Schema>>|
-> Result<(), Cancellable<AdapterError>> {
acc.insert(relation.semantic_fqn(), schema);
Ok(())
};
let map_reduce = MapReduce::new(factory, Box::new(map_f), Box::new(reduce_f), unique_id);
map_reduce.run(Arc::new(relations.to_vec()), token)
}
fn list_relations_schemas_by_patterns_inner(
&self,
_patterns: &[RelationPattern],
_token: CancellationToken,
) -> AsyncAdapterResult<'_, Vec<(String, AdapterResult<RelationSchemaPair>)>> {
todo!("DatabricksAdapter::list_relations_schemas_by_patterns")
}
fn freshness_inner(
&self,
relations: &[Arc<dyn BaseRelation>],
token: CancellationToken,
) -> AsyncAdapterResult<'_, BTreeMap<String, MetadataFreshness>> {
if relations.is_empty() {
return Box::pin(async { Ok(BTreeMap::new()) });
}
type Acc = BTreeMap<String, MetadataFreshness>;
let factory = Box::new(AdapterConnectionFactory::new(
self.adapter.engine().clone(),
self.adapter.engine().threads(),
));
View on GitHub (pinned to 0267ce9170)
Solutions
- Implement the method for DatabricksAdapter, e.g., querying `information_schema.tables`/`schemata` filtered by the RelationPattern set
- Use implemented per-relation metadata calls instead of the pattern-listing API until this lands
- Track the missing feature upstream
Example fix
// before
fn list_relations_schemas_by_patterns_inner(
&self,
_patterns: &[RelationPattern],
_token: CancellationToken,
) -> AsyncAdapterResult<'_, Vec<(String, AdapterResult<RelationSchemaPair>)>> {
todo!("DatabricksAdapter::list_relations_schemas_by_patterns")
}
// after
fn list_relations_schemas_by_patterns_inner(
&self,
patterns: &[RelationPattern],
token: CancellationToken,
) -> AsyncAdapterResult<'_, Vec<(String, AdapterResult<RelationSchemaPair>)>> {
self.query_information_schema_by_patterns(patterns, token)
} Defensive patterns
Strategy: validation
Validate before calling
if adapter.name() == "databricks" {
return Err(anyhow!("Pattern-based relation listing is not implemented for Databricks"));
} Type guard
fn supports_pattern_listing(adapter: &dyn Adapter) -> bool {
adapter.capabilities().list_relations_schemas_by_patterns
} Try / catch
match std::panic::catch_unwind(AssertUnwindSafe(|| adapter.list_relations_schemas_by_patterns(patterns))) {
Ok(res) => res,
Err(_) => per_relation_listing_fallback(patterns),
} Prevention
- Confirm Databricks pattern-listing support before bulk metadata calls
- Use information_schema queries directly for Databricks schema discovery as a fallback
- Gate bulk cache warm-up flows on adapter capabilities
- Track upstream Databricks metadata implementation
When it happens
Trigger: Invoking `list_relations_schemas_by_patterns` against a Databricks adapter, dispatching into this unimplemented inner method.
Common situations: A Databricks project performs a bulk relations/schema lookup by patterns (catalog refresh, relation cache warm-up) and hits the panic on first use of that API path.
Related errors
- list_relations_schemas_by_patterns for BigQuery
- ClickHouseAdapter::list_relations_schemas_by_patterns
- DuckDBAdapter::list_relations_schemas_by_patterns
- Trino
- Datafusion
AI-assisted analysis of dbt-labs/dbt-core@0267ce9170 (2026-09-07).
Data as JSON: /api/errors/d18c020a6854129b.
Report an issue: GitHub.