dbt-labs/dbt-core · error

job_execution_timeout_seconds must be a valid integer

Error message

job_execution_timeout_seconds must be a valid integer

What it means

Config validation in submit_python_job: the `job_execution_timeout_seconds` value from the model/adapter config could not be parsed as an integer, so the BigQuery job timeout cannot be constructed. The at-fault input is that config value as stored in the warehouse config.

Solutions

  1. Set job_execution_timeout_seconds to an integer (e.g. 300) in the profile or model config
  2. Remove quotes around the value if it was supplied as a string in YAML
  3. Check for accidental float or non-numeric values in the config
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at crates/dbt-adapter/src/python/bigquery/mod.rs:157 when the library encounters an invalid state.

Common situations: See trigger scenarios.

Understand the failure class


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

Appendix: source

Thrown at crates/dbt-adapter/src/python/bigquery/mod.rs:157

        &config
            .get_attr("submission_method")
            .ok()
            .and_then(|v| v.as_str().map(|s| s.to_string()))
            .unwrap_or_else(|| {
                adapter
                    .get_db_config("submission_method")
                    .map(|v| v.to_string())
                    .unwrap_or_else(|| "serverless".to_string())
            }),
    )
    .ok_or_else(|| AdapterError::new(AdapterErrorKind::Internal, "Invalid submission method"))?;

    let job_execution_timeout = adapter
        .get_db_config("job_execution_timeout_seconds")
        .map(|v| v.to_string())
        .map(|v| {
            v.parse::<i64>()
                .expect("job_execution_timeout_seconds must be a valid integer")
        });

    let default_timeout = if submission_method == SubmissionMethod::BigFrames {
        60 * 60
    } else {
        24 * 60 * 60
    };

    let timeout = config
        .get_attr("timeout")
        .ok()
        .and_then(|v| v.as_i64())
        .or(job_execution_timeout)
        .unwrap_or(default_timeout);

    let packages: Vec<String> = config
        .get_attr("packages")
        .ok()

View on GitHub (pinned to 0267ce9170)