Como gerenciar jobs

Depois de enviar um job do BigQuery, é possível visualizar detalhes do job, listar jobs, cancelar um job, repetir um job, ou excluir metadados do job.

Quando um job é enviado, ele pode estar em um dos seguintes estados:

  • PENDING: o job está programado e aguardando para ser executado.
  • RUNNING: o job está em andamento.
  • DONE: o job foi concluído. Se o job for concluído sem erros, o BigQuery informará esse estado como SUCCESS. Se o job for concluído com erros, o BigQuery informará esse estado como FAILURE.

Antes de começar

Atribua papéis do Identity and Access Management (IAM) que concedam aos usuários as permissões necessárias para realizar cada tarefa deste documento. As permissões necessárias para executar uma tarefa (se houver) são listadas na seção "Permissões necessárias".

Mais detalhes do job

Para ver os detalhes do job, use o console do Google Cloud, a ferramenta de linha de comando bq, a API ou as bibliotecas de cliente. Os detalhes incluem dados e metadados, como o tipo, o estado e o usuário que criou o job.

Permissões necessárias

Para ver os detalhes do job, você precisa da permissão bigquery.jobs.get do IAM. Essa permissão é concedida automaticamente aos jobs que você criar.

Cada um dos papéis do IAM predefinidos a seguir inclui as permissões necessárias para visualizar os detalhes do job:

  • roles/bigquery.admin (permite visualizar detalhes de todos os jobs no projeto)
  • roles/bigquery.user (permite visualizar detalhes dos seus jobs)
  • roles/bigquery.jobUser (permite visualizar detalhes dos seus jobs)

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

Ver detalhes do job

Para visualizar os detalhes do job, faça o seguinte:

Console

  1. Acessar a página do BigQuery.

    Ir para o BigQuery

  2. Selecione o tipo de histórico de jobs que você quer ver:

    • Para exibir informações dos jobs recentes, clique em Histórico pessoal.
    • Para exibir informações de jobs recentes no projeto, clique em Histórico do projeto.
  3. Para ver os detalhes de um job, clique nele.

bq

Emita o comando bq show com a sinalização --job=true 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 Google 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 --job=true JOB_ID

Substitua:

  • LOCATION: 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. Se o local não for especificado como parte do ID do job ou por meio da sinalização --location, será usado o local padrão.
  • JOB_ID: o ID 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 --job=true myproject:US.bquijob_123x456_123y123z123c

O resultado 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 detalhes completos do job, digite o seguinte:

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

O resultado será assim:

{
  "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 esta amostra, siga as instruções de configuração do 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 em Go.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de 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 testar esta amostra, siga as instruções de configuração do 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 em Java.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de 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 testar esta amostra, siga as instruções de configuração do 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 BigQuery em Node.js.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de 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 testar esta amostra, siga as instruções de configuração do 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.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de 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()}")

Se você precisar de mais informações para resolver problemas de um job, consulte as visualizações INFORMATION_SCHEMA.JOBS* e Registros.

Listar jobs em um projeto

O BigQuery salva um histórico de jobs de seis meses para todos os jobs de um projeto.

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

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 todos os jobs criados em um projeto, você precisa da permissão bigquery.jobs.create do IAM. Para listar todos os jobs criados por todos os usuários em um projeto, você precisa da permissão bigquery.jobs.list do IAM. Só é possível ver os detalhes completos dos jobs que você criar. Os detalhes dos jobs criados por outros usuários são editados.

Cada um dos papéis predefinidos do IAM a seguir inclui as permissões necessárias para listar jobs:

  • roles/bigquery.admin (permite listar todos os jobs no projeto)
  • roles/bigquery.user (permite listar todos os jobs no projeto)
  • roles/bigquery.jobUser (permite listar seus jobs)

Para listar todos os jobs em um projeto, incluindo os detalhes, você precisa da permissão bigquery.jobs.listAll do IAM.

Cada um dos papéis predefinidos do IAM a seguir inclui as permissões necessárias para listar todos os jobs, incluindo os detalhes:

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

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

O BigQuery lista jobs para todos os locais.

Para listar jobs em um projeto, faça o seguinte:

Console

  1. Acessar a página do BigQuery.

    Ir para o BigQuery

  2. Para listar 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 desse projeto. Os jobs mais recentes são listados primeiro.

  3. Para listar seus jobs, clique em Histórico pessoal.

bq

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

  • --jobs=true ou -j: identifica jobs como o tipo de recurso a ser listado.
  • --all=true 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: lista os jobs após um valor de carimbo de data/hora ser fornecido. Esse valor é representado como um carimbo de data/hora da época Unix em milissegundos.
  • --max_creation_time: lista os jobs antes de um valor de carimbo de data/hora ser fornecido. Esse valor é representado como um carimbo de data/hora da época Unix em milissegundos.
  • --max_results ou -n limita os resultados. O padrão é 50 resultados.
bq ls --jobs=true --all=true \
    --min_creation_time=MIN_TIME \
    --max_creation_time=MAX_TIME \
    --max_results=MAX_RESULTS \
    PROJECT_ID

Substitua:

  • MIN_TIME: um número inteiro que representa um carimbo de data/hora da época Unix em milissegundos.
  • MAX_TIME: um número inteiro que representa um carimbo de data/hora da época Unix em milissegundos.
  • MAX_RESULTS: um número inteiro que indica o número de jobs retornados.
  • PROJECT_ID: o ID do projeto que contém 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 --jobs=true 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 --jobs=true --all=true myproject

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

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

O comando a seguir lista todos os jobs enviados antes de 3 de março de 2032 às 4:04:00. Esse carimbo de data/hora (em milissegundos) é equivalente ao seguinte valor inteiro: 1961899440000.

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

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 esta amostra, siga as instruções de configuração do 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 em Go.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de 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 testar esta amostra, siga as instruções de configuração do 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 em Java.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de 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 testar esta amostra, siga as instruções de configuração do 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 BigQuery em Node.js.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de 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 testar esta amostra, siga as instruções de configuração do 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.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de 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 jobs

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

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

Nem todos os tipos de jobs 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, você precisa da permissão do IAM bigquery.jobs.update. Essa permissão é concedida automaticamente aos jobs que você criar.

Cada um dos papéis predefinidos do IAM a seguir inclui as permissões necessárias para cancelar um job:

  • roles/bigquery.admin (permite cancelar qualquer job no projeto)
  • roles/bigquery.user (permite cancelar seus jobs)
  • roles/bigquery.jobUser (permite cancelar seus jobs)

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

Cancelar um job

Geralmente, leva menos de um minuto para concluir um cancelamento de job.

Para cancelar um job, faça o seguinte:

Console

  1. Acessar a página do BigQuery.

    Ir para o BigQuery

  2. Clique em Escrever nova consulta e faça a consulta.

  3. Para executar a consulta, clique em Executar.

  4. Para cancelar um job, clique em Cancelar.

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 argumento JOB_ID. É possível solicitar o cancelamento e retornar imediatamente usando a sinalização --nosync=true. Por padrão, as solicitações de cancelamento aguardam a conclusão.

Quando você fornece o argumento JOB_ID, é possível usar o ID totalmente qualificado ou a forma abreviada. Por exemplo, os IDs de jobs listados no console do Google 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): 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 Google Cloud, o ID e o local do projeto serão incluídos nele. Por exemplo, my-project-1234:US.bquijob_123x456_123y123z123c.

Exemplos

O comando a seguir cancela o job my-project-1234:US.bquijob_123x456_123y123z123c em execução na multirregião US no projeto 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

O comando a seguir cancela o job bquijob_123x456_123y123z123c em execução na localização multirregional US no projeto 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

O comando a seguir cancela o job bquijob_123x456_123y123z123c em execução na multirregião US no projeto my-project-1234 e retorna imediatamente. 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 esta amostra, siga as instruções de configuração do 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 em Go.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de 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 testar esta amostra, siga as instruções de configuração do 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 em Java.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de 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 testar esta amostra, siga as instruções de configuração do 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 BigQuery em Node.js.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de 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 testar esta amostra, siga as instruções de configuração do 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.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de 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")

Excluir metadados do job

É possível excluir os metadados de um job específico usando a ferramenta de linha de comando bq e a biblioteca de cliente do Python. O BigQuery preserva um histórico de jobs executados nos últimos seis meses. Use esse método para remover informações confidenciais que podem estar presentes nas instruções de consulta. Os metadados do job só podem ser excluídos após a conclusão. Se um job tiver criado jobs filho, eles também serão excluídos. Não é permitida a exclusão de jobs filhos. Somente jobs pai ou de nível superior podem ser excluídos.

Permissões necessárias

Para excluir os metadados do job, você precisa da permissão bigquery.jobs.delete do IAM.

O papel predefinido do IAM roles/bigquery.admin inclui a permissão necessária para excluir os metadados do job.

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

Excluir metadados do job

bq

Emita o comando bq rm 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 Google 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.

O comando a seguir exclui um job:

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

Python

Antes de testar esta amostra, siga as instruções de configuração do 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.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de 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.")

Repetir jobs

Não é possível repetir um job usando o mesmo ID. Em vez disso, crie um novo job com a mesma configuração. Quando você envia o novo job no console do Google 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, você precisa da permissão do IAM bigquery.jobs.create.

Cada um dos papéis predefinidos do IAM a seguir inclui as permissões necessárias para executar um job:

  • roles/bigquery.admin
  • roles/bigquery.user
  • roles/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.

Repetir um job

Para repetir um job, faça o seguinte:

Console

Para repetir um job de consulta, faça o seguinte:

  1. Acessar a página do BigQuery.

    Ir para o BigQuery

  2. Para listar seus jobs, clique em Histórico pessoal. Para listar todos os jobs de um projeto, clique em Histórico do projeto.

  3. Clique em um job de consulta para abrir os detalhes dele.

  4. Para repetir uma consulta, clique em Abrir como nova consulta.

  5. Clique em Executar.

Para repetir um job de carregamento, faça o seguinte:

  1. Acessar a página do BigQuery.

    Ir para o BigQuery

  2. Para listar seus jobs, clique em Histórico pessoal. Para listar todos os jobs de um projeto, clique em Histórico do projeto.

  3. Clique em um job de carregamento para abrir os detalhes dele.

  4. Para repetir um 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 ID do job.