התצוגה JOBS_TIMELINE_BY_ORGANIZATION

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

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

כדי לשלוח שאילתה לתצוגה INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION, צריך את ההרשאה bigquery.jobs.listAll לניהול זהויות והרשאות גישה (IAM) בארגון. כל אחד מהתפקידים הבאים שמוגדרים מראש ב-IAM כולל את ההרשאה הנדרשת:

  • אדמין של משאבי BigQuery ברמת הארגון
  • בעלי הארגון
  • אדמין ארגוני

טבלת הסכימה JOBS_BY_ORGANIZATION זמינה רק למשתמשים עם ארגונים מוגדרים ב-Cloud de Confiance by S3NS .

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

סכימה

כששולחים שאילתה לתצוגות של INFORMATION_SCHEMA.JOBS_TIMELINE_BY_*, תוצאות השאילתה מכילות שורה אחת לכל שנייה של ביצוע של כל משימה ב-BigQuery. כל תקופה מתחילה במרווח של שנייה שלמה ונמשכת בדיוק שנייה אחת.

הסכימה של התצוגה INFORMATION_SCHEMA.JOBS_TIMELINE_BY_* היא:

שם העמודה סוג נתונים ערך
period_start TIMESTAMP שעת ההתחלה של התקופה הזו.
period_slot_ms INTEGER אלפיות השנייה של מיקום מודעה שנצרכו בתקופה הזו.
project_id STRING (עמודת אשכולות) מזהה הפרויקט.
project_number INTEGER מספר הפרויקט.
folder_numbers REPEATED INTEGER מזהי המספרים של התיקיות שמכילות את הפרויקט, החל מהתיקייה שמכילה את הפרויקט באופן מיידי, ואחריה התיקייה שמכילה את תיקיית הצאצא וכן הלאה. לדוגמה, אם הערך של `folder_numbers` הוא `[1, 2, 3]`, אז תיקייה `1` מכילה ישירות את הפרויקט, תיקייה `2` מכילה את `1` ותיקייה `3` מכילה את `2`.
user_email STRING (עמודת אשכול) כתובת האימייל או חשבון השירות של המשתמש שהריץ את המשימה.
principal_subject STRING ייצוג מחרוזת של זהות חשבון המשתמש שהפעיל את המשימה.
job_id STRING מזהה המשימה. לדוגמה, bquxjob_1234.
job_type STRING סוג המשימה. הערכים האפשריים: QUERY, LOAD, EXTRACT, COPY או null. סוג המשימה null מציין משימה פנימית, כמו הערכת הצהרה של משימת סקריפט או רענון של תצוגה מהותית.
statement_type STRING סוג הצהרת השאילתה, אם היא תקינה. לדוגמה, SELECT, INSERT, UPDATE או DELETE.
priority STRING העדיפות של המשימה הזו. הערכים התקינים כוללים את INTERACTIVE ו-BATCH.
parent_job_id STRING המזהה של המשימה הראשית, אם יש כזו.
job_creation_time TIMESTAMP (עמודת חלוקה למחיצות) מועד היצירה של המשימה הזו. החלוקה למחיצות מבוססת על זמן ה-UTC של חותמת הזמן הזו.
job_start_time TIMESTAMP שעת ההתחלה של המשימה הזו.
job_end_time TIMESTAMP שעת הסיום של המשימה.
state STRING מצב ההפעלה של המשימה בסוף התקופה הזו. הסטטוסים התקינים כוללים את PENDING, RUNNING ו-DONE.
reservation_id STRING שם ההזמנה הראשית שהוקצתה למשימה הזו בסוף התקופה הזו, אם רלוונטי.
reservation_group_path ARRAY<STRING> קבוצת ההזמנות שאליה מקושרת ההזמנה. לדוגמה, אם ההזמנה מקושרת לקבוצה my-group, השדה reservation_group_path מכיל רשימה כמו: [my-group].
edition STRING המהדורה שמשויכת להזמנה שהוקצתה למשימה הזו. למידע נוסף על מהדורות, קראו את המאמר מבוא למהדורות של BigQuery.
total_bytes_billed INTEGER אם הפרויקט מוגדר לשימוש בתמחור על פי דרישה, השדה הזה מכיל את סך כל הבייטים שחויבו עבור המשימה. אם הפרויקט מוגדר לשימוש בתמחור קבוע, לא תחויבו על בייטים. אי אפשר להגדיר את השדה הזה.
total_bytes_processed INTEGER מספר הבייטים הכולל שעובדו על ידי המשימה.
error_result RECORD פרטי השגיאה (אם יש) בתור ErrorProto.
cache_hit BOOLEAN אם תוצאות השאילתה של המשימה הזו הגיעו מהמטמון.
period_shuffle_ram_usage_ratio FLOAT שיעור השימוש ב"הפעלה בסדר אקראי" בתקופה שנבחרה. הערך הוא 0.0 אם המשימה הופעלה עם הזמנה שמשתמשת בהתאמה אוטומטית לעומס (autoscaling) ויש לה אפס משבצות בסיסיות.
period_estimated_runnable_units INTEGER יחידות עבודה שאפשר לתזמן באופן מיידי בתקופה הזו. יחידות קיבולת נוספות ליחידות העבודה האלה מאיצות את השאילתה, בתנאי שאף שאילתה אחרת בהזמנה לא זקוקה ליחידות קיבולת נוספות.
global_query_info RECORD מידע על שאילתה עם אחזור נתונים גלובלי. מכיל את השדות הבאים:
  • ‫parent_job_id: המזהה של משימת ההורה של השאילתה עם אחזור נתונים גלובלי באזור הראשי.
  • ‫parent_job_location: המיקום של משימת ההורה של השאילתה עם אחזור נתונים גלובלי.
  • ‫remote_regions: מערך של אזורים מרוחקים שהשאילתה עם אחזור הנתונים הגלובלי מפנה אליהם.
copy_job_statistics RECORD נתונים סטטיסטיים של משימת העתקה.

כדי לשמור על יציבות, מומלץ לציין במפורש את העמודות בשאילתות של סכימת המידע במקום להשתמש בתו כללי לחיפוש (SELECT *). ציון מפורש של העמודות מונע את קריסת השאילתות אם הסכימה הבסיסית משתנה.

שמירת נתונים

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

היקף ותחביר

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

שם התצוגה המפורטת היקף המשאבים היקף האזור
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION הארגון שמכיל את הפרויקט שצוין REGION
מחליפים את הערכים בשדות הבאים:
  • ‫PROJECT_ID: מזהה הפרויקט ב- Cloud de Confiance (אופציונלי). אם לא מציינים פרויקט, המערכת משתמשת בפרויקט שמוגדר כברירת מחדל.
  • ‫REGION: כל שם של אזור של מערך נתונים. לדוגמה, `region-us`.

דוגמאות

דוגמה: הצגת השימוש הכולל ב-slots לשנייה

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

`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION
לדוגמה, `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION.

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

SELECT
  jobs.period_start,
  SUM(jobs.period_slot_ms) / 1000 AS period_slot_seconds,
  ANY_VALUE(COALESCE(s.slots_assigned, res.slots_assigned)) AS estimated_slots_assigned,
  ANY_VALUE(COALESCE(s.slots_max_assigned, res.slots_max_assigned)) AS estimated_slots_max_assigned
FROM `region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION jobs
JOIN `region-us`.INFORMATION_SCHEMA.RESERVATIONS_TIMELINE res
  ON jobs.reservation_id = res.reservation_id
  AND TIMESTAMP_TRUNC(jobs.period_start, MINUTE) = res.period_start
LEFT JOIN UNNEST(res.per_second_details) s
  ON jobs.period_start = s.start_time
WHERE
  jobs.job_creation_time
    BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
        AND CURRENT_TIMESTAMP()
  AND res.period_start
    BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
        AND CURRENT_TIMESTAMP()
  AND res.reservation_id = 'YOUR_RESERVATION_ID'
  AND (jobs.statement_type != "SCRIPT" OR jobs.statement_type IS NULL)  -- Avoid duplicate byte counting in parent and children jobs.
GROUP BY
  period_start
ORDER BY
  period_start DESC;

התוצאה אמורה להיראות כך:

+-----------------------+---------------------+--------------------------+------------------------------+
|     period_start      | period_slot_seconds | estimated_slots_assigned | estimated_slots_max_assigned |
+-----------------------+---------------------+--------------------------+------------------------------+
|2021-06-08 21:33:59 UTC|       100.000       |         100              |           100                |
|2021-06-08 21:33:58 UTC|        96.753       |         100              |           100                |
|2021-06-08 21:33:57 UTC|        41.668       |         100              |           100                |
+-----------------------+---------------------+--------------------------+------------------------------+

דוגמה: שימוש ב-slots לפי הזמנה

בדוגמה הבאה מוצג השימוש ב-slots לשנייה בכל הזמנה ביום האחרון:

SELECT
  jobs.period_start,
  res.reservation_id,
  SUM(jobs.period_slot_ms) / 1000 AS period_slot_seconds,
  ANY_VALUE(COALESCE(s.slots_assigned, res.slots_assigned)) AS estimated_slots_assigned,
  ANY_VALUE(COALESCE(s.slots_max_assigned, res.slots_max_assigned)) AS estimated_slots_max_assigned
FROM `region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION jobs
JOIN `region-us`.INFORMATION_SCHEMA.RESERVATIONS_TIMELINE res
  ON jobs.reservation_id = res.reservation_id
  AND TIMESTAMP_TRUNC(jobs.period_start, MINUTE) = res.period_start
LEFT JOIN UNNEST(res.per_second_details) s
  ON jobs.period_start = s.start_time
WHERE
  jobs.job_creation_time
      BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
          AND CURRENT_TIMESTAMP()
  AND res.period_start
      BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
          AND CURRENT_TIMESTAMP()
  AND (jobs.statement_type != "SCRIPT" OR jobs.statement_type IS NULL)  -- Avoid duplicate byte counting in parent and children jobs.
GROUP BY
  period_start,
  reservation_id
ORDER BY
  period_start DESC,
  reservation_id;

התוצאה אמורה להיראות כך:

+-----------------------+----------------+---------------------+--------------------------+------------------------------+
|     period_start      | reservation_id | period_slot_seconds | estimated_slots_assigned | estimated_slots_max_assigned |
+-----------------------+----------------+---------------------+--------------------------+------------------------------+
|2021-06-08 21:33:59 UTC|     prod01     |       100.000       |             100          |              100             |
|2021-06-08 21:33:58 UTC|     prod02     |       177.201       |             200          |              500             |
|2021-06-08 21:32:57 UTC|     prod01     |        96.753       |             100          |              100             |
|2021-06-08 21:32:56 UTC|     prod02     |       182.329       |             200          |              500             |
+-----------------------+----------------+---------------------+--------------------------+------------------------------+