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

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

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

כשיוצרים עבודה, אפשר לספק כללי סינון באמצעות הדגלים --bucket-filters ו---object-filters ב-Google Cloud CLI, או באמצעות השדות bucketFilters ו-objectFilters ב-API בפורמט JSON. האפשרות הזו מייתרת את הצורך לשלוח שאילתות ל-BigQuery באופן ידני, לייצא רשימות של אובייקטים ל-CSV ולהעלות מניפסטים בחזרה לקטגוריות. כשמשתמשים במסנני מערך נתונים לבחירת אובייקטים, פעולות אצווה של Storage מכוונות לאובייקטים פעילים ועדכניים נכון לנקודת הזמן של צילום מערך הנתונים שנבחר. לכן, העבודה כוללת רק אובייקטים עם ערך 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. מיקום הארגומנטים: צריך למקם את שדה המטא-נתונים של היעד בצד ימין של הפונקציות. לדוגמה, במקום "live-".startsWith(name), צריך להשתמש ב-name.startsWith("live-").
  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 שגדולים מ-5‎ KiB:

    --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')"

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