Esta página descreve a sintaxe da Common Expression Language (CEL) e as operações compatíveis ao criar filtros avançados para jobs de operações em lote de armazenamento com base em campos do conjunto de dados do Storage Insights.
É possível usar filtros avançados para avaliar condições e automatizar ações de gerenciamento em milhões de arquivos com base em campos no conjunto de dados do Storage Insights. Os filtros compatíveis usam CEL diretamente nos metadados do objeto.
Forneça regras de filtro usando as flags --bucket-filters e --object-filters
na Google Cloud CLI ou os campos bucketFilters e objectFilters na
API JSON ao criar um job. Essa opção elimina a necessidade de consultar manualmente o BigQuery, exportar listas de objetos para CSV e fazer upload de manifestos de volta aos buckets. Quando você usa filtros de conjunto de dados para seleção de objetos, as operações em lote de armazenamento têm como destino objetos ativos e atuais no momento do snapshot do conjunto de dados selecionado. Consequentemente, o job inclui apenas objetos que têm um valor NULL para softDeleteTime e timeDeleted no momento do snapshot.
Operadores e funções compatíveis
Os filtros avançados oferecem suporte a condições unidas por instruções lógicas AND (&&). Use os operadores a seguir para criar strings de critérios:
| Operador | Uso da CEL | Sintaxe equivalente do GoogleSQL | Descrição |
|---|---|---|---|
| StartsWith | name.startsWith("prefix") |
STARTS_WITH(name, "prefix") |
Corresponde a objetos com um atributo de string que começa com um prefixo específico. |
| EndsWith | name.endsWith(".pdf") |
ENDS_WITH(name, ".pdf") |
Corresponde a objetos com um atributo de string que termina com um sufixo específico. |
| Igual a | == |
= |
Corresponde a objetos com um atributo igual a um valor específico. |
| Diferente | != |
!= |
Exclui objetos com um atributo que corresponde exatamente a um valor específico. |
| Maior que | > |
> |
Corresponde a objetos com um atributo de número inteiro ou carimbo de data/hora que exceda um limite. |
| Maior que ou igual a | >= |
>= |
Corresponde a objetos com um atributo de número inteiro ou carimbo de data/hora igual ou maior que um limite. |
| Menor que | < |
< |
Corresponde a objetos com um atributo de número inteiro ou carimbo de data/hora abaixo de um limite. |
| Menor que ou igual a | <= |
<= |
Corresponde a objetos com um atributo de número inteiro ou carimbo de data/hora igual ou abaixo de um limite. |
| Contém | name.contains("substring") |
STRPOS(name, "substring") != 0 |
Corresponde a objetos com um atributo de string que contém a substring. |
| Em | name in ['a', 'b'] |
name IN UNNEST(ARRAY<STRING>['a', 'b']) |
Corresponde a objetos com um atributo que existe na lista fornecida. |
| Lógico NOT | ! |
NOT |
Inverte uma regra para filtrar objetos que não correspondem às condições. |
| Carimbo de data/hora | timestamp("2025-01-01T00:00:00Z") |
TIMESTAMP "2025-01-01 00:00:00 UTC" |
Converte strings de data formatadas em RFC 3339 em um carimbo de data/hora. Essa função oferece suporte à precisão de microssegundos para corresponder aos padrões de tipo TIMESTAMP do BigQuery. |
| Existe | contexts.exists(c, c.key == "env") |
EXISTS(SELECT c FROM UNNEST(contexts) AS c WHERE c.key = "env" LIMIT 1) |
Corresponde a objetos em que pelo menos um item em um atributo de tipo de registro repetido atende a uma condição específica. |
Identificadores compatíveis
Ao criar expressões de filtro, é possível referenciar campos de bucket e de objeto. Os identificadores a seguir são mapeados para campos reconhecidos em esquemas de tabela do conjunto de dados do Storage Insights:
Atributos do bucket
É possível usar os campos de bucket a seguir para filtrar quais buckets são incluídos nos jobs de operações em lote de armazenamento.
| Campo | Tipo | Descrição |
|---|---|---|
name |
STRING | O nome do bloco. |
autoclass |
RECORD | Contém metadados enabled e toggleTime. |
autoclass.enabled |
BOOLEANO | Indica se a classe automática está ativada para o bucket. |
autoclass.toggleTime |
TIMESTAMP | A hora em que a classe automática foi ativada ou desativada pela última vez. |
labels |
REGISTRO REPETIDO | Contém mapas de chave-valor padrão. |
location |
STRING | Identificador de local do bucket. |
softDeletePolicy |
RECORD | Contém retentionDurationSeconds e effectiveTime. |
softDeletePolicy.retentionDurationSeconds |
INTEGER | O período de armazenamento da exclusão reversível, em segundos. |
softDeletePolicy.effectiveTime |
TIMESTAMP | A hora em que a política de exclusão reversível entrou em vigor. |
Atributos de objeto
É possível usar os atributos a seguir para filtrar jobs de operações em lote de armazenamento por campos de objeto:
| Campo | Tipo | Descrição |
|---|---|---|
name |
STRING | O nome do objeto. |
contexts |
REGISTRO REPETIDO | Contextos anexados a um objeto. |
contexts.key |
STRING | A chave de contexto personalizada. |
contexts.value |
STRING | O valor da chave de contexto personalizada. |
contexts.type |
STRING | O tipo de contexto personalizado. |
contexts.createTime |
TIMESTAMP | A hora em que a chave de contexto personalizada foi criada. |
contexts.updateTime |
TIMESTAMP | A hora em que a chave de contexto personalizada foi atualizada. |
contentType |
STRING | Categorização de conteúdo do tipo MIME. |
customTime |
TIMESTAMP | Carimbo de data/hora definido pelo usuário. |
generation |
INTEGER | Identificador de geração de objetos. |
metadata |
REGISTRO REPETIDO | Metadados personalizados. |
metadata.key |
STRING | A chave de metadados personalizada. |
metadata.value |
STRING | O valor de metadados personalizado. |
metageneration |
INTEGER | Identificador de geração de metadados. |
retentionExpirationTime |
TIMESTAMP | Hora em que a retenção de objetos expira. |
securityInsights |
RECORD | Contém insights de acesso público para o objeto. |
securityInsights.publicAccessInsight |
RECORD | Fornece o status de acessibilidade pública do objeto. |
securityInsights.publicAccessInsight.readPublicAccess |
STRING | O status de legibilidade pública do objeto. Os valores aceitos são PUBLIC, NOT_PUBLIC, UNSUPPORTED e ERROR. |
securityInsights.publicAccessInsight.readPublicAccessSource |
STRING | Se readPublicAccess for PUBLIC, retorna a origem da permissão de leitura pública. Os valores aceitos são Object, Bucket e ERROR. |
securityInsights.publicAccessInsight.writePublicAccess |
STRING | O status de gravação pública do objeto. Os valores aceitos são PUBLIC, NOT_PUBLIC, UNSUPPORTED e ERROR. |
size |
INTEGER | Tamanho do objeto em bytes. |
storageClass |
STRING | A classe de armazenamento atribuída. |
temporaryHold |
BOOLEANO | Status de bloqueio ativo que impede a liberação. |
timeCreated |
TIMESTAMP | Relógio de registro de geração inicial. |
timeStorageClassUpdated |
TIMESTAMP | Hora em que a classe de armazenamento foi atualizada pela última vez. |
updated |
TIMESTAMP | Hora em que o objeto foi atualizado pela última vez. |
Regras de formato de expressão
Para ajudar os jobs a serem executados em grande escala, o mecanismo de consulta aplica as seguintes regras de formatação:
- Condições de filtro: é possível unir condições de filtro apenas usando o
operador lógico AND (
&&). O mecanismo de consulta não oferece suporte ao operador lógico OR (||). - Posicionamento de argumentos: é necessário colocar o campo de metadados de destino no
lado esquerdo das funções. Por exemplo, use
name.startsWith("live-")em vez de"live-".startsWith(name). - Métodos de matriz: é possível chamar a macro
existsdiretamente em campos repetidos, comocontexts.exists(...)oumetadata.exists(...). - Limite de buckets: um único job de operações em lote de armazenamento pode
operar em até 1.000 buckets. Se as expressões de filtro corresponderem dinamicamente a mais de 1.000 buckets no conjunto de dados, a criação do job falhará. Use campos específicos de bucket (por exemplo, filtragem de local como
location == "us-central1"ou correspondência de nomes comoname.startsWith("prod-")) para restringir o escopo da consulta e atender a esse limite. - Limite de caracteres: os filtros de bucket e de objeto são limitados a um máximo de 150 caracteres.
Exemplos
Os exemplos a seguir mostram filtros combinados comuns que podem ser usados para segmentar recursos em todo o projeto. Especifique os snippets de filtro diretamente como flags no comando gcloud storage batch-operations jobs create:
Segmentar buckets específicos: aplica ações a objetos em buckets específicos:
--bucket-filters="name in ['bucket-1', 'bucket-2']"
Verificar a classe de armazenamento e o local do bucket: aplica ações a objetos na classe de armazenamento Standard Storage em
USlocais:--bucket-filters="location.startsWith('us')"
--object-filters="storageClass == 'STANDARD'"Filtrar por retenção de exclusão reversível: aplica ações a objetos em buckets que têm a exclusão reversível ativada por pelo menos sete dias:
--bucket-filters="softDeletePolicy.retentionDurationSeconds >= 604800"
Filtrar por tamanho e extensões de objeto: encontra objetos PDF maiores que 5 KiB:
--object-filters="size >= 5120 && name.endsWith('.pdf')"Verificar chaves de contexto personalizadas: aplica ações a objetos que têm uma chave de contexto personalizada
env:--object-filters="contexts.exists(context, context.key == 'env')"
Corresponder a pares de chave-valor de contexto personalizados: aplica ações a objetos que têm uma chave de contexto personalizada
envcom um valor deprod:--object-filters="contexts.exists(context, context.key == 'env' && context.value == 'prod')"
Corresponder a valores de contexto personalizados por prefixo e sufixo: aplica ações a objetos com um valor de contexto personalizado que começa com o prefixo
prode termina com o sufixo.txt:--object-filters="contexts.exists(context, context.value.startsWith('prod') && context.value.endsWith('.txt'))"Identificar chaves de contexto ausentes: aplica ações a objetos que não têm uma chave de contexto personalizada
env:--object-filters="!contexts.exists(context, context.key == 'env')"
A seguir
- Saiba como criar um job usando filtros avançados.
- Saiba como criar e gerenciar jobs de operações em lote de armazenamento.