Administra trabajos

Después de enviar un trabajo de BigQuery, puedes hacer lo siguiente:ver los detalles de los trabajos, mostrar trabajos, cancelar un trabajo, repetir un trabajo o borrar metadatos de trabajos.

Cuando se envía un trabajo, puede tener uno de los estados siguientes:

  • PENDING: El trabajo está programado y en espera para ejecutarse.
  • RUNNING: El trabajo está en ejecución.
  • DONE: El trabajo se completó. Si el trabajo se completa sin errores, BigQuery informa este estado como SUCCESS. Si el trabajo se completa con errores, BigQuery informa este estado como FAILURE.

Antes de comenzar

Otorga roles de Identity and Access Management (IAM) que les brindan a los usuarios los permisos necesarios para hacer cada tarea de este documento. Los permisos necesarios para realizar una tarea (si existen) se enumeran en la sección “Permisos necesarios” de la tarea.

Ver detalles del trabajo

Puedes ver los detalles del trabajo mediante la consola de Google Cloud, la herramienta de línea de comandos de bq, la API o las bibliotecas cliente. Los detalles incluyen datos y metadatos, como el tipo de trabajo, su estado y el usuario que lo creó.

Permisos necesarios

Para ver los detalles del trabajo, necesitas el permiso bigquery.jobs.get de IAM. Se te otorga automáticamente este permiso para los trabajos que creas.

Cada una de las siguientes funciones de IAM predefinidas incluye los permisos que necesitas para ver los detalles del trabajo:

  • roles/bigquery.admin (te permite ver detalles de todos los trabajos del proyecto)
  • roles/bigquery.user (te permite ver detalles de tus trabajos)
  • roles/bigquery.jobUser (te permite ver detalles de tus trabajos)

Para obtener más información sobre las funciones y los permisos de IAM en BigQuery, consulta Funciones y permisos predefinidos.

Ver detalles del trabajo

Para ver los detalles del trabajo, haz lo siguiente:

Console

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. Selecciona el tipo de historial de trabajos que deseas ver:

    • Para mostrar la información de tus trabajos recientes, haz clic en Historial personal.
    • Para mostrar información de los trabajos recientes en tu proyecto, haz clic en Historial del proyecto.
  3. Para ver los detalles del trabajo, haz clic en un trabajo.

bq

Ejecuta el comando bq show con la marca --job=true y un ID de trabajo.

Cuando proporcionas el ID de trabajo, puedes usar el ID completamente calificado o la forma abreviada. Por ejemplo, los ID de trabajo que se enumeran en la consola de Google Cloud están completamente calificados, es decir, incluyen el proyecto y la ubicación:

my-project-1234:US.bquijob_123x456_123y123z123c

En la herramienta de línea de comandos, los ID de trabajo se muestran en formato abreviado. No se incluyen el ID del proyecto ni la ubicación:

bquijob_123x456_123y123z123c

Para especificar la ubicación del trabajo, proporciona la marca --location y establece el valor en tu ubicación. Esta marca es opcional si usas el ID de trabajo completamente calificado. Si incluyes la marca --location y usas el ID de trabajo completamente calificado, la marca --location se ignora.

Con el siguiente comando se solicita información sobre un trabajo:

bq --location=LOCATION show --job=true JOB_ID

Reemplaza lo siguiente:

  • LOCATION: Es el nombre de la ubicación en la que se ejecuta el trabajo. Por ejemplo, si usas BigQuery en la región de Tokio, configura el valor de la marca como asia-northeast1. Puedes establecer un valor predeterminado para la ubicación con el archivo .bigqueryrc. Si la ubicación no se especifica como parte del ID de trabajo o mediante la marca --location, se usa la ubicación predeterminada.
  • JOB_ID: el ID del trabajo.

Ejemplos

Con el comando siguiente, se obtiene información resumida sobre el trabajo US.bquijob_123x456_123y123z123c que se ejecuta en myproject:

bq show --job=true myproject:US.bquijob_123x456_123y123z123c

El resultado es similar a este:

 Job Type    State      Start Time      Duration      User Email       Bytes Processed   Bytes Billed   Billing Tier   Labels
 ---------- --------- ----------------- ---------- ------------------- ----------------- -------------- -------------- --------
 extract    SUCCESS   06 Jul 11:32:10   0:01:41    user@example.com

Para ver todos los detalles del trabajo, ingresa lo siguiente:

bq show --format=prettyjson --job=true myproject:US.bquijob_123x456_789y123z456c

El resultado es similar a este:

{
  "configuration": {
    "extract": {
      "compression": "NONE",
      "destinationUri": "[URI removed]",
      "destinationUris": [
        "[URI removed]"
      ],
      "sourceTable": {
        "datasetId": "github_repos",
        "projectId": "bigquery-public-data",
        "tableId": "commits"
      }
    }
  },
  "etag": "\"[etag removed]\"",
  "id": "myproject:bquijob_123x456_789y123z456c",
  "jobReference": {
    "jobId": "bquijob_123x456_789y123z456c",
    "projectId": "[Project ID removed]"
  },
  "kind": "bigquery#job",
  "selfLink": "https://bigquery.googleapis.com/bigquery/v2/projects/federated-testing/jobs/bquijob_123x456_789y123z456c",
  "statistics": {
    "creationTime": "1499365894527",
    "endTime": "1499365894702",
    "startTime": "1499365894702"
  },
  "status": {
    "errorResult": {
      "debugInfo": "[Information removed for readability]",
      "message": "Operation cannot be performed on a nested schema. Field: author",
      "reason": "invalid"
    },
    "errors": [
      {
        "message": "Operation cannot be performed on a nested schema. Field: author",
        "reason": "invalid"
      }
    ],
    "state": "DONE"
  },
  "user_email": "user@example.com"
}

API

Realiza una llamada a jobs.get y proporciona los parámetros jobId y projectId. De forma opcional, proporciona el parámetro location y establece el valor en la ubicación en la que se ejecuta el trabajo. Este parámetro es opcional si se usa el ID de trabajo completamente calificado que incluye la ubicación, por ejemplo, my-project-1234:US.bquijob_123x456_123y123z123c.

Go

Antes de probar este ejemplo, sigue las instrucciones de configuración para Go incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/bigquery"
)

// getJobInfo demonstrates retrieval of a job, which can be used to monitor
// completion or print metadata about the job.
func getJobInfo(w io.Writer, projectID, jobID string) error {
	// projectID := "my-project-id"
	// jobID := "my-job-id"
	ctx := context.Background()

	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	job, err := client.JobFromID(ctx, jobID)
	if err != nil {
		return err
	}

	status := job.LastStatus()
	state := "Unknown"
	switch status.State {
	case bigquery.Pending:
		state = "Pending"
	case bigquery.Running:
		state = "Running"
	case bigquery.Done:
		state = "Done"
	}
	fmt.Fprintf(w, "Job %s was created %v and is in state %s\n",
		jobID, status.Statistics.CreationTime, state)
	return nil
}

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobId;

// Sample to get a job
public class GetJob {

  public static void runGetJob() {
    // TODO(developer): Replace these variables before running the sample.
    String jobName = "MY_JOB_NAME";
    getJob(jobName);
  }

  public static void getJob(String jobName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      JobId jobId = JobId.of(jobName);
      Job job = bigquery.getJob(jobId);
      System.out.println("Job retrieved successfully");
    } catch (BigQueryException e) {
      System.out.println("Job not retrieved. \n" + e.toString());
    }
  }
}

Node.js

Antes de probar este ejemplo, sigue las instrucciones de configuración para Node.js incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Node.js.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function getJob() {
  // Get job properties.

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const jobId = "existing-job-id";

  // Create a job reference
  const job = bigquery.job(jobId);

  // Retrieve job
  const [jobResult] = await job.get();

  console.log(jobResult.metadata.jobReference);
}

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración para Python incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

from google.cloud import bigquery

def get_job(
    client: bigquery.Client,
    location: str = "us",
    job_id: str = "abcd-efgh-ijkl-mnop",
) -> None:
    job = client.get_job(job_id, location=location)

    # All job classes have "location" and "job_id" string properties.
    # Use these properties for job operations such as "cancel_job" and
    # "delete_job".
    print(f"{job.location}:{job.job_id}")
    print(f"Type: {job.job_type}")
    print(f"State: {job.state}")
    print(f"Created: {job.created.isoformat()}")

Si necesitas más información para solucionar problemas de un trabajo, consulta las vistas INFORMATION_SCHEMA.JOBS* y registros.

Muestra los trabajos de un proyecto

BigQuery guarda un historial de trabajos de seis meses para todos los trabajos de un proyecto.

Puedes ver el historial de trabajos de las siguientes maneras:

El historial de trabajos incluye trabajos que se encuentran en el estado RUNNING y trabajos DONE (indicado cuando se informa el estado como SUCCESS o FAILURE).

Permisos necesarios

Para obtener una lista de todos los trabajos que creaste en un proyecto, necesitas el permiso bigquery.jobs.create de IAM. Para obtener una lista de todos los trabajos que crearon todos los usuarios de un proyecto, necesitas el permiso bigquery.jobs.list de IAM. Solo puedes ver los detalles completos de los trabajos que creas. Se ocultan los detalles de los trabajos que crean otros usuarios.

Cada una de las siguientes funciones predefinidas de IAM incluye los permisos que necesitas para mostrar los trabajos:

  • roles/bigquery.admin (te permite mostrar todos los trabajos del proyecto)
  • roles/bigquery.user (te permite mostrar todos los trabajos del proyecto)
  • roles/bigquery.jobUser (te permite mostrar tus trabajos)

Para mostrar todos los trabajos de un proyecto, incluidos sus detalles, necesitas el permiso bigquery.jobs.listAll de IAM.

Cada una de las siguientes funciones predefinidas de IAM incluye los permisos que necesitas para mostrar todos los trabajos, incluidos sus detalles:

  • roles/bigquery.admin
  • roles/bigquery.resourceAdmin

Para obtener más información sobre las funciones y los permisos de IAM en BigQuery, consulta Funciones y permisos predefinidos.

Mostrar trabajos

BigQuery muestra los trabajos de todas las ubicaciones.

Para mostrar los trabajos en un proyecto, haz lo siguiente:

Console

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. Para enumerar todos los trabajos de un proyecto, haz clic en Historial del proyecto. Si no eres propietario del proyecto, es posible que no tengas permiso para ver todos los trabajos de un proyecto. Los trabajos más recientes se muestran primero.

  3. Para mostrar tus trabajos, haz clic en Historial personal.

bq

Ejecuta el comando bq ls con una de las marcas siguientes:

  • --jobs=true o -j: identifica los trabajos como el tipo de recurso que se debe enumerar.
  • --all=true o -a: enumera los trabajos de todos los usuarios. Para ver los detalles completos (sin editar) de todos los trabajos, debes tener los permisos bigquery.jobs.listAll.
  • --min_creation_time: enumera los trabajos después de un valor de marca de tiempo proporcionado. Este valor se representa como una marca de tiempo de época Unix en milisegundos.
  • --max_creation_time: enumera los trabajos antes de un valor de marca de tiempo proporcionado. Este valor se representa como una marca de tiempo de época Unix en milisegundos.
  • --max_results o -n limitan los resultados. El valor predeterminado es 50 resultados.
bq ls --jobs=true --all=true \
    --min_creation_time=MIN_TIME \
    --max_creation_time=MAX_TIME \
    --max_results=MAX_RESULTS \
    PROJECT_ID

Reemplaza lo siguiente:

  • MIN_TIME: un número entero que representa una marca de tiempo de época Unix en milisegundos.
  • MAX_TIME: un número entero que representa una marca de tiempo de época Unix en milisegundos.
  • MAX_RESULTS: un número entero que indica la cantidad de trabajos que se muestran.
  • PROJECT_ID: el ID del proyecto que contiene los trabajos que enumeras. Si configuras un proyecto predeterminado, no necesitas proporcionar el parámetro PROJECT_ID.

Ejemplos

Con el siguiente comando, se enumeran todos los trabajos para el usuario actual. Este comando requiere permisos bigquery.jobs.list para ejecutarse.

bq ls --jobs=true myproject

Con el comando siguiente, se crea una lista de todos los trabajos de todos los usuarios. Este comando requiere permisos bigquery.jobs.listAll para ejecutarse.

bq ls --jobs=true --all=true myproject

Con el comando siguiente, se enumeran los 10 trabajos más recientes en myproject:

bq ls --jobs=true --all=true --max_results=10 myproject

Con el comando siguiente, se enumeran todos los trabajos enviados antes del 3 de marzo de 2032 a las 4:04:00 a.m. Esta marca de tiempo (en milisegundos) es equivalente al siguiente número entero: 1961899440000.

bq ls --jobs=true --max_creation_time=1961899440000

API

Realiza una llamada a jobs.list y proporciona el parámetro projectId. Si quieres enumerar los trabajos de todos los usuarios, establece el parámetro de allUsers en true. Necesitarás el permiso bigquery.jobs.listAll para configurar allUsers como true.

Go

Antes de probar este ejemplo, sigue las instrucciones de configuración para Go incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/bigquery"
	"google.golang.org/api/iterator"
)

// listJobs demonstrates iterating through the BigQuery jobs collection.
func listJobs(w io.Writer, projectID string) error {
	// projectID := "my-project-id"
	// jobID := "my-job-id"
	ctx := context.Background()

	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	it := client.Jobs(ctx)
	// List up to 10 jobs to demonstrate iteration.
	for i := 0; i < 10; i++ {
		j, err := it.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return err
		}
		state := "Unknown"
		switch j.LastStatus().State {
		case bigquery.Pending:
			state = "Pending"
		case bigquery.Running:
			state = "Running"
		case bigquery.Done:
			state = "Done"
		}
		fmt.Fprintf(w, "Job %s in state %s\n", j.ID(), state)
	}
	return nil
}

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import com.google.api.gax.paging.Page;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Job;

// Sample to get list of jobs
public class ListJobs {

  public static void runListJobs() {
    listJobs();
  }

  public static void listJobs() {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      Page<Job> jobs = bigquery.listJobs(BigQuery.JobListOption.pageSize(10));
      if (jobs == null) {
        System.out.println("Dataset does not contain any jobs.");
        return;
      }
      jobs.getValues().forEach(job -> System.out.printf("Success! Job ID: %s", job.getJobId()));
    } catch (BigQueryException e) {
      System.out.println("Jobs not listed in dataset due to error: \n" + e.toString());
    }
  }
}

Node.js

Antes de probar este ejemplo, sigue las instrucciones de configuración para Node.js incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Node.js.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function listJobs() {
  // Lists all jobs in current GCP project.

  // List the 10 most recent jobs in reverse chronological order.
  //  Omit the max_results parameter to list jobs from the past 6 months.
  const options = {maxResults: 10};
  const [jobs] = await bigquery.getJobs(options);

  console.log('Jobs:');
  jobs.forEach(job => console.log(job.id));
}

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración para Python incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.


from google.cloud import bigquery

import datetime

# Construct a BigQuery client object.
client = bigquery.Client()

# List the 10 most recent jobs in reverse chronological order.
# Omit the max_results parameter to list jobs from the past 6 months.
print("Last 10 jobs:")
for job in client.list_jobs(max_results=10):  # API request(s)
    print("{}".format(job.job_id))

# The following are examples of additional optional parameters:

# Use min_creation_time and/or max_creation_time to specify a time window.
print("Jobs from the last ten minutes:")
ten_mins_ago = datetime.datetime.utcnow() - datetime.timedelta(minutes=10)
for job in client.list_jobs(min_creation_time=ten_mins_ago):
    print("{}".format(job.job_id))

# Use all_users to include jobs run by all users in the project.
print("Last 10 jobs run by all users:")
for job in client.list_jobs(max_results=10, all_users=True):
    print("{} run by user: {}".format(job.job_id, job.user_email))

# Use state_filter to filter by job state.
print("Last 10 jobs done:")
for job in client.list_jobs(max_results=10, state_filter="DONE"):
    print("{}".format(job.job_id))

Cancelar trabajos

Puedes cancelar un trabajo RUNNING o PENDING de las siguientes maneras:

  • Usa la consola de Google Cloud
  • Usa el comando bq cancel.
  • Usa el procedimiento del sistema BQ.JOBS.CANCELen una consulta de SQL.
  • Mediante una llamada al método de la API jobs.cancel.
  • Usa bibliotecas cliente.

No todos los tipos de trabajos se pueden cancelar. Si un trabajo no se puede cancelar, se muestra un error.

Incluso si el trabajo se puede cancelar, el éxito no está garantizado. Tal vez el trabajo se completó antes del momento en que se envía la solicitud de cancelación o el trabajo se encuentra en una etapa en la que no se puede cancelar.

Permisos necesarios

Para cancelar un trabajo, necesitas el permiso bigquery.jobs.update de IAM. Se te otorga automáticamente este permiso para los trabajos que creas.

Cada una de las siguientes funciones predefinidas de IAM incluye los permisos que necesitas para cancelar un trabajo:

  • roles/bigquery.admin (te permite cancelar cualquier trabajo en el proyecto)
  • roles/bigquery.user (te permite cancelar tus trabajos)
  • roles/bigquery.jobUser (te permite cancelar tus trabajos)

Para obtener más información sobre las funciones y los permisos de IAM en BigQuery, consulta Funciones y permisos predefinidos.

Cancelar un trabajo

Por lo general, la cancelación de un trabajo tarda menos de un minuto.

Para cancelar un trabajo, haz lo siguiente:

Console

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. Haz clic en Redactar consulta nueva y, luego, ingresa una consulta.

  3. Para ejecutar la consulta, haz clic en Ejecutar.

  4. Para cancelar un trabajo, haz clic en Cancelar.

SQL

Usa el procedimiento del sistema BQ.JOBS.CANCEL:

  CALL BQ.JOBS.CANCEL('JOB_ID');

Reemplaza JOB_ID por el ID del trabajo que deseas cancelar.

Si estás en un proyecto diferente, pero en la misma región que el trabajo que deseas cancelar, también debes incluir el ID del proyecto:

  CALL BQ.JOBS.CANCEL('PROJECT_ID.JOB_ID');

Reemplaza lo siguiente:

  • PROJECT_ID: el ID del proyecto que contiene el trabajo que deseas cancelar
  • JOB_ID: el ID del trabajo que se encuentra en cancelación

El procedimiento se muestra inmediatamente, y BigQuery cancela el trabajo poco después. Si el trabajo ya se realizó de forma correcta o falló, el procedimiento no tiene efecto.

bq

Ejecuta el comando bq cancel con el argumento JOB_ID. Puedes solicitar la cancelación y volver de inmediato con la marca --nosync=true. De forma predeterminada, las solicitudes de cancelación esperan su finalización.

Cuando proporcionas el argumento JOB_ID, puedes usar el ID completamente calificado o la forma abreviada. Por ejemplo, los ID de trabajo que se enumeran en la consola de Google Cloud están completamente calificados, es decir, incluyen el proyecto y la ubicación:

my-project-1234:US.bquijob_123x456_123y123z123c

En la herramienta de línea de comandos de bq, los ID de trabajo se muestran en formato abreviado. No se incluyen el ID del proyecto ni la ubicación:

bquijob_123x456_123y123z123c

Para especificar la ubicación del trabajo, proporciona la marca --location y establece el valor en tu ubicación. Esta marca es opcional si usas el ID de trabajo completamente calificado. Si incluyes la marca --location y usas el ID de trabajo completamente calificado, la marca --location se ignora.

Con el comando siguiente, se solicita la cancelación del trabajo y se espera su finalización. Si se proporciona el ID de trabajo completamente calificado, la marca --location se ignora:

bq --location=LOCATION cancel JOB_ID

Con el comando siguiente, se solicita la cancelación del trabajo y se vuelve de inmediato. Si se proporciona el ID de trabajo completamente calificado, la marca --location se ignora:

bq --location=LOCATION --nosync cancel JOB_ID

Reemplaza lo siguiente:

  • LOCATION (opcional): el nombre de la ubicación en la que se ejecuta el trabajo. Por ejemplo, si usas BigQuery en la región de Tokio, configura el valor de la marca como asia-northeast1. Puedes establecer un valor predeterminado para la ubicación con el archivo .bigqueryrc.
  • JOB_ID es el ID del trabajo que se encuentra en cancelación. Si copias el ID de trabajo de la consola de Google Cloud, el ID del proyecto y la ubicación se incluyen en el id de trabajo. Por ejemplo, my-project-1234:US.bquijob_123x456_123y123z123c

Ejemplos

Con el siguiente comando, se cancela el trabajo my-project-1234:US.bquijob_123x456_123y123z123c que se ejecuta en la ubicación multirregional US en el proyecto my-project-1234 y espera su finalización. Debido a que se usa el ID del trabajo completamente calificado, no se proporciona la marca location.

bq cancel my-project-1234:US.bquijob_123x456_123y123z123c

Con el siguiente comando, se cancela el trabajo bquijob_123x456_123y123z123c que se ejecuta en la ubicación multirregional US en el proyecto my-project-1234 y espera su finalización. Debido a que se usa la forma abreviada del ID del trabajo, se proporciona la marca --location.

bq --location=US cancel bquijob_123x456_123y123z123c

Con el siguiente comando, se cancela el trabajo bquijob_123x456_123y123z123c que se ejecuta en la ubicación multirregional US en el proyecto my-project-1234 y se muestra de inmediato. Debido a que se usa el ID de trabajo completamente calificado, no se proporciona la marca --location.

bq --nosync cancel my-project-1234:US.bquijob_123x456_123y123z123c

API

Realiza una llamada a jobs.cancel y proporciona los parámetros jobId y projectId. Proporciona el parámetro location y configura el valor como la ubicación en la que se ejecuta el trabajo.

Go

Antes de probar este ejemplo, sigue las instrucciones de configuración para Go incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Go.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// cancelJob demonstrates how a job cancellation request can be issued for a specific
// BigQuery job.
func cancelJob(projectID, jobID string) error {
	// projectID := "my-project-id"
	// jobID := "my-job-id"
	ctx := context.Background()

	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	job, err := client.JobFromID(ctx, jobID)
	if err != nil {
		return nil
	}
	return job.Cancel(ctx)
}

Java

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobId;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.QueryJobConfiguration;
import java.util.UUID;

// Sample to cancel a job
public class CancelJob {

  public static void runCancelJob() {
    // TODO(developer): Replace these variables before running the sample.
    String query = "SELECT country_name from `bigquery-public-data.utility_us.country_code_iso`";
    cancelJob(query);
  }

  public static void cancelJob(String query) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      // Specify a job configuration to set optional job resource properties.
      QueryJobConfiguration queryConfig = QueryJobConfiguration.newBuilder(query).build();

      // The location and job name are optional,
      // if both are not specified then client will auto-create.
      String jobName = "jobId_" + UUID.randomUUID().toString();
      JobId jobId = JobId.newBuilder().setLocation("us").setJob(jobName).build();

      // Create a job with job ID
      bigquery.create(JobInfo.of(jobId, queryConfig));

      // Get a job that was just created
      Job job = bigquery.getJob(jobId);
      if (job.cancel()) {
        System.out.println("Job canceled successfully");
      } else {
        System.out.println("Job was not canceled");
      }
    } catch (BigQueryException e) {
      System.out.println("Job was not canceled.\n" + e.toString());
    }
  }
}

Node.js

Antes de probar este ejemplo, sigue las instrucciones de configuración para Node.js incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Node.js.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function cancelJob() {
  // Attempts to cancel a job.

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const jobId = "existing-job-id";

  // Create a job reference
  const job = bigquery.job(jobId);

  // Attempt to cancel job
  const [apiResult] = await job.cancel();

  console.log(apiResult.job.status);
}

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración para Python incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

from google.cloud import bigquery

def cancel_job(
    client: bigquery.Client,
    location: str = "us",
    job_id: str = "abcd-efgh-ijkl-mnop",
) -> None:
    job = client.cancel_job(job_id, location=location)
    print(f"{job.location}:{job.job_id} cancelled")

Borra metadatos de trabajos

Puedes borrar los metadatos de un trabajo específico usando la herramienta de línea de comandos de bq y la biblioteca cliente de Python. BigQuery conserva el historial de trabajos ejecutados en los últimos 6 meses. Puedes usar este método para quitar información sensible que podría estar presente en las instrucciones de consulta. Los metadatos del trabajo solo se pueden borrar después de que se completa el trabajo. Si un trabajo creó trabajos secundarios, estos también se borran. No se permite borrar trabajos secundarios. Solo se pueden borrar trabajos superiores o de nivel superior.

Permisos necesarios

Para borrar los metadatos del trabajo, necesitas el permiso bigquery.jobs.delete de IAM.

La función de IAM predefinida roles/bigquery.admin incluye el permiso que necesitas para borrar los metadatos del trabajo.

Para obtener más información sobre las funciones y los permisos de IAM en BigQuery, consulta Funciones y permisos predefinidos.

Borra metadatos de trabajos

bq

Ejecuta el comando bq rm con la marca -j y un ID de trabajo.

Cuando proporcionas el ID de trabajo, puedes usar el ID completamente calificado o la forma abreviada. Por ejemplo, los ID de trabajo que se enumeran en la consola de Google Cloud están completamente calificados, es decir, incluyen el proyecto y la ubicación:

my-project-1234:US.bquijob_123x456_123y123z123c

En la herramienta de línea de comandos de bq, los ID de trabajo se muestran en formato abreviado. No se incluyen el ID del proyecto ni la ubicación:

bquijob_123x456_123y123z123c

Para especificar la ubicación del trabajo, proporciona la marca --location y establece el valor en tu ubicación. Esta marca es opcional si usas el ID de trabajo completamente calificado. Si incluyes la marca --location y usas el ID de trabajo completamente calificado, la marca --location se ignora.

Con el siguiente comando se borra un trabajo:

bq --location=location \
    --project_id=project_id \
    rm -j job_id

Python

Antes de probar este ejemplo, sigue las instrucciones de configuración para Python incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Python.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

from google.api_core import exceptions
from google.cloud import bigquery

# TODO(developer): Set the job ID to the ID of the job whose metadata you
#                  wish to delete.
job_id = "abcd-efgh-ijkl-mnop"

# TODO(developer): Set the location to the region or multi-region
#                  containing the job.
location = "us-east1"

client = bigquery.Client()

client.delete_job_metadata(job_id, location=location)

try:
    client.get_job(job_id, location=location)
except exceptions.NotFound:
    print(f"Job metadata for job {location}:{job_id} was deleted.")

Repetición de trabajos

No es posible repetir un trabajo mediante el mismo ID de trabajo. En su lugar, debes crear un trabajo nuevo con la misma configuración. Cuando envías el trabajo nuevo a la consola de Google Cloud o a la herramienta de línea de comandos de bq, se asigna un ID de trabajo nuevo. Cuando envías el trabajo mediante la API o las bibliotecas cliente, debes generar un ID del trabajo nuevo.

Permisos necesarios

Para ejecutar un trabajo, necesitas el permiso bigquery.jobs.create de IAM.

Cada una de las siguientes funciones predefinidas de IAM incluye los permisos que necesitas para ejecutar un trabajo:

  • roles/bigquery.admin
  • roles/bigquery.user
  • roles/bigquery.jobUser

Para obtener más información sobre las funciones y los permisos de IAM en BigQuery, consulta Funciones y permisos predefinidos.

Repite un trabajo

Para repetir un trabajo, haz lo siguiente:

Console

Para repetir un trabajo de consulta, haz lo siguiente:

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. Para mostrar todos tus trabajos, haz clic en Historial personal. Para enumerar todos los trabajos de un proyecto, haz clic en Historial del proyecto.

  3. Haz clic en un trabajo de consulta para abrir los detalles del trabajo.

  4. Para repetir una consulta, haz clic en Open as new query.

  5. Haga clic en Ejecutar.

Para repetir un trabajo de carga, haz lo siguiente:

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. Para mostrar todos tus trabajos, haz clic en Historial personal. Para enumerar todos los trabajos de un proyecto, haz clic en Historial del proyecto.

  3. Haz clic en un trabajo de carga para abrir los detalles del trabajo.

  4. Para repetir un trabajo, haz clic en Repetir trabajo de carga.

bq

Genera tu comando de nuevo y BigQuery crea de forma automática un trabajo con un ID de trabajo nuevo.

API

No hay un método de llamada única para repetir un trabajo; si quieres repetir un trabajo específico, sigue estos pasos:

  1. Realiza una llamada a jobs.get si quieres recuperar el recurso para que el trabajo se repita.

  2. Quita el campo de id, estado y estadísticas. Cambia el campo jobId a un valor nuevo que genera tu código de cliente. Cambia cualquier otro campo según sea necesario.

  3. Realiza una llamada a jobs.insert con el recurso modificado y el ID de trabajo nuevo para iniciar el trabajo nuevo.