dbt-labs/dbt-core · error

{msg}

Error message

{msg}

What it means

ColumnStatic.from_description(name, raw_data_type) parses a raw Snowflake-style data type string into a Column. When the raw_data_type string cannot be parsed by try_from_snowflake_raw_data_type, the resulting message is wrapped as a minijinja InvalidArgument error. The message text comes directly from the parser, e.g. an unrecognized or malformed type such as an empty string or an unparseable compound type.

Source

Thrown at crates/dbt-adapter/src/column/types.rs:302

            AdapterType::ClickHouse => "String".to_string(),
            _ => match size {
                Some(size) => format!("character varying({size})"),
                _ => "character varying".to_string(),
            },
        }
    }

    /// https://github.com/dbt-labs/dbt-adapters/blob/main/dbt-adapters/src/dbt/adapters/base/column.py#L127-L128
    #[expect(clippy::wrong_self_convention)]
    fn from_description(
        &self,
        name: &str,
        raw_data_type: &str,
    ) -> Result<Column, minijinja::Error> {
        // TODO(serramatutu): why is this Snowflake specific in non-Snowflake specific trait?
        // It seems like it is used by other adapters as well... (tested with BigQuery)
        let mut col = Column::try_from_snowflake_raw_data_type(name, raw_data_type)
            .map_err(|msg| minijinja::Error::new(minijinja::ErrorKind::InvalidArgument, msg))?;
        col._adapter_type = self.0;
        Ok(col)
    }

    /// https://github.com/databricks/dbt-databricks/blob/822b105b15e644676d9e1f47cbfd765cd4c1541f/dbt/adapters/databricks/column.py#L66
    fn dbx_format_add_column_list(
        self: &Arc<Self>,
        columns: &[Column],
    ) -> Result<String, minijinja::Error> {
        if self.0 != AdapterType::Databricks {
            unimplemented!("Only available for Databricks")
        };

        Ok(columns
            .iter()
            .map(|c| format!("{} {}", c.quoted(), c.core_dtype))
            .collect::<Vec<String>>()
            .join(", "))

View on GitHub (pinned to 0267ce9170)

Solutions

  1. Log/inspect the wrapped message (it is the raw parser msg) to see exactly which part of the type string failed.
  2. Normalize the raw data type to a Snowflake-style form the parser understands (e.g. VARCHAR(10), NUMBER(38,0), TIMESTAMP_NTZ) before calling from_description.
  3. Guard the call: validate raw_data_type is non-empty and matches a known type pattern before invoking.
  4. Fall back to Column.create(name, dtype) with a generic type when the raw type cannot be represented.

Example fix

// before
{% set col = Column.from_description(name=col_name, raw_data_type='') %}
// after
{% set raw = col_type if col_type else 'VARCHAR' %}
{% set col = Column.from_description(name=col_name, raw_data_type=raw) %}
Defensive patterns

Strategy: validation

Validate before calling

// Jinja: validate raw type before parsing
{% if not raw_data_type or raw_data_type is not string %}
  {{ exceptions.raise_compiler_error("from_description requires a non-empty raw_data_type string") }}
{% endif %}

Type guard

fn looks_like_snowflake_type(s: &str) -> bool {
    !s.trim().is_empty() && s.chars().next().map(|c| c.is_ascii_alphabetic()).unwrap_or(false)
}

Prevention

When it happens

Trigger: Calling `Column.from_description(name, raw_data_type)` with a raw_data_type that try_from_snowflake_raw_data_type rejects — e.g. empty string, a type string with unsupported syntax, or a struct/map/array type the Snowflake-style parser cannot decompose.

Common situations: Materializations that introspect warehouse catalogs and pass back a native type string in a dialect the parser does not handle (e.g. BigQuery GEOGRAPHY, Databricks complex types); custom SQL producing exotic types; passing None/empty because the source column metadata was missing.

Understand the failure class

Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.

Related errors


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