Gestisci le opportunità di lavoro

Questo documento descrive come gestire i job in BigQuery, inclusa la possibilità di visualizzare i dettagli dei job, elencare i job, annullare un job, ripetere un job, e eliminare i metadati dei job.

Informazioni sui job BigQuery

Ogni volta che carichi, esporti, esegui query o copi i dati, BigQuery crea, pianifica ed esegue automaticamente un job che monitora l'avanzamento dell'attività.

Poiché il completamento dei job può richiedere molto tempo, vengono eseguiti in modo asincrono e possono essere sottoposti a polling per verificarne lo stato. Le azioni più brevi, come l'elenco delle risorse o l'ottenimento dei metadati, non vengono gestite come job.

Quando un job viene inviato, può trovarsi in uno dei seguenti stati:

  • PENDING: il job è pianificato e in attesa di esecuzione.
  • RUNNING: il lavoro è in corso.
  • DONE: il job è stato completato. Se il job viene completato senza errori, BigQuery segnala questo stato come SUCCESS. Se il job viene completato con errori, BigQuery segnala questo stato come FAILURE.

Quote

Per informazioni sulle quote dei job, consulta la documentazione relativa al tipo di job nella pagina Quote e limiti:

Prezzi

Ogni job è associato a un progetto specifico specificato da te. All'account di fatturazione associato al progetto associato viene addebitato l'utilizzo sostenuto dal job. Se condividi l'accesso a un progetto, tutti i job eseguiti nel progetto vengono anche fatturati all'account di fatturazione.

Ad esempio, quando esegui un job di query, il costo viene addebitato al progetto che esegue il job. Pertanto, quando visualizzi l'ID job di un job di query con il formato <project_id>:<region>.<job_id>, project_id è l'ID del progetto fatturato per la query.

Per ulteriori informazioni, vedi Prezzi.

Prima di iniziare

Concedi i ruoli IAM (Identity and Access Management) che forniscono agli utenti le autorizzazioni necessarie per eseguire ogni attività in questo documento.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per eseguire e gestire i job, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:

  • Esegui o ripeti un job, elenca i job, visualizza i dettagli dei job e annullali: Utente job BigQuery (roles/bigquery.jobUser) o Utente BigQuery (roles/bigquery.user)
  • Elenca tutti i job in un progetto: BigQuery Admin (roles/bigquery.admin) o BigQuery Resource Admin (roles/bigquery.resourceAdmin)
  • Visualizza i dettagli di tutti i job in un progetto, annulla qualsiasi job nel progetto ed elimina i metadati dei job: Amministratore BigQuery (roles/bigquery.admin)

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

Questi ruoli predefiniti contengono le autorizzazioni necessarie per eseguire e gestire i job. Per visualizzare le autorizzazioni esatte richieste, espandi la sezione Autorizzazioni richieste:

Autorizzazioni obbligatorie

Per eseguire e gestire i job sono necessarie le seguenti autorizzazioni:

  • Esegui o ripeti un job ed elenca i tuoi job: bigquery.jobs.create
  • Visualizza i dettagli dei tuoi job: bigquery.jobs.get
  • Annullare i job: bigquery.jobs.update
  • Visualizza i dettagli di tutti i job in un progetto:
    • bigquery.jobs.get
    • bigquery.jobs.listAll
  • Elenca tutti i job in un progetto: bigquery.jobs.listAll
  • Annullare qualsiasi job nel progetto:
    • bigquery.jobs.update
    • bigquery.jobs.listAll
  • Elimina i metadati del job:
    • bigquery.jobs.delete
    • bigquery.jobs.listAll

Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.

Per ulteriori informazioni sui ruoli e sulle autorizzazioni IAM in BigQuery, consulta Ruoli e autorizzazioni predefiniti.

Visualizza i dettagli del job

Puoi visualizzare i dettagli dei job utilizzando la console Google Cloud, lo strumento a riga di comando bq, l'API o le librerie client. I dettagli includono dati e metadati, come il tipo di job, lo stato del job e l'utente che lo ha creato.

Per visualizzare i dettagli del job:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Espandi il riquadro Cronologia job.

  3. Seleziona il tipo di cronologia dei job che vuoi visualizzare:

    • Per visualizzare le informazioni sui tuoi job recenti, fai clic su Cronologia personale.
    • Per visualizzare le informazioni sui job recenti nel tuo progetto, fai clic su Cronologia progetto.
  4. Per visualizzare i dettagli di un job, fai clic sul job.

bq

Esegui il comando bq show con il flag --job=true e un ID job.

Quando fornisci l'ID job, puoi utilizzare l'ID completo o la forma breve. Ad esempio, gli ID job elencati nella console Google Cloud sono completamente qualificati, ovvero includono il progetto e la posizione:

my-project-1234:US.bquijob_123x456_123y123z123c

Gli ID job nello strumento a riga di comando sono elencati utilizzando la forma abbreviata. L'ID progetto e la posizione non sono inclusi:

bquijob_123x456_123y123z123c

Per specificare la posizione del job, fornisci il flag --location e imposta il valore sulla tua posizione. Questo flag è facoltativo se utilizzi l'ID job completo. Se includi il flag --location e utilizzi l'ID job completo, il flag --location viene ignorato.

Il seguente comando richiede informazioni su un job:

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

Sostituisci quanto segue:

  • LOCATION: il nome della località in cui viene eseguito il job. Ad esempio, se utilizzi BigQuery nella regione di Tokyo, imposta il valore del flag su asia-northeast1. Puoi impostare un valore predefinito per la posizione utilizzando il file .bigqueryrc. Se la posizione non è specificata nell'ID job o utilizzando il --location flag, viene utilizzata la posizione predefinita.
  • JOB_ID: l'ID del job

Esempi

Il seguente comando recupera informazioni di riepilogo sul job US.bquijob_123x456_123y123z123c in esecuzione in myproject:

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

L'output è simile al seguente:

 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

Per visualizzare i dettagli completi del job, inserisci quanto segue:

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

L'output è simile al seguente:

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

Chiama jobs.get e fornisci i parametri jobId e projectId. (Facoltativo) Fornisci il parametro location e imposta il valore sulla posizione in cui viene eseguito il job. Questo parametro è facoltativo se utilizzi my-project-1234:US.bquijob_123x456_123y123z123c, ad esempio, l'ID job completamente qualificato che include la posizione.

Vai

Prima di provare questo esempio, segui le istruzioni di configurazione Go riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Go.

Per autenticarti in BigQuery, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.

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

Prima di provare questo esempio, segui le istruzioni di configurazione Java riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Java.

Per autenticarti in BigQuery, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.

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

Prima di provare questo esempio, segui le istruzioni di configurazione Node.js riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Node.js.

Per autenticarti in BigQuery, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.

// 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

Prima di provare questo esempio, segui le istruzioni di configurazione Python riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Python.

Per autenticarti in BigQuery, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.

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 hai bisogno di ulteriori informazioni per risolvere i problemi relativi a un job, consulta le visualizzazioni INFORMATION_SCHEMA.JOBS* e Log.

Elenca job

BigQuery salva una cronologia dei job di sei mesi per tutti i job di un progetto, per tutte le località. La cronologia dei job include i job in stato RUNNING e quelli in stato DONE (indicato segnalando lo stato come SUCCESS o FAILURE).

Per elencare i job in un progetto:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Espandi il riquadro Cronologia job.

  3. Per elencare tutti i job di un progetto, fai clic su Cronologia del progetto. Se non sei il proprietario del progetto, potresti non disporre dell'autorizzazione per visualizzare tutti i job per un progetto. I job più recenti sono elencati per primi.

  4. Per elencare i tuoi job, fai clic su Cronologia personale.

bq

Esegui il comando bq ls con uno dei seguenti flag:

  • --jobs=true o -j: identifica i job come tipo di risorsa da elencare.
  • --all=true o -a: elenca i job di tutti gli utenti. Per visualizzare i dettagli completi (non oscurati) di tutti i job, devi disporre delle autorizzazioni bigquery.jobs.listAll.
  • --min_creation_time: elenca i job dopo un valore del timestamp fornito. Questo valore è rappresentato come timestamp dell'epoca di Unix in millisecondi.
  • --max_creation_time: elenca i job precedenti a un valore del timestamp fornito. Questo valore è rappresentato come timestamp dell'epoca di Unix in millisecondi.
  • --max_results o -n limita i risultati. Il valore predefinito è 50 risultati.
bq ls --jobs=true --all=true \
    --min_creation_time=MIN_TIME \
    --max_creation_time=MAX_TIME \
    --max_results=MAX_RESULTS \
    PROJECT_ID

Sostituisci quanto segue:

  • MIN_TIME: un numero intero che rappresenta un timestamp Unix epoch in millisecondi.
  • MAX_TIME: un numero intero che rappresenta un timestamp Unix epoch in millisecondi.
  • MAX_RESULTS: un numero intero che indica il numero di job restituiti.
  • PROJECT_ID: l'ID del progetto che contiene i job che stai elencando. Se imposti un progetto predefinito, non è necessario fornire il parametro PROJECT_ID.

Esempi

Il seguente comando elenca tutti i job per l'utente corrente. L'esecuzione di questo comando richiede le autorizzazioni bigquery.jobs.list.

bq ls --jobs=true myproject

Il seguente comando elenca tutti i job per tutti gli utenti. L'esecuzione di questo comando richiede le autorizzazioni bigquery.jobs.listAll.

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

Il seguente comando elenca i 10 job più recenti in myproject:

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

Il seguente comando elenca tutti i job inviati prima del 3 marzo 2032 alle 04:04:00. Questo timestamp (in millisecondi) è equivalente al seguente valore intero: 1961899440000.

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

API

Chiama jobs.list e fornisci il parametro projectId. Per elencare i job per tutti gli utenti, imposta il parametro allUsers su true. L'impostazione di allUsers su true richiede le autorizzazioni bigquery.jobs.listAll.

Vai

Prima di provare questo esempio, segui le istruzioni di configurazione Go riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Go.

Per autenticarti in BigQuery, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.

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

Prima di provare questo esempio, segui le istruzioni di configurazione Java riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Java.

Per autenticarti in BigQuery, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.

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

Prima di provare questo esempio, segui le istruzioni di configurazione Node.js riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Node.js.

Per autenticarti in BigQuery, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.

// 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

Prima di provare questo esempio, segui le istruzioni di configurazione Python riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Python.

Per autenticarti in BigQuery, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.


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))

Annullare un job

Puoi annullare un job RUNNING o PENDING. In genere, il completamento dell'annullamento di un job richiede meno di un minuto.

Anche se il job può essere annullato, il buon esito non è garantito. Il job potrebbe essere stato completato al momento dell'invio della richiesta di annullamento oppure potrebbe essere in una fase in cui non può essere annullato.

Per annullare un job:

Console

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Fai clic su Crea nuova query e inserisci una query.

  3. Per eseguire la query, fai clic su Esegui.

  4. Per annullare un job, fai clic su Annulla.

SQL

Utilizza la procedura di sistema BQ.JOBS.CANCEL:

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

Sostituisci JOB_ID con l'ID del job che stai annullando.

Se ti trovi in un progetto diverso, ma nella stessa regione del job che vuoi annullare, devi includere anche l'ID progetto:

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

Sostituisci quanto segue:

  • PROJECT_ID: l'ID del progetto che contiene il job che stai annullando
  • JOB_ID: l'ID del job che stai annullando

La procedura viene restituita immediatamente e BigQuery annulla il job poco dopo. Se il job è già riuscito o non è riuscito, la procedura non ha alcun effetto.

bq

Esegui il comando bq cancel con l'argomento JOB_ID. Puoi richiedere subito l'annullamento e il reso utilizzando il flag --nosync=true. Per impostazione predefinita, le richieste di annullamento rimangono in attesa del completamento.

Quando fornisci l'argomento JOB_ID, puoi utilizzare l'ID completo o la forma breve. Ad esempio, gli ID job elencati nella console Google Cloud sono completamente qualificati, ovvero includono il progetto e la posizione:

my-project-1234:US.bquijob_123x456_123y123z123c

Gli ID job nello strumento a riga di comando bq sono elencati utilizzando la forma abbreviata. L'ID progetto e la località non sono inclusi:

bquijob_123x456_123y123z123c

Per specificare la posizione del job, fornisci il flag --location e imposta il valore sulla tua posizione. Questo flag è facoltativo se utilizzi l'ID job completo. Se includi il flag --location e utilizzi l'ID job completo, il flag --location viene ignorato.

Il seguente comando richiede l'annullamento del job e attende il completamento. Se viene fornito l'ID job completo, il flag --location viene ignorato:

bq --location=LOCATION cancel JOB_ID

Il seguente comando richiede l'annullamento del job e restituisce immediatamente. Se viene fornito l'ID job completo, il flag --location viene ignorato:

bq --location=LOCATION --nosync cancel JOB_ID

Sostituisci quanto segue:

  • LOCATION (facoltativo): il nome della località in cui viene eseguito il job. Ad esempio, se utilizzi BigQuery nella regione di Tokyo, imposta il valore del flag su asia-northeast1. Puoi impostare un valore predefinito per la posizione utilizzando il file .bigqueryrc.
  • JOB_ID: l'ID del job che stai annullando. Se copi l'ID job dalla console Google Cloud, l'ID progetto e la località sono inclusi nell'ID job. Ad esempio, my-project-1234:US.bquijob_123x456_123y123z123c.

Esempi

Il seguente comando annulla il job my-project-1234:US.bquijob_123x456_123y123z123c in esecuzione nella località multiregione US del progetto my-project-1234 e attende il completamento. Poiché viene utilizzato l'ID job completo, il flag posizione non viene fornito.

bq cancel my-project-1234:US.bquijob_123x456_123y123z123c

Il seguente comando annulla il job bquijob_123x456_123y123z123c in esecuzione nella località multiregione US del progetto my-project-1234 e attende il completamento. Poiché viene utilizzato il formato breve dell'ID job, viene fornito il flag --location.

bq --location=US cancel bquijob_123x456_123y123z123c

Il seguente comando annulla il job bquijob_123x456_123y123z123c in esecuzione nella località multiregione US del progetto my-project-1234 e restituisce immediatamente il risultato. Poiché viene utilizzato l'ID job completo, il flag --location non viene fornito.

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

API

Chiama jobs.cancel e fornisci i parametri jobId e projectId. Fornisci il parametro location e imposta il valore sulla posizione in cui viene eseguito il job.

Vai

Prima di provare questo esempio, segui le istruzioni di configurazione Go riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Go.

Per autenticarti in BigQuery, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.

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

Prima di provare questo esempio, segui le istruzioni di configurazione Java riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Java.

Per autenticarti in BigQuery, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.

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

Prima di provare questo esempio, segui le istruzioni di configurazione Node.js riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Node.js.

Per autenticarti in BigQuery, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.

// 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

Prima di provare questo esempio, segui le istruzioni di configurazione Python riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Python.

Per autenticarti in BigQuery, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.

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

Eliminare i metadati del job

Puoi eliminare i metadati di un job specifico utilizzando lo strumento a riga di comando bq e la libreria client Python. BigQuery conserva una cronologia dei job eseguiti negli ultimi 6 mesi. Puoi utilizzare questo metodo per rimuovere le informazioni sensibili che potrebbero essere presenti nelle istruzioni di query. I metadati del job possono essere eliminati solo al termine del job. Se un job ha creato job secondari, anche questi vengono eliminati. L'eliminazione dei job figli non è consentita. È possibile eliminare solo i job principali o di primo livello.

Per eliminare i metadati del job:

bq

Esegui il comando bq rm con il flag -j e un ID job.

Quando fornisci l'ID job, puoi utilizzare l'ID completo o la forma breve. Ad esempio, gli ID job elencati nella console Google Cloud sono completamente qualificati, ovvero includono il progetto e la posizione:

my-project-1234:US.bquijob_123x456_123y123z123c

Gli ID job nello strumento a riga di comando bq sono elencati utilizzando la forma abbreviata. L'ID progetto e la posizione non sono inclusi:

bquijob_123x456_123y123z123c

Per specificare la posizione del job, fornisci il flag --location e imposta il valore sulla tua posizione. Questo flag è facoltativo se utilizzi l'ID job completo. Se includi il flag --location e utilizzi l'ID job completo, il flag --location viene ignorato.

Il seguente comando elimina un job:

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

Python

Prima di provare questo esempio, segui le istruzioni di configurazione Python riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Python.

Per autenticarti in BigQuery, configura le credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.

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.")

Ripeti job

Non è possibile ripetere un job utilizzando lo stesso ID job. Crea invece un nuovo job con la stessa configurazione. Quando invii il nuovo job nella console Google Cloud o nello strumento a riga di comando bq, viene assegnato un nuovo ID job. Quando invii il job utilizzando l'API o le librerie client, devi generare un nuovo ID job.

Per ripetere un job:

Console

Per ripetere un job di query:

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Espandi il riquadro Cronologia job.

  3. Per elencare tutti i tuoi job, fai clic su Cronologia personale. Per elencare tutti i job di un progetto, fai clic su Cronologia del progetto.

  4. Fai clic su un job di query per aprire i relativi dettagli.

  5. Per ripetere una query, fai clic su Apri come nuova query.

  6. Fai clic su Esegui.

Per ripetere un job di caricamento:

  1. Vai alla pagina BigQuery.

    Vai a BigQuery

  2. Espandi il riquadro Cronologia job.

  3. Per elencare tutti i tuoi job, fai clic su Cronologia personale. Per elencare tutti i job di un progetto, fai clic su Cronologia del progetto.

  4. Fai clic su un job di caricamento per aprire i relativi dettagli.

  5. Per ripetere un job, fai clic su Ripeti il job di caricamento.

bq

Esegui di nuovo il comando e BigQuery genera automaticamente un job con un nuovo ID.

API

Non esiste un metodo di chiamata singola per ripetere un job. Se vuoi ripetere un job specifico:

  1. Chiama jobs.get per recuperare la risorsa da ripetere per il job.

  2. Rimuovi i campi id, status e statistics. Modifica il campo jobId con un nuovo valore generato dal codice del client. Modifica gli altri campi in base alle necessità.

  3. Chiama jobs.insert con la risorsa modificata e il nuovo ID job per avviare il nuovo job.

Passaggi successivi