dbt-labs/dbt-core · error
list_relations_schemas_by_patterns for BigQuery
Error message
list_relations_schemas_by_patterns for BigQuery
What it means
BigQuery's `list_relations_schemas_by_patterns_inner` is a `todo!()` stub in the metadata listing trait implementation. Invoking the pattern-based relation/schema listing API against BigQuery panics with 'not yet implemented'. The trait method is required but BigQuery support has not been written yet.
Source
Thrown at crates/dbt-adapter/src/metadata/bigquery/mod.rs:1376
}
};
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), node_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!("list_relations_schemas_by_patterns for BigQuery")
}
fn freshness_inner(
&self,
relations: &[Arc<dyn BaseRelation>],
token: CancellationToken,
) -> AsyncAdapterResult<'_, BTreeMap<String, MetadataFreshness>> {
let tasks = match bulk_freshness_tasks_from_relations(relations) {
Ok(tasks) => tasks,
Err(e) => {
let future = async move { Err(Cancellable::Error(e)) };
return Box::pin(future);
}
};
self.freshness_mapreduce(tasks, token)
}
/// Honors per-source `loaded_at_field` / `loaded_at_query` config. Mirrors theView on GitHub (pinned to 0267ce9170)
Solutions
- Implement `list_relations_schemas_by_patterns_inner` for BigQuery using INFORMATION_SCHEMA queries filtered by the given RelationPattern
- Use a metadata path that is implemented for BigQuery (e.g., single-relation lookups) instead of the pattern-based API
- Track an upstream issue for BigQuery pattern-based metadata listing
Example fix
// before
fn list_relations_schemas_by_patterns_inner(
&self,
_patterns: &[RelationPattern],
_token: CancellationToken,
) -> AsyncAdapterResult<'_, Vec<(String, AdapterResult<RelationSchemaPair>)>> {
todo!("list_relations_schemas_by_patterns for BigQuery")
}
// after
fn list_relations_schemas_by_patterns_inner(
&self,
patterns: &[RelationPattern],
token: CancellationToken,
) -> AsyncAdapterResult<'_, Vec<(String, AdapterResult<RelationSchemaPair>)>> {
// query INFORMATION_SCHEMA.TABLES/SCHEMAs filtered by patterns
self.query_relations_by_patterns(patterns, token)
} Defensive patterns
Strategy: validation
Validate before calling
if adapter.name() == "bigquery" {
return Err(anyhow!("Pattern-based relation listing is not implemented for BigQuery"));
} 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
- Consult adapter capability docs before using pattern-based metadata APIs
- Check for a capabilities/feature flag on the adapter instance at runtime
- Prefer per-relation listing APIs for adapters without pattern support
- Track BigQuery implementation status upstream before enabling bulk refresh flows
When it happens
Trigger: Calling the metadata listing entry point (`list_relations_schemas_by_patterns`) with the BigQuery adapter, which dispatches into this unimplemented inner method.
Common situations: A BigQuery-configured project performs a bulk relations/schema lookup by patterns (e.g., cache warm-up or catalog refresh that uses the pattern-listing metadata API).
Related errors
- ClickHouseAdapter::list_relations_schemas_by_patterns
- DatabricksAdapter::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/30d7a1d3f6ac9c9e.
Report an issue: GitHub.