---
name: bq_get_job
kind: function
lang: py
domain: infra
version: "1.0.0"
purity: impure
signature: "def bq_get_job(client: BQClient, job_id: str) -> dict"
description: "Obtiene detalles completos de un job por su ID incluyendo estado, bytes procesados y errores. Incluye campos adicionales respecto a bq_list_jobs: destination_table, query y lista de errores."
tags: [bigquery, gcp, job, get, google-cloud, python]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: [google-cloud-bigquery]
params:
  - name: client
    desc: "cliente autenticado de BigQuery obtenido con bq_auth"
  - name: job_id
    desc: "ID del job a consultar (formato: 'proyecto:region.job_id' o solo 'job_id')"
output: "dict con campos: job_id, job_type, state, created, started, ended, user_email, bytes_processed, error, y opcionalmente destination_table, query, errors"
tested: false
tests: []
test_file_path: ""
file_path: "python/functions/bigquery/jobs.py"
---

## Ejemplo

```python
from bigquery.client import bq_auth
from bigquery.jobs import bq_get_job

client = bq_auth("my-project")

job = bq_get_job(client, "job_abc123")
print(job["state"], job["bytes_processed"])

# Inspeccionar query SQL del job
if job.get("query"):
    print("SQL:", job["query"][:200])

# Ver errores detallados
if job["error"]:
    print("Error principal:", job["error"])
    for err in job.get("errors", []):
        print(" -", err)
```

## Notas

Lanza `google.api_core.exceptions.NotFound` si el job_id no existe en el proyecto.

A diferencia de `bq_list_jobs`, este metodo retorna campos adicionales cuando estan disponibles:
- `destination_table`: tabla destino (solo en query/load jobs con destino explicito)
- `query`: texto SQL del job (solo en query jobs)
- `errors`: lista completa de errores (cada uno como dict con `reason`, `message`, `location`)

Los campos `created`, `started` y `ended` se serializan como strings ISO 8601.
