Nesta página, descrevemos 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 do Storage com base nos 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 regras da CEL diretamente nos metadados do objeto.
Forneça regras de filtro usando as sinalizações --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 para os buckets. Quando você usa filtros de conjunto de dados para seleção de objetos,
as operações em lote do Storage segmentam objetos que estão ativos e atualizados
no 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 aceitam condições unidas por instruções lógicas AND (&&). Use
os seguintes operadores para criar as 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 | != |
!= |
Excluir 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 excede um limite. |
| Maior que ou igual a | >= |
>= |
Corresponde a objetos com um atributo de número inteiro ou carimbo de data/hora igual ou superior a 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 inferior a 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. |
| NOT lógico | ! |
NOT |
Inverta 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" |
Converter strings de data formatadas em RFC 3339 em um carimbo de data/hora. Essa função é compatível com a 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 aceitos
Ao criar expressões de filtro, é possível referenciar campos no nível do bucket e no nível do objeto. Os identificadores a seguir são mapeados para campos reconhecidos nos esquemas de tabela do conjunto de dados do Storage Insights:
Atributos de bucket
Use os campos no nível do bucket a seguir para filtrar quais buckets são incluídos nos jobs de operações em lote do Storage.
| Campo | Tipo | Descrição |
|---|---|---|
name |
STRING | O nome do bloco. |
autoclass |
RECORD | Contém metadados de 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 do 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 | O horário em que a política de exclusão reversível entrou em vigor. |
Atributos de objeto
É possível usar os seguintes atributos para filtrar jobs de operações em lote do Storage por campos no nível do 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 personalizado. |
contexts.value |
STRING | O valor da chave de contexto personalizado. |
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 dos metadados personalizados. |
metageneration |
INTEGER | Identificador de geração de metadados. |
retentionExpirationTime |
TIMESTAMP | Horário em que a retenção do objeto expira. |
securityInsights |
RECORD | Contém insights de acesso público para o objeto. |
securityInsights.publicAccessInsight |
RECORD | Informa o status de acessibilidade pública do objeto. |
securityInsights.publicAccessInsight.readPublicAccess |
STRING | O status de leitura pública do objeto. Os valores aceitos são PUBLIC, NOT_PUBLIC, UNSUPPORTED e ERROR. |
securityInsights.publicAccessInsight.readPublicAccessSource |
STRING | Se readPublicAccess for PUBLIC, vai retornar a origem da permissão de leitura pública. Os valores com suporte 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 impedindo a liberação. |
timeCreated |
TIMESTAMP | Relógio de registro da 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 seus jobs a serem executados em grande escala, o mecanismo de consulta aplica as seguintes regras de formatação:
- Condições de filtro: só é possível mesclar condições de filtro usando o operador lógico AND (
&&). O mecanismo de consulta não é compatível com o operador lógico OR (||). - Posicionamento do argumento: é preciso 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 do Storage 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 vai falhar. Use campos específicos no nível do bucket (por exemplo, filtragem de local, como
location == "us-central1", ou correspondência de nome, 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 cada.
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: aplique 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: aplique ações a objetos na classe de armazenamento Standard Storage em locais
US:--bucket-filters="location.startsWith('us')"
--object-filters="storageClass == 'STANDARD'"Filtrar por retenção de exclusão reversível: aplique ações a objetos em buckets que tenham a exclusão reversível ativada por pelo menos 7 dias:
--bucket-filters="softDeletePolicy.retentionDurationSeconds >= 604800"
Filtrar por tamanho e extensões de objeto: encontre objetos PDF maiores que 5 KiB:
--object-filters="size >= 5120 && name.endsWith('.pdf')"Verificar chaves de contexto personalizadas: aplique ações a objetos que tenham uma chave de contexto personalizada
env:--object-filters="contexts.exists(context, context.key == 'env')"
Corresponder a pares de chave-valor de contexto personalizado: aplique ações a objetos que tenham uma chave de contexto personalizado
envcom um valor deprod:--object-filters="contexts.exists(context, context.key == 'env' && context.value == 'prod')"
Corresponder valores de contexto personalizados por prefixo e sufixo: aplique ações a objetos com um valor de contexto personalizado que comece com o prefixo
prode termine com o sufixo.txt:--object-filters="contexts.exists(context, context.value.startsWith('prod') && context.value.endsWith('.txt'))"Identificar chaves de contexto ausentes: aplique 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 do Storage.