תצוגת משרות
התצוגה INFORMATION_SCHEMA.JOBS מכילה מטא-נתונים כמעט בזמן אמת על כל המשימות ב-BigQuery בפרויקט הנוכחי.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות לשליחת שאילתות לתצוגה INFORMATION_SCHEMA.JOBS, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בפרויקט:
- BigQuery User (
roles/bigquery.user) - BigQuery Resource Viewer (
roles/bigquery.resourceViewer)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
התפקידים המוגדרים מראש האלה כוללים את ההרשאות שנדרשות לשליחת שאילתות לתצוגה INFORMATION_SCHEMA.JOBS. כדי לראות בדיוק אילו הרשאות נדרשות, אפשר להרחיב את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
כדי להריץ שאילתות בתצוגה INFORMATION_SCHEMA.JOBS, נדרשות ההרשאות הבאות:
-
bigquery.jobs.listAll -
bigquery.jobs.create
יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
מידע נוסף על הרשאות ב-BigQuery זמין במאמר בקרת גישה באמצעות IAM.
סכימה
הנתונים הבסיסיים מחולקים למחיצות לפי העמודה creation_time ומקובצים לפי project_id ו-user_email. העמודה query_info מכילה מידע נוסף על עבודות השאילתה.
לתצוגה INFORMATION_SCHEMA.JOBS יש את הסכימה הבאה:
| שם העמודה | סוג הנתונים | ערך |
|---|---|---|
bi_engine_statistics |
RECORD |
אם הפרויקט מוגדר לשימוש ב-BI Engine, השדה הזה מכיל את הערך BiEngineStatistics.
אחרת NULL.
|
cache_hit |
BOOLEAN |
האם תוצאות השאילתה של העבודה הזו הגיעו ממטמון.
אם יש לכם עבודת הצהרה של שאילתות מרובות, cache_hit עבור שאילתת האב היא NULL.
|
creation_time |
TIMESTAMP |
(עמודת חלוקה) מועד היצירה של העבודה הזו. החלוקה למחיצות מבוססת על זמן UTC של חותמת הזמן הזו. |
destination_table |
RECORD |
טבלת היעד של התוצאות, אם יש כאלה. |
dml_statistics |
RECORD |
אם העבודה היא שאילתה עם הצהרת DML, הערך הוא רשומה עם השדות הבאים:
NULL.העמודה הזו מופיעה בתצוגות INFORMATION_SCHEMA.JOBS_BY_USER ו-INFORMATION_SCHEMA.JOBS_BY_PROJECT.
|
end_time |
TIMESTAMP |
שעת הסיום של העבודה הזו, באלפיות השנייה מאז ראשית התקופה. השדה הזה מייצג את הזמן שבו העבודה נכנסת למצב DONE. |
error_result |
RECORD |
פרטים של שגיאות כאובייקטים מסוג ErrorProto. |
job_creation_reason.code |
STRING |
מציין את הסיבה ברמה גבוהה ליצירת משימה. הערכים האפשריים:
|
job_id |
STRING |
המזהה של המשרה אם היא נוצרה. אחרת, מזהה השאילתה של שאילתה שמשתמשת במצב יצירה אופציונלי של משימות. לדוגמה, bquxjob_1234. |
job_stages |
RECORD REPEATED |
שלבי שאילתה של המשרה.
הערה: הערכים בעמודה הזו ריקים בשאילתות שקוראות מטבלאות עם מדיניות גישה ברמת השורה. מידע נוסף על שיטות מומלצות לאבטחה ברמת השורה ב-BigQuery זמין במאמר שיטות מומלצות לאבטחה ברמת השורה ב-BigQuery. |
job_type |
STRING |
סוג המשרה. הערכים האפשריים הם QUERY, LOAD, EXTRACT, COPY או NULL. ערך של NULL מציין משימה שמתבצעת ברקע.
|
labels |
RECORD |
מערך של תוויות שמוחלות על העבודה כצמדי מפתח/ערך. |
parent_job_id |
STRING |
המזהה של עבודת ההורה, אם יש. |
priority |
STRING |
העדיפות של המשימה הזו. הערכים התקפים כוללים INTERACTIVE ו-BATCH. |
project_id |
STRING |
(Clustering column) מזהה הפרויקט. |
project_number |
INTEGER |
מספר הפרויקט. |
query |
STRING |
טקסט של שאילתת SQL. |
referenced_tables |
RECORD |
מערך של ערכי STRUCT שמכילים את השדות הבאים של STRING לכל טבלה שהשאילתה מפנה אליה: project_id, dataset_id ו-table_id. השדה הזה מאוכלס רק עבור משימות של שאילתות שלא נמצאות במטמון.
|
reservation_id |
STRING |
שם ההזמנה הראשית שהוקצתה לעבודה הזו, בפורמט RESERVATION_ADMIN_PROJECT:RESERVATION_LOCATION.RESERVATION_NAME.בפלט הזה:
|
reservation_group_path |
ARRAY<STRING> |
קבוצת ההזמנות שההזמנה מקושרת אליה.
לדוגמה, אם ההזמנה מקושרת לקבוצה my-group, השדה reservation_group_path מכיל רשימה כמו: [my-group]. |
edition |
STRING |
מהדורת Google Workspace שמשויכת להזמנה שהוקצתה למשרה הזו. מידע נוסף על מהדורות זמין במאמר מבוא למהדורות של BigQuery. |
session_info |
RECORD |
פרטים על הסשן שבו המשימה הזו הופעלה, אם יש. |
start_time |
TIMESTAMP |
שעת ההתחלה של הפעולה הזו, באלפיות השנייה מאז תחילת התקופה של זמן מערכת. השדה הזה מייצג את הזמן שבו העבודה עוברת מהסטטוס PENDING לסטטוס RUNNING או DONE. |
state |
STRING |
מצב ההפעלה של העבודה. מדינות תקפות כוללות PENDING, RUNNING ו-DONE.
|
statement_type |
STRING |
סוג הצהרת השאילתה. לדוגמה, DELETE, INSERT, SCRIPT, SELECT או UPDATE. רשימת הערכים התקינים מופיעה בקטע QueryStatementType.
|
timeline |
RECORD |
ציר הזמן של השאילתה של העבודה. מכיל תמונות מצב של ביצוע שאילתות. |
total_bytes_billed |
INTEGER |
אם הפרויקט מוגדר לשימוש בתמחור לפי דרישה, השדה הזה מכיל את סך הבייטים שחויבו על העבודה. אם הפרויקט מוגדר לשימוש בתמחור לפי תעריף קבוע, לא מחויבים על בייטים והשדה הזה הוא אינפורמטיבי בלבד.
הערה: הערכים בעמודה הזו ריקים בשאילתות שקוראות מטבלאות עם מדיניות גישה ברמת השורה. מידע נוסף על שיטות מומלצות לאבטחה ברמת השורה ב-BigQuery זמין במאמר שיטות מומלצות לאבטחה ברמת השורה ב-BigQuery. |
total_bytes_processed |
INTEGER |
המספר הכולל של בייטים שעובדו על ידי הג'וב. הערה: הערכים בעמודה הזו ריקים בשאילתות שקוראות מטבלאות עם מדיניות גישה ברמת השורה. מידע נוסף על שיטות מומלצות לאבטחה ברמת השורה ב-BigQuery זמין במאמר שיטות מומלצות לאבטחה ברמת השורה ב-BigQuery. |
total_modified_partitions |
INTEGER |
המספר הכולל של המחיצות שהעבודה שינתה. השדה הזה מאוכלס עבור משרות LOAD וQUERY.
|
total_slot_ms |
INTEGER |
משבצת זמן באלפיות שנייה למשימה במהלך כל משך הזמן שלה במצב RUNNING, כולל ניסיונות חוזרים. |
total_services_sku_slot_ms |
INTEGER |
המספר הכולל של אלפיות שנייה של משבצות זמן למשימה שמופעלת בשירותים חיצוניים ושמחויבת לפי המק"ט של השירותים. השדה הזה מאוכלס רק עבור משימות שיש להן עלויות שירות חיצוניות, והוא מייצג את סך השימוש בעלויות ששיטת החיוב שלהן היא "SERVICES_SKU". |
transaction_id |
STRING |
המזהה של העסקה שבה המשימה הזו הופעלה, אם יש כזו. |
user_email |
STRING |
(Clustering column) כתובת האימייל או חשבון השירות של המשתמש שביצע את העבודה. |
principal_subject |
STRING |
ייצוג מחרוזת של הזהות של הגורם הראשי שהפעיל את העבודה. |
query_info.resource_warning |
STRING |
הודעת האזהרה שמופיעה אם השימוש במשאבים במהלך עיבוד השאילתה חורג מהסף הפנימי של המערכת. אם עבודת השאילתה הושלמה בהצלחה, השדה resource_warning יאוכלס. החל מ-resource_warning, תקבלו נקודות נתונים נוספות כדי לבצע אופטימיזציה של השאילתות ולהגדיר מעקב אחר מגמות הביצועים של קבוצת שאילתות מקבילה באמצעות query_hashes.
|
query_info.query_hashes.normalized_literals |
STRING |
מכיל את ערך הגיבוב של השאילתה. normalized_literals הוא גיבוב הקסדצימלי שמתעלם מהערות, מערכי פרמטרים, מפונקציות מוגדרות על ידי המשתמש וממילוליים.STRING
ערך הגיבוב יהיה שונה אם התצוגות הבסיסיות ישתנו, או אם השאילתה מפנה באופן מרומז לעמודות, כמו SELECT *, וסכימת הטבלה משתנה.
השדה הזה מופיע בשאילתות GoogleSQL שבוצעו בהצלחה ולא נמצאו במטמון. |
query_info.performance_insights |
RECORD |
תובנות לגבי הביצועים של המשימה. |
query_info.optimization_details |
STRUCT |
אופטימיזציות מבוססות-היסטוריה של המשרה. העמודה הזו מופיעה רק בתצוגה JOBS_BY_PROJECT.
|
transferred_bytes |
INTEGER |
מספר הבייטים הכולל שהועבר בשאילתות BigQuery Omni, כמו משימות העברה של BigQuery Omni. |
materialized_view_statistics |
RECORD |
נתונים סטטיסטיים של תצוגות חומריות שנלקחים בחשבון בעבודת שאילתה. (תצוגה מקדימה) |
metadata_cache_statistics |
RECORD |
נתונים סטטיסטיים על השימוש באינדקס של עמודות מטא-נתונים בטבלאות שהופנו אליהן במשימת שאילתה. |
search_statistics |
RECORD |
נתונים סטטיסטיים של שאילתת חיפוש. |
query_dialect |
STRING |
השדה הזה יהיה זמין במהלך מאי 2025.
ניב השאילתה שמשמש לעבודה. הערכים התקפים כוללים:
לגבי משימות שהוגשו על ידי משתמשים, השדה הזה מאוכלס רק עבור משימות של שאילתות. אפשר לשלוט בבחירה של ניב השאילתה שמוגדר כברירת מחדל באמצעות הגדרות התצורה. במקרה של משימות ברקע, הערך של השדה הזה לא נשלט על ידי הגדרות ברירת המחדל של ניב השאילתות, ולא משפיע על משימות שנשלחות על ידי משתמשים. בחלק מהמשימות ברקע, הערך מושמט. |
continuous |
BOOLEAN |
האם העבודה היא שאילתה מתמשכת. |
continuous_query_info.output_watermark |
TIMESTAMP |
מייצג את הנקודה שעד אליה השאילתה המתמשכת עיבדה נתונים בהצלחה. |
vector_search_statistics |
RECORD |
נתונים סטטיסטיים של שאילתת חיפוש וקטורי. |
external_service_costs |
RECORD |
מערך של מידע על עלויות השירות החיצוני עבור עבודת שאילתה. |
כששולחים שאילתה אל INFORMATION_SCHEMA.JOBS כדי למצוא סיכום של עלות שאילתות, צריך להחריג את סוג ההצהרה SCRIPT, אחרת יכול להיות שחלק מהערכים ייספרו פעמיים. השורה SCRIPT כוללת ערכי סיכום של כל עבודות הצאצא שהופעלו כחלק מהעבודה הזו.
כדי לשמור על יציבות, מומלץ לציין במפורש את העמודות בשאילתות של סכימת המידע, במקום להשתמש בתו כללי (SELECT *). ציון מפורש של העמודות מונע את השבירה של השאילתות אם הסכימה הבסיסית משתנה.
משימות של שאילתות עם כמה הצהרות
משימת שאילתה עם כמה הצהרות היא משימת שאילתה שמשתמשת בשפה פרוצדורלית.
בדרך כלל, במשימות של שאילתות עם כמה הצהרות מוגדרים משתנים באמצעות DECLARE או שיש הצהרות של זרימת בקרה כמו IF או WHILE. כשמריצים שאילתה ב-INFORMATION_SCHEMA.JOBS, חשוב להבין את ההבדל בין עבודת שאילתה עם כמה הצהרות לבין עבודות אחרות. לשאילתות עם כמה הצהרות יש את המאפיינים הבאים:
-
statement_type=SCRIPT -
reservation_id=NULL
משרות לילדים
לכל אחת מעבודות הצאצא של עבודת שאילתה עם כמה הצהרות יש parent_job_id שמצביע על עבודת השאילתה עם כמה הצהרות עצמה. הם כוללים ערכי סיכום של כל עבודות הצאצא שהופעלו כחלק מהעבודה הזו.
אם אתם שולחים שאילתה INFORMATION_SCHEMA.JOBS כדי למצוא סיכום של עלויות של משימות שאילתה,
אתם צריכים להחריג את סוג ההצהרה SCRIPT. אחרת, יכול להיות שערכים מסוימים כמו total_slot_ms ייספרו פעמיים.
שמירת נתונים
בתצוגה הזו מוצגות משימות שפועלות, יחד עם היסטוריית המשימות מ-180 הימים האחרונים.
אם פרויקט מועבר לארגון (ממצב שבו הוא לא היה שייך לארגון או מארגון אחר), לא ניתן לגשת למידע על משרות שנוצרו לפני תאריך ההעברה דרך התצוגה INFORMATION_SCHEMA.JOBS, כי התצוגה שומרת רק נתונים שנוצרו החל מתאריך ההעברה.
היקף ותחביר
שאילתות שמופעלות על התצוגה הזו חייבות לכלול מסנן אזור. בטבלה הבאה מוסבר היקף האזור בתצוגה הזו:
| שם התצוגה | היקף המשאבים | היקף האזור |
|---|---|---|
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.JOBS[_BY_PROJECT] |
ברמת הפרויקט | REGION |
-
אופציונלי:
PROJECT_ID: מזהה הפרויקט ב- Cloud de Confiance . אם לא מציינים פרויקט, המערכת משתמשת בפרויקט שמוגדר כברירת מחדל. -
REGION: כל שם של אזור במערך נתונים. לדוגמה,`region-us`.
אומדנים של שאילתות להרצה יבשה
כשמבצעים הרצה יבשה של שאילתה שמפנה לתצוגה INFORMATION_SCHEMA.JOBS, יכול להיות שהערכת הבייטים לעיבוד תהיה גבוהה משמעותית ממספר הבייטים בפועל שעברו עיבוד במהלך ביצוע השאילתה.
ההערכה הגבוהה מדי מתרחשת כי החישוב של הרצת הניסיון מתייחס רק למסננים בעמודת החלוקה של נתוני הבסיס.creation_time היא לא מתייחסת למסננים בעמודות של אשכולות – כמו המסנן המרומז project_id או המסנן user_email – אם הם מצוינים במשפט WHERE.
הנתונים בפועל שנסרקים יכולים להיות נמוכים משמעותית מהאומדן של הרצת הניסיון, במיוחד בפרויקטים או אצל משתמשים עם פחות משימות.
אם לא מציינים מסנן ב-creation_time, לא מתבצעת הסרת מחיצות, וההערכה של הרצת הניסיון משקפת סריקה של כל המחיצות של הנתונים הבסיסיים. עם זאת, יכול להיות שצבירת נתונים תצמצם את מספר הבייטים בפועל שעברו עיבוד בהשוואה להערכה הזו.
דוגמאות
כדי להריץ את השאילתה בפרויקט שאינו פרויקט ברירת המחדל, מוסיפים את מזהה הפרויקט בפורמט הבא:
`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.JOBS
-
PROJECT_ID: מזהה הפרויקט -
REGION_NAME: האזור של הפרויקט.
לדוגמה, `myproject`.`region-us-central1`.INFORMATION_SCHEMA.JOBS.
השוואה בין נתוני השימוש במשרות לפי דרישה לבין נתוני החיוב
בפרויקטים שבהם משתמשים בתמחור על פי דרישה, אפשר להשתמש בתצוגה INFORMATION_SCHEMA.JOBS כדי לבדוק את החיובים על מחשוב בתקופה מסוימת.
בפרויקטים שבהם משתמשים בתמחור לפי קיבולת (יחידות קיבולת), אפשר להשתמש בINFORMATION_SCHEMA.RESERVATIONS_TIMELINE כדי לבדוק את חיובים על מחשוב במהלך תקופה מסוימת.
השאילתה הבאה מפיקה נתונים מצטברים משוערים יומיים של נפח ה-TiB שחויבתם עליו ושל החיובים שנובעים מכך. בקטע מגבלות מוסבר מתי יכול להיות שהאומדנים האלה לא יתאימו לחשבון שלכם.
בדוגמה הזו בלבד, צריך להגדיר את המשתנים הנוספים הבאים. כדי שיהיה קל יותר להשתמש בהן, אפשר לערוך אותן כאן.
-
START_DATE: התאריך המוקדם ביותר לחישוב הממוצע (כולל). END_DATE: התאריך האחרון לסיכום הנתונים (כולל).-
PRICE_PER_TIB: המחיר על פי דרישה לכל TiB שמשמש להערכות חיוב.
CREATE TEMP FUNCTION isBillable(error_result ANY TYPE) AS ( -- You aren't charged for queries that return an error. error_result IS NULL -- However, canceling a running query might incur charges. OR error_result.reason = 'stopped' ); -- BigQuery hides the number of bytes billed on all queries against tables with -- row-level security. CREATE TEMP FUNCTION isMaybeUsingRowLevelSecurity( job_type STRING, tib_billed FLOAT64, error_result ANY TYPE) AS ( job_type = 'QUERY' AND tib_billed IS NULL AND isBillable(error_result) ); WITH query_params AS ( SELECT date 'START_DATE' AS start_date, -- inclusive date 'END_DATE' AS end_date, -- inclusive ), usage_with_multiplier AS ( SELECT job_type, error_result, creation_time, -- Jobs are billed by end_time in PST8PDT timezone, regardless of where -- the job ran. EXTRACT(date FROM end_time AT TIME ZONE 'PST8PDT') billing_date, total_bytes_billed / 1024 / 1024 / 1024 / 1024 total_tib_billed, CASE statement_type WHEN 'SCRIPT' THEN 0 WHEN 'CREATE_MODEL' THEN 50 * PRICE_PER_TIB ELSE PRICE_PER_TIB END AS multiplier, FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS WHERE statement_type <> 'SCRIPT' ) SELECT billing_date, sum(total_tib_billed * multiplier) estimated_charge, sum(total_tib_billed) estimated_usage_in_tib, countif(isMaybeUsingRowLevelSecurity(job_type, total_tib_billed, error_result)) AS jobs_using_row_level_security, FROM usage_with_multiplier, query_params WHERE 1 = 1 -- Filter by creation_time for partition pruning. AND date(creation_time) BETWEEN date_sub(start_date, INTERVAL 2 day) AND date_add(end_date, INTERVAL 1 day) AND billing_date BETWEEN start_date AND end_date AND isBillable(error_result) GROUP BY billing_date ORDER BY billing_date;
מגבלות
ב-BigQuery מוסתרים נתונים סטטיסטיים מסוימים של שאילתות על טבלאות עם אבטחה ברמת השורה. מספר השאילתות שסופקו הוא מספר המשימות שהושפעו כ-
jobs_using_row_level_security, אבל אין לו גישה לשימוש שניתן לחיוב.התמחור של שאילתות על פי דרישה ב-BigQuery ML תלוי בסוג המודל שנוצר.
INFORMATION_SCHEMA.JOBSלא עוקב אחרי סוג המודל שנוצר, ולכן השאילתה שמוצגת מניחה שכל הצהרות CREATE_MODEL יצרו את סוגי המודלים שחלים עליהם חיובים גבוהים יותר.התמחור של פרוצדורות Apache Spark דומה, אבל החיובים מדווחים כמק"ט של BigQuery Enterprise edition בתשלום לפי שימוש.
INFORMATION_SCHEMA.JOBSמתעד את השימוש הזה כ-INFORMATION_SCHEMA.JOBS, אבל לא יכול לקבוע איזה מק"ט מייצג השימוש.total_bytes_billed
חישוב ממוצע ניצול המשבצות
בדוגמה הבאה מחושב השימוש הממוצע במשבצות לכל השאילתות ב-7 הימים האחרונים בפרויקט נתון. חשוב לדעת שהחישוב הזה הכי מדויק בפרויקטים שבהם השימוש במשבצות הוא עקבי לאורך השבוע. אם בפרויקט שלכם אין שימוש עקבי במשבצות, יכול להיות שהמספר הזה יהיה נמוך מהצפוי.
כדי להריץ את השאילתה:
SELECT SUM(total_slot_ms) / (1000 * 60 * 60 * 24 * 7) AS avg_slots FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS WHERE -- Filter by the partition column first to limit the amount of data scanned. -- Eight days allows for jobs created before the 7 day end_time filter. creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 8 DAY) AND CURRENT_TIMESTAMP() AND job_type = 'QUERY' AND statement_type != 'SCRIPT' AND end_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY) AND CURRENT_TIMESTAMP();
INFORMATION_SCHEMA
התוצאה אמורה להיראות כך:
+------------+ | avg_slots | +------------+ | 3879.1534 | +------------+
אפשר לבדוק את השימוש במקום שמור מסוים באמצעות WHERE reservation_id = "…". הנתונים האלה יכולים לעזור לכם לקבוע את אחוז השימוש בהזמנה לאורך תקופה מסוימת. במשימות של סקריפטים, משימת האב מדווחת גם על השימוש הכולל במשבצות מתוך משימות הצאצא. כדי למנוע ספירה כפולה, צריך להשתמש בפונקציה WHERE statement_type != "SCRIPT" כדי להחריג את עבודת ההורה.
אם רוצים לבדוק את ממוצע השימוש במשבצות זמן למשימות ספציפיות, משתמשים ב-total_slot_ms / TIMESTAMP_DIFF(end_time, start_time, MILLISECOND).
ספירת שאילתות פעילות מהזמן האחרון לפי עדיפות השאילתה
בדוגמה הבאה מוצג מספר השאילתות, מקובצות לפי עדיפות (אינטראקטיבית או אצווה) שהתחילו ב-7 השעות האחרונות:
SELECT priority, COUNT(*) active_jobs FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS WHERE creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 hour) AND job_type = 'QUERY' GROUP BY priority;
התוצאה אמורה להיראות כך:
+-------------+-------------+ | priority | active_jobs | +-------------+-------------+ | INTERACTIVE | 2 | | BATCH | 3 | +-------------+-------------+
השדה priority מציין אם השאילתה היא INTERACTIVE או BATCH.
צפייה בהיסטוריה של עבודות הטעינה
בדוגמה הבאה מוצגת רשימה של כל המשתמשים או חשבונות השירות ששלחו עבודת טעינה של נתונים בכמות גדולה לפרויקט נתון. לא צוין גבול זמן, ולכן השאילתה הזו סורקת את כל ההיסטוריה הזמינה.
SELECT user_email AS user, COUNT(*) num_jobs FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS WHERE job_type = 'LOAD' GROUP BY user_email;
INFORMATION_SCHEMA
התוצאה אמורה להיראות כך:
+--------------+ | user | +--------------+ | abc@xyz.com | | xyz@xyz.com | | bob@xyz.com | +--------------+
קבלת מספר משימות הטעינה כדי לקבוע את מכסת המשימות היומית שהייתה בשימוש
בדוגמה הבאה מוחזר מספר המשימות לפי יום, מערך נתונים וטבלה, כדי שתוכלו לדעת כמה מהמכסה היומית של המשימות נוצל.
SELECT DATE(creation_time) as day, destination_table.project_id as project_id, destination_table.dataset_id as dataset_id, destination_table.table_id as table_id, COUNT(job_id) AS load_job_count FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS WHERE creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 8 DAY) AND CURRENT_TIMESTAMP() AND job_type = "LOAD" GROUP BY day, project_id, dataset_id, table_id ORDER BY day DESC;
INFORMATION_SCHEMA
התוצאה אמורה להיראות כך:
+-------------+------------+-------------+----------+-----------------+ |day | project_id | dataset_id | table_id | load_job_count | +-------------+------------+-------------+----------+-----------------+ | 2020-10-10 | my_project | dataset1 | orders | 58 | | 2020-10-10 | my_project | dataset1 | product | 20 | | 2020-10-10 | my_project | dataset1 | sales | 11 | +-------------+------------+-------------+----------+-----------------+
קבלת המשימות האחרונות שנכשלו
בדוגמה הבאה אפשר לראות את שלוש המשימות האחרונות שנכשלו:
SELECT job_id, creation_time, user_email, error_result FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE error_result.reason != "Null" ORDER BY creation_time DESC LIMIT 3;
התוצאות אמורות להיראות כך:
+------------+--------------------------+------------------+-------------------------------------+ | job_id | creation_time | user_email | error_result | +------------+--------------------------+------------------+-------------------------------------+ | bquxjob_1 | 2020-10-10 00:00:00 UTC | abc@example.com | Column 'col1' has mismatched type...| | bquxjob_2 | 2020-10-11 00:00:00 UTC | xyz@example.com | Column 'col1' has mismatched type...| | bquxjob_3 | 2020-10-11 00:00:00 UTC | bob@example.com | Column 'col1' has mismatched type...| +------------+--------------------------+------------------+-------------------------------------+
שאילתה של רשימת המשימות שפועלות במשך זמן רב
בדוגמה הבאה מוצגת רשימת המשימות ארוכות הטווח שנמצאות במצב RUNNING או PENDING במשך יותר מ-30 דקות:
SELECT job_id, job_type, state, creation_time, start_time, user_email FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS WHERE state!="DONE" AND creation_time <= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 MINUTE) ORDER BY creation_time ASC;
התוצאה אמורה להיראות כך:
+-----------+----------+---------+--------------------------------+--------------------------------+------------------+ | job_id | job_type | state | creation_time | start_time | user_email | +-----------+----------+---------+--------------------------------+--------------------------------+------------------+ | bquxjob_1 | QUERY | RUNNING | 2023-05-03 05:07:22.818000 UTC | 2023-05-03 05:07:22.905000 UTC | abc@example.com | | bquxjob_2 | QUERY | PENDING | 2023-05-01 02:05:47.925000 UTC | 2023-05-01 02:05:47.998000 UTC | xyz@example.com | | bquxjob_3 | QUERY | PENDING | 2023-05-01 02:05:47.925000 UTC | 2023-05-01 02:05:47.998000 UTC | abc@example.com | +-----------+----------+---------+--------------------------------+--------------------------------+------------------+
שאילתות שמשתמשות במצב יצירה אופציונלית של משימות
בדוגמה הבאה מוצגת רשימה של שאילתות שהופעלו במצב אופציונלי של יצירת משימות, ש-BigQuery לא יצר עבורן משימות.
SELECT job_id, FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS WHERE TIMESTAMP_TRUNC(creation_time, DAY) = '2024-06-12' AND job_creation_reason.code IS NULL LIMIT 3;
התוצאות אמורות להיראות כך:
+-----------+ | job_id | | +-----------+ | bquxjob_1 | | bquxjob_2 | | bquxjob_3 | +-----------+
בדוגמה הבאה מוצג מידע על שאילתה שהופעלה במצב אופציונלי של יצירת משימות, ש-BigQuery לא יצר עבורה משימה.
SELECT job_id, statement_type, priority, cache_hit, job_creation_reason.code AS job_creation_reason_code, total_bytes_billed, total_bytes_processed, total_slot_ms, state, error_result.message AS error_result_message, FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS WHERE TIMESTAMP_TRUNC(creation_time, DAY) = '2024-06-12' AND job_id = '2Lm09bHxDEsoVK8zwzWJomLHU_Ud%1910479b151' -- queryId
הערה: השדה job_id מכיל את queryId של השאילתה אם לא נוצרה משימה עבור השאילתה הזו.
התוצאות אמורות להיראות כך:
+-----------+----------------+-------------+-----------+--------------------------+--------------------+---------------------+---------------+-------+----------------------+ | job_id | statement_type | priority | cache_hit | job_creation_reason_code | total_bytes_billed | total_bytes_processed | total_slot_ms | state | error_result_message | +-----------+----------------+-------------+-----------+--------------------------+--------------------+---------------------+---------------+-------+----------------------+ | bquxjob_1 | SELECT | INTERACTIVE | false | null | 161480704 | 161164718 | 3106 | DONE | null | +-----------+----------------+-------------+-----------+--------------------------+--------------------+---------------------+---------------+-------+----------------------+
בדוגמה הבאה מוצגת רשימה של שאילתות שהופעלו במצב אופציונלי של יצירת עבודות, ש-BigQuery יצר עבורן עבודות.
SELECT job_id, job_creation_reason.code AS job_creation_reason_code FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS WHERE TIMESTAMP_TRUNC(creation_time, DAY) = '2024-06-12' AND job_creation_reason.code IS NOT NULL AND job_creation_reason.code != 'REQUESTED' LIMIT 3
התוצאות אמורות להיראות כך:
+-----------+--------------------------+ | job_id | job_creation_reason_code | +-----------+--------------------------+ | bquxjob_1 | LARGE_RESULTS | | bquxjob_2 | LARGE_RESULTS | | bquxjob_3 | LARGE_RESULTS | +-----------+--------------------------+
בייטים שעובדו לכל זהות משתמש
בדוגמה הבאה מוצגים הבייטים הכוללים שחויבו על עבודות של שאילתות לכל משתמש:
SELECT user_email, SUM(total_bytes_billed) AS bytes_billed FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS WHERE job_type = 'QUERY' AND statement_type != 'SCRIPT' GROUP BY user_email;
הערה: אפשר לעיין בהערה לגבי העמודה total_bytes_billed במסמכי התיעוד של הסכימה לתצוגות JOBS.
התוצאות אמורות להיראות כך:
+---------------------+--------------+ | user_email | bytes_billed | +---------------------+--------------+ | bob@example.com | 2847932416 | | alice@example.com | 1184890880 | | charles@example.com | 10485760 | +---------------------+--------------+
צבירת נתוני השימוש בגיליונות מקושרים לפי משתמש ברמת הפרויקט
אם אין לכם הרשאות ברמת הארגון או שאתם צריכים רק לעקוב אחרי פרויקט ספציפי, אתם יכולים להריץ את השאילתה הבאה כדי לזהות את המשתמשים המובילים ב-Connected Sheets בפרויקט מסוים ב-30 הימים האחרונים. השאילתה מסכמת את המספר הכולל של שאילתות, את מספר הבייטים הכולל שחויבו ואת מספר אלפיות השנייה הכולל של משבצות זמן לכל משתמש. המידע הזה שימושי להבנת רמת האימוץ ולזיהוי הצרכנים המובילים של המשאבים.
SELECT
user_email,
COUNT(*) AS total_queries,
SUM(total_bytes_billed) AS total_bytes_billed,
SUM(total_slot_ms) AS total_slot_ms
FROM
-- This view queries the project you are currently running the query in.
`region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE
-- Filter for jobs created in the last 30 days
creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
-- Filter for jobs originating from Connected Sheets
AND job_id LIKE 'sheets_dataconnector%'
-- Filter for completed jobs
AND state = 'DONE'
AND (statement_type IS NULL OR statement_type <> 'SCRIPT')
GROUP BY
user_email
ORDER BY
total_bytes_billed DESC
LIMIT
10;
מחליפים את REGION_NAME באזור של הפרויקט.
לדוגמה, region-us.
התוצאה אמורה להיראות כך:
+---------------------+---------------+--------------------+-----------------+ | user_email | total_queries | total_bytes_billed | total_slot_ms | +---------------------+---------------+--------------------+-----------------+ | alice@example.com | 152 | 12000000000 | 3500000 | | bob@example.com | 45 | 8500000000 | 2100000 | | charles@example.com | 210 | 1100000000 | 1800000 | +---------------------+---------------+--------------------+-----------------+
איך מוצאים יומני עבודות של שאילתות בגיליונות מקושרים ברמת הפרויקט
אם אין לכם הרשאות ברמת הארגון או שאתם צריכים לעקוב רק אחרי פרויקט ספציפי, מריצים את השאילתה הבאה כדי לראות יומן מפורט של כל השאילתות של Connected Sheets בפרויקט הנוכחי:
SELECT
job_id,
creation_time,
user_email,
total_bytes_billed,
total_slot_ms,
query
FROM
-- This view queries the project you are currently running the query in.
`region-REGION_NAME.INFORMATION_SCHEMA.JOBS_BY_PROJECT`
WHERE
creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
AND job_id LIKE 'sheets_dataconnector%'
AND state = 'DONE'
AND (statement_type IS NULL OR statement_type <> 'SCRIPT')
ORDER BY
creation_time DESC;
מחליפים את REGION_NAME באזור של הפרויקט.
לדוגמה, region-us.
התוצאה אמורה להיראות כך:
+---------------------------------+---------------------------------+------------------+--------------------+-----------------+---------------------------------+ | job_id | creation_time | user_email | total_bytes_billed | total_slot_ms | query | +---------------------------------+---------------------------------+------------------+--------------------+-----------------+---------------------------------+ | sheets_dataconnector_bquxjob_1 | 2025-11-06 00:26:53.077000 UTC | abc@example.com | 12000000000 | 3500000 | SELECT ... FROM dataset.table1 | | sheets_dataconnector_bquxjob_2 | 2025-11-06 00:24:04.294000 UTC | xyz@example.com | 8500000000 | 2100000 | SELECT ... FROM dataset.table2 | | sheets_dataconnector_bquxjob_3 | 2025-11-03 23:17:25.975000 UTC | bob@example.com | 1100000000 | 1800000 | SELECT ... FROM dataset.table3 | +---------------------------------+---------------------------------+------------------+--------------------+-----------------+---------------------------------+
פירוט שעתי של בייטים שעובדו
בדוגמה הבאה מוצגים סה"כ הבייטים שחויבו על עבודות של שאילתות, במרווחי זמן של שעה:
SELECT TIMESTAMP_TRUNC(end_time, HOUR) AS time_window, SUM(total_bytes_billed) AS bytes_billed FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS WHERE job_type = 'QUERY' AND statement_type != 'SCRIPT' GROUP BY time_window ORDER BY time_window DESC;
התוצאה אמורה להיראות כך:
+-------------------------+--------------+ | time_window | bytes_billed | +-------------------------+--------------+ | 2022-05-17 20:00:00 UTC | 1967128576 | | 2022-05-10 21:00:00 UTC | 0 | | 2022-04-15 17:00:00 UTC | 41943040 | +-------------------------+--------------+
משימות של שאילתה לכל טבלה
בדוגמה הבאה מוצג כמה פעמים כל טבלה שנשאלה ב-my_project
הוזכרה בעבודת שאילתה:
SELECT t.project_id, t.dataset_id, t.table_id, COUNT(*) AS num_references FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS, UNNEST(referenced_tables) AS t GROUP BY t.project_id, t.dataset_id, t.table_id ORDER BY num_references DESC;
התוצאה אמורה להיראות כך:
+------------+------------+----------+----------------+ | project_id | dataset_id | table_id | num_references | +------------+------------+----------+----------------+ | my_project | dataset1 | orders | 58 | | my_project | dataset1 | products | 40 | | other_proj | dataset1 | accounts | 12 | +------------+------------+----------+----------------+
מספר משימות של שאילתות SQL מדור קודם לכל פרויקט
השדה query_dialect ב-INFORMATION_SCHEMA זמין מאז מאי 2025. בדוגמה הבאה אפשר לראות כמה עבודות של שאילתות SQL מדור קודם מבוצעות על ידי פרויקטים.
SELECT project_id, -- Implicitly defaulted to LegacySQL since the query dialect was not specified -- in the request. COUNTIF(query_dialect = 'DEFAULT_LEGACY_SQL') AS default_legacysql_query_jobs, -- Explicitly requested LegacySQL. COUNTIF(query_dialect = 'LEGACY_SQL') AS legacysql_query_jobs, FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS WHERE query_dialect = 'DEFAULT_LEGACY_SQL' OR query_dialect = 'LEGACY_SQL' GROUP BY project_id ORDER BY default_legacysql_query_jobs DESC, legacysql_query_jobs DESC;
מספר המחיצות ששונו על ידי שאילתות ועבודות טעינה לכל טבלה
בדוגמה הבאה מוצג מספר המחיצות ששונו על ידי שאילתות עם הצהרות DML ועבודות טעינה, לכל טבלה. שימו לב: השאילתה הזו לא מציגה את total_modified_partitions של עבודות העתקה.
SELECT destination_table.table_id, SUM(total_modified_partitions) AS total_modified_partitions FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS WHERE DATE(creation_time, "America/Los_Angeles") = CURRENT_DATE() GROUP BY table_id ORDER BY total_modified_partitions DESC
המספר הממוצע של משבצות זמן לכל אלפית שנייה שנעשה בהן שימוש על ידי משימה
בדוגמה הבאה אפשר לראות איך מחשבים את המספר הממוצע של משבצות שנעשה בהן שימוש בעבודה במהלך ההפעלה. האפשרות הזו יכולה לעזור לכם לפתור בעיות שקשורות לשאילתות איטיות ולהשוות בין ביצוע איטי של שאילתה לבין ביצוע מהיר של אותה שאילתה. השוואה בין הערך הזה לבין הגודל הכולל של ההזמנה והמספר הממוצע של משימות מקבילות שבוצעו בפרויקט או בהזמנה יכולה לעזור לכם להבין אם כמה שאילתות התחרו על משבצות באותו זמן במהלך הביצוע.
מספר גבוה יותר של משבצות בממוצע מצביע על הקצאה של יותר משאבים לעבודה, ולכן בדרך כלל הביצוע מהיר יותר.
SELECT ROUND(SAFE_DIVIDE(total_slot_ms,TIMESTAMP_DIFF(end_time, start_time, MILLISECOND)), 1) as avg_slots_per_ms FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE job_id = 'JOB_ID'
מחליפים את JOB_ID ב-job_id שאתם בודקים.
התוצאה תהיה דומה לתוצאה הבאה:
+------------------+ | avg_slots_per_ms | +------------------+ | 17.0 | +------------------+
השאילתות הכי יקרות לפי פרויקט
בדוגמה הבאה מוצגות השאילתות הכי יקרות ב-my_project לפי זמן השימוש במשבצת:
SELECT job_id, query, user_email, total_slot_ms FROM `my_project`.`region-REGION_NAME`.INFORMATION_SCHEMA.JOBS WHERE EXTRACT(DATE FROM creation_time) = current_date() ORDER BY total_slot_ms DESC LIMIT 3
אפשר גם להציג רשימה של השאילתות הכי יקרות לפי הנתונים שעובדו, כמו בדוגמה הבאה:
SELECT job_id, query, user_email, total_bytes_processed FROM `my_project`.`region-REGION_NAME`.INFORMATION_SCHEMA.JOBS WHERE EXTRACT(DATE FROM creation_time) = current_date() ORDER BY total_bytes_processed DESC LIMIT 3
התוצאה של כל אחת מהדוגמאות אמורה להיראות כך:
+-----------+---------------------------------+-----------------------+---------------+ | job_id | query | user_email | total_slot_ms | +-----------+---------------------------------+-----------------------+---------------+ | bquxjob_1 | SELECT ... FROM dataset.table1 | bob@example.com | 80,000 | | bquxjob_2 | SELECT ... FROM dataset.table2 | alice@example.com | 78,000 | | bquxjob_3 | SELECT ... FROM dataset.table3 | charles@example.com | 75,000 | +-----------+---------------------------------+-----------------------+---------------+
קבלת פרטים על אזהרה לגבי משאב
אם קיבלתם את הודעת השגיאה Resources exceeded, תוכלו לשלוח שאילתה לגבי השאילתות בחלון זמן:
SELECT query, query_info.resource_warning FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS WHERE creation_time BETWEEN TIMESTAMP("2022-12-01") AND TIMESTAMP("2022-12-08") AND query_info.resource_warning IS NOT NULL LIMIT 3;
מעקב אחרי אזהרות לגבי משאבים שמקובצות לפי תאריך
אם מקבלים את הודעת השגיאה Resources exceeded, אפשר לעקוב אחרי המספר הכולל של אזהרות לגבי משאבים שמקובצות לפי תאריך, כדי לדעת אם יש שינויים בעומס העבודה:
WITH resource_warnings AS ( SELECT EXTRACT(DATE FROM creation_time) AS creation_date FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS WHERE creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 14 DAY) AND query_info.resource_warning IS NOT NULL ) SELECT creation_date, COUNT(1) AS warning_counts FROM resource_warnings GROUP BY creation_date ORDER BY creation_date DESC;
הערכת השימוש במשבצות והעלות של שאילתות
בדוגמה הבאה מחושבים מספר המשבצות הממוצע ומספר המשבצות המקסימלי לכל משימה באמצעות estimated_runnable_units.
הערך של reservation_id הוא NULL אם אין לכם הזמנות.
SELECT project_id, job_id, reservation_id, EXTRACT(DATE FROM creation_time) AS creation_date, TIMESTAMP_DIFF(end_time, start_time, SECOND) AS job_duration_seconds, job_type, user_email, total_bytes_billed, -- Average slot utilization per job is calculated by dividing total_slot_ms by the millisecond duration of the job SAFE_DIVIDE(job.total_slot_ms,(TIMESTAMP_DIFF(job.end_time, job.start_time, MILLISECOND))) AS job_avg_slots, query, -- Determine the max number of slots used at ANY stage in the query. -- The average slots might be 55. But a single stage might spike to 2000 slots. -- This is important to know when estimating number of slots to purchase. MAX(SAFE_DIVIDE(unnest_job_stages.slot_ms,unnest_job_stages.end_ms - unnest_job_stages.start_ms)) AS jobstage_max_slots, -- Check if there's a job that requests more units of works (slots). If so you need more slots. -- estimated_runnable_units = Units of work that can be scheduled immediately. -- Providing additional slots for these units of work accelerates the query, -- if no other query in the reservation needs additional slots. MAX(unnest_timeline.estimated_runnable_units) AS estimated_runnable_units FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS AS job CROSS JOIN UNNEST(job_stages) as unnest_job_stages CROSS JOIN UNNEST(timeline) AS unnest_timeline WHERE DATE(creation_time) BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY) AND CURRENT_DATE() AND project_id = 'my_project' AND (statement_type != 'SCRIPT' OR statement_type IS NULL) GROUP BY 1,2,3,4,5,6,7,8,9,10 ORDER BY job_id;
התוצאה לדוגמה אמורה להיראות כך:
+-----------+-----------+----------------+---------------+----------------------+----------+-----------------+--------------------+--------------+--------------------------------+--------------------+--------------------------+ |project_id | job_id | reservation_id | creation_date | job_duration_seconds | job_type | user_email | total_bytes_billed | job_avg_slots| query | jobstage_max_slots | estimated_runnable_units | +-----------+-----------+----------------+---------------+----------------------+----------+-----------------+--------------------+--------------+--------------------------------+--------------------+--------------------------+ | project1 | bquxjob1 | reservation1 | 2020-10-10 | 160 | LOAD | abc@example.com | 161480704 | 2890 | SELECT ... FROM dataset.table1 | 2779.1534 | 1000 | | project1 | bquxjob2 | reservation2 | 2020-12-10 | 120 | LOAD | abc@example.com | 161480704 | 2890 | SELECT ... FROM dataset.table1 | 2779.1534 | 1000 | | project1 | bquxjob3 | reservation1 | 2020-12-10 | 120 | LOAD | abc@example.com | 161480704 | 2890 | SELECT ... FROM dataset.table1 | 1279.1534 | 998 | +-----------+-----------+----------------+---------------+----------------------+----------+-----------------+--------------------+--------------+--------------------------------+--------------------+--------------------------+
הצגת תובנות לגבי הביצועים של שאילתות
הדוגמה הבאה מחזירה את כל עבודות השאילתה שיש להן תובנות לגבי הביצועים מהפרויקט שלכם ב-30 הימים האחרונים, יחד עם כתובת URL שמקשרת לתרשים הביצוע של השאילתה במסוף Cloud de Confiance .
SELECT `bigquery-public-data`.persistent_udfs.job_url( project_id || ':us.' || job_id) AS job_url, query_info.performance_insights FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE DATE(creation_time) >= CURRENT_DATE - 30 -- scan 30 days of query history AND job_type = 'QUERY' AND state = 'DONE' AND error_result IS NULL AND statement_type != 'SCRIPT' AND EXISTS ( -- Only include queries which had performance insights SELECT 1 FROM UNNEST( query_info.performance_insights.stage_performance_standalone_insights ) WHERE slot_contention OR insufficient_shuffle_quota OR bi_engine_reasons IS NOT NULL OR high_cardinality_joins IS NOT NULL OR partition_skew IS NOT NULL UNION ALL SELECT 1 FROM UNNEST( query_info.performance_insights.stage_performance_change_insights ) WHERE input_data_change.records_read_diff_percentage IS NOT NULL );
צפייה במשימות רענון של מטא-נתונים
בדוגמה הבאה מפורטות משימות רענון המטא-נתונים ב-6 השעות האחרונות:
SELECT * FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE job_id LIKE '%metadata_cache_refresh%' AND creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 6 HOUR) ORDER BY start_time desc LIMIT 10;
מחליפים את REGION_NAME באזור שלכם.
ניתוח הביצועים לאורך זמן עבור שאילתות זהות
בדוגמה הבאה מוחזרות 10 המשימות הכי איטיות ב-7 הימים האחרונים שהריצו את אותה שאילתה:
DECLARE querytext STRING DEFAULT( SELECT query FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS WHERE job_id = 'JOB_ID' LIMIT 1 ); SELECT start_time, end_time, project_id, job_id, TIMESTAMP_DIFF(end_time, start_time, SECOND) AS run_secs, total_bytes_processed / POW(1024, 3) AS total_gigabytes_processed, query FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS WHERE query = querytext AND total_bytes_processed > 0 AND creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY) ORDER BY 5 DESC LIMIT 3;
מחליפים את JOB_ID בכל job_id שהריץ את השאילתה שאתם מנתחים.
הצגת משרות עם תובנות לגבי התחרות על משבצות
כדי לראות את העבודות עם התובנות לגבי התחרות על משבצות, מריצים את השאילתה הבאה:
SELECT job_id, creation_time, query_info.performance_insights, FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS j, UNNEST(query_info.performance_insights.stage_performance_standalone_insights) i WHERE (j.statement_type != "SCRIPT" OR j.statement_type IS NULL) AND i IS NOT NULL AND i.slot_contention
בפלט מוצגות תובנות שונות לגבי הביצועים של העבודות, כולל התחרות על משבצות:
+------------+-------------------------+-------------------------------------------------+----------------------------------------------------------------------------+ | job_id | creation_time | performance_insights.avg_previous_execution_ms | performance_insightsstage_performance_standalone_insights.slot_contention | +------------+-------------------------+-------------------------------------------------+----------------------------------------------------------------------------+ | bquxjob_1 | 2025-08-08 00:00:00 UTC | null | true | | bquxjob_2 | 2025-08-08 00:00:00 UTC | 42689 | true | | bquxjob_3 | 2025-08-08 00:00:00 UTC | 42896 | true | +------------+-------------------------+-------------------------------------------------+----------------------------------------------------------------------------+
קבלת משרות עם אותו גיבוב של שאילתה
השאילתה הבאה מחזירה את מזהי המשימות עם אותו גיבוב של שאילתה כמו של משימה ספציפית:
SELECT j.job_id, j.creation_time, j.query FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS j WHERE j.job_id != "JOB_IDENTIFIER" AND j.query_info.query_hashes.normalized_literals = ( SELECT sub.query_info.query_hashes.normalized_literals FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS sub WHERE sub.job_id = "JOB_IDENTIFIER" LIMIT 1 ) ORDER BY j.creation_time DESC;
INFORMATION_SCHEMA
התוצאה אמורה להיראות כך:
+--------------+---------------------------+------------------------------------------------+ | job_id | creation_time | query | +--------------+---------------------------+------------------------------------------------+ | bquxjob_1 | 2019-10-10 00:00:00 UTC | SELECT ... FROM dataset.table1 WHERE x = "a" | | bquxjob_2 | 2019-10-10 00:00:01 UTC | SELECT ... FROM dataset.table1 WHERE x = "b" | | bquxjob_3 | 2019-10-10 00:00:02 UTC | SELECT ... FROM dataset.table1 WHERE x = "c" | +--------------+---------------------------+------------------------------------------------+
צפייה במספר הממוצע של משימות מקבילות שפועלות לצד משימה מסוימת באותו פרויקט
בדוגמה הבאה מוסבר איך לחשב את המספר הממוצע של עבודות שרצות בו-זמנית עם עבודת שאילתה ספציפית באותו פרויקט.
החישוב הזה עוזר לקבוע אם מספר מוגדל של עבודות מקבילות באותו פרויקט גרם לבעיות של תחרות על משבצות. כדאי לאסוף את הנתונים האלה כשמנסים לפתור בעיות שקשורות לשאילתות איטיות או כשמשווים בין הרצות של שאילתות איטיות ומהירות.
אם פועלות הרבה יותר שאילתות מקבילות מהצפוי, בודקים אם התחילו עוד משימות, אם הנתונים שנכללו בשאילתה השתנו או אם שני הדברים קרו.
WITH job_metadata AS ( SELECT creation_time, end_time, job_type FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE job_id = 'JOB_ID' -- If you know the date the job was created, add the following line to speed up the query by providing the date in UTC: -- AND DATE(creation_time) = 'YYYY-MM-DD' ), intervals AS ( SELECT TIMESTAMP_ADD(creation_time, INTERVAL (seconds_offset) SECOND) AS ts, job_type FROM job_metadata, UNNEST (GENERATE_ARRAY(0, IF(TIMESTAMP_DIFF(end_time, creation_time, SECOND) > 0, TIMESTAMP_DIFF(end_time, creation_time, SECOND), 1))) as seconds_offset ), concurrent_jobs AS ( SELECT int.ts, COUNT(*) as concurrent_jobs_count FROM intervals int JOIN `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT j ON int.ts BETWEEN j.creation_time and j.end_time WHERE job_id != 'JOB_ID' AND j.job_type = int.job_type GROUP BY int.ts) SELECT ROUND(AVG(concurrent_jobs_count),1) as average_concurrent_jobs FROM concurrent_jobs
מחליפים את מה שכתוב בשדות הבאים:
JOB_ID: מזהה העבודה של השאילתה שאתם מנתחים
REGION_NAME: האזור של הפרויקט
התוצאה אמורה להיראות כך:
+-------------------------+ | average_concurrent_jobs | +-------------------------+ | 2.8 | +-------------------------+
קבלת בייטים שעברו עיבוד על ידי משימות חילוץ
בדוגמה הבאה מחושב הערך total_bytes_processed עבור סוגי המשרות EXTRACT. מידע על מכסות לעבודות חילוץ זמין במאמר בנושא מדיניות מכסות לעבודות חילוץ.
אפשר להשתמש בסך הבייטים שעברו עיבוד כדי לעקוב אחרי השימוש הכולל ולוודא שעבודות החילוץ לא חורגות מהמגבלה של 50TiB ליום:
SELECT DATE(creation_time) as day, project_id as source_project_id, SUM(total_bytes_processed) AS total_bytes_processed FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS WHERE creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 8 DAY) AND CURRENT_TIMESTAMP() AND job_type = "EXTRACT" GROUP BY day, source_project_id ORDER BY day DESC;
קבלת נתוני שימוש בעבודות העתקה
מידע על פעולות העתקה זמין במאמר העתקת טבלה. בדוגמה הבאה מוצג שימוש במשימות העתקה:
SELECT DATE(creation_time) as day, project_id as source_project_id, CONCAT(destination_table.project_id,":",destination_table.dataset_id,".",destination_table.table_id) as destination_table, COUNT(job_id) AS copy_job_count FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS WHERE creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 8 DAY) AND CURRENT_TIMESTAMP() AND job_type = "COPY" GROUP BY day, source_project_id, destination_table ORDER BY day DESC;
קבלת נתוני שימוש באופטימיזציה של אחסון בטבלאות מנוהלות של Apache Iceberg
בדוגמה הבאה מוצג השימוש באופטימיזציה של אחסון בטבלה מנוהלת של Iceberg.
SELECT job_id, reservation_id, edition, total_slot_ms, total_bytes_processed, state FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS WHERE creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 6 HOUR) AND user_email = "bigquery-adminbot@system.s3ns-system.iam.gserviceaccount.com" AND query LIKE "CALL BQ.OPTIMIZE_STORAGE(%)";
אחזור נתוני שימוש במטא-נתונים של טבלת ייצוא של טבלה מנוהלת ב-Iceberg
בדוגמה הבאה מוצג השימוש ב-Iceberg EXPORT TABLE METADATA FROM.
SELECT job_id, user_email, start_time, end_time, TIMESTAMP_DIFF(end_time, start_time, SECOND) AS duration_seconds, total_bytes_processed, reservation_id, CASE WHEN reservation_id IS NULL THEN 'PAYG (On-demand)' WHEN reservation_id != '' THEN 'Reservation' ELSE 'Unknown' END AS compute_type, query FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS WHERE job_type = 'QUERY' AND end_time IS NOT NULL -- Filter for queries containing the specified pattern (case-insensitive) AND REGEXP_CONTAINS(LOWER(query), r"export table metadata from") ORDER BY start_time DESC LIMIT 3;
התאמה של התנהגות השימוש במשבצות מתוך תרשימי משאבים אדמיניסטרטיביים
כדי לבדוק את התנהגות השימוש במשבצות, בדומה למידע שמופיע בתרשימי משאבים אדמיניסטרטיביים, שולחים שאילתה לתצוגה INFORMATION_SCHEMA.JOBS_TIMELINE.