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 the

View on GitHub (pinned to 0267ce9170)

Solutions

  1. Implement `list_relations_schemas_by_patterns_inner` for BigQuery using INFORMATION_SCHEMA queries filtered by the given RelationPattern
  2. Use a metadata path that is implemented for BigQuery (e.g., single-relation lookups) instead of the pattern-based API
  3. 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

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


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