dbt-labs/dbt-core · error

update_tblproperties_for_uniform_iceberg is only supported i

Error message

update_tblproperties_for_uniform_iceberg is only supported in Databricks

What it means

The `update_tblproperties_for_uniform_iceberg` Jinja adapter method is implemented only for the Databricks adapter; when the inner typed adapter is any other type, the method panics with this `unimplemented!` message. Uniform Iceberg table-property management is a Databricks-specific feature, so the generic Adapter wrapper refuses to run it elsewhere. It is a capability gate, not a failure of your arguments.

Source

Thrown at crates/dbt-adapter/src/adapter/mod.rs:2867

    /// Add UniForm Iceberg table properties.
    ///
    /// https://github.com/databricks/dbt-databricks/blob/bfcb5c7c7714e97e67023119f674d2938b04acb0/dbt/adapters/databricks/impl.py#L280
    ///
    /// ```python
    /// def update_tblproperties_for_uniform_iceberg(
    ///     self, config: BaseConfig, tblproperties: Optional[dict[str, str]] = None
    /// )  -> dict[str, str]
    /// ```
    #[tracing::instrument(skip(self, state), level = "trace")]
    pub fn update_tblproperties_for_uniform_iceberg(
        &self,
        state: &State,
        args: &[Value],
    ) -> Result<Value, minijinja::Error> {
        match &self.inner {
            Typed { adapter, .. } => {
                if adapter.adapter_type() != AdapterType::Databricks {
                    unimplemented!(
                        "update_tblproperties_for_uniform_iceberg is only supported in Databricks"
                    )
                }

                let iter = ArgsIter::new(
                    "update_tblproperties_for_uniform_iceberg",
                    &["config"],
                    args,
                );
                let config_val = iter.next_arg::<&Value>()?;
                let tblproperties_val = iter.next_kwarg::<Option<Value>>("tblproperties")?;
                iter.finish()?;

                let model_val = config_val.get_attr("model").map_err(|e| {
                    minijinja::Error::new(
                        minijinja::ErrorKind::InvalidArgument,
                        format!(
                            "update_tblproperties_for_uniform_iceberg: config.model is required: {e}"

View on GitHub (pinned to 0267ce9170)

Solutions

  1. Run this code path only on Databricks; add an `adapter.type() == 'databricks'` guard around the call.
  2. Check that your profile/target selects the Databricks adapter when the models depend on Databricks features.
  3. For other platforms, use platform-native mechanisms to manage table properties instead of this Databricks-only helper.

Example fix

// before
{% do adapter.update_tblproperties_for_uniform_iceberg(config) %}
// after
{% if adapter.type() == 'databricks' %}
  {% do adapter.update_tblproperties_for_uniform_iceberg(config) %}
{% endif %}
Defensive patterns

Strategy: type-guard

Validate before calling

// Jinja
{% set is_databricks = adapter.type() == 'databricks' %}

Type guard

fn is_databricks(a: &Adapter) -> bool {
    a.adapter_type() == AdapterType::Databricks
}

Try / catch

// Guard before the call; unimplemented! is not recoverable
{% if adapter.type() == 'databricks' %}
  {% do adapter.update_tblproperties_for_uniform_iceberg(config) %}
{% endif %}

Prevention

When it happens

Trigger: Calling `adapter.update_tblproperties_for_uniform_iceberg(...)` from a macro/model while the active adapter is not Databricks (Snowflake, BigQuery, DuckDB, etc.).

Common situations: Running Databricks-specific models/materializations (that touch tblproperties for Uniform/Iceberg) against another warehouse; a shared package whose macros assume Databricks; profile misconfiguration pointing at the wrong adapter.

Related errors


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