dbt-labs/dbt-core · error
is_uniform is only supported in Databricks
Error message
is_uniform is only supported in Databricks
What it means
The `is_uniform` adapter method checks whether a table is managed via Databricks Uniform (Iceberg); it is gated to the Databricks adapter and panics with `unimplemented!` for every other adapter type. Because 'Uniform' is a Databricks-only concept, the generic Adapter wrapper refuses to execute the method elsewhere. The panic occurs before any argument parsing, so even valid arguments cannot prevent it on a non-Databricks adapter.
Source
Thrown at crates/dbt-adapter/src/adapter/mod.rs:2954
Ok(Value::from_serialize(&tblproperties))
}
Parse(_) => Ok(empty_map_value()),
}
}
/// Is table UniForm Iceberg
///
/// https://github.com/databricks/dbt-databricks/blob/bfcb5c7c7714e97e67023119f674d2938b04acb0/dbt/adapters/databricks/impl.py#L256C6-L256C7
///
/// ```python
/// def is_uniform(self, config: BaseConfig) -> bool:
/// ```
#[tracing::instrument(skip(self, state), level = "trace")]
pub fn is_uniform(&self, state: &State, args: &[Value]) -> Result<Value, minijinja::Error> {
match &self.inner {
Typed { adapter, .. } => {
if adapter.adapter_type() != AdapterType::Databricks {
unimplemented!("is_uniform is only supported in Databricks")
}
let iter = ArgsIter::new("is_uniform", &["config"], args);
let config_val = iter.next_arg::<&Value>()?;
iter.finish()?;
let model_val = config_val.get_attr("model").map_err(|e| {
minijinja::Error::new(
minijinja::ErrorKind::InvalidArgument,
format!("is_uniform: config.model is required: {e}"),
)
})?;
let config = minijinja_value_to_typed_struct::<ModelConfig>(config_val.clone())
.map_err(|e| {
minijinja::Error::new(
minijinja::ErrorKind::SerdeDeserializeError,
e.to_string(),
)View on GitHub (pinned to 0267ce9170)
Solutions
- Guard the call with an adapter-type check (`adapter.type() == 'databricks'`) and return a sensible default (e.g. false/None) for other adapters.
- Ensure models calling is_uniform are only selected when running on the Databricks target.
- Refactor shared macros so Databricks-only logic lives in Databricks-dispatched macros.
Example fix
// before
{% set uniform = adapter.is_uniform(config) %}
// after
{% set uniform = adapter.is_uniform(config) if adapter.type() == 'databricks' else false %} Defensive patterns
Strategy: type-guard
Validate before calling
// Jinja
{% set is_databricks = adapter.type() == 'databricks' %} Type guard
fn supports_uniform(a: &Adapter) -> bool {
a.adapter_type() == AdapterType::Databricks
} Try / catch
// Branch instead of catching
{% set uniform = false %}
{% if adapter.type() == 'databricks' %}
{% set uniform = adapter.is_uniform(config) %}
{% endif %} Prevention
- Default is_uniform to false on non-Databricks adapters
- Gate models that check Uniform behind Databricks-only configs
- Avoid calling is_uniform from shared macros without dispatch
When it happens
Trigger: Calling `adapter.is_uniform(state, [config])` from Jinja while the active adapter's type is not AdapterType::Databricks — e.g. checking uniform status in a macro executed on Snowflake or BigQuery.
Common situations: Databricks-specific models copied into a multi-warehouse project; shared packages that call is_uniform without an adapter-type guard; switching targets in CI so Databricks macros run against other warehouses.
Related errors
- update_tblproperties_for_uniform_iceberg is only supported i
- only available with Databricksadapter
- only available with Databricks adapter
- resolve_file_format is only supported in Databricks
- supports_create_or_replace is not implemented for {:?}
AI-assisted analysis of dbt-labs/dbt-core@0267ce9170 (2026-09-07).
Data as JSON: /api/errors/2c935c3dca3749c7.
Report an issue: GitHub.