ניהול משרות

ב-BigQuery, משימות הן פעולות אסינכרוניות שפועלות בשבילכם כדי לטעון, לייצא, להעתיק או לשלוח שאילתות על נתונים.

במאמר הזה מוסבר איך להציג פרטי משימות, להציג רשימה של משימות בפרויקט, לבטל משימות שפועלות, למחוק מטא-נתונים של משימות ולחזור על משימות שהושלמו.

כדי לעקוב אחרי משימות בארגון, לצבור אותן ולפתור בהן בעיות, קראו את המאמר מעקב אחרי משימות.

מידע על משימות ב-BigQuery

בכל פעם שטוענים, מייצאים, מריצים שאילתות או מעתיקים נתונים, BigQuery יוצר, מתזמן ומריץ באופן אוטומטי משימה שעוקבת אחרי התקדמות המשימה.

מכיוון שהשלמת משימות יכולה להימשך זמן רב, הן פועלות באופן אסינכרוני ואפשר לבדוק את הסטטוס שלהן. פעולות קצרות יותר, כמו הצגת רשימת משאבים או קבלת מטא-נתונים, לא מנוהלות כמשימות.

כשמגישים משימה, היא יכולה להיות באחד מהמצבים הבאים:

  • ‫PENDING: המשימה מתוזמנת וממתינה להפעלה.
  • ‫RUNNING: המשימה מתבצעת.
  • ‫DONE: המשימה הסתיימה. אם המשימה נכשלה, יופיע השדה JobStatus.errorResult.

מכסות

למידע על מכסות של עבודות, קראו את מאמרי העזרה בנושא סוג העבודה בדף מכסות ומגבלות:

תמחור

כל משימה משויכת לפרויקט ספציפי שאתם מציינים. החשבון לחיוב שמקושר לפרויקט המשויך מחויב על כל שימוש שנוצר על ידי המשימה. אם אתם משתפים את הגישה לפרויקט, כל המשימות שמופעלות בפרויקט מחויבות גם בחשבון לחיוב.

לדוגמה, כשמריצים משימת שאילתה, העלות מחויבת בפרויקט שמריץ את המשימה. לכן, כשמציגים את מזהה המשימה של משימת שאילתה בפורמט <project_id>:<region>.<job_id>, הערך project_id הוא המזהה של הפרויקט שמחויב על השאילתה.

מידע נוסף זמין במאמר תמחור.

לפני שמתחילים

להקצות תפקידים של ניהול זהויות והרשאות גישה (IAM) שנותנים למשתמשים את ההרשאות שנדרשות כדי לבצע כל משימה שמופיעה במסמך הזה.

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות להפעלה ולניהול של משימות, בקשו מהאדמין להקצות לכם את התפקידים הבאים ב-IAM בפרויקט:

  • שימוש במשימות BigQuery‏ (roles/bigquery.jobUser) – כדי להריץ או לחזור על משימה, להציג את רשימת המשימות, לראות את פרטי המשימות ולבטל משימות.
  • משתמש BigQuery‏ (roles/bigquery.user) – כדי להריץ או לחזור על משימה, להציג את רשימת המשימות, להציג את פרטי המשימות ולבטל את המשימות (התפקיד הזה נותן יותר הרשאות מאשר התפקיד "שימוש במשימות BigQuery").
  • אדמין של משאבי BigQuery‏ (roles/bigquery.resourceAdmin) – כדי להציג את כל המשימות ולאחזר מטא-נתונים של כל משימה.
  • אדמין ב-BigQuery‏ (roles/bigquery.admin) – כדי להציג את כל המשימות, לאחזר מטא-נתונים של כל משימה ולבטל כל משימה.

להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

התפקידים המוגדרים מראש האלה כוללים את ההרשאות שנדרשות כדי להריץ ולנהל משימות. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:

ההרשאות הנדרשות

כדי להריץ ולנהל משימות, נדרשות ההרשאות הבאות:

  • bigquery.jobs.create בפרויקט כדי להריץ או לחזור על משימה ולהציג את רשימת המשימות.
  • bigquery.jobs.get בפרויקט כדי לראות את המטא-נתונים של כל משימה.
  • bigquery.jobs.update בפרויקט כדי לבטל משימה כלשהי.
  • bigquery.jobs.listAll בארגון, בתיקייה או בפרויקט כדי להציג את כל המשימות ולאחזר מטא-נתונים של כל משימה שנשלחה על ידי משתמש כלשהו. כדי לראות את הפרטים של כל המשימות, צריך גם את ההרשאה bigquery.jobs.list.
  • bigquery.jobs.list בפרויקט כדי להציג את כל המשימות ולאחזר מטא-נתונים של כל משימה שנשלחה על ידי כל משתמש. במשימות שנשלחו על ידי משתמשים אחרים, הפרטים והמטא-נתונים מצונזרים.
  • bigquery.jobs.listExecutionMetadata בארגון כדי להציג את כל המטא-נתונים של ביצוע המשימות (ללא מידע רגיש) לכל משימה שנשלחה על ידי כל משתמש.
  • bigquery.jobs.update בפרויקט כדי לבטל משימה כלשהי.
  • bigquery.jobs.delete בפרויקט כדי למחוק כל משימה.

יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.

במאמר תפקידים והרשאות מוגדרים מראש תוכלו לקרוא מידע נוסף על תפקידים והרשאות של IAM ב-BigQuery.

צפייה בפרטי המשרה

אפשר לראות את פרטי המשימה באמצעות מסוף Google Cloud , כלי שורת הפקודה של BigQuery, ה-API או ספריות הלקוח. הפרטים כוללים נתונים ומטא-נתונים, כמו סוג העבודה, מצב המשימה והמשתמש שיצר את המשימה.

כדי לראות את פרטי המשימה:

המסוף

  1. נכנסים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על Explorer:

    כפתור מודגש לחלונית Explorer.

    אם החלונית הימנית לא מוצגת, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.

  3. בחלונית Explorer, לוחצים על Job history.

  4. בוחרים את סוג היסטוריית המשימות שרוצים לראות:

    • כדי להציג מידע על המשרות האחרונות שלכם, לוחצים על היסטוריה אישית.
    • כדי להציג מידע על משימות שבוצעו לאחרונה בפרויקט, לוחצים על Project history.
  5. כדי לראות את פרטי המשרה, לוחצים עליה.

BQ

מריצים את הפקודה bq show עם הדגל --job=true ומזהה המשימה.

כשמציינים את מזהה המשימה, אפשר להשתמש במזהה המלא או במזהה המקוצר. לדוגמה, מזהי המשימות שמופיעים במסוף Google Cloud הם מלאים, כלומר הם כוללים את הפרויקט והמיקום:

my-project-1234:US.bquijob_123x456_123y123z123c

מזהי המשימות בכלי שורת הפקודה מופיעים בפורמט הקצר. מזהה הפרויקט והמיקום לא נכללים:

bquijob_123x456_123y123z123c

כדי לציין את מיקום המשימה, מוסיפים את הדגל --location ומגדירים את הערך למיקום שלכם. הדגל הזה הוא אופציונלי אם משתמשים במזהה המשימה המלא. אם אתם כוללים את הדגל --location ומשתמשים במזהה המשימה המלא, המערכת מתעלמת מהדגל --location.

הפקודה הבאה מבקשת מידע על משימה:

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

מחליפים את מה שכתוב בשדות הבאים:

  • ‫LOCATION: שם המיקום שבו המשימה פועלת. לדוגמה, אם אתם משתמשים ב-BigQuery באזור טוקיו, הגדירו את הערך של הדגל ל-asia-northeast1. אפשר להגדיר ערך ברירת מחדל למיקום באמצעות הקובץ .bigqueryrc. אם המיקום לא צוין כמזהה המשימה או באמצעות הדגל --location, המערכת תשתמש במיקום ברירת המחדל.
  • ‫JOB_ID: מזהה המשימה

דוגמאות

הפקודה הבאה מקבלת מידע מסכם על המשימה US.bquijob_123x456_123y123z123c שפועלת ב-myproject:

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

הפלט אמור להיראות כך:

 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

כדי לראות את הפרטים המלאים של המשימה, מזינים את הפקודה הבאה:

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

הפלט אמור להיראות כך:

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

מפעילים את jobs.get ומספקים את הפרמטרים jobId ו-projectId. (אופציונלי) מספקים את הפרמטר location ומגדירים את הערך למיקום שבו המשימה פועלת. הפרמטר הזה אופציונלי אם משתמשים במזהה המשימה המלא שכולל את המיקום, לדוגמה, my-project-1234:US.bquijob_123x456_123y123z123c.

המשך

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Go במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Go API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

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

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Java API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

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

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Node.js במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Node.js API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

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

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Python API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

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

אם אתם צריכים מידע נוסף כדי לפתור בעיות במשימה, תוכלו להיעזר בתצוגות של INFORMATION_SCHEMA.JOBS* וביומנים.

הצגת רשימת משימות

ב-BigQuery נשמרת היסטוריית משימות של שישה חודשים לכל המשימות של פרויקט, בכל המיקומים. היסטוריית המשימות כוללת משימות במצב RUNNING ומשימות DONE (שמדווחות במצב SUCCESS או FAILURE).

כדי להציג את רשימת המשימות בפרויקט:

המסוף

  1. נכנסים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על Explorer:

    כפתור מודגש לחלונית Explorer.

  3. בחלונית Explorer, לוחצים על Job history.

  4. כדי להציג את כל המשימות בפרויקט, לוחצים על Project history. אם אינכם ה-Project Owner, ייתכן שאין לכם הרשאה להציג את כל המשימות בפרויקט. המשימות האחרונות מופיעות ראשונות.

  5. כדי להוסיף את המשרות שלכם, לוחצים על היסטוריה אישית.

BQ

מריצים את הפקודה bq ls עם אחד מהדגלים הבאים:

  • ‫--jobs=true או -j: מזהה את המשימות כסוג המשאב שרוצים להציג ברשימה.
  • ‫--all=true או -a: מציג את המשימות של כל המשתמשים. כדי לראות את הפרטים המלאים (ללא צנזור) של כל המשימות, צריך הרשאות של bigquery.jobs.listAll.
  • ‫--min_creation_time: מציג את המשימות שנוצרו אחרי ערך חותמת הזמן שצוין. הערך הזה מיוצג כחותמת זמן של ראשית זמן יוניקס (Unix epoch) באלפיות השנייה.
  • ‫--max_creation_time: הצגת רשימה של משימות לפני ערך חותמת הזמן שסופק. הערך הזה מיוצג כחותמת זמן של ראשית זמן יוניקס (Unix epoch) באלפיות השנייה.
  • --max_results או -n מגבילים את התוצאות. ברירת המחדל היא 50 תוצאות.
bq ls --jobs=true --all=true \
    --min_creation_time=MIN_TIME \
    --max_creation_time=MAX_TIME \
    --max_results=MAX_RESULTS \
    PROJECT_ID

מחליפים את מה שכתוב בשדות הבאים:

דוגמאות

הפקודה הבאה מציגה את כל המשימות של המשתמש הנוכחי. כדי להריץ את הפקודה הזו נדרשות הרשאות bigquery.jobs.list.

bq ls --jobs=true myproject

הפקודה הבאה מציגה את כל המשימות של כל המשתמשים. כדי להריץ את הפקודה הזו נדרשות הרשאות bigquery.jobs.listAll.

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

הפקודה הבאה מציגה רשימה של 10 המשימות האחרונות ב-myproject:

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

הפקודה הבאה מציגה את כל המשימות שנשלחו לפני 3 במרץ 2032 בשעה 4:04:00. חותמת הזמן הזו (באלפיות השנייה) שווה לערך השלם הבא: 1961899440000.

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

API

מפעילים את ה-method‏ jobs.list ומספקים את הפרמטר projectId. כדי להציג את המשימות של כל המשתמשים, מגדירים את הפרמטר allUsers לערך true. כדי להגדיר את allUsers ל-true נדרשות הרשאות bigquery.jobs.listAll. ה-method‏ jobs.list לא מחזירה משימות צאצא. כדי להציג רשימה של משימות צאצא, משתמשים בתצוגה INFORMATION_SCHEMA.JOBS.

המשך

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Go במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Go API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

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

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Java API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

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

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Node.js במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Node.js API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

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

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Python API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.


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

ביטול משימה

אפשר לבטל משימה של RUNNING או PENDING. בדרך כלל, ביטול משימה נמשך פחות מדקה.

גם אם אפשר לבטל את המשימה, לא בטוח שהביטול יצליח. יכול להיות שהמשימה כבר הסתיימה עד שהבקשה לביטול נשלחה, או שהיא נמצאת בשלב שבו אי אפשר לבטל אותה.

כדי לבטל משימה:

המסוף

  1. נכנסים לדף BigQuery.

    כניסה ל-BigQuery

  2. לוחצים על Compose new query ומזינים שאילתה.

  3. כדי להריץ את השאילתה, לוחצים על Run.

  4. כדי לבטל משימה, לוחצים על ביטול.

SQL

משתמשים בפרוצדורת המערכת BQ.JOBS.CANCEL:

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

מחליפים את JOB_ID במזהה של המשימה שרוצים לבטל.

אם אתם נמצאים בפרויקט אחר אבל באותו אזור של המשימה שאתם רוצים לבטל, אתם צריכים לכלול גם את מזהה הפרויקט:

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

מחליפים את מה שכתוב בשדות הבאים:

  • ‫PROJECT_ID: מזהה הפרויקט שמכיל את המשימה שרוצים לבטל
  • ‫JOB_ID: המזהה של המשימה שמבטלים

הפרוצדורה מחזירה ערך באופן מיידי, ו-BigQuery מבטל את המשימה זמן קצר לאחר מכן. אם המשימה כבר הצליחה או נכשלה, לפעולה אין השפעה.

BQ

מפעילים את הפקודה bq cancel עם הארגומנט JOB_ID. כדי לבקש ביטול והחזרה מיידית, אפשר להשתמש בדגל --nosync=true. כברירת מחדל, בקשות הביטול ממתינות להשלמה.

כשמציינים את הארגומנט JOB_ID, אפשר להשתמש במזהה המלא או במזהה המקוצר. לדוגמה, מזהי המשימות שמופיעים במסוף Google Cloud הם מלאים, כלומר הם כוללים את הפרויקט והמיקום:

my-project-1234:US.bquijob_123x456_123y123z123c

מזהי המשימות בכלי שורת הפקודה של BigQuery מופיעים בפורמט הקצר. לא כולל את מזהה הפרויקט והמיקום:

bquijob_123x456_123y123z123c

כדי לציין את מיקום המשימה, מוסיפים את הדגל --location ומגדירים את הערך למיקום שלכם. הדגל הזה הוא אופציונלי אם משתמשים במזהה המשימה המלא. אם אתם כוללים את הדגל --location ומשתמשים במזהה המשימה המלא, המערכת מתעלמת מהדגל --location.

הפקודה הבאה מבקשת לבטל את המשימה וממתינה להשלמת הביטול. אם מציינים את מזהה המשימה המלא, המערכת מתעלמת מהדגל --location:

bq --location=LOCATION cancel JOB_ID

הפקודה הבאה מבקשת לבטל את המשימה ומחזירה תשובה באופן מיידי. אם מציינים את מזהה המשימה המלא, המערכת מתעלמת מהדגל --location:

bq --location=LOCATION --nosync cancel JOB_ID

מחליפים את מה שכתוב בשדות הבאים:

  • ‫LOCATION (אופציונלי): שם המיקום שבו המשימה פועלת. לדוגמה, אם אתם משתמשים ב-BigQuery באזור טוקיו, הגדירו את הערך של הדגל ל-asia-northeast1. אפשר להגדיר ערך ברירת מחדל למיקום באמצעות הקובץ .bigqueryrc.
  • ‫JOB_ID: המזהה של המשימה שמבטלים. אם מעתיקים את מזהה המשימה ממסוף Google Cloud , מזהה הפרויקט והמיקום נכללים במזהה המשימה. לדוגמה: my-project-1234:US.bquijob_123x456_123y123z123c.

דוגמאות

הפקודה הבאה מבטלת את המשימה my-project-1234:US.bquijob_123x456_123y123z123c שפועלת במיקום US במספר אזורים בפרויקט my-project-1234, וממתינה לסיום. מכיוון שמשתמשים במזהה המשימה המלא, לא צריך לספק את הדגל של המיקום.

bq cancel my-project-1234:US.bquijob_123x456_123y123z123c

הפקודה הבאה מבטלת את המשימה bquijob_123x456_123y123z123c שפועלת במיקום US במספר אזורים בפרויקט my-project-1234, וממתינה לסיום. מכיוון שמשתמשים בגרסה הקצרה של מזהה המשימה, צריך לספק את הדגל --location.

bq --location=US cancel bquijob_123x456_123y123z123c

הפקודה הבאה מבטלת את המשימה bquijob_123x456_123y123z123c שפועלת במיקום US במספר אזורים בפרויקט my-project-1234, ומחזירה מיד. מכיוון שמשתמשים במזהה המשימה המלא, לא צריך לספק את הדגל --location.

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

API

מפעילים את jobs.cancel ומספקים את הפרמטרים jobId ו-projectId. מציינים את הפרמטר location ומגדירים את הערך למיקום שבו המשימה פועלת.

המשך

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Go במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Go API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

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

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Java API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

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

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Node.js במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Node.js API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

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

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Python API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

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

מחיקת המטא-נתונים של המשימה

אפשר למחוק את המטא-נתונים של משימה ספציפית באמצעות כלי שורת הפקודה של BigQuery וספריית הלקוח של Python. ב-BigQuery נשמרת היסטוריה של משימות שבוצעו ב-6 החודשים האחרונים. אתם יכולים להשתמש בשיטה הזו כדי להסיר מידע רגיש שעשוי להופיע בהצהרות של שאילתות. אפשר למחוק את המטא-נתונים של המשימה רק אחרי שהיא מסתיימת. אם משימה יצרה משימות צאצא, גם משימות הצאצא נמחקות. אי אפשר למחוק משימות צאצא. אפשר למחוק רק משימות הורה או משימות ברמה העליונה.

כדי למחוק מטא-נתונים של משימה:

BQ

מריצים את הפקודה bq rm עם הדגל -j ומזהה המשימה.

כשמציינים את מזהה המשימה, אפשר להשתמש במזהה המלא או במזהה המקוצר. לדוגמה, מזהי המשימות שמופיעים במסוף Google Cloud הם מלאים, כלומר הם כוללים את הפרויקט והמיקום:

my-project-1234:US.bquijob_123x456_123y123z123c

מזהי המשימות בכלי שורת הפקודה של BigQuery מופיעים בפורמט הקצר. מזהה הפרויקט והמיקום לא נכללים:

bquijob_123x456_123y123z123c

כדי לציין את מיקום המשימה, מוסיפים את הדגל --location ומגדירים את הערך למיקום שלכם. הדגל הזה הוא אופציונלי אם משתמשים במזהה המשימה המלא. אם אתם כוללים את הדגל --location ומשתמשים במזהה המשימה המלא, המערכת מתעלמת מהדגל --location.

הפקודה הבאה מוחקת משימה:

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

Python

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Python API.

כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.

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

משימות חוזרות

אי אפשר לחזור על משימה באמצעות אותו מזהה משימה. במקום זאת, צריך ליצור משימה חדשה עם אותה הגדרה. כששולחים את המשימה החדשה במסוףGoogle Cloud או בכלי שורת הפקודה של BigQuery, מוקצה מזהה משימה חדש. כששולחים את המשימה באמצעות ה-API או ספריות הלקוח, צריך ליצור מזהה משימה חדש.

כדי לחזור על משימה, פועלים לפי השלבים הבאים:

המסוף

כדי לחזור על משימת שאילתה:

  1. נכנסים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על Explorer:

    כפתור מודגש לחלונית Explorer.

  3. בחלונית Explorer, לוחצים על Job history.

  4. כדי לראות את כל המשרות, לוחצים על היסטוריה אישית. כדי להציג את כל המשימות בפרויקט, לוחצים על Project history.

  5. לוחצים על משימת שאילתה כדי לפתוח את פרטי המשימה.

  6. כדי לחזור על שאילתה, לוחצים על פתיחה כשאילתה חדשה.

  7. לוחצים על Run.

כדי לחזור על משימת טעינה:

  1. נכנסים לדף BigQuery.

    כניסה ל-BigQuery

  2. בחלונית הימנית, לוחצים על Explorer:

    כפתור מודגש לחלונית Explorer.

  3. בחלונית Explorer, לוחצים על Job history.

  4. כדי לראות את כל המשרות, לוחצים על היסטוריה אישית. כדי להציג את כל המשימות בפרויקט, לוחצים על Project history.

  5. לוחצים על משימת טעינה כדי לפתוח את פרטי המשימה.

  6. כדי לחזור על משימה, לוחצים על Repeat load job.

BQ

מפעילים שוב את הפקודה, ו-BigQuery יוצר באופן אוטומטי משימה עם מזהה משימה חדש.

API

אין שיטה של קריאה אחת לחזרה על משימה. אם רוצים לחזור על משימה ספציפית:

  1. קוראים ל-jobs.get כדי לאחזר את המשאב של המשימה שרוצים לחזור עליה.

  2. מסירים את השדות id,‏ status ו-statistics. משנים את הערך בשדה jobId לערך חדש שנוצר על ידי קוד הלקוח. משנים שדות אחרים לפי הצורך.

  3. מפעילים את jobs.insert עם המשאב ששונה ומזהה המשימה החדש כדי להתחיל את המשימה החדשה.

המאמרים הבאים