ניהול הקצאות של עומסי עבודה

באמצעות BigQuery Reservation API אתם יכולים לרכוש משבצות ייעודיות (שנקראות התחייבויות), ליצור מאגרים של משבצות (שנקראים הזמנות) ולהקצות פרויקטים, תיקיות וארגונים להזמנות האלה.

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

יצירת הקצאות של הזמנות

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

הלוגיקה והקריטריונים של ההקצאה

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

  1. עדיפות בהיררכיית המשאבים: המערכת של BigQuery מעריכה את ההקצאות לפי ישות האב של המשאב שהוקצה (פרויקט > תיקייה > ארגון). אי אפשר להקצות תיקיות וארגונים למינויים במהדורת Standard.
  2. הקצאות ספציפיות למשתמשים באמצעות המאפיין principal (גרסת טרום-השקה (Preview)): הקצאות של מקומות שמורים ב-BigQuery תומכות במאפיין האופציונלי principal, שמאפשר לאדמינים לנתב שאילתות למקומות שמורים ספציפיים על סמך הזהות של המשתמש או של חשבון השירות שמריצים את המשימה. במשאב ספציפי של מקבל ההקצאה, הקצאה עם חשבון משתמש תואם מקבלת עדיפות על פני הקצאה כללית שבה לא מוגדר חשבון משתמש.

    מגבלת ברירת המחדל של הקצאות ספציפיות למשתמשים היא 100 לכל פרויקט. כדי לקבל עזרה בשינוי מגבלת ברירת המחדל, אפשר לפנות לכתובת bigquery-wlm-feedback@google.com.

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

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

  • הוא מוגדר עם מספר חריצים להתאמה לעומס (autoscaling) שגדול מאפס.

  • היא מוגדרת להשתמש ביחידות קיבולת לא פעילות, ויש יחידות קיבולת לא פעילות זמינות בפרויקט.

אם תנסו להקצות משאב להזמנה שלא עומדת באחד מהקריטריונים האלה, תופיע ההודעה הבאה: Assignment is pending, your project will be executed as on-demand.

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

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

כדי ליצור הקצאת הזמנה, צריך את ההרשאה הבאה לניהול זהויות והרשאות גישה (IAM):

כל אחד מהתפקידים הבאים שמוגדרים מראש ב-IAM כולל את ההרשאה הזו:

  • BigQuery Admin
  • BigQuery Resource Admin
  • BigQuery Resource Editor

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

הקצאת ארגון להזמנה

המסוף

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בתפריט הניווט, לוחצים על Workload management.

  3. לוחצים על הכרטיסייה הזמנות.

  4. מוצאים את ההזמנה בטבלת ההזמנות.

  5. מרחיבים את האפשרות פעולות.

  6. לוחצים על יצירת מטלה.

  7. בקטע יצירת מטלה, לוחצים על עיון.

  8. מחפשים את הארגון ובוחרים אותו.

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

    • QUERY
    • CONTINUOUS
    • PIPELINE
    • BACKGROUND
    • ML_EXTERNAL

    מידע נוסף על סוגי העבודה זמין במאמר הקצאות של הזמנות. ערך ברירת המחדל הוא QUERY.

    איך מגדירים את Gemini ב-BigQuery

  10. אופציונלי: בשדה User, מזינים את כתובת האימייל של המשתמש, חשבון השירות או הזהות של הצד השלישי.

  11. לוחצים על יצירה.

SQL

כדי להקצות ארגון להזמנה, משתמשים בהצהרת ה-DDL‏ CREATE ASSIGNMENT.

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בעורך השאילתות, מזינים את ההצהרה הבאה:

    CREATE ASSIGNMENT
      `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME.ASSIGNMENT_ID`
    OPTIONS (
      assignee = 'organizations/ORGANIZATION_ID',
      job_type = 'JOB_TYPE',
      principal = 'PRINCIPAL');

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

    • ‫ADMIN_PROJECT_ID: מזהה הפרויקט של פרויקט הניהול שבבעלותו משאב ההזמנה
    • ‫LOCATION: המיקום של ההזמנה
    • ‫RESERVATION_NAME: שם ההזמנה
    • ‫ASSIGNMENT_ID: מזהה המטלה

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

    • ‫ORGANIZATION_ID: מזהה הארגון
    • ‫JOB_TYPE: סוג המשימה שרוצים להקצות להזמנה הזו, למשל QUERY,‏ CONTINUOUS,‏ PIPELINE,‏ BACKGROUND או ML_EXTERNAL
    • אופציונלי: PRINCIPAL: פורמט הזהות שמציין את המשתמש, את חשבון השירות או את הזהות של הצד השלישי

      בשדה principal אפשר להשתמש רק בפורמטים הבאים של מזהי חשבונות משתמשים ב-IAM:

      • חשבון Google
      • חשבון שירות
      • זהות יחידה במאגר זהויות של כוח עבודה
      • זהות יחידה במאגר זהויות של עומסי עבודה

  3. ‫לוחצים על Run.

מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.

BQ

כדי להקצות את המשימות של הארגון להזמנה, משתמשים בפקודה bq mk עם הדגל --reservation_assignment:

bq mk \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --reservation_assignment \
    --reservation_id=RESERVATION_NAME \
    --assignee_type=ORGANIZATION \
    --assignee_id=ORGANIZATION_ID \
    --job_type=JOB_TYPE \
    --principal=PRINCIPAL

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

  • ‫ADMIN_PROJECT_ID: מזהה הפרויקט של הפרויקט לניהול שבבעלותו משאב ההזמנה
  • ‫LOCATION: המיקום של ההזמנה
  • ‫RESERVATION_NAME: השם של ההזמנה
  • ‫ORGANIZATION_ID: מזהה הארגון
  • ‫JOB_TYPE: סוג המשימה שרוצים להקצות להזמנה הזו, למשל QUERY,‏ CONTINUOUS,‏ PIPELINE,‏ BACKGROUND או ML_EXTERNAL
  • אופציונלי: PRINCIPAL: פורמט הזהות שמציין את המשתמש, את חשבון השירות או את הזהות של הצד השלישי.

    הדגל --principal תומך רק בפורמטים הבאים של מזהי חשבונות משתמשים ב-IAM:

    • חשבון Google
    • חשבון שירות
    • זהות יחידה במאגר זהויות של כוח עבודה
    • זהות יחידה במאגר זהויות של עומסי עבודה

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

הגדרת מכסות לפרויקטים ושינוי מדיניות התזמון

כדי לבקש תמיכה או לשלוח משוב על התכונה הזו, אפשר לפנות לכתובת bigquery-wlm-feedback@google.com.

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

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

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

  • הנמחה חייב להיות פרויקט ב- Google Cloud . אין תמיכה בתיקיות ובארגונים.
  • צריך להגדיר את סוג העבודה בתור JOB_TYPE_UNSPECIFIED או לא להגדיר אותו בכלל.
  • שינויים בערך המדיניות של max_slots מחייבים הפעלה של שאילתה חדשה לפני שהעדכון ייכנס לתוקף.
  • מגבלות על צריכת משבצות ברמת הפרויקט לא נאכפות בשלב האימון של משימות ML_EXTERNAL. למידע נוסף, קראו את המאמר הקצאת משבצות לעומסי עבודה של BigQuery ML.

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

המסוף

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בתפריט הניווט, לוחצים על Administration > Workload management.

  3. לוחצים על הכרטיסייה כללי הקצאה.

  4. לוחצים על יצירת כלל הקצאה.

  5. ברשימה Rule type, בוחרים באפשרות Project cap.

  6. ברשימה Select a project, בוחרים פרויקט ולוחצים על Continue.

  7. ברשימה Reservation, בוחרים הזמנה ולוחצים על Continue.

  8. בקטע Project override, מזינים ערכים בשדות Max slots ו-Max concurrency.

  9. לוחצים על יצירה.

SQL

כדי ליצור הקצאה של מדיניות תזמון לפרויקט, משתמשים בהצהרת ה-DDL‏ CREATE ASSIGNMENT עם האפשרויות scheduling_policy_max_slots ו-scheduling_policy_concurrency.

CREATE ASSIGNMENT
  `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME.ASSIGNMENT_ID`
OPTIONS (
  assignee = 'projects/PROJECT_ID',
  scheduling_policy_max_slots = MAX_SLOTS,
  scheduling_policy_concurrency = MAX_CONCURRENCY);

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

  • ‫ADMIN_PROJECT_ID: מזהה הפרויקט של הפרויקט לניהול שבבעלותו משאב ההזמנה
  • ‫LOCATION: המיקום של ההזמנה
  • ‫RESERVATION_NAME: השם של ההזמנה
  • ‫ASSIGNMENT_ID: מזהה המטלה
  • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud שמוקצה
  • ‫MAX_SLOTS: המגבלה המקסימלית על צריכת ה-slots של שאילתות שפועלות בפרויקט
  • ‫MAX_CONCURRENCY: הגבול העליון של מספר השאילתות בו-זמנית שמותרות בפרויקט

BQ

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

bq mk \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --reservation_assignment \
    --reservation_id=RESERVATION_NAME \
    --assignee_id=PROJECT_ID \
    --assignee_type=PROJECT \
    --scheduling_policy_max_slots=MAX_SLOTS \
    --scheduling_policy_concurrency=MAX_CONCURRENCY

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

  • ‫ADMIN_PROJECT_ID: מזהה הפרויקט של הפרויקט לניהול שבבעלותו משאב ההזמנה
  • ‫LOCATION: המיקום של ההזמנה
  • ‫RESERVATION_NAME: השם של ההזמנה
  • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud שמוקצה
  • ‫MAX_SLOTS: המגבלה המקסימלית על צריכת ה-slots של שאילתות שפועלות בפרויקט
  • ‫MAX_CONCURRENCY: הגבול העליון של מספר השאילתות בו-זמנית שמותרות בפרויקט

כדי לשנות או להסיר הקצאה קיימת של מדיניות תזמון, משתמשים בהצהרת ה-DDL של ALTER ASSIGNMENT:

ALTER ASSIGNMENT
  `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME.ASSIGNMENT_ID`
SET OPTIONS (
  scheduling_policy_max_slots = NEW_MAX_SLOTS,
  scheduling_policy_concurrency = NEW_MAX_CONCURRENCY);
-- To remove a scheduling policy setting, set its values to null. To all
   settings, delete the assignment.
   

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

  • ‫ADMIN_PROJECT_ID: מזהה הפרויקט של הפרויקט לניהול שבבעלותו משאב ההזמנה
  • ‫LOCATION: המיקום של ההזמנה
  • ‫RESERVATION_NAME: השם של ההזמנה
  • ‫ASSIGNMENT_ID: מזהה המטלה
  • ‫NEW_MAX_SLOTS: המגבלה המקסימלית על צריכת ה-slots של שאילתות שפועלות בפרויקט
  • ‫NEW_MAX_CONCURRENCY: הגבול העליון של מספר השאילתות בו-זמנית שמותרות בפרויקט

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

הקצאת פרויקט או תיקייה להזמנה

המסוף

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בתפריט הניווט, לוחצים על Workload management.

  3. לוחצים על הכרטיסייה הזמנות.

  4. מוצאים את ההזמנה בטבלת ההזמנות.

  5. מרחיבים את האפשרות פעולות.

  6. לוחצים על יצירת מטלה.

  7. בקטע יצירת מטלה, לוחצים על עיון.

  8. מחפשים את הפרויקט או התיקייה ובוחרים אותם.

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

    • QUERY
    • CONTINUOUS
    • PIPELINE
    • BACKGROUND
    • ML_EXTERNAL

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

    מידע נוסף על סוגי משימות זמין במאמר הקצאות של הזמנות. ערך ברירת המחדל הוא QUERY.

  10. אופציונלי: בשדה User, מזינים את כתובת האימייל של המשתמש, חשבון השירות או הזהות של הצד השלישי.

  11. לוחצים על יצירה.

SQL

כדי להקצות פרויקט להזמנה, משתמשים בהצהרת ה-DDL‏ CREATE ASSIGNMENT.

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בעורך השאילתות, מזינים את ההצהרה הבאה:

    CREATE ASSIGNMENT
      `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME.ASSIGNMENT_ID`
    OPTIONS(
      assignee="projects/PROJECT_ID",
      job_type="JOB_TYPE",
      principal="PRINCIPAL");

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

    • ‫ADMIN_PROJECT_ID: מזהה הפרויקט של פרויקט הניהול שבבעלותו משאב ההזמנה
    • ‫LOCATION: המיקום של ההזמנה
    • ‫RESERVATION_NAME: שם ההזמנה
    • ‫ASSIGNMENT_ID: מזהה המטלה

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

    • ‫PROJECT_ID: מזהה הפרויקט שרוצים להקצות לשמירת המקום
    • ‫JOB_TYPE: סוג המשימה שרוצים להקצות להזמנה הזו, למשל QUERY,‏ CONTINUOUS,‏ PIPELINE,‏ BACKGROUND או ML_EXTERNAL
    • אופציונלי: PRINCIPAL: פורמט הזהות שמציין את המשתמש, את חשבון השירות או את הזהות של הצד השלישי. השדה principal תומך רק בפורמטים הבאים של מזהה חשבון משתמש ב-IAM:

      • חשבון Google
      • חשבון שירות
      • זהות יחידה במאגר זהויות של כוח עבודה
      • זהות יחידה במאגר זהויות של עומסי עבודה

  3. ‫לוחצים על Run.

מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.

BQ

כדי להקצות משימות להזמנה, משתמשים בפקודה bq mk עם הדגל --reservation_assignment:

bq mk \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --reservation_assignment \
    --reservation_id=RESERVATION_NAME \
    --assignee_type=PROJECT \
    --assignee_id=PROJECT_ID \
    --job_type=JOB_TYPE \
    --principal=PRINCIPAL

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

  • ‫ADMIN_PROJECT_ID: מזהה הפרויקט של הפרויקט לניהול שבבעלותו משאב ההזמנה
  • ‫LOCATION: המיקום של ההזמנה
  • ‫RESERVATION_NAME: השם של ההזמנה
  • ‫PROJECT_ID: מזהה הפרויקט שרוצים להקצות לשמירת המקום הזו
  • ‫JOB_TYPE: סוג המשימה שרוצים להקצות להזמנה הזו, למשל QUERY,‏ CONTINUOUS,‏ PIPELINE,‏ BACKGROUND או ML_EXTERNAL
  • אופציונלי: PRINCIPAL: פורמט הזהות שמציין את המשתמש, את חשבון השירות או את הזהות של הצד השלישי.

    הדגל --principal תומך רק בפורמטים הבאים של מזהי חשבונות משתמשים ב-IAM:

    • חשבון Google
    • חשבון שירות
    • זהות יחידה במאגר זהויות של כוח עבודה
    • זהות יחידה במאגר זהויות של עומסי עבודה

Terraform

משתמשים במשאב google_bigquery_reservation_assignment.

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

בדוגמה הבאה, הפרויקט מוקצה להזמנה בשם my-reservation:

resource "google_bigquery_reservation" "default" {
  name              = "my-reservation"
  location          = "us-central1"
  slot_capacity     = 100
  edition           = "ENTERPRISE"
  ignore_idle_slots = false # Use idle slots from other reservations
  concurrency       = 0     # Automatically adjust query concurrency based on available resources
  autoscale {
    max_slots = 200 # Allow the reservation to scale up to 300 slots (slot_capacity + max_slots) if needed
  }
}

data "google_project" "project" {}

resource "google_bigquery_reservation_assignment" "default" {
  assignee    = "projects/${data.google_project.project.project_id}"
  job_type    = "QUERY"
  reservation = google_bigquery_reservation.default.id
}

כך מחילים את ההגדרות של Terraform בפרויקט ב- Google Cloud :

הכנת Cloud Shell

  1. מפעילים את Cloud Shell.
  2. מגדירים את פרויקט ברירת המחדל ב- Google Cloud שבו רוצים להחיל את ההגדרות של Terraform.

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

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

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

הכנת הספרייה

לכל קובץ תצורה של Terraform צריכה להיות ספרייה משלו (שנקראת גם מודול ברמה הבסיסית).

  1. יוצרים ספרייה חדשה ב-Cloud Shell ובה יוצרים קובץ חדש. שם הקובץ חייב לכלול את הסיומת .tf, למשל main.tf. במדריך הזה, הקובץ נקרא main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. אם אתם עוקבים אחרי המדריך, תוכלו להעתיק את הקוד לדוגמה בכל קטע או שלב.

    מעתיקים את הקוד לדוגמה בקובץ main.tf החדש שיצרתם.

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

  3. בודקים את הפרמטרים לדוגמה ומשנים אותם בהתאם לסביבה שלכם.
  4. שומרים את השינויים.
  5. מפעילים את Terraform. צריך לעשות זאת רק פעם אחת לכל ספרייה.
    terraform init

    אופציונלי: תוכלו לכלול את האפשרות -upgrade, כדי להשתמש בגרסה העדכנית ביותר של הספק של Google:

    terraform init -upgrade

החלה של השינויים

  1. בודקים את ההגדרות ומוודאים שהמשאבים שמערכת Terraform תיצור או תעדכן תואמים לציפיות שלכם:
    terraform plan

    מתקנים את ההגדרות לפי הצורך.

  2. מריצים את הפקודה הבאה ומזינים yes בהודעה שמופיעה, כדי להחיל את הגדרות Terraform:
    terraform apply

    ממתינים עד שב-Terraform תוצג ההודעה "Apply complete!‎".

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

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

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

הקצאות ספציפיות למשתמשים

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

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

  1. בודקים את היררכיית המשאבים, החל מהפרויקט, אחר כך תיקיות ההורה ואז הארגון.
  2. בכל רמה בהיררכיה, BigQuery בודק קודם אם יש הקצאה שתואמת לחשבון המשתמש הספציפי שמריץ את המשימה.
  3. אם אין הקצאה שתואמת לחשבון המשתמש ברמה הזו, בודקים אם יש הקצאה כללית בלי חשבון משתמש באותה רמה.
  4. אם לא נמצאת הקצאה, עוברים לרמה הבאה בהיררכיה.

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

פורמטים נתמכים של חשבונות משתמשים

האפשרות principal תומכת בפורמטים הבאים של חשבונות משתמשים ב-IAM v2:

סוג הזהות פורמט חשבון המשתמש
משתמשים principal://goog/subject/EMAIL_ADDRESS
חשבונות שירות principal://iam.googleapis.com/projects/-/serviceAccounts/EMAIL_ADDRESS
זהויות במאגר זהויות של כוח עבודה principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/SUBJECT_ID
זהויות במאגר זהויות של עומסי עבודה principal://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/subject/SUBJECT_ID

הקצאת חשבון משתמש להזמנה

SQL

כדי ליצור הקצאה ספציפית למשתמש, משתמשים בהצהרת ה-DDL‏ CREATE ASSIGNMENT עם האפשרות principal.

CREATE ASSIGNMENT
  `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME.ASSIGNMENT_ID`
OPTIONS (
  assignee = 'projects/PROJECT_ID',
  principal = 'principal://goog/subject/EMAIL_ADDRESS',
  job_type = 'QUERY');

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

  • ‫ADMIN_PROJECT_ID: מזהה הפרויקט של הפרויקט לניהול שבבעלותו משאב ההזמנה
  • ‫LOCATION: המיקום של ההזמנה
  • ‫RESERVATION_NAME: השם של ההזמנה
  • ‫ASSIGNMENT_ID: מזהה המטלה
  • ‫PROJECT_ID: מזהה הפרויקט
  • ‫`EMAIL_ADDRESS: כתובת האימייל של המשתמש
  • ‫JOB_TYPE: סוג המשימה שרוצים להקצות להזמנה הזו, למשל QUERY,‏ CONTINUOUS,‏ PIPELINE,‏ BACKGROUND או ML_EXTERNAL

BQ

כדי ליצור הקצאה ספציפית למשתמש, משתמשים בפקודה bq mk עם הדגל --principal:

bq mk \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --reservation_assignment \
    --reservation_id=RESERVATION_NAME \
    --assignee_id=PROJECT_ID \
    --assignee_type=PROJECT \
    --principal=PRINCIPAL \
    --job_type=JOB_TYPE

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

  • ‫ADMIN_PROJECT_ID: מזהה הפרויקט של הפרויקט לניהול שבבעלותו משאב ההזמנה
  • ‫LOCATION: המיקום של ההזמנה
  • ‫RESERVATION_NAME: השם של ההזמנה
  • ‫ASSIGNMENT_ID: מזהה המטלה
  • ‫PROJECT_ID: מזהה הפרויקט
  • PRINCIPAL: the principal identifier, for example,principal://goog/subject/EMAIL_ADDRESS`
  • ‫JOB_TYPE: סוג המשימה שרוצים להקצות למאגר, למשל QUERY,‏ CONTINUOUS,‏ PIPELINE,‏ BACKGROUND או ML_EXTERNAL

הקצאת פרויקט לסוכן none

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

SQL

כדי להקצות פרויקט ל-none, משתמשים בהצהרת ה-DDL של CREATE ASSIGNMENT.

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בעורך השאילתות, מזינים את ההצהרה הבאה:

    CREATE ASSIGNMENT
      `ADMIN_PROJECT_ID.region-LOCATION.none.ASSIGNMENT_ID`
    OPTIONS(
      assignee="projects/PROJECT_ID",
      job_type="QUERY");

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

    • ‫LOCATION: המיקום של המשימות שבהן צריך להשתמש בתמחור על פי דרישה
    • ‫ASSIGNMENT_ID: מזהה המטלה

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

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

  3. ‫לוחצים על Run.

מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.

BQ

כדי להקצות פרויקט ל-none, משתמשים בפקודה bq mk עם הדגל --reservation_assignment:

bq mk \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --reservation_assignment \
    --reservation_id=none \
    --job_type=QUERY \
    --assignee_id=PROJECT_ID \
    --assignee_type=PROJECT

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

  • ‫ADMIN_PROJECT_ID: מזהה הפרויקט של הפרויקט לניהול שבבעלותו משאב ההזמנה
  • ‫LOCATION: המיקום של המשימות שבהן צריך להשתמש בתמחור על פי דרישה
  • ‫PROJECT_ID: מזהה הפרויקט שרוצים להקצות ל-none

Terraform

משתמשים במשאב google_bigquery_reservation_assignment.

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

בדוגמה הבאה מקצים פרויקט ל-none:

resource "google_bigquery_reservation_assignment" "default" {
  assignee    = "projects/PROJECT_ID"
  job_type    = "QUERY"
  reservation = "projects/ADMIN_PROJECT_ID/locations/LOCATION/reservations/none"
}

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

  • ‫ADMIN_PROJECT_ID: מזהה הפרויקט של הפרויקט לניהול שבבעלותו משאב ההזמנה
  • ‫LOCATION: המיקום של המשימות שבהן צריך להשתמש בתמחור על פי דרישה
  • ‫PROJECT_ID: מזהה הפרויקט שרוצים להקצות ל-none

כך מחילים את ההגדרות של Terraform בפרויקט ב- Google Cloud :

הכנת Cloud Shell

  1. מפעילים את Cloud Shell.
  2. מגדירים את פרויקט ברירת המחדל ב- Google Cloud שבו רוצים להחיל את ההגדרות של Terraform.

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

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

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

הכנת הספרייה

לכל קובץ תצורה של Terraform צריכה להיות ספרייה משלו (שנקראת גם מודול ברמה הבסיסית).

  1. יוצרים ספרייה חדשה ב-Cloud Shell ובה יוצרים קובץ חדש. שם הקובץ חייב לכלול את הסיומת .tf, למשל main.tf. במדריך הזה, הקובץ נקרא main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. אם אתם עוקבים אחרי המדריך, תוכלו להעתיק את הקוד לדוגמה בכל קטע או שלב.

    מעתיקים את הקוד לדוגמה בקובץ main.tf החדש שיצרתם.

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

  3. בודקים את הפרמטרים לדוגמה ומשנים אותם בהתאם לסביבה שלכם.
  4. שומרים את השינויים.
  5. מפעילים את Terraform. צריך לעשות זאת רק פעם אחת לכל ספרייה.
    terraform init

    אופציונלי: תוכלו לכלול את האפשרות -upgrade, כדי להשתמש בגרסה העדכנית ביותר של הספק של Google:

    terraform init -upgrade

החלה של השינויים

  1. בודקים את ההגדרות ומוודאים שהמשאבים שמערכת Terraform תיצור או תעדכן תואמים לציפיות שלכם:
    terraform plan

    מתקנים את ההגדרות לפי הצורך.

  2. מריצים את הפקודה הבאה ומזינים yes בהודעה שמופיעה, כדי להחיל את הגדרות Terraform:
    terraform apply

    ממתינים עד שב-Terraform תוצג ההודעה "Apply complete!‎".

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

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

שינוי ההקצאה של שאילתה

כדי להשתמש בהזמנה ספציפית בשאילתה, אתם צריכים את ההרשאה הבאה של ניהול זהויות והרשאות גישה (IAM):

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

המסוף

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

    כניסה ל-BigQuery

  2. לוחצים על שאילתת SQL.

  3. בעורך השאילתות, מזינים שאילתת GoogleSQL תקינה.

  4. לוחצים על עריכה > הגדרות השאילתה.

  5. מבטלים את הסימון בתיבה Automatic location setting ובוחרים את האזור או את מספר האזורים שבהם נמצאת ההזמנה.

  6. ברשימה Reservation, בוחרים את ההזמנה שבה רוצים להריץ את השאילתה.

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

  8. כותבים שאילתה בכרטיסיית העריכה ומריצים אותה. השאילתה פועלת בהזמנה שציינתם.

SQL

מגדירים את משתנה המערכת @@reservation בסשן כדי להקצות את ההזמנה שבה השאילתה פועלת:

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בעורך השאילתות, מזינים את ההצהרה הבאה:

    SET @@reservation='RESERVATION';
    SELECT QUERY;

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

    • ‫RESERVATION: ההזמנה שבה רוצים להריץ את השאילתה.

    • ‫QUERY: השאילתה שרוצים להריץ.

  3. ‫לוחצים על Run.

מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.

לדוגמה, השאילתה הבאה משתמשת בהצהרה SET כדי להגדיר את ההזמנה ל-test-reservation במיקום US שכולל מספר אזורים, ואז קוראת לשאילתה בסיסית:

SET @@reservation='projects/project1/locations/US/reservations/test-reservation';
SELECT 42;

BQ

  1. מפעילים את Cloud Shell במסוף Google Cloud .

    הפעלת Cloud Shell

    בחלק התחתון של מסוף Google Cloud יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.

  2. ב-Cloud Shell, מריצים את השאילתה באמצעות הפקודה bq query עם הדגל --reservation_id:

    bq query --use_legacy_sql=false --reservation_id=RESERVATION_ID
    'QUERY'

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

    • ‫RESERVATION_ID: ההזמנה שבה רוצים להריץ את השאילתה.

    • ‫QUERY: הצהרת ה-SQL של השאילתה.

    לדוגמה, השאילתה הבאה פועלת במאגר test-reservation במספר האזורים US:

    bq query --reservation_id=project1.US:test-reservation 'SELECT 42;'

API

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

הקצאת משבצות לעומסי עבודה של BigQuery ML

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

מודלים חיצוניים

סוגי המודלים הבאים של BigQuery ML משתמשים בשירותים חיצוניים:

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

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

מודלים של פירוק לגורמים של מטריצות

כדי ליצור מודל פירוק לגורמים של מטריצה, צריך ליצור הזמנה שמשתמשת במהדורת Enterprise או Enterprise Plus של BigQuery, ואז ליצור הקצאת הזמנה שמשתמשת בסוג המשימה QUERY.

סוגי מודלים אחרים

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

חיפוש הקצאות של הזמנות

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

כדי לחפש הקצאת הזמנה לפרויקט, לתיקייה או לארגון, צריך את ההרשאה הבאה של ניהול זהויות והרשאות גישה (IAM):

  • ‫bigquery.reservationAssignments.list בפרויקט הניהול.

כל אחד מהתפקידים הבאים שמוגדרים מראש ב-IAM כולל את ההרשאה הזו:

  • BigQuery Admin
  • BigQuery Resource Admin
  • BigQuery Resource Editor
  • BigQuery Resource Viewer
  • BigQuery User

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

איך מוצאים את הקצאת המקום השמור של הפרויקט

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

המסוף

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בתפריט הניווט, לוחצים על Workload management.

  3. לוחצים על הכרטיסייה הזמנות.

  4. בטבלת ההזמנות, מרחיבים את ההזמנה כדי לראות אילו משאבים הוקצו לה, או משתמשים בשדה Filter כדי לסנן לפי שם המשאב.

SQL

כדי לראות לאיזו הזמנה מוקצות משימות השאילתות של הפרויקט, שולחים שאילתה לתצוגה INFORMATION_SCHEMA.ASSIGNMENTS_BY_PROJECT.

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בעורך השאילתות, מזינים את ההצהרה הבאה:

      SELECT
        assignment_id
      FROM `region-LOCATION`.INFORMATION_SCHEMA.ASSIGNMENTS_BY_PROJECT
      WHERE
        assignee_id = 'PROJECT_ID'
        AND job_type = 'JOB_TYPE';

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

    • ‫LOCATION: המיקום של ההזמנות שרוצים להציג
    • ‫ADMIN_PROJECT_ID: מזהה הפרויקט של פרויקט הניהול שבבעלותו משאב ההזמנה
    • ‫PROJECT_ID: מזהה הפרויקט שרוצים להקצות לשמירת המקום
    • ‫JOB_TYPE: סוג המשימה שרוצים להקצות להזמנה הזו, למשל QUERY,‏ CONTINUOUS,‏ PIPELINE,‏ BACKGROUND או ML_EXTERNAL

  3. ‫לוחצים על Run.

מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.

BQ

כדי לראות לאיזה מקום שמור מוקצות משימות השאילתות של הפרויקט, משתמשים בפקודה bq show עם הדגל --reservation_assignment:

bq show \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --reservation_assignment \
    --job_type=JOB_TYPE \
    --assignee_id=PROJECT_ID \
    --assignee_type=PROJECT

כדי למצוא הקצאה ספציפית למשתמש, צריך לכלול את הדגל --principal:

bq show \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --reservation_assignment \
    --job_type=JOB_TYPE \
    --assignee_id=PROJECT_ID \
    --assignee_type=PROJECT \
    --principal=PRINCIPAL

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

  • ‫ADMIN_PROJECT_ID: מזהה הפרויקט שבבעלותו נמצא משאב ההזמנה
  • ‫LOCATION: המיקום של ההזמנות שרוצים לראות
  • ‫JOB_TYPE: סוג המשימה שרוצים להקצות ל-reservation, למשל QUERY,‏ CONTINUOUS,‏ PIPELINE,‏ BACKGROUND או ML_EXTERNAL
  • ‫PROJECT_ID: מזהה הפרויקט
  • ‫PRINCIPAL: המזהה של החשבון הראשי, לדוגמה: principal://goog/subject/EMAIL_ADDRESS

כדי לראות את כללי ההקצאה הפעילים שספציפיים למשתמש, בודקים את העמודה principal בתצוגה INFORMATION_SCHEMA.ASSIGNMENTS או מריצים את bq ls --reservation_assignment. בנוסף, אפשר לבדוק איזו הזמנה ביצעה משימה ספציפית על ידי שליחת שאילתה לתצוגה INFORMATION_SCHEMA.JOBS. כשמשתמשים בפקודה bq show --reservation_assignment, אפשר לכלול את הדגל האופציונלי --principal כדי לסנן לפי הקצאת משתמש ספציפית.

עדכון הקצאות של הזמנות

העברת הקצאה להזמנה אחרת

אפשר להעביר הקצאה מהזמנה אחת להזמנה אחרת.

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

  • bigquery.reservationAssignments.create
  • bigquery.reservationAssignments.delete

כל אחד מהתפקידים הבאים שמוגדרים מראש ב-IAM כולל את ההרשאות האלה:

  • BigQuery Admin
  • BigQuery Resource Admin
  • BigQuery Resource Editor

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

כדי להעביר הקצאה, משתמשים בפקודה bq update:

bq update \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --reservation_assignment \
    --destination_reservation_id=DESTINATION_RESERVATION \
    ADMIN_PROJECT_ID:LOCATION.RESERVATION_NAME.ASSIGNMENT_ID

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

  • ‫ADMIN_PROJECT_ID: מזהה הפרויקט שבבעלותו נמצא משאב ההזמנה
  • ‫LOCATION: המיקום של ההזמנה החדשה
  • ‫RESERVATION_NAME: ההזמנה שממנה רוצים להעביר את ההקצאה
  • ‫DESTINATION_RESERVATION: ההקצאה שרוצים להעביר אליה את ההקצאה
  • ‫ASSIGNMENT_ID: מזהה המטלה

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

מחיקת הקצאות של הזמנות

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

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

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

כדי למחוק הקצאת הזמנה, צריך את ההרשאה הבאה לניהול זהויות והרשאות גישה (IAM):

כל אחד מהתפקידים הבאים שמוגדרים מראש ב-IAM כולל את ההרשאה הזו:

  • BigQuery Admin
  • BigQuery Resource Admin
  • BigQuery Resource Editor

הסרת פרויקט מהזמנה

כדי להסיר פרויקט מהזמנה:

המסוף

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בתפריט הניווט, לוחצים על Workload management.

  3. לוחצים על הכרטיסייה הזמנות.

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

  5. מרחיבים את האפשרות פעולות.

  6. לוחצים על Delete.

SQL

משתמשים בהצהרת ה-DDL‏ DROP ASSIGNMENT.

  1. נכנסים לדף BigQuery במסוף Google Cloud .

    כניסה ל-BigQuery

  2. בעורך השאילתות, מזינים את ההצהרה הבאה:

    DROP ASSIGNMENT
      `ADMIN_PROJECT_ID.region-LOCATION.RESERVATION_NAME.ASSIGNMENT_ID`;

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

  3. ‫לוחצים על Run.

מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.

BQ

כדי להסיר פרויקט מהזמנה, משתמשים בפקודה bq rm עם הדגל --reservation_assignment:

bq rm \
    --project_id=ADMIN_PROJECT_ID \
    --location=LOCATION \
    --reservation_assignment RESERVATION_NAME.ASSIGNMENT_ID

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

  • ‫ADMIN_PROJECT_ID: מזהה הפרויקט שבבעלותו נמצא משאב ההזמנה
  • ‫LOCATION: המיקום של ההזמנה
  • ‫RESERVATION_NAME: השם של ההזמנה
  • ‫ASSIGNMENT_ID: מזהה המטלה

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