En esta página, se describe la sintaxis del Common Expression Language (CEL) y las operaciones admitidas cuando compilas filtros avanzados para trabajos de operaciones por lotes de almacenamiento basados en campos del conjunto de datos de Storage Insights.
Puedes usar filtros avanzados para evaluar condiciones y automatizar acciones de administración en millones de archivos según los campos de tu conjunto de datos de Storage Insights. Los filtros admitidos usan CEL directamente en los metadatos de objetos.
Proporciona reglas de filtro con las marcas --bucket-filters y --object-filters
en Google Cloud CLI, o los campos bucketFilters y objectFilters en la
API de JSON cuando creas un trabajo. Esta opción elimina la necesidad de consultar BigQuery de forma manual, exportar listas de objetos a CSV y volver a subir manifiestos a tus buckets. Cuando usas filtros de conjuntos de datos para la selección de objetos, las operaciones por lotes de almacenamiento segmentan objetos que están activos y actualizados a partir de la instantánea del conjunto de datos seleccionado. En consecuencia, el trabajo solo incluye objetos que tienen un valor NULL para softDeleteTime y timeDeleted en el momento de la instantánea.
Operadores y funciones admitidos
Los filtros avanzados admiten condiciones unidas por instrucciones AND (&&) lógicas. Usa los siguientes operadores para compilar tus cadenas de criterios:
| Operador | Uso de CEL | Sintaxis equivalente de GoogleSQL | Descripción |
|---|---|---|---|
| StartsWith | name.startsWith("prefix") |
STARTS_WITH(name, "prefix") |
Establece coincidencias con objetos con un atributo de cadena que comienza con un prefijo específico. |
| EndsWith | name.endsWith(".pdf") |
ENDS_WITH(name, ".pdf") |
Establece coincidencias con objetos con un atributo de cadena que termina con un sufijo específico. |
| Es igual a | == |
= |
Establece coincidencias con objetos con un atributo que es igual a un valor específico. |
| No es igual a | != |
!= |
Excluye objetos con un atributo que coincide exactamente con un valor específico. |
| Mayor que | > |
> |
Establece coincidencias con objetos con un atributo de número entero o marca de tiempo que supera un umbral. |
| Mayor o igual que | >= |
>= |
Establece coincidencias con objetos con un atributo de número entero o marca de tiempo que es igual o supera un umbral. |
| Menor que | < |
< |
Establece coincidencias con objetos con un atributo de número entero o marca de tiempo que está por debajo de un umbral. |
| Menor o igual que | <= |
<= |
Establece coincidencias con objetos con un atributo de número entero o marca de tiempo que es igual o está por debajo de un umbral. |
| Contiene | name.contains("substring") |
STRPOS(name, "substring") != 0 |
Establece coincidencias con objetos con un atributo de cadena que contiene la subcadena. |
| En | name in ['a', 'b'] |
name IN UNNEST(ARRAY<STRING>['a', 'b']) |
Establece coincidencias con objetos con un atributo que existe en la lista proporcionada. |
| NOT lógico | ! |
NOT |
Invierte una regla para filtrar objetos que no coinciden con las condiciones. |
| Marca de tiempo | timestamp("2025-01-01T00:00:00Z") |
TIMESTAMP "2025-01-01 00:00:00 UTC" |
Convierte cadenas de fecha con formato RFC 3339 en una marca de tiempo. Esta función admite la precisión de microsegundos para que coincida con los estándares de tipo TIMESTAMP de BigQuery. |
| Ya existe. | contexts.exists(c, c.key == "env") |
EXISTS(SELECT c FROM UNNEST(contexts) AS c WHERE c.key = "env" LIMIT 1) |
Establece coincidencias con objetos en los que al menos un elemento dentro de un atributo de tipo de registro repetido cumple con una condición específica. |
Identificadores admitidos
Cuando compilas expresiones de filtro, puedes hacer referencia a campos a nivel del bucket y a nivel del objeto. Los siguientes identificadores se asignan a campos reconocidos en los esquemas de tablas del conjunto de datos de Storage Insights:
Atributos del bucket
Puedes usar los siguientes campos a nivel del bucket para filtrar qué buckets se incluyen en tus trabajos de operaciones por lotes de almacenamiento.
| Campo | Tipo | Descripción |
|---|---|---|
name |
STRING | El nombre del bucket. |
autoclass |
RECORD | Contiene metadatos enabled y toggleTime. |
autoclass.enabled |
BOOLEAN | Indica si Autoclass está habilitado para el bucket. |
autoclass.toggleTime |
TIMESTAMP | La hora en la que se habilitó o inhabilitó Autoclass por última vez. |
labels |
REPEATED RECORD | Contiene mapas clave-valor estándar. |
location |
STRING | Identificador de ubicación del bucket. |
softDeletePolicy |
RECORD | Contiene retentionDurationSeconds y effectiveTime. |
softDeletePolicy.retentionDurationSeconds |
INTEGER | El período de retención de eliminación no definitiva, en segundos. |
softDeletePolicy.effectiveTime |
TIMESTAMP | La hora en la que entró en vigencia la política de eliminación no definitiva. |
Atributos de objetos
Puedes usar los siguientes atributos para filtrar trabajos de operaciones por lotes de almacenamiento por campos a nivel del objeto:
| Campo | Tipo | Descripción |
|---|---|---|
name |
STRING | El nombre del objeto. |
contexts |
REPEATED RECORD | Contextos adjuntos a un objeto. |
contexts.key |
STRING | La clave de contexto personalizado. |
contexts.value |
STRING | El valor de la clave de contexto personalizado. |
contexts.type |
STRING | El tipo de contexto personalizado. |
contexts.createTime |
TIMESTAMP | La hora en la que se creó la clave de contexto personalizado. |
contexts.updateTime |
TIMESTAMP | La hora en la que se actualizó la clave de contexto personalizado. |
contentType |
STRING | Categorización del contenido del tipo de MIME. |
customTime |
TIMESTAMP | Marca de tiempo definida por el usuario. |
generation |
INTEGER | Identificador de generación de objetos. |
metadata |
REPEATED RECORD | Metadatos personalizados. |
metadata.key |
STRING | La clave de metadatos personalizados. |
metadata.value |
STRING | El valor de metadatos personalizados. |
metageneration |
INTEGER | Identificador de generación de metadatos. |
retentionExpirationTime |
TIMESTAMP | Hora en la que vence la retención de objetos. |
securityInsights |
RECORD | Contiene estadísticas de acceso público para el objeto. |
securityInsights.publicAccessInsight |
RECORD | Proporciona el estado de accesibilidad pública del objeto. |
securityInsights.publicAccessInsight.readPublicAccess |
STRING | El estado de legibilidad pública del objeto. Los valores admitidos son PUBLIC, NOT_PUBLIC, UNSUPPORTED y ERROR. |
securityInsights.publicAccessInsight.readPublicAccessSource |
STRING | Si readPublicAccess es PUBLIC, muestra la fuente del permiso de lectura pública. Los valores admitidos son Object, Bucket y ERROR. |
securityInsights.publicAccessInsight.writePublicAccess |
STRING | El estado de capacidad de escritura pública del objeto. Los valores admitidos son PUBLIC, NOT_PUBLIC, UNSUPPORTED y ERROR. |
size |
INTEGER | Tamaño del objeto en bytes. |
storageClass |
STRING | La clase de almacenamiento asignada. |
temporaryHold |
BOOLEAN | Estado de bloqueo activo que impide la liberación. |
timeCreated |
TIMESTAMP | Reloj de registro de generación inicial. |
timeStorageClassUpdated |
TIMESTAMP | Hora en la que se actualizó la clase de almacenamiento por última vez. |
updated |
TIMESTAMP | Hora en la que se actualizó el objeto por última vez. |
Reglas de formato de expresiones
Para ayudar a que tus trabajos se ejecuten a gran escala, el motor de consultas aplica las siguientes reglas de formato:
- Condiciones de filtro: Solo puedes unir condiciones de filtro con el
operador AND (
&&) lógico. El motor de consultas no admite el operador OR (||) lógico. - Posicionamiento de argumentos: Debes colocar el campo de metadatos de destino en el
lado izquierdo de las funciones. Por ejemplo, usa
name.startsWith("live-")en lugar de"live-".startsWith(name). - Métodos de array: Puedes llamar a la macro
existsdirectamente en campos repetidos, comocontexts.exists(...)ometadata.exists(...). - Límite de buckets: Un solo trabajo de operaciones por lotes de almacenamiento puede
operar en hasta 1,000 buckets. Si tus expresiones de filtro coinciden de forma dinámica con más de 1,000 buckets en tu conjunto de datos, la creación del trabajo falla. Usa campos específicos a nivel del bucket (por ejemplo, el filtrado de ubicación como
location == "us-central1"o la coincidencia de nombres comoname.startsWith("prod-")) para reducir el alcance de tu consulta y satisfacer este límite. - Límite de caracteres: Los filtros de buckets y los filtros de objetos están limitados a un máximo de 150 caracteres cada uno.
Ejemplos
En los siguientes ejemplos, se muestran filtros combinados comunes que puedes usar para segmentar recursos en todo el proyecto. Especifica los fragmentos de filtro directamente como marcas en el comando gcloud storage batch-operations jobs create:
Segmenta buckets específicos: Aplica acciones a objetos en buckets específicos:
--bucket-filters="name in ['bucket-1', 'bucket-2']"
Verifica la clase de almacenamiento y la ubicación del bucket: Aplica acciones a objetos en la clase de almacenamiento Standard Storage en
USubicaciones:--bucket-filters="location.startsWith('us')"
--object-filters="storageClass == 'STANDARD'"Filtra por retención de eliminación no definitiva: Aplica acciones a objetos en buckets que tienen habilitada la eliminación no definitiva durante al menos 7 días:
--bucket-filters="softDeletePolicy.retentionDurationSeconds >= 604800"
Filtra por tamaño y extensiones de objetos: Busca objetos PDF mayores que 5 KiB:
--object-filters="size >= 5120 && name.endsWith('.pdf')"Verifica las claves de contexto personalizadas: Aplica acciones a objetos que tienen una clave de contexto personalizada
env:--object-filters="contexts.exists(context, context.key == 'env')"
Establece coincidencias con pares clave-valor de contexto personalizados: Aplica acciones a objetos que tienen una clave de contexto personalizado
envcon un valor deprod:--object-filters="contexts.exists(context, context.key == 'env' && context.value == 'prod')"
Establece coincidencias con valores de contexto personalizados por prefijo y sufijo: Aplica acciones a objetos con un valor de contexto personalizado que comienza con el prefijo
prody termina con el sufijo.txt:--object-filters="contexts.exists(context, context.value.startsWith('prod') && context.value.endsWith('.txt'))"Identifica las claves de contexto faltantes: Aplica acciones a objetos que no tienen una clave de contexto personalizado
env:--object-filters="!contexts.exists(context, context.key == 'env')"
¿Qué sigue?
- Obtén información para crear un trabajo con filtros avanzados.
- Obtén información para crear y administrar trabajos de operaciones por lotes de almacenamiento.