Filtrar por prefijo

En esta página se explica cómo incluir y excluir rutas de las transferencias mediante prefijos de inclusión y exclusión.

Para saber cómo crear un manifiesto de objetos específicos que se van a transferir, consulta Transferir archivos u objetos específicos mediante un manifiesto.

Información general

El Servicio de transferencia de Storage admite el uso de prefijos para seleccionar los archivos que se deben incluir o excluir de la fuente de datos. Puedes usar prefijos de inclusión, prefijos de exclusión o ambos a la vez.

Se puede filtrar por prefijo en las fuentes de datos de Amazon S3, Microsoft Azure Blob Storage y Cloud Storage.

  • No incluyas la barra inicial en un prefijo. Por ejemplo, para incluir el objeto requests.gz en una transferencia desde la siguiente ruta de un contenedor s3://my-aws-bucket/logs/y=2015/requests.gz, especifique el prefijo de inclusión logs/y=2015/requests.gz.

  • Se admiten coincidencias parciales para los prefijos de inclusión y exclusión. Por ejemplo, path coincide con path_1/ y path_2/.

  • No se admiten comodines.

  • Si has especificado una carpeta como ubicación de origen, los filtros de prefijo se aplican en relación con esa carpeta. Por ejemplo, si su fuente es gs://my-test-bucket/path/, un filtro de inclusión de file incluye todos los archivos que empiezan por gs://my-test-bucket/path/file.

  • Cada prefijo de inclusión debe incluir una parte distinta del espacio de nombres del objeto. Ningún prefijo de inclusión puede ser prefijo de otro prefijo de inclusión. Por ejemplo, no puedes especificar path_1 y path_1/subpath_2 como prefijos de inclusión.

  • Si usas prefijos de inclusión y de exclusión a la vez, los prefijos de exclusión deben empezar por el valor de uno de los prefijos de inclusión. Por ejemplo, si especifica a como prefijo de inclusión, los prefijos de exclusión válidos son a/b, aaa y abc.

  • Si solo usas prefijos de exclusión, no hay restricciones en los prefijos que puedes usar.

  • Si no especifica ningún prefijo, se transferirán todos los objetos del contenedor.

Para obtener información más general sobre los prefijos, consulta Listar claves de forma jerárquica mediante un prefijo y un delimitador en la documentación de Amazon S3 o el método list de objetos de Cloud Storage.

Cómo especificar prefijos

consola de Cloud

Para especificar prefijos de inclusión y exclusión mediante la consola de Google Cloud, introduce los valores al crear una transferencia o al actualizar una transferencia.

CLI de gcloud

Para especificar prefijos de inclusión y exclusión con la CLI de gcloud, pasa las marcas --include-prefixes y --exclude-prefixes al comando gcloud transfer jobs create o al comando gcloud transfer jobs update:

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

Separa varios prefijos con comas, sin dejar espacios después de las comas. Por ejemplo, --include-prefixes=foo,bar.

REST

Para especificar prefijos de inclusión y exclusión mediante la API REST, usa los campos includePrefixes[] y 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"
            ]
        }
    }
}

Para obtener más información, consulta la referencia de ObjectConditions.

Ejemplos de objetos y rutas

En los ejemplos de este documento se utilizan los siguientes objetos y rutas de ejemplo:

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

Incluir prefijos

Usa prefijos de inclusión al crear una transferencia para indicar al Servicio de transferencia de Storage que tenga en cuenta los objetos de las rutas indicadas para la transferencia y que ignore los objetos que no estén en esas rutas.

Por ejemplo, para incluir objetos en path_1/, usa el siguiente prefijo:

path_1/

Esto incluye los objetos que se encuentran directamente en path_1/, path_1/subpath_1 y path_1/subpath_2/. En la transferencia se incluyen los siguientes objetos:

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

Puedes especificar varias rutas para incluirlas. Por ejemplo, puedes pasar lo siguiente:

path_1/subpath_2/
path_1/subpath_3/

En este caso, la transferencia incluye los siguientes objetos:

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

Se admiten las coincidencias parciales. Por ejemplo, si se especifica path como valor de un prefijo de inclusión, se corresponderá con los siguientes objetos:

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

Si usas prefijos de inclusión, las rutas que no incluyas específicamente no se transferirán al segmento de destino de Cloud Storage.

Excluir prefijos

Si usa prefijos de exclusión al crear una transferencia, indica al Servicio de transferencia de Storage que ignore las rutas indicadas en la transferencia.

Para excluir objetos de path_1/, añade el siguiente prefijo:

path_1/

Esto excluye los objetos de path_1/, path_1/subpath_1/ y path_1/subpath_2/. En este caso, se incluyen los siguientes objetos en la transferencia:

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

Puedes especificar varias rutas que quieras excluir. Por ejemplo, puedes pasar lo siguiente:

path_1/subpath_2/
path_2/subpath_3/

En este caso, la transferencia incluye los siguientes objetos:

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

Incluir y excluir rutas simultáneamente

Puedes aplicar un prefijo de exclusión y un prefijo de inclusión al mismo tiempo. En ese caso, el prefijo de exclusión limita lo que incluye el prefijo de inclusión en la transferencia.

Cuando se especifican ambos tipos de prefijo, cada prefijo de exclusión debe empezar por una ruta que se haya especificado en un prefijo de inclusión.

Por ejemplo, para incluir objetos de path_1/ y excluir objetos de subpath_1/, pasa lo siguiente:

include: path_1/
exclude: path_1/subpath_1/

En este caso, la transferencia incluye los siguientes objetos:

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

Para incluir todos los objetos de path_1/ y path_2/, excepto los elementos de path_1/subpath_1/ o path_2/subpath_3/, pasa lo siguiente:

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

En este caso, la transferencia incluye los siguientes objetos:

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

Ejemplos de inclusión o exclusión de rutas incorrectas

En las siguientes secciones se incluyen ejemplos de lo que no se debe hacer al usar las rutas de inclusión o exclusión, así como la forma de corregirlos para que funcionen correctamente.

Incluir una ruta que se usa en otro prefijo include

Cada prefijo de inclusión debe especificar una parte distinta del espacio de nombres del objeto. El siguiente ejemplo es incorrecto porque el segundo valor ya está incluido en el espacio de nombres del primer valor:

include: path_1/
         path_1/subpath_1

En este ejemplo, los valores del prefijo de inclusión no son válidos porque el segundo prefijo de inclusión, path_1/subpath_1, ya está incluido en path_1/. Para solucionarlo, elimine uno de los valores.

Usar un prefijo de exclusión que no empiece por un prefijo de inclusión

Cada prefijo de exclusión debe empezar por uno de los valores de prefijo de inclusión especificados. El siguiente ejemplo es incorrecto porque los valores del prefijo de exclusión no empiezan por los valores del prefijo de inclusión especificados:

include: path_1/
         path_2/
exclude: subpath_1
         subpath_4

En este ejemplo, los valores de prefijo de exclusión no son válidos porque no empiezan por ninguno de los valores de prefijo de inclusión. Para solucionar este problema, asegúrese de que el prefijo de exclusión incluya una ruta completa que figure como prefijo de inclusión:

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

Siguientes pasos