תצוגת SEARCH_INDEXES_BY_ORGANIZATION

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

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

כדי לשלוח שאילתה לתצוגה INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION, אתם צריכים את ההרשאות הבאות לניהול זהויות והרשאות גישה (IAM) בארגון:

  • bigquery.tables.get
  • bigquery.tables.list

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

  • roles/bigquery.admin
  • roles/bigquery.dataViewer
  • roles/bigquery.dataEditor
  • roles/bigquery.metadataViewer

תצוגת הסכימה הזו זמינה רק למשתמשים עם Google Cloud ארגונים מוגדרים.

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

סכימה

לתצוגה INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION יש את הסכימה הבאה:

שם העמודה סוג נתונים ערך
project_id STRING שם הפרויקט שמכיל את מערך הנתונים.
project_number STRING מספר הפרויקט שמכיל את מערך הנתונים.
index_catalog STRING שם הפרויקט שמכיל את מערך הנתונים.
index_schema STRING השם של מערך הנתונים שמכיל את האינדקס.
table_name STRING השם של טבלת הבסיס שעליה נוצר האינדקס.
index_name STRING השם של אינדקס החיפוש.
index_status STRING הסטטוס של האינדקס יכול להיות אחד מהבאים:
  • ACTIVE: האינדקס נמצא בשימוש או בתהליך יצירה.
  • PENDING DISABLEMENT: הגודל הכולל של טבלאות הבסיס שעברו אינדוקס חורג מהמגבלה של הארגון, והאינדקס מתווסף לתור למחיקה. במצב הזה, אפשר להשתמש באינדקס בשאילתות חיפוש, ותחויבו על אחסון אינדקס החיפוש.
  • TEMPORARILY DISABLED: או שהגודל הכולל של טבלאות הבסיס שנוספו לאינדקס חורג מהמגבלה של הארגון, או שטבלת הבסיס שנוספה לאינדקס קטנה מ-10GB. במצב הזה, האינדקס לא משמש לשאילתות חיפוש, ולא נגבה מכם תשלום על אחסון אינדקס החיפוש.
  • PERMANENTLY DISABLED: יש שינוי לא תואם בסכימה בטבלת הבסיס, כמו שינוי הסוג של עמודה עם אינדקס מ-STRING ל-INT64.
index_status_details RECORD הרשומה מכילה את השדות הבאים:
  • throttle_status: מציין את סטטוס ההגבלה של אינדקס החיפוש. הערכים האפשריים הם:
    • UNTHROTTLED: אפשר להשתמש באינדקס.
    • BASE_TABLE_TOO_SMALL: גודל טבלת הבסיס קטן מ-10GB. המגבלה הזו חלה בין אם אתם משתמשים בהקצאה משלכם לעבודות ניהול האינדקס ובין אם לא. במקרה כזה, האינדקס מושבת באופן זמני והחיפושים לא מתבצעים באמצעות האינדקס.
    • BASE_TABLE_TOO_LARGE: גודל טבלת הבסיס חורג מהמגבלה של הארגון.
    • ORGANIZATION_LIMIT_EXCEEDED: הגודל הכולל של טבלאות הבסיס שעברו אינדוקס בארגון חורג מהמגבלה של הארגון.
  • message: הודעה מפורטת שמתארת את סטטוס האינדקס.
use_background_reservation BOOL מציין אם תחזוקת האינדקס משתמשת בהזמנה BACKGROUND. הערך שמוגדר הוא FALSE כשמגיעים למגבלה במהלך תחזוקת האינדקס.

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

היקף ותחביר

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

שם התצוגה היקף המשאבים היקף האזור
[`PROJECT_ID`.]`region-REGION`.INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION הארגון שמכיל את הפרויקט שצוין REGION

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

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

  • REGION: האזור של הפרויקט. לדוגמה, `myproject`.`region-us`.INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION.

ויסות נתונים של אינדקס

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

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

דוגמאות

הקטע הזה כולל דוגמאות לשאילתות של התצוגה המפורטת INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION.

איך בודקים אם הצריכה חורגת מהמגבלה באזור מסוים

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

WITH
 indexed_base_table_size AS (
 SELECT
   SUM(base_table.total_logical_bytes) AS total_logical_bytes
 FROM
   `region-us`.INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION AS search_index
 JOIN
   `region-us`.INFORMATION_SCHEMA.TABLE_STORAGE_BY_ORGANIZATION AS base_table
 ON
   (search_index.table_name = base_table.table_name
     AND search_index.project_id = base_table.project_id
     AND search_index.index_schema = base_table.table_schema)
 WHERE
   TRUE
   -- Excludes search indexes that are permanently disabled.
   AND search_index.index_status != 'PERMANENTLY DISABLED'
   -- Excludes BASE_TABLE_TOO_SMALL search indexes whose base table size is
   -- less than 10 GB. These tables don't count toward the limit.
   AND search_index.index_status_details.throttle_status != 'BASE_TABLE_TOO_SMALL'
   -- Excludes search indexes whose project has BACKGROUND reservation purchased
   -- for search indexes.
   AND search_index.use_background_reservation = false
 -- Outputs the total indexed base table size if it exceeds 100 TB,
 -- otherwise, doesn't return any output.
)
SELECT * FROM indexed_base_table_size
WHERE total_logical_bytes >= 109951162777600 -- 100 TB

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

+---------------------+
| total_logical_bytes |
+---------------------+
|     109951162777601 |
+---------------------+

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

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

SELECT
 search_index.project_id,
 search_index.use_background_reservation,
 SUM(base_table.total_logical_bytes) AS total_logical_bytes
FROM
 `region-us`.INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION AS search_index
JOIN
 `region-us`.INFORMATION_SCHEMA.TABLE_STORAGE_BY_ORGANIZATION AS base_table
ON
 (search_index.table_name = base_table.table_name
   AND search_index.project_id = base_table.project_id
   AND search_index.index_schema = base_table.table_schema)
WHERE
 TRUE
  -- Excludes search indexes that are permanently disabled.
  AND search_index.index_status != 'PERMANENTLY DISABLED'
  -- Excludes BASE_TABLE_TOO_SMALL search indexes whose base table size is
  -- less than 10 GB. These tables don't count toward limit.
 AND search_index.index_status_details.throttle_status != 'BASE_TABLE_TOO_SMALL'
GROUP BY search_index.project_id, search_index.use_background_reservation

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

+---------------------+----------------------------+---------------------+
|     project_id      | use_background_reservation | total_logical_bytes |
+---------------------+----------------------------+---------------------+
| projecta            |     true                   |     971329178274633 |
+---------------------+----------------------------+---------------------+
| projectb            |     false                  |     834638211024843 |
+---------------------+----------------------------+---------------------+
| projectc            |     false                  |     562910385625126 |
+---------------------+----------------------------+---------------------+

איך מוצאים אינדקסים של חיפושים שמוגבלים

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

SELECT project_id, index_schema, table_name, index_name
FROM
 `region-us`.INFORMATION_SCHEMA.SEARCH_INDEXES_BY_ORGANIZATION
WHERE
 -- Excludes search indexes that are permanently disabled.
 index_status != 'PERMANENTLY DISABLED'
 AND index_status_details.throttle_status IN ('ORGANIZATION_LIMIT_EXCEEDED', 'BASE_TABLE_TOO_LARGE')

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

+--------------------+--------------------+---------------+----------------+
|     project_id     |    index_schema    |  table_name   |   index_name   |
+--------------------+--------------------+---------------+----------------+
|     projecta       |     dataset_us     |   table1      |    index1      |
|     projectb       |     dataset_us     |   table1      |    index1      |
+--------------------+--------------------+---------------+----------------+