הפניה למסנני CEL לפעולות רבות על פריטי אחסון

בדף הזה מתוארים התחביר של Common Expression Language‏ (CEL) והפעולות הנתמכות כשיוצרים מסננים מתקדמים למשימה של פעולות רבות על פריטי אחסון, על סמך שדות של מערך נתונים של Storage Insights.

אתם יכולים להשתמש במסננים מתקדמים כדי להעריך תנאים ולהפוך לאוטומטיות פעולות ניהול במיליוני קבצים על סמך שדות במערך הנתונים של Storage Insights. המסננים הנתמכים משתמשים בכללי CEL ישירות במטא-נתונים של האובייקטים.

כשיוצרים עבודה, אפשר לספק כללי סינון באמצעות הדגלים --bucket-filters ו---object-filters ב-Google Cloud CLI, או באמצעות השדות bucketFilters ו-objectFilters ב-API בפורמט JSON. האפשרות הזו מבטלת את הצורך לשלוח שאילתות ל-BigQuery באופן ידני, לייצא רשימות של אובייקטים ל-CSV ולהעלות מניפסטים בחזרה לקטגוריות. כשמשתמשים במסנני קבוצת נתונים לבחירת אובייקטים, פעולות רבות על פריטי אחסון מכוונות לאובייקטים פעילים ועדכניים נכון לנקודת הזמן של קובץ snapshot של קבוצת הנתונים שנבחרה. לכן, המשימה כוללת רק אובייקטים שיש להם ערך NULL גם ב-softDeleteTime וגם ב-timeDeleted בזמן של תמונת המצב.

אופרטורים ופונקציות נתמכים

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

אופרטור שימוש ב-CEL תחביר מקביל ב-GoogleSQL תיאור
StartsWith name.startsWith("prefix") STARTS_WITH(name, "prefix") התאמת אובייקטים עם מאפיין מחרוזת שמתחיל בקידומת ספציפית.
EndsWith name.endsWith(".pdf") ENDS_WITH(name, ".pdf") התאמת אובייקטים עם מאפיין מחרוזת שמסתיים בסיומת ספציפית.
שווה ל- == = התאמת אובייקטים עם מאפיין ששווה לערך ספציפי.
לא שווה ל- != != החרגת אובייקטים עם מאפיין שתואם בדיוק לערך ספציפי.
גדול מ: > > התאמה של אובייקטים למאפיין של מספר שלם או חותמת זמן שחורגים מסף מסוים.
גדול מ- או שווה ל- >= >= התאמת אובייקטים עם מאפיין של מספר שלם או חותמת זמן ששווה לסף או חורג ממנו.
קטן מ: < < התאמת אובייקטים עם מאפיין של מספר שלם או חותמת זמן מתחת לסף.
פחות מ- או שווה ל- <= <= התאמה של אובייקטים עם מאפיין של מספר שלם או חותמת זמן ששווה לערך סף או נמוך ממנו.
מכיל name.contains("substring") STRPOS(name, "substring") != 0 התאמה לאובייקטים עם מאפיין מחרוזת שמכיל את המחרוזת המשנית.
בשימוש name in ['a', 'b'] name IN UNNEST(ARRAY<STRING>['a', 'b']) התאמה של אובייקטים למאפיין שקיים ברשימה שצוינה.
שלילה לוגית ! NOT הופכים את הכלל כדי לסנן אובייקטים שלא עומדים בתנאים.
חותמת הזמן timestamp("2025-01-01T00:00:00Z") TIMESTAMP "2025-01-01 00:00:00 UTC" המרת מחרוזות של תאריכים בפורמט RFC 3339 לחותמת זמן. הפונקציה הזו תומכת בדיוק של מיקרו-שניות כדי להתאים לתקנים של סוג TIMESTAMP ב-BigQuery.
קיים contexts.exists(c, c.key == "env") EXISTS(SELECT c FROM UNNEST(contexts) AS c WHERE c.key = "env" LIMIT 1) התאמת אובייקטים שבהם לפחות פריט אחד במאפיין מסוג רשומה חוזרת עומד בתנאי ספציפי.

מזהים נתמכים

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

מאפייני הקטגוריה

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

שדה סוג תיאור
name מחרוזת שם הקטגוריה.
autoclass רשומה כולל מטא-נתונים של enabled ושל toggleTime.
autoclass.enabled בוליאני התנאי מציין אם התכונה 'סיווג אוטומטי' מופעלת לקטגוריה.
autoclass.toggleTime TIMESTAMP המועד האחרון שבו הופעל או הושבת הסיווג האוטומטי.
labels רשומה חוזרת מכיל מפות רגילות של מפתח/ערך.
location מחרוזת מזהה המיקום של הקטגוריה.
softDeletePolicy רשומה כולל retentionDurationSeconds ו-effectiveTime.
softDeletePolicy.retentionDurationSeconds מספר שלם תקופת השמירה של מחיקה רכה, בשניות.
softDeletePolicy.effectiveTime TIMESTAMP המועד שבו המדיניות בנושא מחיקה רכה נכנסה לתוקף.

מאפייני האובייקט

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

שדה סוג תיאור
name מחרוזת שם האובייקט.
contexts רשומה חוזרת הקשרים שמצורפים לאובייקט.
contexts.key מחרוזת מפתח ההקשר בהתאמה אישית.
contexts.value מחרוזת הערך של מפתח ההקשר המותאם אישית.
contexts.type מחרוזת סוג ההקשר המותאם אישית.
contexts.createTime TIMESTAMP השעה שבה נוצר מפתח ההקשר המותאם אישית.
contexts.updateTime TIMESTAMP המועד שבו מפתח ההקשר בהתאמה אישית עודכן.
contentType מחרוזת סיווג תוכן לפי סוג MIME.
customTime TIMESTAMP חותמת זמן שהמשתמש מגדיר.
generation מספר שלם מזהה הגנרציה של האובייקט.
metadata רשומה חוזרת מטא-נתונים בהתאמה אישית.
metadata.key מחרוזת מפתח המטא-נתונים בהתאמה אישית.
metadata.value מחרוזת הערך של המטא-נתונים בהתאמה אישית.
metageneration מספר שלם מזהה של דור המטא-נתונים.
retentionExpirationTime TIMESTAMP הזמן שבו פג התוקף של שמירת האובייקט.
securityInsights רשומה מכיל תובנות לגבי גישה ציבורית לאובייקט.
securityInsights.publicAccessInsight רשומה מציין את סטטוס הנגישות הציבורית של האובייקט.
securityInsights.publicAccessInsight.readPublicAccess מחרוזת סטטוס הקריאוּת הציבורית של האובייקט. הערכים הנתמכים הם PUBLIC,‏ NOT_PUBLIC,‏ UNSUPPORTED ו-ERROR.
securityInsights.publicAccessInsight.readPublicAccessSource מחרוזת אם הערך של readPublicAccess הוא PUBLIC, הפונקציה מחזירה את המקור של הרשאת הקריאה הציבורית. הערכים הנתמכים הם Object,‏ Bucket ו-ERROR.
securityInsights.publicAccessInsight.writePublicAccess מחרוזת סטטוס ההרשאה לשינוי של האובייקט. הערכים הנתמכים הם PUBLIC,‏ NOT_PUBLIC,‏ UNSUPPORTED ו-ERROR.
size מספר שלם גודל האובייקט בבייטים.
storageClass מחרוזת סוג האחסון (storage class) שהוקצה.
temporaryHold בוליאני סטטוס חסימה פעיל שמונע את השחרור.
timeCreated TIMESTAMP שעון הרישום של היצירה הראשונית.
timeStorageClassUpdated TIMESTAMP המועד שבו סיווג האחסון עודכן לאחרונה.
updated TIMESTAMP השעה שבה האובייקט עודכן לאחרונה.

כללי הפורמט של הביטויים

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

  1. תנאי סינון: אפשר לצרף תנאי סינון רק באמצעות האופרטור הלוגי AND (&&). מנוע השאילתות לא תומך באופרטור הלוגי OR‏ (||).
  2. מיקום הארגומנט: צריך למקם את שדה המטא-נתונים של היעד בצד שמאל של הפונקציות. לדוגמה, השתמשו ב-name.startsWith("live-") במקום ב-"live-".startsWith(name).
  3. שיטות למערכים: אפשר להפעיל את מאקרו exists ישירות בשדות חוזרים, כמו contexts.exists(...) או metadata.exists(...).
  4. מגבלת קטגוריות: משימה אחת של פעולות רבות על פריטי אחסון יכולה לפעול על עד 1,000 קטגוריות. אם ביטויי המסנן תואמים באופן דינמי ליותר מ-1,000 קטגוריות במערך הנתונים, יצירת העבודה תיכשל. כדי לצמצם את היקף השאילתה ולעמוד במגבלה הזו, השתמשו בשדות ספציפיים ברמת הקטגוריה (לדוגמה, סינון לפי מיקום כמו location == "us-central1" או התאמה לפי שם כמו name.startsWith("prod-")).
  5. מגבלת תווים: מסנני קטגוריות ומסנני אובייקטים מוגבלים ל-150 תווים לכל היותר.

דוגמאות

בדוגמאות הבאות מוצגים מסננים משולבים נפוצים שאפשר להשתמש בהם כדי לטרגט משאבים ברמת הפרויקט. מציינים את קטעי הקוד של המסננים ישירות כדגלים בפקודה gcloud storage batch-operations jobs create:

  • טירגוט של קטגוריות ספציפיות: החלת פעולות על אובייקטים בקטגוריות ספציפיות:

    --bucket-filters="name in ['bucket-1', 'bucket-2']"

  • בדיקת סוג האחסון ומיקום הקטגוריה: החלת פעולות על אובייקטים בסוג האחסון Standard storage במיקומים של US:

    --bucket-filters="location.startsWith('us')" 
    --object-filters="storageClass == 'STANDARD'"

  • סינון לפי תקופת השמירה של מחיקה רכה: אפשר להחיל פעולות על אובייקטים בדליים שבהם מופעלת מחיקה רכה למשך 7 ימים לפחות:

    --bucket-filters="softDeletePolicy.retentionDurationSeconds >= 604800"

  • סינון לפי גודל וסיומות של אובייקטים: חיפוש אובייקטים מסוג PDF שגדולים מ-5KiB:

    --object-filters="size >= 5120 && name.endsWith('.pdf')"

  • בדיקת מפתחות הקשר בהתאמה אישית: החלת פעולות על אובייקטים שיש להם מפתח הקשר בהתאמה אישית env:

    --object-filters="contexts.exists(context, context.key == 'env')"

  • התאמה של צמדים מותאמים אישית של מפתח/ערך בהקשר: החלת פעולות על אובייקטים שיש להם מפתח הקשר מותאם אישית env עם הערך prod:

    --object-filters="contexts.exists(context, context.key == 'env' && context.value == 'prod')"

  • התאמה של ערכי הקשר מותאמים אישית לפי קידומת וסיומת: החלת פעולות על אובייקטים עם ערך הקשר מותאם אישית שמתחיל בקידומת prod ומסתיים בסיומת .txt:

    --object-filters="contexts.exists(context, context.value.startsWith('prod') && context.value.endsWith('.txt'))"

  • זיהוי מפתחות הקשר שחסרים: החלת פעולות על אובייקטים שלא כוללים מפתח הקשר מותאם אישית env:

    --object-filters="!contexts.exists(context, context.key == 'env')"

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