Nach Präfix filtern

In dieser Anleitung wird erläutert, wie Sie mit einschließenden und ausschließenden Präfixen steuern, welche Dateien übertragen werden.

Übersicht

Mit dem Storage Transfer Service können Sie Daten aus Amazon S3-, Microsoft Azure Blob Storage- und Cloud Storage-Quellen mithilfe von Präfixen filtern. Ein Präfix ist eine Zeichenfolge am Anfang eines Pfads, die eine Gruppe von Objekten angibt.

Sie können Präfixfilter auf drei Arten verwenden:

  • Einschließende Präfixe: Es werden nur Objekte übertragen, die mit den angegebenen Präfixen übereinstimmen.

  • Ausschließende Präfixe: Objekte, die mit den angegebenen Präfixen übereinstimmen, werden bei der Übertragung ausgelassen.

  • Beide zusammen: Sie können einschließende und ausschließende Präfixe gleichzeitig verwenden, um eine genauere Steuerung zu ermöglichen. Wenn sie zusammen verwendet werden, muss jedes ausschließende Präfix mit einem der angegebenen einschließenden Präfixe beginnen.

Wenn Sie keine Präfixe angeben, werden alle Objekte im Quell-Bucket übertragen.

Regeln

Für Präfixe gelten die folgenden Regeln:

  • Keine führenden Schrägstriche: Lassen Sie bei der Eingabe eines Präfixes den Schrägstrich am Anfang weg. Für den Pfad s3://my-bucket/logs/2025/requests.gz, ist das richtige Präfix logs/2025/requests.gz.

  • Teilweise Übereinstimmungen: Präfixe funktionieren durch teilweise Übereinstimmung. Das Präfix path stimmt beispielsweise sowohl mit path_1/ als auch mit path_2/ überein.

  • Keine Platzhalter: Platzhalter werden nicht unterstützt.

  • Relativ zum Quellordner: Wenn die Übertragungsquelle ein bestimmter Ordner ist, werden Präfixe relativ zu diesem Ordner ausgewertet. Bei einer Quelle von gs://my-bucket/data/ stimmt ein einschließendes Präfix von reports mit allen Dateien unter gs://my-bucket/data/reports überein.

  • Unterschiedliche einschließende Präfixe: Jedes einschließende Präfix muss einen eindeutigen Teil des Objekt-Namespace definieren. Sie können kein einschließendes Präfix verwenden, das bereits von einem anderen einschließenden Präfix abgedeckt wird. Sie können beispielsweise nicht sowohl data/ als auch data/reports/ als einschließende Präfixe angeben.

  • Abhängigkeit von ausschließenden Präfixen: Wenn Sie einschließende und ausschließende Präfixe zusammen verwenden, muss jedes ausschließende Präfix mit einem der angegebenen einschließenden Präfixe beginnen. Wenn path beispielsweise ein einschließendes Präfix ist, können gültige ausschließende Präfixe path/b oder pathway sein. Diese Regel gilt nicht, wenn Sie nur ausschließende Präfixe verwenden.

  • Maximal 1.000 Präfixe: Ein einzelner Übertragungsjob unterstützt bis zu 1.000 Präfixe. Sie können eine Übertragung in mehrere Jobs aufteilen, wenn zusätzliche Präfixe erforderlich sind.

Allgemeine Informationen zu Präfixen finden Sie in der Amazon S3-Dokumentation unter Hierarchische Auflistung von Schlüsseln mit einem Präfix und einem Trennzeichen oder in der Objektlistemethode für Cloud Storage.

Präfixe angeben

Cloud Console

Wenn Sie einschließende und ausschließende Präfixe mit der Cloud Console angeben möchten, geben Sie die Werte beim Erstellen einer neuen Übertragung oder beim Aktualisieren einer vorhandenen Übertragung ein.

gcloud CLI

Wenn Sie einschließende und ausschließende Präfixe mit der gcloud CLI angeben möchten, übergeben Sie die --include-prefixes und --exclude-prefixes Flags an den gcloud transfer jobs create Befehl oder den gcloud transfer jobs update Befehl:

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

Trennen Sie mehrere Präfixe durch Kommas und lassen Sie nach den Kommas keine Leerzeichen. Beispiel: --include-prefixes="foo,bar".

REST

Wenn Sie einschließende und ausschließende Präfixe mit der REST API angeben möchten, verwenden Sie die Felder includePrefixes[] und 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"
            ]
        }
    }
}

Weitere Informationen finden Sie in der ObjectConditions Referenz.

Beispielobjekte und -pfade

In den folgenden Beispielen wird diese Beispielliste von Objekten verwendet:

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

Einschließende Präfixe verwenden

Wenn Sie nur Objekte unter path_1/ übertragen möchten, verwenden Sie das folgende Präfix:

path_1/

Dies schließt Objekte unter path_1/ ein. Die folgenden Objekte sind in der Übertragung enthalten:

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

Sie können mehrere Pfade angeben, die eingeschlossen werden sollen. Sie können beispielsweise Folgendes übergeben:

path_1/subpath_2/
path_2/subpath_3/

In diesem Fall umfasst die Übertragung die folgenden Objekte:

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

Teilweise Übereinstimmungen werden unterstützt. Beispiel:

path

Die folgenden Objekte werden übertragen:

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

Wenn Sie einschließende Präfixe verwenden, werden Pfade, die Sie nicht explizit einschließen, nicht in den Cloud Storage-Ziel-Bucket übertragen.

Ausschließende Präfixe

Wenn Sie beim Erstellen einer Übertragung ausschließende Präfixe verwenden, wird der Storage Transfer Service angewiesen, die aufgeführten Pfade für die Übertragung zu ignorieren.

Wenn Sie Objekte unter path_1/ ausschließen möchten, übergeben Sie das folgende Präfix:

path_1/

Dies schließt Objekte unter path_1/ aus. In diesem Fall umfasst die Übertragung die folgenden Objekte:

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

Sie können mehrere Pfade angeben, die ausgeschlossen werden sollen. Sie können beispielsweise Folgendes übergeben:

path_1/subpath_2/
path_2/subpath_3/

In diesem Fall umfasst die Übertragung die folgenden Objekte:

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

Gleichzeitig Pfade ein- und ausschließen

Sie können ein ausschließendes und ein einschließendes Präfix zusammen verwenden. In diesem Fall begrenzt das ausschließende Präfix, was das einschließende Präfix in die Übertragung einschließt.

Wenn Sie beide Arten von Präfixen angeben, muss jedes ausschließende Präfix mit einem Pfad beginnen, der in einem einschließenden Präfix angegeben ist.

Wenn Sie beispielsweise Objekte unter path_1/ einschließen und Objekte unter subpath_1/ ausschließen möchten, übergeben Sie Folgendes:

include: path_1/
exclude: path_1/subpath_1/

In diesem Fall umfasst die Übertragung die folgenden Objekte:

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

Wenn Sie alle Objekte unter path_1/ und path_2/ einschließen möchten, außer Elemente in path_1/subpath_1/ oder path_2/subpath_3/, übergeben Sie Folgendes:

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

In diesem Fall umfasst die Übertragung die folgenden Objekte:

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

Zu vermeidende häufige Fehler

Hier sind Beispiele für falsche Konfigurationen und wie Sie sie beheben können.

Pfad einschließen, der in einem anderen einschließenden Präfix verwendet wird

Ein einschließendes Präfix darf kein Unterverzeichnis eines anderen einschließenden Präfixes sein.

Falsch: Das Präfix `path_1/subpath_1` wird bereits von `path_1/` abgedeckt.

include: path_1/
         path_1/subpath_1

Richtig: Entfernen Sie das redundante, spezifischere Präfix, um das Problem zu beheben.

include: path_1/

Das ausschließende Präfix stimmt nicht mit einem einschließenden Präfix überein

Wenn sie zusammen verwendet werden, muss ein ausschließendes Präfix mit einem der einschließenden Präfixe beginnen.

Falsch: Das Präfix `subpath_1` beginnt weder mit path_1/ noch mit path_2/.

include: path_1/
         path_2/
exclude: subpath_1

Richtig: Das ausschließende Präfix muss den vollständigen Pfad aus einem einschließenden Präfix enthalten.

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