En esta página, se describe la sintaxis de Common Expression Language (CEL) y las operaciones admitidas cuando creas filtros avanzados para el trabajo de operaciones por lotes de almacenamiento en función de los 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 reglas de CEL directamente en los metadatos del objeto.
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 seleccionar objetos,
las operaciones por lotes en objetos almacenados se orientan a objetos que están activos y actualizados
según la instantánea del conjunto de datos seleccionado. Por lo tanto, el trabajo solo incluye objetos
que tienen un valor NULL para softDeleteTime y timeDeleted en el momento
de la instantánea.
Operadores y funciones compatibles
Los filtros avanzados admiten condiciones unidas por sentencias AND (&&) lógicas. Usa
los siguientes operadores para compilar tus cadenas de criterios:
| Operador | Uso de CEL | Sintaxis de GoogleSQL equivalente | Descripción |
|---|---|---|---|
| StartsWith | name.startsWith("prefix") |
STARTS_WITH(name, "prefix") |
Coincide con objetos que tienen un atributo de cadena que comienza con un prefijo específico. |
| EndsWith | name.endsWith(".pdf") |
ENDS_WITH(name, ".pdf") |
Coincide con objetos que tienen un atributo de cadena que termina con un sufijo específico. |
| Es igual a | == |
= |
Coincide con objetos que tienen un atributo que es igual a un valor específico. |
| No es igual a | != |
!= |
Excluye objetos con un atributo que coincida exactamente con un valor específico. |
| Mayor que | > |
> |
Coincide con objetos que tienen un atributo de número entero o marca de tiempo que supera un umbral. |
| Mayor o igual que | >= |
>= |
Coincide con objetos que tienen un atributo de número entero o marca de tiempo igual o superior a un umbral. |
| Menor que | < |
< |
Coincide con objetos que tengan un atributo de número entero o marca de tiempo inferior a un umbral. |
| Menor o igual que | <= |
<= |
Coincide con objetos que tienen un atributo de número entero o marca de tiempo igual o inferior a un umbral. |
| Contiene | name.contains("substring") |
STRPOS(name, "substring") != 0 |
Coincide con objetos que tienen un atributo de cadena que contiene la subcadena. |
| En | name in ['a', 'b'] |
name IN UNNEST(ARRAY<STRING>['a', 'b']) |
Coincide con los objetos que tienen un atributo que existe en la lista proporcionada. |
| NOT lógico | ! |
NOT |
Invierte una regla para filtrar los 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 las 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) |
Coincide 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 construyes expresiones de filtro, puedes hacer referencia a campos a nivel de bucket y a nivel de objeto. Los siguientes identificadores se asignan a campos reconocidos en los esquemas de tablas del conjunto de datos de Storage Insights:
Atributos de los buckets
Puedes usar los siguientes campos a nivel del bucket para filtrar qué buckets se incluyen en tus trabajos de operaciones por lotes en objetos almacenados.
| Campo | Tipo | Descripción |
|---|---|---|
name |
STRING | El nombre del bucket. |
autoclass |
RECORD | Contiene metadatos de enabled y toggleTime. |
autoclass.enabled |
BOOLEAN | Indica si Autoclass está habilitado para el bucket. |
autoclass.toggleTime |
TIMESTAMP | Es la hora en la que se habilitó o inhabilitó Autoclass por última vez. |
labels |
REPEATED RECORD | Contiene mapas de pares clave-valor estándar. |
location |
STRING | Es el identificador de ubicación del bucket. |
softDeletePolicy |
RECORD | Contiene retentionDurationSeconds y effectiveTime. |
softDeletePolicy.retentionDurationSeconds |
INTEGER | Es el período de retención de la eliminación no definitiva, en segundos. |
softDeletePolicy.effectiveTime |
TIMESTAMP | Es la hora en que entró en vigencia la política de eliminación no definitiva. |
Atributos de objetos
Puedes usar los siguientes atributos para filtrar los trabajos de operaciones por lotes en objetos almacenados por campos a nivel de objeto:
| Campo | Tipo | Descripción |
|---|---|---|
name |
STRING | El nombre del objeto. |
contexts |
REPEATED RECORD | Son los contextos adjuntos a un objeto. |
contexts.key |
STRING | Es la clave de contexto personalizado. |
contexts.value |
STRING | Es el valor de la clave de contexto personalizado. |
contexts.type |
STRING | Es el tipo de contexto personalizado. |
contexts.createTime |
TIMESTAMP | Es la hora en la que se creó la clave de contexto personalizada. |
contexts.updateTime |
TIMESTAMP | Es la hora en la que se actualizó la clave de contexto personalizada. |
contentType |
STRING | Es la categorización del contenido por tipo de MIME. |
customTime |
TIMESTAMP | Marca de tiempo definida por el usuario. |
generation |
INTEGER | Es el identificador de generación del objeto. |
metadata |
REPEATED RECORD | Metadatos personalizados. |
metadata.key |
STRING | Es la clave de metadatos personalizados. |
metadata.value |
STRING | Es el valor de los metadatos personalizados. |
metageneration |
INTEGER | Es el identificador de la generación de metadatos. |
retentionExpirationTime |
TIMESTAMP | Es la hora en la que vence la retención del objeto. |
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 | Es el estado de legibilidad pública del objeto. Los valores admitidos son PUBLIC, NOT_PUBLIC, UNSUPPORTED, and ERROR. |
securityInsights.publicAccessInsight.readPublicAccessSource |
STRING | Si readPublicAccess es PUBLIC, devuelve la fuente del permiso de lectura público. Los valores admitidos son Object, Bucket y ERROR. |
securityInsights.publicAccessInsight.writePublicAccess |
STRING | Es el estado de escritura pública del objeto. Los valores admitidos son PUBLIC, NOT_PUBLIC, UNSUPPORTED, and ERROR. |
size |
INTEGER | Es el tamaño del objeto en bytes. |
storageClass |
STRING | La clase de almacenamiento asignada. |
temporaryHold |
BOOLEAN | Estado de bloqueo activo que impide el lanzamiento. |
timeCreated |
TIMESTAMP | Reloj de registro de generación inicial. |
timeStorageClassUpdated |
TIMESTAMP | Es la hora en la que se actualizó la clase de almacenamiento por última vez. |
updated |
TIMESTAMP | Es la 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 lógico AND (
&&). El motor de consultas no admite el operador lógico OR (||). - 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 en objetos almacenados 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 fallará. Usa campos específicos
a nivel de bucket (por ejemplo, filtrado por ubicación, como
location == "us-central1", o coincidencia de nombres, comoname.startsWith("prod-")) para reducir el alcance de la consulta y cumplir con este límite. - Límite de caracteres: Los filtros de bucket y de objetos tienen un límite de 150 caracteres como máximo.
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 los objetos en la clase de almacenamiento Standard Storage en las ubicaciones de
US:--bucket-filters="location.startsWith('us')"
--object-filters="storageClass == 'STANDARD'"Filtrar por retención de eliminación no definitiva: Aplica acciones a los objetos de los 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 de más de 5 KiB:
--object-filters="size >= 5120 && name.endsWith('.pdf')"Verifica las claves de contexto personalizadas: Aplica acciones a los objetos que tienen una clave de contexto personalizada
env:--object-filters="contexts.exists(context, context.key == 'env')"
Coincidir con pares clave-valor de contexto personalizado: Aplica acciones a los objetos que tienen una clave de contexto personalizada
envcon un valor deprod:--object-filters="contexts.exists(context, context.key == 'env' && context.value == 'prod')"
Hacer coincidir los valores de contexto personalizados por prefijo y sufijo: Aplica acciones a los objetos con un valor de contexto personalizado que comience con el prefijo
prody termine 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 los objetos que no tienen una clave de contexto personalizada
env:--object-filters="!contexts.exists(context, context.key == 'env')"
¿Qué sigue?
- Obtén más información para crear un trabajo con filtros avanzados.
- Obtén más información para crear y administrar trabajos de operaciones por lotes en objetos almacenados.