dbt-labs/dbt-core · error

only available with BigQuery adapter

Error message

only available with BigQuery adapter

What it means

update_columns_descriptions implements column description persistence only for BigQuery; the match arm for every other adapter (Postgres, Snowflake, Databricks, Redshift, Salesforce, Spark, Fabric, DuckDB, LakeCompute, ClickHouse, Exasol, Starburst, Athena, Trino, Datafusion, Dremio, Oracle) panics via unimplemented!. This mirrors the upstream dbt-bigquery-only update_column_descriptions hook.

Source

Thrown at crates/dbt-adapter/src/adapter/adapter_impl.rs:2584

                let sql = format!(
                    "-- adapter.update_columns via BigQuery REST API on `{database}.{schema}.{table}`"
                );
                self.engine().execute_with_options(
                    Some(state),
                    &ctx,
                    conn,
                    &sql,
                    options,
                    false,
                    token,
                )?;

                Ok(none_value())
            }
            Postgres | Snowflake | Databricks | Redshift | Salesforce | Spark | Fabric | DuckDB
            | LakeCompute | ClickHouse | Exasol | Starburst | Athena | Trino | Datafusion
            | Dremio | Oracle => {
                unimplemented!("only available with BigQuery adapter")
            }
        }
    }

    /// render_raw_columns_constraints
    ///
    /// BaseAdapter https://github.com/dbt-labs/dbt-adapters/blob/0efd8d3d1081e1ab43e38797d5104f7b424a6284/dbt-adapters/src/dbt/adapters/base/impl.py#L1848
    pub fn render_raw_columns_constraints(
        &self,
        columns_map: IndexMap<String, DbtColumn>,
    ) -> AdapterResult<Vec<String>> {
        match self.adapter_type() {
            // dbt-clickhouse impl.py override: column constraints warn as
            // unsupported and never render; codec/ttl ride after the type.
            ClickHouse => {
                let mut result = vec![];
                for (_, column) in columns_map {
                    let mut rendered = format!(

View on GitHub (pinned to 0267ce9170)

Solutions

  1. Use BigQuery if column-description persistence is required.
  2. Disable persist_docs for columns on non-BigQuery adapters so the hook is never dispatched.
  3. Implement per-adapter description updates (ALTER ... SET COMMENT / COMMENT ON COLUMN) in the non-BigQuery match arm.

Example fix

// before
Postgres | Snowflake | Databricks | ... | Oracle => {
    unimplemented!("only available with BigQuery adapter")
}
// after
Postgres | Snowflake | Databricks | ... | Oracle => {
    Err(minijinja::Error::new(
        minijinja::ErrorKind::InvalidOperation,
        "column descriptions only supported on BigQuery",
    ))
}
Defensive patterns

Strategy: validation

Validate before calling

if adapter_type != "bigquery" && config.persist_docs.columns {
    return Err("column description persistence is only supported on BigQuery".into());
}

Type guard

fn supports_column_descriptions(adapter_type: &AdapterType) -> bool { matches!(adapter_type, AdapterType::Bigquery) }

Prevention

When it happens

Trigger: Running `dbt docs generate` / persist_docs with column descriptions on any non-BigQuery adapter, which dispatches update_columns_descriptions through Jinja.

Common situations: Setting `persist_docs: {relation: ..., columns: ...}` or defining column `description` meta on models with Postgres/Snowflake etc., expecting description updates.

Related errors


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