סינון לפי קידומת

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

סקירה כללית

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

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

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

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

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

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

כללים

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

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

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

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

  • ביחס לתיקיית המקור: אם מקור ההעברה הוא תיקייה ספציפית, הקידומות מוערכות ביחס לתיקייה הזו. אם המקור הוא gs://my-bucket/data/, קידומת הכללה של reports תתאים לכל הקבצים בתיקייה gs://my-bucket/data/reports.

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

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

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

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

איך מציינים קידומות

מסוף Cloud

כדי לציין קידומות להכללה ולקידומות להחרגה באמצעות מסוף 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": "YOUR DESCRIPTION",
    "status": "ENABLED",
    "projectId": "PROJECT_ID",
    "schedule": {
        "scheduleStartDate": {
            "day": 1,
            "month": 1,
            "year": 2015
        },
        "startTimeOfDay": {
            "hours": 1,
            "minutes": 1
        }
    },
    "transferSpec": {
        "gcsDataSource": {
            "bucketName": "GCS_SOURCE_NAME"
        },
        "gcsDataSink": {
            "bucketName": "GCS_SINK_NAME"
        },
        "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/