סינון אובייקטים במקור לפי תחילית

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

סקירה כללית

‫Storage Transfer Service תומך בסינון נתונים ממקורות של Amazon S3, ‏ Microsoft Azure Blob Storage ו-Cloud Storage באמצעות קידומות. קידומת היא מחרוזת של תווים בתחילת נתיב שמציינת קבוצה של אובייקטים.

יש שלוש דרכים להשתמש במסנני קידומות:

  • כולל קידומות: רק אובייקטים שתואמים לקידומות שצוינו מועברים.

  • החרגת קידומות: אובייקטים שתואמים לקידומות שצוינו מושמטים מההעברה.

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

אם לא מציינים קידומות, כל האובייקטים בקטגוריית המקור מועברים.

אפשר לשלב מסנני קידומת עם תבניות glob, מסננים של מועד שינוי אחרון ומסננים של סוג אחסון ב-S3.

כללים

הכללים הבאים חלים על קידומות:

  • ללא קווים נטויים בתחילת המחרוזת: אל תכללו קו נטוי בתחילת הקידומת. בנתיב s3://my-bucket/logs/2025/requests.gz, התחילית הנכונה היא logs/2025/requests.gz.

  • התאמות חלקיות: התאמה חלקית היא הדרך שבה קידומות פועלות. לדוגמה, הקידומת path תואמת ל-path_1/ ול-path_2/.

  • ללא תווים כלליים לחיפוש: לא אפשרי.

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

  • קידומות include נפרדות: כל קידומת include צריכה להגדיר חלק ייחודי במרחב השמות של האובייקט. אי אפשר להשתמש בתחילית include שכבר נכללת בתחילית include אחרת. לדוגמה, אי אפשר לציין גם data/ וגם data/reports/ כקידומות להכללה.

  • החרגת תלות בקידומת: כשמשתמשים בקידומות של הכללה והחרגה ביחד, כל קידומת של החרגה חייבת להתחיל באחת מקידומות ההכללה שצוינו. לדוגמה, אם path היא קידומת של הכללה, קידומות ההחרגה התקפות יכולות להיות path/b או pathway. הכלל הזה לא חל אם אתם משתמשים רק בקידומות להחרגה.

  • מקסימום 1,000 קידומות: אפשר להשתמש ב-1,000 קידומות לכל היותר במשימת העברה אחת. אפשר לפצל העברה לכמה משימות אם נדרשים קידומות נוספות.

מידע כללי נוסף על תחיליות זמין במאמר הצגת רשימה של מפתחות באופן היררכי באמצעות תחילית ותו מפריד במסמכי Amazon S3 או במאמר שיטה להצגת רשימה של אובייקטים ב-Cloud Storage.

אינטראקציה עם סוגים אחרים של מסננים

כשמשתמשים בכמה מסננים, Storage Transfer Service מחיל אותם בסדר הבא:

  1. Include prefixes: מצמצם את האובייקטים שצריך להביא בחשבון.

  2. תנאי אובייקט (תבנית glob, זמן השינוי האחרון וסוג האחסון ב-S3): מסננים את האובייקטים שתואמים לקידומת של הכללה. כדי שאובייקט ייכלל בהעברה, הוא צריך לעמוד בכל התנאים שצוינו לגבי האובייקט.

  3. החרגת קידומות: הסרת אובייקטים מהתוצאה.

מידע נוסף על סינון באמצעות דפוסי glob, מועד שינוי אחרון וסוג אחסון ב-S3

אינטראקציה עם נתיב או תיקייה של מקור

מסנני הכללה והחרגה הם יחסיים לכל נתיב או תיקייה שאתם מציינים למקור.

לדוגמה, אם המקור הוא gs://bucketA/alpha, ואתם רוצים לציין מסנן ל-gs://bucketA/alpha/beta:

תקין

  • נתיב המקור: gs://bucketA/alpha
  • קידומת החרגה: beta/
  • תוצאה: gs://bucketA/alpha/beta נכלל בהחרגה בצורה נכונה

שגוי

  • נתיב המקור: gs://bucketA/alpha
  • קידומת החרגה: alpha/beta/
  • תוצאה: המסנן עבור gs://bucketA/alpha/alpha/beta מוגדר בצורה שגויה

ציון תחיליות

מסוף Cloud

כדי לציין קידומות להכללה ולשלילה באמצעות מסוף Google Cloud, מזינים את הערכים כשיוצרים העברה חדשה או כשמעדכנים העברה קיימת.

‫CLI של gcloud

כדי לציין קידומות להכללה ולמעט באמצעות gcloud CLI, מעבירים את הדגלים --include-prefixes ו---exclude-prefixes לפקודה gcloud transfer jobs create או לפקודה gcloud transfer jobs update:

gcloud transfer jobs create SOURCE DESTINATION \
  --include-prefixes="path_1/,path_2/" --exclude-prefixes="path_1/subpath_2/"

אם מזינים כמה קידומות, צריך להפריד ביניהן באמצעות פסיקים, בלי להוסיף רווחים אחרי הפסיקים. לדוגמה, --include-prefixes="foo,bar".

REST

כדי לציין קידומות שרוצים לכלול או להחריג באמצעות API בארכיטקטורת REST, משתמשים בשדות includePrefixes[] ו-excludePrefixes[]:

{
    "description": "Transfer with prefixes",
    "status": "ENABLED",
    "projectId": "PROJECT_ID",
    "schedule": {
        "scheduleStartDate": {
            "day": 1,
            "month": 1,
            "year": 2015
        },
        "startTimeOfDay": {
            "hours": 1,
            "minutes": 1
        }
    },
    "transferSpec": {
        "gcsDataSource": {
            "bucketName": "SOURCE_BUCKET"
        },
        "gcsDataSink": {
            "bucketName": "DESTINATION_BUCKET"
        },
        "transferOptions": {
            "deleteObjectsFromSourceAfterTransfer": true
        },
        "objectConditions": {
            "includePrefixes": [
                "path_1/",
                "path_2/"
            ],
            "excludePrefixes": [
                "path_1/subpath_2/object_5"
            ]
        }
    }
}

מידע נוסף זמין במאמר בנושא ObjectConditions.

דוגמאות לאובייקטים ולנתיבים

בדוגמאות הבאות נעשה שימוש ברשימת האובייקטים לדוגמה הזו:

xx://bucketname/object_1
xx://bucketname/object_2
xx://bucketname/path_1/object_3
xx://bucketname/path_1/subpath_1/object_4
xx://bucketname/path_1/subpath_2/object_5
xx://bucketname/path_2/object_6
xx://bucketname/path_2/subpath_3/object_7
xx://bucketname/path_2/subpath_4/object_8

שימוש בקידומות

כדי להעביר רק אובייקטים מתחת ל-path_1/, משתמשים בקידומת הבאה:

path_1/

זה כולל אובייקטים ב-path_1/. האובייקטים הבאים נכללים בהעברה:

xx://bucketname/object_1
xx://bucketname/object_2
xx://bucketname/path_1/object_3
xx://bucketname/path_1/subpath_1/object_4
xx://bucketname/path_1/subpath_2/object_5
xx://bucketname/path_2/object_6
xx://bucketname/path_2/subpath_3/object_7
xx://bucketname/path_2/subpath_4/object_8

אפשר לציין כמה נתיבים שרוצים לכלול. לדוגמה, אפשר להעביר את הפרטים הבאים:

path_1/subpath_2/
path_1/subpath_3/

במקרה הזה, ההעברה כוללת את האובייקטים הבאים:

xx://bucketname/object_1
xx://bucketname/object_2
xx://bucketname/path_1/object_3
xx://bucketname/path_1/subpath_1/object_4
xx://bucketname/path_1/subpath_2/object_5
xx://bucketname/path_2/object_6
xx://bucketname/path_2/subpath_3/object_7
xx://bucketname/path_2/subpath_4/object_8

יש תמיכה בהתאמות חלקיות. לדוגמה:

path

האובייקטים הבאים מועברים:

xx://bucketname/object_1
xx://bucketname/object_2
xx://bucketname/path_1/object_3
xx://bucketname/path_1/subpath_1/object_4
xx://bucketname/path_1/subpath_2/object_5
xx://bucketname/path_2/object_6
xx://bucketname/path_2/subpath_3/object_7
xx://bucketname/path_2/subpath_4/object_8

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

החרגת תחיליות

כשמשתמשים בקידומות להחרגה כשיוצרים העברה, Storage Transfer Service מתעלם מהנתיבים שמופיעים ברשימה במהלך ההעברה.

כדי להחריג אובייקטים ב-path_1/, מעבירים את הקידומת הבאה:

path_1/

הפעולה הזו לא כוללת אובייקטים ב-path_1/. במקרה כזה, האובייקטים הבאים נכללים בהעברה:

xx://bucketname/object_1
xx://bucketname/object_2
xx://bucketname/path_1/object_3
xx://bucketname/path_1/subpath_1/object_4
xx://bucketname/path_1/subpath_2/object_5
xx://bucketname/path_2/object_6
xx://bucketname/path_2/subpath_3/object_7
xx://bucketname/path_2/subpath_4/object_8

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

path_1/subpath_2/
path_2/subpath_3/

במקרה הזה, ההעברה כוללת את האובייקטים הבאים:

xx://bucketname/object_1
xx://bucketname/object_2
xx://bucketname/path_1/object_3
xx://bucketname/path_1/subpath_1/object_4
xx://bucketname/path_1/subpath_2/object_5
xx://bucketname/path_2/object_6
xx://bucketname/path_2/subpath_3/object_7
xx://bucketname/path_2/subpath_4/object_8

הכללה והחרגה של נתיבים בו-זמנית

אפשר להחיל קידומת להחרגה וקידומת להכללה ביחד. במקרה כזה, הקידומת להחרגה מגבילה את מה שהקידומת להכללה כוללת בהעברה.

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

לדוגמה, כדי לכלול אובייקטים ב-path_1/ ולהחריג אובייקטים ב-subpath_1/, מעבירים את הפקודה הבאה:

include: path_1/
exclude: path_1/subpath_1/

במקרה הזה, ההעברה כוללת את האובייקטים הבאים:

xx://bucketname/object_1
xx://bucketname/object_2
xx://bucketname/path_1/object_3
xx://bucketname/path_1/subpath_1/object_4
xx://bucketname/path_1/subpath_2/object_5
xx://bucketname/path_2/object_6
xx://bucketname/path_2/subpath_3/object_7
xx://bucketname/path_2/subpath_4/object_8

כדי לכלול את כל האובייקטים ב-path_1/ וב-path_2/, למעט פריטים ב-path_1/subpath_1/ או ב-path_2/subpath_3/, צריך להעביר את הפקודה הבאה:

include: path_1/
         path_2/
exclude: path_1/subpath_1/
         path_2/subpath_3/

במקרה הזה, ההעברה כוללת את האובייקטים הבאים:

xx://bucketname/object_1
xx://bucketname/object_2
xx://bucketname/path_1/object_3
xx://bucketname/path_1/subpath_1/object_4
xx://bucketname/path_1/subpath_2/object_5
xx://bucketname/path_2/object_6
xx://bucketname/path_2/subpath_3/object_7
xx://bucketname/path_2/subpath_4/object_8

טעויות נפוצות שכדאי להימנע מהן

ריכזנו כאן דוגמאות להגדרות שגויות והסבר איך לתקן אותן.

כולל נתיב שמשמש בתחילית אחרת של include

קידומת include לא יכולה להיות ספריית משנה של קידומת include אחרת.

שגוי: הנתיב עם הקידומת path_1/subpath_1 כבר מכוסה על ידי path_1/.

include: path_1/
         path_1/subpath_1

תיקון: כדי לפתור את הבעיה, צריך להסיר את הקידומת המיותרת והספציפית יותר.

include: path_1/

הקידומת של ההחרגה לא תואמת לקידומת של ההכללה

כשמשתמשים בתחילית של החרגה, היא חייבת להתחיל באחת מהתחיליות של הכללה.

לא נכון: הקידומת subpath_1 לא מתחילה ב-path_1/ או ב-path_2/.

include: path_1/
         path_2/
exclude: subpath_1

תקין: מוודאים שהתחילית של ההחרגה מכילה את הנתיב המלא מהתחילית של ההכללה.

include: path_1/
         path_2/
exclude: path_1/subpath_1/