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

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

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

כשיוצרים משימה, מספקים כללי סינון באמצעות הדגלים --bucket-filters ו---object-filters ב-Google Cloud CLI, או באמצעות השדות bucketFilters ו-objectFilters ב-API בפורמט JSON. האפשרות הזו מייתרת את הצורך לשלוח שאילתות באופן ידני ל-BigQuery, לייצא רשימות אובייקטים לקובצי CSV ולהעלות מניפסטים בחזרה לקטגוריות. כשמשתמשים במסננים של מערכי נתונים כדי לבחור אובייקטים, פעולות רבות על פריטי אחסון מתמקדות באובייקטים פעילים ועדכניים נכון לתמונת המצב של מערך הנתונים שנבחר. לכן, המשימה כוללת רק אובייקטים שיש להם ערך 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 לוגי ! 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 רשומה מכיל Access Insights לגבי הגישה הציבורית לאובייקט.
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')"

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