Jobs verwalten

Nachdem Sie einen BigQuery-Job gesendet haben, können Sie Jobdaten aufrufen, Jobs auflisten, einen Job abbrechen, einen Job noch einmal ausführen oder Jobmetadaten löschen.

Wenn ein Job gesendet wurde, kann dieser einen von drei Status aufweisen:

  • PENDING: Der Job wird geplant und wartet darauf, dass er ausgeführt wird.
  • RUNNING: Der Job wird bearbeitet.
  • DONE: Der Job ist abgeschlossen. In einigen Fällen meldet BigQuery diesen Status als SUCCESS (wenn der Job ohne Fehler abgeschlossen wurde) oder FAILURE (wenn der Job mit Fehlern abgeschlossen wurde).

Jobdaten anzeigen

Sie können Jobdaten und Metadaten mithilfe der Cloud Console, des bq-Befehlszeilentools und der API aufrufen. Diese Daten enthalten Details wie den Jobtyp, den Jobstatus und den Nutzer, der den Job ausgeführt hat.

Erforderliche Berechtigungen

Zum Abrufen von Jobdaten und Metadaten brauchen Sie mindestens Berechtigungen des Typs bigquery.jobs.get. Diese vordefinierte IAM-Rolle umfasst Berechtigungen des Typs bigquery.jobs.get:

  • bigquery.admin

Wenn Sie einem Konto die Rolle bigquery.admin gewähren, kann der Nutzer alle Jobdaten im Projekt aufrufen, unabhängig davon, wer den Job gesendet hat.

Den folgenden Rollen werden Berechtigungen des Typs bigquery.jobs.get für selbst erstellte Jobs gewährt. Diese Nutzer können nur Jobdaten für Jobs ansehen, die sie senden:

  • bigquery.user
  • bigquery.jobUser

Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Zugriffssteuerung.

Informationen zu Jobs ansehen

So rufen Sie Informationen zu einem Job auf:

Console

  1. Klicken Sie im Navigationsbereich auf Jobverlauf oder auf Abfrageverlauf, um Informationen zu Abfragejobs anzusehen.

  2. Klicken Sie auf Persönliche Geschichte, um Details zu Ihren Jobs aufzurufen. Klicken Sie auf Projektgeschichte, um Details zu allen im Projekt ausgeführten Jobs aufzurufen.

bq

Führen Sie den Befehl bq show mit dem Flag --job=true und einer Job-ID aus.

Wenn Sie die Job-ID angeben, können Sie die vollständig qualifizierte ID oder die Kurzform verwenden. In der Cloud Console aufgeführte Job-IDs sind beispielsweise vollständig qualifiziert, d. h. sie umfassen das Projekt und den Standort:

my-project-1234:US.bquijob_123x456_123y123z123c

Job-IDs im Befehlszeilentool werden mit der Kurzform aufgelistet – Projekt-ID und Standort sind nicht enthalten:

bquijob_123x456_123y123z123c

Zur Angabe des Jobstandorts geben Sie das Flag --location an und legen als Wert Ihren Standort fest. Dieses Flag ist optional, wenn Sie die vollständig qualifizierte Job-ID verwenden. Wenn Sie das Flag --location und die vollständig qualifizierte Job-ID gemeinsam verwenden, wird das Flag --location ignoriert.

Der folgende Befehl fordert Informationen zu einem Job an:

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

Dabei gilt:

  • LOCATION ist der Name des Standorts, an dem der Job ausgeführt wird. Wenn Sie beispielsweise BigQuery in der Region Tokio verwenden, geben Sie für das Flag den Wert asia-northeast1 an. Mit der Datei .bigqueryrc können Sie einen Standardwert für den Standort festlegen. Wenn der Standort nicht als Teil der Job-ID oder mithilfe des Flags --location angegeben ist, wird der Standardstandort verwendet.
  • JOB_ID ist die ID des Jobs.

Beispiele:

Der folgende Befehl ruft zusammenfassende Informationen zum Job US.bquijob_123x456_123y123z123c ab, der in myproject ausgeführt wird.

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

Die Ausgabe sieht dann ungefähr so aus:

 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

Geben Sie Folgendes ein, um die vollständigen Jobdetails anzuzeigen:

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

Die Ausgabe sieht dann ungefähr so aus:

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

Rufen Sie jobs.get auf und geben Sie die Parameter jobId und projectId an. Optional: Geben Sie den Parameter location an und legen Sie als Wert den Standort fest, an dem der Job ausgeführt wird. Dieser Parameter ist optional, wenn Sie die vollständig qualifizierte Job-ID verwenden, die den Standort enthält, z. B. my-project-1234:US.bquijob_123x456_123y123z123c.

Go

Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von Go in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Go API.

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

Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur BigQuery Java API.

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

Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von Node.js in der BigQuery-Kurzanleitung: Clientbibliotheken verwenden. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Node.js API.

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

Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von Python in der BigQuery-Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur  Python API.

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

Jobs in einem Projekt auflisten

Alle Jobs, die in den letzten sechs Monaten erstellt wurden, werden im Jobverlauf Ihres Projekts gespeichert.

So können Sie Ihren BigQuery-Jobverlauf aufrufen:

  • Google Cloud Console verwenden
  • Verwendung des bq ls-Befehls.
  • Durch Aufrufen der API-Methode jobs.list
  • Mithilfe der Clientbibliotheken

Der Jobverlauf enthält Jobs mit den Status RUNNING und DONE, dargestellt durch die Statusmeldung SUCCESS oder FAILURE.

Erforderliche Berechtigungen

Zum Auflisten von Jobs brauchen Sie mindestens Berechtigungen des Typs bigquery.jobs.list. Diese vordefinierten IAM-Rollen umfassen Berechtigungen des Typs bigquery.jobs.list:

  • bigquery.user
  • bigquery.admin

Der im Folgenden aufgeführten Rolle werden Berechtigungen des Typs bigquery.jobs.list nur für selbst erstellte Jobs gewährt. Entitäten, denen diese Rolle gewährt wurde, können nur Jobs auflisten, die sie einreichen:

  • bigquery.jobUser

Wenn Ihnen Berechtigungen vom Typ bigquery.jobs.list gewährt wurden, können Sie alle Jobs in einem Projekt auflisten. Dabei sind jedoch keine Details und keine Metadaten für die Jobs enthalten, die von anderen Nutzern gesendet wurden. Mit Berechtigungen vom Typ bigquery.jobs.list können Sie sich alle Details zu von Ihnen erstellten Jobs ansehen.

Zum Auflisten aller Jobs, einschließlich der Details zu Jobs, die von anderen Nutzern erstellt wurden, brauchen Sie Berechtigungen des Typs bigquery.jobs.listAll. Nur die Rollen bigquery.admin und bigquery.resourceAdmin haben Berechtigungen des Typs bigquery.jobs.listAll.

Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Vordefinierte Rollen und Berechtigungen.

Jobs auflisten

Wenn Sie Jobs in einem Projekt auflisten, brauchen Sie keinen Standort anzugeben. Derzeit werden Jobs für alle Standorte aufgelistet.

So listen Sie Jobs in einem Projekt auf:

Console

  1. Klicken Sie im Navigationsbereich auf Jobverlauf oder auf Abfrageverlauf, um Abfragejobs aufzulisten.

  2. Im Abschnitt Persönliche Geschichte werden Ihre Jobs nach der Erstellungszeit aufgelistet, wobei sich die aktuellsten Jobs am Anfang befinden. Die Liste enthält nur Jobs für den aktuellen Nutzer. Klicken Sie auf Projektgeschichte, um alle Jobs für ein Projekt aufzurufen. Wenn Sie nicht der Projektinhaber sind, haben Sie möglicherweise nicht die Berechtigung, alle Jobs für ein Projekt aufzurufen.

bq

Führen Sie den Befehl bq ls mit einem der folgenden Flags aus:

  • Mit --jobs=true oder -j lassen sich Jobs als Ressourcentyp identifizieren, der aufgelistet werden soll.
  • Mit --all=true oder -a werden die Jobs von allen Nutzern angezeigt. Zur ungekürzten Anzeige aller Details für alle Jobs brauchen Sie Berechtigungen des Typs bigquery.jobs.listAll.
  • Mit --min_creation_time werden Jobs nach einem angegebenen Zeitstempelwert aufgelistet.
  • Mit --max_creation_time werden die Jobs vor einem angegebenen Zeitstempelwert aufgeführt.
  • --max_results oder -n begrenzen die Ergebnisse. Der Standardwert sind 50 Ergebnisse.
bq ls --jobs=true --all=true \
--min_creation_time=MIN_TIME \
--max_creation_time=MAX_TIME \
--max_results=MAX_RESULTS \
PROJECT_ID

Dabei gilt:

  • MIN_TIME ist eine Ganzzahl, die einen Zeitstempel darstellt.
  • MAX_TIME ist eine Ganzzahl, die einen Zeitstempel darstellt.
  • MAX_RESULTS ist eine Ganzzahl, die die Anzahl der zurückgegebenen Jobs anzeigt.
  • PROJECT_ID ist die ID des Projekts, das die aufgelisteten Jobs enthält. Wenn Sie ein Standardprojekt festgelegt haben, brauchen Sie den Parameter PROJECT_ID nicht anzugeben.

Beispiele:

Mit dem folgenden Befehl werden alle Jobs für den aktuellen Nutzer aufgelistet. Zur Ausführung dieses Befehls sind Berechtigungen des Typs bigquery.jobs.list erforderlich.

bq ls --jobs=true myproject

Mit dem folgenden Befehl werden alle Jobs für alle Nutzer aufgelistet. Zur Ausführung dieses Befehls sind Berechtigungen des Typs bigquery.jobs.listAll erforderlich.

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

Mit dem folgenden Befehl werden die zehn letzten Jobs in myproject aufgelistet:

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

Der folgende Befehl listet alle Jobs auf, die vor dem 18. Oktober 2018 um 16:04:53 Uhr gesendet wurden. Dieser Zeitstempel (in Millisekunden) entspricht dem Ganzzahlwert 1539903893000.

bq ls --jobs=true --max_creation_time=1539903893000

API

Rufen Sie jobs.list auf und geben Sie dabei den Parameter projectId an. Zum Auflisten der Jobs für alle Nutzer legen Sie für den Parameter allUsers den Wert true fest. Die Festlegung von allUsers auf true erfordert Berechtigungen des Typs bigquery.jobs.listAll.

Go

Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von Go in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Go API.

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

Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur BigQuery Java API.

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

Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von Node.js in der BigQuery-Kurzanleitung: Clientbibliotheken verwenden. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Node.js API.

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

Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von Python in der BigQuery-Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur  Python API.


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

Jobs abbrechen

So können Sie Jobs mit dem Status RUNNING oder PENDING abbrechen:

  • Mit der Cloud Console
  • Durch Verwendung des bq cancel-Befehls.
  • BQ.JOBS.CANCEL-Systemprozedur in einer SQL-Abfrage verwenden
  • Durch Aufruf der API-Methode jobs.cancel
  • Mithilfe der Clientbibliotheken

Beachten Sie, dass nicht alle Jobtypen abgebrochen werden können. Wenn der Job nicht abgebrochen werden kann, wird ein Fehler zurückgegeben.

Auch wenn der Job abgebrochen werden kann, ist der Vorgang nicht immer erfolgreich. Der Job kann z. B. abgeschlossen sein, bevor die Anfrage zum Abbrechen gesendet wurde, oder er befindet sich in einer Phase, in der ein Abbrechen nicht möglich ist.

Erforderliche Berechtigungen

Zum Abbrechen eines Jobs brauchen Sie mindestens Berechtigungen des Typs bigquery.jobs.update. Die folgende vordefinierte IAM-Rolle umfasst Berechtigungen des Typs bigquery.jobs.update:

  • bigquery.admin

Wenn Sie einem Konto die Rolle bigquery.admin zuweisen, kann der jeweilige Nutzer alle entsprechenden Jobs abbrechen, unabhängig davon, wer den Job gesendet hat.

Nutzer mit den im Folgenden aufgeführten Rollen haben die Berechtigung, selbst erstellte Jobs abzubrechen. Diese Nutzer können nur Jobs abbrechen, die sie senden:

  • bigquery.user
  • bigquery.jobUser

Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Vordefinierte Rollen und Berechtigungen.

Jobs abbrechen

Es dauert in der Regel weniger als eine Minute, einen Job abzubrechen.

So brechen Sie einen Job ab:

Console

  1. Klicken Sie im Navigationsbereich auf Jobverlauf oder auf Abfrageverlauf, um Abfragejobs anzuzeigen.

  2. Klicken Sie im Bereich Persönliche Geschichte auf den Job, den Sie abbrechen möchten. Die aktuellsten Jobs werden ganz oben in der Liste angezeigt.

  3. Klicken Sie in den Jobdetails auf Job abbrechen.

SQL

Verwenden Sie das Systemverfahren BQ.JOBS.CANCEL:

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

Ersetzen Sie JOB_ID durch die ID des Jobs, den Sie abbrechen.

Wenn Sie sich in einem anderen Projekt, aber in derselben Region befinden, in der der Job abgebrochen wird, müssen Sie auch die Projekt-ID angeben:

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

Dabei gilt:

  • PROJECT_ID ist die ID des Projekts, das den Job enthält, den Sie abbrechen möchten.
  • JOB_ID ist die ID des Jobs, den Sie abbrechen.

Die Prozedur wird sofort zurückgegeben und der Job wird in BigQuery bald abgebrochen. Wenn der Job bereits erfolgreich war oder fehlgeschlagen ist, hat das Verfahren keine Auswirkungen.

bq

Führen Sie den Befehl bq cancel mit dem Argument JOB_ID aus. Sie können einen Abbruch und eine umgehende Rückgabe anfragen. Verwenden Sie dazu das Flag --nosync=true. Standardmäßig warten Abbruchanfragen auf den Abschluss des Vorgangs.

Wenn Sie das Argument JOB_ID angeben, können Sie die voll qualifizierte ID oder die Kurzform verwenden. In der Cloud Console aufgeführte Job-IDs sind beispielsweise vollständig qualifiziert, d. h. sie umfassen das Projekt und den Standort:

my-project-1234:US.bquijob_123x456_123y123z123c

Job-IDs im Befehlszeilentool bq werden mit der Kurzform aufgelistet – Projekt-ID und Standort sind nicht enthalten:

bquijob_123x456_123y123z123c

Zur Angabe des Jobstandorts geben Sie das Flag --location an und legen als Wert Ihren Standort fest. Dieses Flag ist optional, wenn Sie die vollständig qualifizierte Job-ID verwenden. Wenn Sie das Flag --location und die vollständig qualifizierte Job-ID gemeinsam verwenden, wird das Flag --location ignoriert.

Der folgende Befehl fordert den Jobabbruch an und wartet auf den Abschluss des Vorgangs: Wenn die vollständig qualifizierte Job-ID angegeben ist, wird das Flag --location ignoriert:

bq --location=LOCATION cancel JOB_ID

Der folgende Befehl fordert den Jobabbruch an und wird sofort zurückgegeben: Wenn die vollständig qualifizierte Job-ID angegeben ist, wird das Flag --location ignoriert:

bq --location=LOCATION --nosync cancel JOB_ID

Dabei gilt:

  • LOCATION ist optional. "location" ist der Name des Standorts, an dem der Job ausgeführt wird. Wenn Sie beispielsweise BigQuery in der Region Tokio verwenden, geben Sie für das Flag den Wert asia-northeast1 an. Mit der Datei .bigqueryrc können Sie einen Standardwert für den Standort festlegen.
  • JOB_ID ist die ID des Jobs, den Sie abbrechen. Wenn Sie die Job-ID aus der Cloud Console kopieren, sind darin die Projekt-ID und der Standort in enthalten. Beispiel: my-project-1234:US.bquijob_123x456_123y123z123c

Beispiele:

Der folgende Befehl bricht den Auftrag my-project-1234:US.bquijob_123x456_123y123z123c ab, der im Projekt my-project-1234 am multiregionalen Standort US läuft, und wartet auf den Abschluss. Da die vollständig qualifizierte Job-ID verwendet wird, ist das Standort-Flag nicht angegeben.

bq cancel my-project-1234:US.bquijob_123x456_123y123z123c

Der folgende Befehl bricht den Auftrag bquijob_123x456_123y123z123c ab, der im Projekt my-project-1234 am multiregionalen Standort US läuft, und wartet auf den Abschluss. Da die Kurzform der Job-ID verwendet wird, ist das Flag --location angegeben.

bq --location=US cancel bquijob_123x456_123y123z123c

Der folgende Befehl bricht den Auftrag bquijob_123x456_123y123z123c ab, der im Projekt my-project-1234 am multiregionalen Standort US läuft, und wird sofort zurückgegeben. Da die vollständig qualifizierte Job-ID verwendet wird, ist das Flag --location nicht angegeben.

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

API

Rufen Sie jobs.cancel auf und geben Sie die Parameter jobId und projectId an. Geben Sie den Parameter location an und legen Sie als Wert den Standort fest, an dem der Job ausgeführt wird.

Go

Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von Go in der BigQuery-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Go API.

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

Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von Java in der BigQuery-Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur BigQuery Java API.

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

Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von Node.js in der BigQuery-Kurzanleitung: Clientbibliotheken verwenden. Weitere Angaben finden Sie in der Referenzdokumentation zur BigQuery Node.js API.

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

Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von Python in der BigQuery-Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur  Python API.

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

Jobmetadaten löschen

Mit dem bq-Befehlszeilentool und der BigQuery API können Sie die Metadaten für einen bestimmten Job löschen. In BigQuery wird ein Verlauf der Jobs gespeichert, die in den letzten sechs Monaten ausgeführt wurden. Sie können diese Methode verwenden, um vertrauliche Informationen zu entfernen, die möglicherweise in Abfrageanweisungen vorhanden sind. Jobmetadaten können erst gelöscht werden, nachdem der Job abgeschlossen ist. Wenn ein Job untergeordnete Jobs erstellt hat, werden auch die untergeordneten Jobs gelöscht. Das Löschen von untergeordneten Jobs ist nicht zulässig. Nur übergeordnete Jobs oder Jobs oberster Ebene können gelöscht werden.

Erforderliche Berechtigungen

Standardmäßig hat nur die Rolle bigquery.admin die Berechtigung bigquery.jobs.delete, um BigQuery-Jobs zu löschen.

Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Vordefinierte Rollen und Berechtigungen.

Jobmetadaten löschen

bq

Führen Sie den Befehl bq rm mit dem Flag -j und einer Job-ID aus.

Wenn Sie die Job-ID angeben, können Sie die vollständig qualifizierte ID oder die Kurzform verwenden. In der Cloud Console aufgeführte Job-IDs sind beispielsweise vollständig qualifiziert, d. h. sie umfassen das Projekt und den Standort:

my-project-1234:US.bquijob_123x456_123y123z123c

Job-IDs im Befehlszeilentool werden mit der Kurzform aufgelistet – Projekt-ID und Standort sind nicht enthalten:

bquijob_123x456_123y123z123c

Zur Angabe des Jobstandorts geben Sie das Flag --location an und legen als Wert Ihren Standort fest. Dieses Flag ist optional, wenn Sie die vollständig qualifizierte Job-ID verwenden. Wenn Sie das Flag --location und die vollständig qualifizierte Job-ID gemeinsam verwenden, wird das Flag --location ignoriert.

Mit dem folgenden Befehl wird ein Job gelöscht:

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

Python

Bevor Sie dieses Beispiel ausprobieren, folgen Sie den Schritten zur Einrichtung von Python in der BigQuery-Kurzanleitung: Clientbibliotheken verwenden. Weitere Informationen finden Sie in der Referenzdokumentation zur  Python API.

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

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

Wiederkehrende Jobs

Ein Job kann mit der gleichen Job-ID nicht noch einmal ausgeführt werden. Stattdessen müssen Sie einen neuen Job mit der gleichen Konfiguration erstellen. Wenn Sie den neuen Job über die Cloud Console oder das bq-Befehlszeilentool senden, wird eine neue Job-ID zugewiesen. Wenn Sie den Job mithilfe der API oder der Clientbibliotheken senden, müssen Sie eine neue Job-ID generieren.

Erforderliche Berechtigungen

Zum Ausführen eines Jobs brauchen Sie mindestens Berechtigungen des Typs bigquery.jobs.create. Diese vordefinierten IAM-Rollen umfassen Berechtigungen des Typs bigquery.jobs.create:

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

Weitere Informationen zu IAM-Rollen und Berechtigungen in BigQuery finden Sie unter Vordefinierte Rollen und Berechtigungen.

Jobs wiederholen

So wiederholen Sie einen Job:

Konsole

So wiederholen Sie einen Abfragejob:

  1. Klicken Sie im Navigationsbereich auf Abfrageverlauf.

  2. Klicken Sie im Abschnitt Persönliche Geschichte oder Projektgeschichte auf die Abfrage, die Sie erneut ausführen möchten, und klicken Sie dann auf Abfrage im Editor öffnen.

  3. Klicken Sie auf Ausführen.

So wiederholen Sie einen Ladejob:

  1. Klicken Sie im Navigationsbereich auf Jobverlauf.

  2. Klicken Sie im Abschnitt Persönliche Geschichte oder Projektgeschichte auf den Job, den Sie wiederholen möchten. Die aktuellsten Jobs werden ganz oben in der Liste angezeigt.

  3. Klicken Sie in den Jobdetails auf Ladejob wiederholen.

bq

Führen Sie den Befehl noch einmal aus. BigQuery generiert automatisch einen Job mit einer neuen Job-ID.

API

Ein Job kann nicht mithilfe eines einzelnen Aufrufs wiederholt werden. Gehen Sie so vor, um einen Job zu wiederholen:

  1. Rufen Sie jobs.get auf, um die Ressource für den Job abzurufen, der noch einmal ausgeführt werden soll.

  2. Entfernen Sie die Felder id, status und statistics. Ändern Sie das Feld jobId in einen neuen Wert, der von Ihrem Clientcode generiert wird. Ändern Sie die anderen Felder nach Bedarf.

  3. Rufen Sie jobs.insert mit der geänderten Ressource und mit der neuen Job-ID auf, um den neuen Job zu starten.