בדף הזה מוסבר על התחביר של 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 | השעה שבה האובייקט עודכן בפעם האחרונה. |
כללים לפורמט של ביטויים
כדי לעזור לכם להריץ את העבודות בהיקף גדול, מנוע השאילתות מחיל את כללי הפורמט הבאים:
- תנאי סינון: אפשר לשלב תנאי סינון רק באמצעות האופרטור הלוגי AND (
&&). מנוע השאילתות לא תומך באופרטור הלוגי OR (||). - מיקום הארגומנטים: צריך למקם את שדה המטא-נתונים של היעד בצד ימין של הפונקציות. לדוגמה, במקום
"live-".startsWith(name), צריך להשתמש ב-name.startsWith("live-"). - שיטות למערכים: אפשר להפעיל את מאקרו
existsישירות בשדות חוזרים, כמוcontexts.exists(...)אוmetadata.exists(...). - מגבלת מאגרי מידע: עבודת אצווה אחת של פעולות אחסון יכולה לפעול על עד 1,000 מאגרי מידע. אם ביטויי המסנן תואמים באופן דינמי ליותר מ-1,000 קטגוריות במערך הנתונים, יצירת העבודה תיכשל. כדי לצמצם את היקף השאילתה ולעמוד במגבלה הזו, אפשר להשתמש בשדות ספציפיים ברמת הדלי (לדוגמה, סינון לפי מיקום כמו
location == "us-central1"או התאמה לפי שם כמוname.startsWith("prod-")). - מגבלת תווים: כל אחד מהמסננים של דלי ומסנני האובייקטים מוגבל ל-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')"