Jobs verwalten

In diesem Dokument wird beschrieben, wie Sie Jobs in BigQuery verwalten, einschließlich der Anzeige von Jobdetails, der Auflistung von Jobs, des Abbrechens von Jobs, der Wiederholung von Jobs und des Löschens von Jobmetadaten.

BigQuery-Jobs

Jedes Mal, wenn Sie Daten laden, exportieren, abfragen oder kopieren, wird in BigQuery automatisch ein Job erstellt, geplant und ausgeführt, der den Fortschritt der Aufgabe verfolgt.

Da das Ausführen von Jobs sehr lange dauern kann, werden sie asynchron ausgeführt. Der Status kann jeweils abgefragt werden. Kürzere Aktionen wie das Auflisten von Ressourcen oder das Abrufen von Metadaten werden nicht als Jobs verwaltet.

Wenn ein Job gesendet wurde, kann er einen der folgenden Status haben:

  • PENDING: Der Job ist geplant und wartet auf die Ausführung.
  • RUNNING: Der Job wird bearbeitet.
  • DONE: Der Job ist abgeschlossen. Wenn der Job fehlerfrei ausgeführt wird, meldet BigQuery diesen Status als SUCCESS. Wenn der Job mit Fehlern abgeschlossen wird, meldet BigQuery diesen Status als FAILURE.

Kontingente

Informationen zu Jobkontingenten finden Sie in der Dokumentation zum Jobtyp auf der Seite Kontingente und Limits:

Preis

Jeder Job ist mit einem bestimmten, von Ihnen angegebenen Projekt verknüpft. Jede Nutzung, die durch den Job anfällt, wird dem Rechnungskonto in Rechnung gestellt, das mit dem zugehörigen Projekt verknüpft ist. Wenn Sie den Zugriff auf ein Projekt freigeben, werden alle im Projekt ausgeführten Jobs dem Rechnungskonto in Rechnung gestellt.

Wenn Sie beispielsweise einen Abfragejob ausführen, werden die Kosten dem Projekt in Rechnung gestellt, das den Job ausführt. Wenn Sie also die Job-ID eines Abfragejobs im Format <project_id>:<region>.<job_id> aufrufen, ist project_id die ID des Projekts, für das die Abfrage abgerechnet wird.

Weitere Informationen finden Sie unter Preise.

Hinweise

Weisen Sie IAM-Rollen (Identity and Access Management) zu, die Nutzern die erforderlichen Berechtigungen zum Ausführen der einzelnen Aufgaben in diesem Dokument gewähren.

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für das Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Ausführen und Verwalten von Jobs benötigen:

  • Jobs ausführen oder wiederholen, Jobs auflisten, Jobdetails aufrufen und Jobs abbrechen: BigQuery-Jobnutzer (roles/bigquery.jobUser) oder BigQuery-Nutzer (roles/bigquery.user)
  • Alle Jobs in einem Projekt auflisten: BigQuery-Administrator (roles/bigquery.admin) oder BigQuery Resource-Administrator (roles/bigquery.resourceAdmin)
  • Details zu allen Jobs in einem Projekt aufrufen, Jobs im Projekt abbrechen und Jobmetadaten löschen: BigQuery-Administrator (roles/bigquery.admin)

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Diese vordefinierten Rollen enthalten die Berechtigungen, die zum Ausführen und Verwalten von Jobs erforderlich sind. Erweitern Sie den Abschnitt Erforderliche Berechtigungen, um die erforderlichen Berechtigungen anzuzeigen:

Die folgenden Berechtigungen sind zum Ausführen und Verwalten von Jobs erforderlich:

  • Jobs ausführen oder wiederholen und Jobs auflisten: bigquery.jobs.create
  • Details zu Ihren Jobs aufrufen: bigquery.jobs.get
  • Jobs abbrechen: bigquery.jobs.update
  • So rufen Sie Details zu allen Jobs in einem Projekt auf:
    • bigquery.jobs.get
    • bigquery.jobs.listAll
  • Alle Jobs in einem Projekt auflisten: bigquery.jobs.listAll
  • Jobs im Projekt abbrechen:
    • bigquery.jobs.update
    • bigquery.jobs.listAll
  • Jobmetadaten löschen:
    • bigquery.jobs.delete
    • bigquery.jobs.listAll

Sie können diese Berechtigungen auch mit benutzerdefinierten Rollen oder anderen vordefinierten Rollen erhalten.

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

Auftragsdetails aufrufen

Sie können Jobdetails über die Google Cloud Console, das bq-Befehlszeilentool, die API oder die Clientbibliotheken aufrufen. Die Details enthalten Daten und Metadaten wie den Jobtyp, den Jobstatus und den Nutzer, der den Job erstellt hat.

So rufen Sie Jobdetails auf:

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Maximieren Sie den Bereich Jobverlauf.

  3. Wählen Sie den Jobverlaufstyp aus, den Sie sehen möchten:

    • Klicken Sie auf Persönlicher Verlauf, um Informationen zu Ihren letzten Jobs aufzurufen.
    • Zum Aufrufen von Informationen zu den letzten Jobs in Ihrem Projekt klicken Sie auf Projektverlauf.
  4. Klicken Sie auf einen Job, um die Jobdetails aufzurufen.

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 Google Cloud Console aufgeführte Job-IDs sind beispielsweise voll qualifiziert – sie enthalten 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: 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: 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 etwa 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 kompletten Jobdetails aufzurufen:

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

Die Ausgabe sieht etwa 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"
}

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.

Bevor Sie dieses Beispiel anwenden, 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.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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
}

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

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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());
    }
  }
}

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

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

// 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);
}

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

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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

Weitere Informationen zur Fehlerbehebung bei einem Job finden Sie in den INFORMATION_SCHEMA.JOBS*-Ansichten und den Logs.

Jobs auflisten

BigQuery speichert einen sechswöchigen Jobverlauf für alle Jobs eines Projekts an allen Standorten. Der Jobverlauf enthält Jobs mit den Status RUNNING und DONE, dargestellt durch die Statusmeldung SUCCESS oder FAILURE.

So listen Sie Jobs in einem Projekt auf:

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Maximieren Sie den Bereich Jobverlauf.

  3. Klicken Sie auf Projektverlauf, um alle Jobs in einem Projekt aufzulisten. Wenn Sie nicht der Projektinhaber sind, sind Sie möglicherweise nicht berechtigt, alle Jobs für ein Projekt anzeigen zu lassen. Die aktuellsten Jobs werden zuerst aufgeführt.

  4. Klicken Sie auf Persönlicher Verlauf, um Ihre Jobs aufzulisten.

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

  • --jobs=true oder -j: Hiermit werden Jobs als Ressourcentyp identifiziert, 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.
  • --min_creation_time: listet Jobs nach einem angegebenen Zeitstempelwert auf. Dieser Wert wird als Unix-Epochenzeit in Millisekunden angegeben.
  • --max_creation_time: listet Jobs vor einem angegebenen Zeitstempelwert auf. Dieser Wert wird als Unix-Epochenzeit in Millisekunden dargestellt.
  • --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: eine Ganzzahl, die einen Unix-Epoch-Zeitstempel in Millisekunden darstellt.
  • MAX_TIME: eine Ganzzahl, die einen Unix-Epoch-Zeitstempel in Millisekunden darstellt.
  • MAX_RESULTS: eine Ganzzahl, die die Anzahl der zurückgegebenen Jobs angibt.
  • PROJECT_ID: 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 3. März 2032 um 4:04:00 Uhr gesendet wurden. Dieser Zeitstempel (in Millisekunden) ist gleich dem Ganzzahlenwert 1961899440000.

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

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.

Bevor Sie dieses Beispiel anwenden, 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.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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
}

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

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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());
    }
  }
}

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

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

// 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));
}

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

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.


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

Job abbrechen

Sie können einen RUNNING- oder PENDING-Job abbrechen. Es dauert in der Regel weniger als eine Minute, einen Job abzubrechen.

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.

So brechen Sie einen Job ab:

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Klicken Sie auf Neue Abfrage erstellen und geben Sie eine Abfrage ein.

  3. Klicken Sie zum Ausführen der Abfrage auf Run (Ausführen).

  4. Wenn Sie einen Job abbrechen möchten, klicken Sie auf Abbrechen.

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: die ID des Projekts, das den Job enthält, den Sie abbrechen möchten
  • JOB_ID: 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.

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 Google Cloud Console aufgeführte Job-IDs sind beispielsweise voll qualifiziert – sie enthalten das Projekt und den Standort:

my-project-1234:US.bquijob_123x456_123y123z123c

Job-IDs im bq-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 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 (optional): 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: die ID des Jobs, den Sie abbrechen. Wenn Sie die Job-ID aus der Google 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

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.

Bevor Sie dieses Beispiel anwenden, 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.

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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

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

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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());
    }
  }
}

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

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

// 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);
}

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

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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

Jobmetadaten löschen

Mit dem bq-Befehlszeilentool und der Python-Clientbibliothek 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.

So löschen Sie Jobmetadaten:

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 Google Cloud Console aufgeführte Job-IDs sind beispielsweise voll qualifiziert – sie enthalten das Projekt und den Standort:

my-project-1234:US.bquijob_123x456_123y123z123c

Job-IDs im bq-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

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

Richten Sie zur Authentifizierung bei BigQuery die Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für Clientbibliotheken einrichten.

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

Jobs wiederholen

Ein Job mit derselben Job-ID kann nicht wiederholt werden. Stattdessen müssen Sie einen neuen Job mit der gleichen Konfiguration erstellen. Wenn Sie den neuen Job über die Google 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.

So wiederholen Sie einen Job:

So wiederholen Sie einen Abfragejob:

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Maximieren Sie den Bereich Jobverlauf.

  3. Klicken Sie auf Persönlicher Verlauf, um alle Ihre Jobs aufzulisten. Klicken Sie auf Projektverlauf, um alle Jobs in einem Projekt aufzulisten.

  4. Klicken Sie auf einen Abfragejob, um die Jobdetails zu öffnen.

  5. Klicken Sie zum Wiederholen einer Abfrage auf Als neue Abfrage öffnen.

  6. Klicken Sie auf Ausführen.

So wiederholen Sie einen Ladejob:

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Maximieren Sie den Bereich Jobverlauf.

  3. Klicken Sie auf Persönlicher Verlauf, um alle Ihre Jobs aufzulisten. Klicken Sie auf Projektverlauf, um alle Jobs in einem Projekt aufzulisten.

  4. Klicken Sie auf einen Ladejob, um die Jobdetails zu öffnen.

  5. Klicken Sie auf Ladejob wiederholen, um einen Job zu wiederholen.

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

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.

Nächste Schritte