dbt-labs/dbt-core · error · minijinja::Error::InvalidArgument
Expect a BigqueryPartitionConfigStruct
Error message
Expect a BigqueryPartitionConfigStruct
What it means
After deserializing partition_by into a PartitionConfig, add_time_ingestion_partition_column() converts it into a BigQuery-specific partition config via into_bigquery(). If that conversion returns None — meaning the PartitionConfig is not a BigQuery-compatible variant — this InvalidArgument error is thrown because time-ingestion partition columns only exist for BigQuery partition configs.
Source
Thrown at crates/dbt-adapter/src/adapter/mod.rs:2252
);
let partition_by = iter.next_arg::<&Value>()?;
let columns = iter.next_arg::<&Value>()?;
iter.finish()?;
// Match original behavior: try to deserialize directly, let deserialization handle errors
let partition_by =
minijinja_value_to_typed_struct::<PartitionConfig>(partition_by.clone())
.map_err(|e| {
minijinja::Error::new(
minijinja::ErrorKind::SerdeDeserializeError,
format!(
"adapter.add_time_ingestion_partition_column failed on partition_by {partition_by:?}: {e}"
),
)
})?;
let partition_config = partition_by.into_bigquery().ok_or_else(|| {
minijinja::Error::new(
minijinja::ErrorKind::InvalidArgument,
"Expect a BigqueryPartitionConfigStruct",
)
})?;
let result = adapter
.add_time_ingestion_partition_column(columns.clone(), partition_config)?;
Ok(result)
}
// In parse mode, return stub value early without validation
Parse(_) => Ok(empty_vec_value()),
}
}
#[tracing::instrument(skip(self, state), level = "trace")]
pub fn grant_access_to(
&self,
state: &State,View on GitHub (pinned to 0267ce9170)
Solutions
- Only call add_time_ingestion_partition_column when the adapter is BigQuery.
- Ensure partition_by comes from adapter.parse_partition_by within a BigQuery project so it carries the BigQuery partition variant.
- Check that config.model.partition_by uses BigQuery syntax (type: time_ingestion / range with valid granularity fields).
- If you support multiple warehouses, guard the macro call behind target.type == 'bigquery'.
Example fix
// before (Jinja)
{% do adapter.add_time_ingestion_partition_column(partition_by, columns) %}
// after
{% if target.type == 'bigquery' %}
{% do adapter.add_time_ingestion_partition_column(partition_by, columns) %}
{% else %}
{{ exceptions.raise_compiler_error("time ingestion partitioning is BigQuery-only") }}
{% endif %} Defensive patterns
Strategy: validation
Validate before calling
{% if target.type == 'bigquery' and config.model.get('partition_by') is defined %}
{% set pb = adapter.parse_partition_by(config.model.partition_by) %}
{% do adapter.add_time_ingestion_partition_column(pb, columns) %}
{% endif %} Prevention
- Gate BigQuery-only macros behind target.type checks
- Only feed PartitionConfig values produced by this adapter's parse_partition_by
- Use BigQuery partition_by syntax in model config
- Do not reuse partition config objects across different warehouse adapters
When it happens
Trigger: Calling adapter.add_time_ingestion_partition_column(partition_by, columns) with a PartitionConfig whose variant cannot be converted to BigqueryPartitionConfigStruct — typically a partition config from a non-BigQuery adapter shape, or a PartitionConfig missing the BigQuery-specific fields/variant.
Common situations: Running BigQuery macros on a project whose partition config came from another warehouse's syntax; mixing adapter-specific partition config types; using this macro on a non-BigQuery adapter (it is BigQuery-specific); corrupted or partially-built PartitionConfig values passed from custom macros.
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
- Expect a BigqueryPartitionConfigStruct
- when data_type is date, inner must be a TimeConfig
- adapter.parse_partition_by failed on {raw_partition_by:?}: {
- adapter.add_time_ingestion_partition_column failed on partit
- column must have a name attribute
AI-assisted analysis of dbt-labs/dbt-core@0267ce9170 (2026-09-07).
Data as JSON: /api/errors/bac80d85dd472398.
Report an issue: GitHub.