Como gerenciar jobs

Depois de enviar um job do BigQuery, é possível visualizar os dados dele, cancelá-lo, executá-lo novamente ou listar jobs.

Quando um job é enviado, ele pode estar em um destes três estados:

  • PENDING: programado
  • RUNNING
  • DONE: informado como SUCCESS ou FAILURE (se o job for concluído com erros)

Como ver dados do job

Veja os dados e metadados do job usando o Console do Cloud, a ferramenta de linha de comando bq e a API. Esses dados incluem detalhes como o tipo, o estado e o usuário que executou o job.

Permissões necessárias

Para acessar os dados e metadados do job, é necessário ter, no mínimo, as permissões bigquery.jobs.get. O papel predefinido do IAM a seguir inclui permissões bigquery.jobs.get:

  • bigquery.admin

Se você conceder a uma conta o papel bigquery.admin, o usuário poderá visualizar todos os dados do job no projeto, independentemente de quem o enviou.

Os papéis a seguir recebem permissões bigquery.jobs.get para jobs autocriados. Esses usuários só podem visualizar os dados dos jobs que eles enviam:

  • bigquery.user
  • bigquery.jobUser

Para mais informações sobre os papéis e as permissões do IAM no BigQuery, consulte Controle de acesso.

Como visualizar informações sobre jobs

Para visualizar informações sobre um job:

Console

  1. No painel de navegação, clique em Histórico da tarefa ou em Histórico de consultas para mais informações sobre jobs de consulta.

  2. Clique em Histórico pessoal para visualizar os detalhes dos seus jobs. Clique em Histórico do projeto para visualizar os detalhes de todos os jobs executados no projeto.

bq

Emita o comando bq show com a sinalização -j e um ID de job.

Quando você fornece o ID do job, é possível usar o ID totalmente qualificado ou a forma abreviada. Por exemplo, os IDs de jobs listados no Console do Cloud são totalmente qualificados, ou seja, incluem o projeto e o local:

my-project-1234:US.bquijob_123x456_123y123z123c

Os IDs dos jobs na ferramenta de linha de comando são listados usando a forma abreviada e não incluem o ID e o local do projeto:

bquijob_123x456_123y123z123c

Para especificar o local do job, forneça a sinalização --location e defina o valor do local. Essa sinalização é opcional, caso seja usado o ID do job totalmente qualificado. Se você incluir a sinalização --location e estiver usando o ID do job totalmente qualificado, a sinalização --location será ignorada.

O comando a seguir solicita informações sobre um job:

bq --location=location show -j job_id

Substitua:

  • location é opcional. Ele é o nome do local em que o job é executado. Por exemplo, se você estiver usando o BigQuery na região de Tóquio, defina o valor da sinalização como asia-northeast1. É possível definir um valor padrão para o local usando o arquivo.bigqueryrc.
  • job_id é o código do job.

Exemplos:

O comando a seguir recebe informações resumidas sobre o job US.bquijob_123x456_123y123z123c em execução em myproject.

bq show -j myproject:US.bquijob_123x456_123y123z123c

A saída será assim:

 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 os detalhes completos do job, insira:

bq show --format=prettyjson -j myproject:US.bquijob_123x456_789y123z456c

A saída tem esta aparência:

{
  "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

Chame jobs.get e forneça os parâmetros jobId e projectId. (Opcional) Insira o parâmetro location e defina o valor do local em que o job é executado. Esse parâmetro é opcional, caso esteja usando o código do job totalmente qualificado, que inclui o local, por exemplo, my-project-1234:US.bquijob_123x456_123y123z123c.

Go

Antes de testar essa amostra, siga as instruções de configuração para Go no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Go.

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 testar essa amostra, siga as instruções de configuração para Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Java.

Ver no GitHub (em inglês) Feedback
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 testar essa amostra, siga as instruções de configuração para Node.js no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do BigQuery para Node.js.

// 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 testar essa amostra, siga as instruções de configuração para Python no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Python.

# TODO(developer): Uncomment the lines below and replace with your values.
# from google.cloud import bigquery
# client = bigquery.Client()
# job_id = 'bq-job-123x456-123y123z123c'  # replace with your job ID
# location = 'us'                         # replace with your location

job = client.get_job(job_id, location=location)  # API request

# Print selected job properties
print("Details for job {} running in {}:".format(job_id, location))
print(
    "\tType: {}\n\tState: {}\n\tCreated: {}".format(
        job.job_type, job.state, job.created
    )
)

Como listar jobs em um projeto

Seu projeto mantém o histórico de todos os jobs criados nos últimos seis meses.

É possível visualizar o histórico de jobs do BigQuery das seguintes maneiras:

  • usando o Console do Google Cloud;
  • usando a ferramenta de linha de comando bq;
  • fazendo uma chamada do método de API jobs.list;
  • usando as bibliotecas de cliente.

O histórico de jobs inclui aqueles que estão no estado RUNNING e que estão como DONE, um campo que aparece quando o estado é informado como SUCCESS ou FAILURE.

Permissões necessárias

Para listar jobs, é necessário ter, no mínimo, as permissões bigquery.jobs.list. Os seguintes papéis predefinidos do IAM incluem permissões bigquery.jobs.list:

  • bigquery.user
  • bigquery.admin

O papel a seguir recebe permissões bigquery.jobs.list apenas para jobs autocriados. As entidades com esse papel podem listar apenas os jobs que enviarem:

  • bigquery.jobUser

Quando você recebe permissões bigquery.jobs.list, pode listar todos os jobs em um projeto, mas os detalhes e metadados são editados para jobs enviados por outros usuários. Com as permissões bigquery.jobs.list, você pode ver todos os detalhes de jobs criados automaticamente.

Para listar todos os jobs, incluindo detalhes de jobs criados por outros usuários, você precisa ter permissões bigquery.jobs.listAll. Somente os papéis bigquery.admin e bigquery.resourceAdmin têm permissões bigquery.jobs.listAll.

Para mais informações sobre os papéis e as permissões do IAM no BigQuery, consulte Papéis e permissões predefinidos.

Listar jobs

Ao listar jobs em um projeto, não é necessário fornecer um local. Atualmente, os jobs são listados para todos os locais.

Para listar jobs em um projeto:

Console

  1. No painel de navegação, clique em Histórico de jobs.

  2. Na seção Histórico pessoal, seus jobs são listados por tempo de criação com os mais recentes na parte superior. A lista inclui apenas os jobs do usuário atual. Para ver todos os jobs de um projeto, clique em Histórico do projeto. Se você não for o proprietário do projeto, talvez não tenha permissão para visualizar todos os jobs de um projeto.

bq

Emita o comando bq ls com uma das seguintes sinalizações:

  • -j é usado para identificar jobs como o recurso a ser listado.
  • --all ou -a lista os jobs de todos os usuários. Para ver os detalhes completos (não editados) de todos os jobs, você precisa ter permissões bigquery.jobs.listAll.
  • --min_creation_time é usado para listar jobs após um valor de carimbo de data/hora ser fornecido.
  • --max_creation_time é usado para listar jobs antes de um valor de carimbo de data/hora ser fornecido.
  • -n limita os resultados. Por padrão, o limite é de 100.000 resultados.
bq ls -j -a \
--min_creation_time integer1 \
--max_creation_time integer2 \
-n integer3 \
project_id

Substitua:

  • integer1 é um número inteiro que representa um registro de data e hora;
  • integer2 é um número inteiro que representa um registro de data e hora;
  • integer3 é um número inteiro que indica o número de jobs retornados;
  • project_id é o ID do projeto contendo os jobs que você está listando. Se você definir um projeto padrão, não será necessário fornecer o parâmetro project_id.

Exemplos:

O comando a seguir lista todos os jobs do usuário atual. A execução deste comando requer permissões bigquery.jobs.list.

bq ls -j myproject

O comando a seguir lista todos os jobs de todos os usuários. A execução deste comando requer permissões bigquery.jobs.listAll.

bq ls -j -a myproject

O comando a seguir lista os 10 jobs mais recentes em myproject:

bq ls -j -a -n 10 myproject

O comando a seguir lista todos os jobs enviados antes de 18 de outubro de 2018 às 16:04:53. Esse carimbo de data/hora (em milissegundos) é equivalente ao seguinte valor inteiro: 1539903893000.

bq ls -j --max_creation_time 1539903893000

API

Chame jobs.list e forneça o parâmetro projectId. Para listar jobs para todos os usuários, configure o parâmetro allUsers como true. Configurar allUsers como true requer permissões bigquery.jobs.listAll.

Go

Antes de testar essa amostra, siga as instruções de configuração para Go no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Go.

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 testar essa amostra, siga as instruções de configuração para Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Java.

Ver no GitHub (em inglês) Feedback
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 testar essa amostra, siga as instruções de configuração para Node.js no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do BigQuery para Node.js.

// 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 testar essa amostra, siga as instruções de configuração para Python no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Python.


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 jobs

É possível cancelar um job RUNNING ou PENDING das seguintes maneiras:

  • usando o Console do Cloud;
  • usando a ferramenta de linha de comando bq;
  • usando o procedimento do sistema BQ.JOBS.CANCEL em uma consulta SQL;
  • usando o método de API jobs.cancel;
  • usando as bibliotecas de cliente.

Nem todos os tipos de job podem ser cancelados. Se o job não puder ser cancelado, um erro será retornado.

Mesmo que o job possa ser cancelado, o sucesso não é garantido. O job pode ter sido concluído no momento em que a solicitação de cancelamento foi enviada ou estar em uma etapa em que não pode ser cancelado.

Permissões necessárias

Para cancelar um job, é necessário ter, no mínimo, as permissões bigquery.jobs.update. O papel predefinido do IAM a seguir inclui permissões bigquery.jobs.update:

  • bigquery.admin

Se você conceder o papel bigquery.admin a uma conta, o usuário poderá cancelar qualquer job qualificado, independentemente de quem o enviou.

Os papéis a seguir podem cancelar jobs autocriados: Esses usuários só podem cancelar os jobs que enviam:

  • bigquery.user
  • bigquery.jobUser

Para mais informações sobre os papéis e as permissões do IAM no BigQuery, consulte Papéis e permissões predefinidos.

Como cancelar um job

Para cancelar um job:

Console

  1. No painel de navegação, clique em Histórico de jobs.

  2. Na seção Histórico pessoal, clique no job que você está cancelando. Os jobs mais recentes aparecem no topo da lista.

  3. Nos detalhes do job, clique em Cancelar job.

SQL

Use o procedimento de sistema BQ.JOBS.CANCEL:

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

Substitua job_id pelo ID do job que você está cancelando.

Se você estiver em um projeto diferente, mas na mesma região do job que quer cancelar, inclua também o ID do projeto:

  CALL BQ.JOBS.CANCEL('project_id.job_id');

Substitua:

  • project_id é o ID do projeto que contém o job que você está cancelando.
  • job_id é o código do job que você está cancelando.

O procedimento retorna imediatamente, e o BigQuery cancela o job logo depois. Se o job já foi concluído ou falhou, o procedimento não tem efeito.

bq

Emita o comando bq cancel com o parâmetro job_id. É possível solicitar o cancelamento e retornar imediatamente usando a sinalização --nosync. Por padrão, as solicitações de cancelamento aguardam a conclusão.

Quando você fornece o ID do job, é possível usar o ID totalmente qualificado ou a forma abreviada. Por exemplo, os IDs de jobs listados no Console do Cloud são totalmente qualificados, ou seja, incluem o projeto e o local:

my-project-1234:US.bquijob_123x456_123y123z123c

Os IDs dos jobs na ferramenta de linha de comando bq são listados usando a forma abreviada e não incluem o ID e o local do projeto:

bquijob_123x456_123y123z123c

Para especificar o local do job, forneça a sinalização --location e defina o valor do local. Essa sinalização é opcional, caso seja usado o ID do job totalmente qualificado. Se você incluir a sinalização --location e estiver usando o ID do job totalmente qualificado, a sinalização --location será ignorada.

Com o comando a seguir, você solicita o cancelamento do job e aguarda a conclusão: Se o ID do job totalmente qualificado for fornecido, a sinalização --location será ignorada:

bq --location=location cancel job_id

O cancelamento do job é solicitado com o comando a seguir, com retorno imediato. Se o ID do job totalmente qualificado for fornecido, a sinalização --location será ignorada:

bq --location=location --nosync cancel job_id

Substitua:

  • location é opcional. Ele é o nome do local em que o job é executado. Por exemplo, se você estiver usando o BigQuery na região de Tóquio, defina o valor da sinalização como asia-northeast1. É possível definir um valor padrão para o local usando o arquivo.bigqueryrc.
  • job_id é o código do job que você está cancelando. Se você copiar o ID do job do Console do Cloud, o ID e o local do projeto serão incluídos nele. Por exemplo, my-project-1234:US.bquijob_123x456_123y123z123c.

Exemplos:

Com o comando a seguir, você cancela o job my-project-1234:US.bquijob_123x456_123y123z123c em execução na multirregião US em my-project-1234 e aguarda a conclusão. Como o ID do job que está sendo usado é totalmente qualificado, a sinalização de local não é fornecida.

bq cancel my-project-1234:US.bquijob_123x456_123y123z123c

Com o comando a seguir, você cancela o job bquijob_123x456_123y123z123c em execução na multirregião US em my-project-1234 e aguarda a conclusão. Como a forma do ID do job que está sendo usada é abreviada, a sinalização --location é fornecida.

bq --location=US cancel bquijob_123x456_123y123z123c

Com o comando a seguir, você cancela o job bquijob_123x456_123y123z123c em execução na multirregião US em my-project-1234, com retorno imediato. Como o código do job que está sendo usado é totalmente qualificado, a sinalização --location não é fornecida.

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

API

Chame jobs.cancel e forneça os parâmetros jobId e projectId. Insira o parâmetro location e defina o valor do local em que o job é executado.

Go

Antes de testar essa amostra, siga as instruções de configuração para Go no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Go.

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 testar essa amostra, siga as instruções de configuração para Java no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery Java.

Ver no GitHub (em inglês) Feedback
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 testar essa amostra, siga as instruções de configuração para Node.js no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do BigQuery para Node.js.

// 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 testar essa amostra, siga as instruções de configuração para Python no Guia de início rápido do BigQuery: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API BigQuery em Python.

# TODO(developer): Uncomment the lines below and replace with your values.
# from google.cloud import bigquery
# client = bigquery.Client()
# job_id = 'bq-job-123x456-123y123z123c'  # replace with your job ID
# location = 'us'                         # replace with your location

job = client.cancel_job(job_id, location=location)

Como repetir um job

Não é possível executar um job novamente usando o mesmo ID do job. Em vez disso, crie um novo job com a mesma configuração. Quando você envia o novo job no Console do Cloud ou na ferramenta de linha de comando bq, um novo ID do job é atribuído. Quando você envia o job usando a API ou bibliotecas de cliente, é necessário gerar um novo código de job.

Permissões necessárias

Para executar um job, é necessário ter, no mínimo, as permissões bigquery.jobs.create. Os seguintes papéis predefinidos do IAM incluem permissões bigquery.jobs.create:

  • bigquery.user
  • bigquery.jobUser
  • bigquery.admin

Para mais informações sobre os papéis e as permissões do IAM no BigQuery, consulte Papéis e permissões predefinidos.

Como executar um job novamente

Para repetir um job:

Console

Para repetir um job de consulta:

  1. No painel de navegação, clique em Histórico de consulta.

  2. Na seção Histórico pessoal ou Histórico do projeto, clique na consulta que você quer executar novamente e, depois, em Abrir consulta no editor.

  3. Clique em Executar.

Para repetir um job de carga:

  1. No painel de navegação, clique em Histórico de jobs.

  2. Na seção Histórico pessoal ou Histórico do projeto, clique no job que você quer executar novamente. Os jobs mais recentes aparecem no topo da lista.

  3. Nos detalhes do job, clique em Repetir job de carregamento.

bq

Emita o comando novamente, e o BigQuery gera automaticamente um job com um novo ID.

API

Não há um método de chamada única para repetir um job. Para fazer isso:

  1. Chame jobs.get para recuperar o recurso e executar o job novamente.

  2. Remova os campos id, status e statistics. Altere o campo jobId para um novo valor gerado pelo código de cliente. Altere outros campos, conforme necessário;

  3. Para iniciar o novo job, chame jobs.insert com o recurso modificado e o novo código do job.