dbt-labs/dbt-core · error
Unknown method on ColumnStatic
Error message
Unknown method on ColumnStatic: '{name}' What it means
The ColumnStatic Jinja object exposes a fixed set of methods (create, translate_type, numeric_type, string_type, from_description, format_add_column_list, format_remove_column_list, get_name). Calling any other attribute-as-method on it raises minijinja UnknownMethod. This is the library's way of saying the requested method does not exist on the Column class for the current adapter.
Solutions
- Use one of the supported methods: create, translate_type, numeric_type, string_type, from_description, format_add_column_list, format_remove_column_list, get_name.
- Fix the method name typo (check the error message for the exact name that was requested).
- If the method is adapter-specific (dbx_*), guard the call: only invoke it when the adapter is Databricks.
- Reimplement the logic inline in Jinja/Rust or add the method to ColumnStatic's call_method match if you own the adapter code.
Example fix
// before
{% set t = Column.text_type(256) %}
// after
{% set t = Column.string_type(size=256) %} Defensive patterns
Strategy: type-guard
Validate before calling
// Jinja: restrict calls to a whitelist of supported methods
{% set supported = ['create','translate_type','numeric_type','string_type','from_description','format_add_column_list','format_remove_column_list','get_name'] %}
{% if method_name not in supported %}
{{ exceptions.raise_compiler_error("Unsupported Column method: " ~ method_name) }}
{% endif %} Prevention
- Keep a cheat-sheet of the eight supported ColumnStatic methods and consult it when porting Python-adapter macros.
- Grep your macros for `Column.` calls during dbt engine migrations.
- Guard adapter-specific methods behind adapter type checks.
- Add unit tests that render every macro touching Column.* so unknown-method errors surface in CI.
When it happens
Trigger: Any Jinja expression like `Column.some_method(...)` where `some_method` is not one of the eight implemented method names — typically typos, Python-adapter methods ported from dbt Core that were never implemented (e.g. `Column.text_type`, `Column.is_string`), or calling an adapter-specific method while running under a different adapter.
Common situations: Porting a Python dbt adapter macro to the Rust engine and referencing methods that exist in dbt-adapters Python but not here; typos like `column.from_descripton`; copying BigQuery/Databricks-only macros into a Snowflake project.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- {}
- Failed to downcast jinja value to Column; expected Column…
- {msg}
- Unknown method on adapter object
- adapter not found in context
AI-assisted analysis of dbt-labs/dbt-core@0267ce9170 (2026-09-07).
Data as JSON: /api/errors/715a25cd646c8146.
Report an issue: GitHub.
Appendix: source
Thrown at crates/dbt-adapter/src/column/types.rs:111
let columns = args.get::<Value>("columns")?;
let columns = Column::vec_from_jinja_value(AdapterType::Databricks, columns)?;
Ok(Value::from(self.dbx_format_remove_column_list(&columns)?))
}
"get_name" => {
let mut args: ArgParser = ArgParser::new(args, None);
let column = args.get::<Value>("column")?;
// FIXME: why is this DbtColumn and not Column?
let column = minijinja_value_to_typed_struct::<DbtColumn>(column).map_err(|e| {
minijinja::Error::new(
minijinja::ErrorKind::SerdeDeserializeError,
e.to_string(),
)
})?;
Ok(Value::from(self.dbx_get_name(&column)))
}
_ => Err(minijinja::Error::new(
minijinja::ErrorKind::UnknownMethod,
format!("Unknown method on ColumnStatic: '{name}'"),
)),
}
}
fn call(
self: &Arc<Self>,
_state: &minijinja::State,
args: &[Value],
_listeners: &[std::rc::Rc<dyn minijinja::listener::RenderingEventListener>],
) -> Result<Value, minijinja::Error> {
self.jinja_create(args)
}
}
impl ColumnStatic {
pub fn new(adapter_type: AdapterType) -> Self {View on GitHub (pinned to 0267ce9170)