ניהול משרות

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

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

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

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

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

  • PENDING: המשימה מתוזמנת וממתינה להרצה.
  • RUNNING: המשימה מתבצעת.
  • DONE: המשימה הושלמה. אם המשימה נכשלה, הערך JobStatus.errorResult יהיה נוכח.

מכסות

מידע על מכסות של משימות מופיע במסמכי העזרה של סוג העבודה בדף מכסות ומגבלות:

תמחור

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

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

מידע נוסף מפורט בקטע תמחור.

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

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

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

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

  • BigQuery Job User (roles/bigquery.jobUser) – כדי להריץ או לחזור על משימה, לרשום את המשימות, להציג את פרטי המשימות ולבטל את המשימות.
  • משתמש BigQuery‏ (roles/bigquery.user) – כדי להריץ או לחזור על משימה, לראות רשימה של המשימות, לראות את הפרטים של המשימות ולבטל את המשימות (ההרשאות בתפקיד הזה רחבות יותר מאלה של BigQuery Job User).
  • BigQuery Resource Admin (roles/bigquery.resourceAdmin) - to list all jobs and retrieve metadata on any job.
  • BigQuery Admin (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. בחלונית הימנית, לוחצים על כלי הניתוחים:

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

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

  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

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי 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. בחלונית הימנית, לוחצים על כלי הניתוחים:

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

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

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

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

BQ

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

  • --jobs=true או -j: מזהה משימות כסוג המשאב שרוצים להציג.
  • --all=true או -a: רשימת משימות מכל המשתמשים. כדי לראות את הפרטים המלאים (לא מצונזרים) של כל המשימות, צריך הרשאות bigquery.jobs.listAll.
  • --min_creation_time: מציג רשימה של משימות אחרי ערך חותמת זמן שסופק. הערך הזה מיוצג כחותמת זמן של ראשית זמן יוניקס באלפיות השנייה.
  • --max_creation_time: מציג רשימה של משימות לפני ערך חותמת זמן שסופק. הערך הזה מיוצג כחותמת זמן של ראשית זמן יוניקס באלפיות השנייה.
  • הגבלת התוצאות באמצעות --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

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

  • MIN_TIME: מספר שלם שמייצג חותמת זמן של Unix epoch באלפיות השנייה.
  • MAX_TIME: מספר שלם שמייצג חותמת זמן של Unix epoch באלפיות השנייה.
  • MAX_RESULTS: מספר שלם שמציין את מספר המשימות שמוחזרות.
  • PROJECT_ID: מזהה הפרויקט שמכיל את המשימות שאתם מציגים. אם מגדירים פרויקט ברירת מחדל, לא צריך לציין את הפרמטר 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

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

Go

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי 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

לפני שמנסים את הדוגמה הזו, צריך לפעול לפי 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. בחלונית הימנית, לוחצים על כלי הניתוחים:

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

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

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

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

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

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

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

  1. עוברים לדף BigQuery.

    כניסה ל-BigQuery

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

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

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

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

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

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

BQ

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

API

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

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

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

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

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