{"record":{"id":"bac80d85dd472398","repo":"dbt-labs/dbt-core","slug":"expect-a-bigquerypartitionconfigstruct-bac80d","errorCode":null,"errorMessage":"Expect a BigqueryPartitionConfigStruct","messagePattern":"Expect a BigqueryPartitionConfigStruct","errorType":"exception","errorClass":"minijinja::Error::InvalidArgument","httpStatus":null,"severity":"error","filePath":"crates/dbt-adapter/src/adapter/mod.rs","lineNumber":2252,"sourceCode":"                );\n                let partition_by = iter.next_arg::<&Value>()?;\n                let columns = iter.next_arg::<&Value>()?;\n                iter.finish()?;\n\n                // Match original behavior: try to deserialize directly, let deserialization handle errors\n                let partition_by =\n                    minijinja_value_to_typed_struct::<PartitionConfig>(partition_by.clone())\n                        .map_err(|e| {\n                            minijinja::Error::new(\n                                minijinja::ErrorKind::SerdeDeserializeError,\n                                format!(\n                                    \"adapter.add_time_ingestion_partition_column failed on partition_by {partition_by:?}: {e}\"\n                                ),\n                            )\n                        })?;\n\n                let partition_config = partition_by.into_bigquery().ok_or_else(|| {\n                    minijinja::Error::new(\n                        minijinja::ErrorKind::InvalidArgument,\n                        \"Expect a BigqueryPartitionConfigStruct\",\n                    )\n                })?;\n\n                let result = adapter\n                    .add_time_ingestion_partition_column(columns.clone(), partition_config)?;\n                Ok(result)\n            }\n            // In parse mode, return stub value early without validation\n            Parse(_) => Ok(empty_vec_value()),\n        }\n    }\n\n    #[tracing::instrument(skip(self, state), level = \"trace\")]\n    pub fn grant_access_to(\n        &self,\n        state: &State,","sourceCodeStart":2234,"sourceCodeEnd":2270,"githubUrl":"https://github.com/dbt-labs/dbt-core/blob/0267ce9170576975b76b64ce856b2e5848e96617/crates/dbt-adapter/src/adapter/mod.rs#L2234-L2270","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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'."],"exampleFix":"// before (Jinja)\n{% do adapter.add_time_ingestion_partition_column(partition_by, columns) %}\n\n// after\n{% if target.type == 'bigquery' %}\n  {% do adapter.add_time_ingestion_partition_column(partition_by, columns) %}\n{% else %}\n  {{ exceptions.raise_compiler_error(\"time ingestion partitioning is BigQuery-only\") }}\n{% endif %}","handlingStrategy":"validation","validationCode":"{% if target.type == 'bigquery' and config.model.get('partition_by') is defined %}\n  {% set pb = adapter.parse_partition_by(config.model.partition_by) %}\n  {% do adapter.add_time_ingestion_partition_column(pb, columns) %}\n{% endif %}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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"],"tags":["bigquery","partitioning","invalid-argument"],"backgroundTag":"invalid-argument-value","analyzedSha":"0267ce9170576975b76b64ce856b2e5848e96617","analyzedAt":"2026-09-07T21:53:39.732Z","contentChangedAt":"2026-09-07T21:53:39.732Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}