Questa pagina descrive la sintassi del Common Expression Language (CEL) e le operazioni supportate quando crei filtri avanzati per il job delle operazioni batch di archiviazione in base ai campi del set di dati di Storage Insights.
Puoi utilizzare i filtri avanzati per valutare le condizioni e automatizzare le azioni di gestione su milioni di file in base ai campi del set di dati di Storage Insights. I filtri supportati utilizzano le regole CEL direttamente sui metadati degli oggetti.
Fornisci le regole di filtro utilizzando i flag --bucket-filters e --object-filters in Google Cloud CLI o i campi bucketFilters e objectFilters nell'API JSON quando crei un job. Questa opzione elimina la necessità di eseguire query manualmente su BigQuery, esportare elenchi di oggetti in CSV e caricare nuovamente i manifest nei bucket. Quando utilizzi i filtri dei set di dati per la selezione degli oggetti,
le operazioni batch di archiviazione hanno come target gli oggetti attivi e aggiornati
al momento dello snapshot del set di dati selezionato. Di conseguenza, il job include solo gli oggetti che hanno un valore NULL per softDeleteTime e timeDeleted al momento dello snapshot.
Operatori e funzioni supportati
I filtri avanzati supportano le condizioni unite da istruzioni AND logiche (&&). Utilizza i seguenti operatori per creare le stringhe dei criteri:
| Operatore | Utilizzo di CEL | Sintassi GoogleSQL equivalente | Descrizione |
|---|---|---|---|
| StartsWith | name.startsWith("prefix") |
STARTS_WITH(name, "prefix") |
Trova gli oggetti con un attributo stringa che inizia con un prefisso specifico. |
| EndsWith | name.endsWith(".pdf") |
ENDS_WITH(name, ".pdf") |
Trova gli oggetti con un attributo stringa che termina con un suffisso specifico. |
| Uguale a | == |
= |
Trova gli oggetti con un attributo uguale a un valore specifico. |
| Non uguale | != |
!= |
Escludi gli oggetti con un attributo che corrisponde esattamente a un valore specifico. |
| Maggiore di | > |
> |
Trova gli oggetti con un attributo di tipo numero intero o timestamp che supera una soglia. |
| Maggiore o uguale a | >= |
>= |
Trova gli oggetti con un attributo di tipo numero intero o timestamp uguale o superiore a una soglia. |
| Minore di | < |
< |
Trova gli oggetti con un attributo di tipo numero intero o timestamp inferiore a una soglia. |
| Minore o uguale a | <= |
<= |
Trova gli oggetti con un attributo di tipo numero intero o timestamp uguale o inferiore a una soglia. |
| Contiene | name.contains("substring") |
STRPOS(name, "substring") != 0 |
Trova gli oggetti con un attributo di stringa contenente la sottostringa. |
| In | name in ['a', 'b'] |
name IN UNNEST(ARRAY<STRING>['a', 'b']) |
Trova gli oggetti con un attributo presente nell'elenco fornito. |
| NOT logico | ! |
NOT |
Inverti una regola per filtrare gli oggetti che non corrispondono alle condizioni. |
| Timestamp | timestamp("2025-01-01T00:00:00Z") |
TIMESTAMP "2025-01-01 00:00:00 UTC" |
Esegui il cast delle stringhe di date formattate in RFC 3339 in un timestamp. Questa funzione supporta la precisione al microsecondo per corrispondere agli standard del tipo TIMESTAMP di BigQuery. |
| Esistente | contexts.exists(c, c.key == "env") |
EXISTS(SELECT c FROM UNNEST(contexts) AS c WHERE c.key = "env" LIMIT 1) |
Trova gli oggetti in cui almeno un elemento all'interno di un attributo di tipo record ripetuto soddisfa una condizione specifica. |
Identificatori supportati
Quando crei espressioni di filtro, puoi fare riferimento sia ai campi a livello di bucket sia ai campi a livello di oggetto. I seguenti identificatori vengono mappati ai campi riconosciuti negli schemi delle tabelle dei set di dati di Storage Insights:
Attributi del bucket
Puoi utilizzare i seguenti campi a livello di bucket per filtrare i bucket inclusi nei job delle operazioni batch di archiviazione.
| Campo | Tipo | Descrizione |
|---|---|---|
name |
STRING | Il nome del bucket. |
autoclass |
RECORD | Contiene i metadati enabled e toggleTime. |
autoclass.enabled |
BOOLEANO | Indica se Autoclass è abilitata per il bucket. |
autoclass.toggleTime |
TIMESTAMP | L'ora dell'ultima attivazione o disattivazione di Autoclass. |
labels |
REPEATED RECORD | Contiene mappe chiave-valore standard. |
location |
STRING | Identificatore della località del bucket. |
softDeletePolicy |
RECORD | Contiene retentionDurationSeconds e effectiveTime. |
softDeletePolicy.retentionDurationSeconds |
INTEGER | Il periodo di conservazione dell'eliminazione temporanea, in secondi. |
softDeletePolicy.effectiveTime |
TIMESTAMP | La data e l'ora in cui è entrata in vigore la politica di cancellazione temporanea. |
Attributi degli oggetti
Puoi utilizzare i seguenti attributi per filtrare i job di operazioni batch di archiviazione in base ai campi a livello di oggetto:
| Campo | Tipo | Descrizione |
|---|---|---|
name |
STRING | Il nome dell'oggetto. |
contexts |
REPEATED RECORD | Contesti collegati a un oggetto. |
contexts.key |
STRING | La chiave del contesto personalizzato. |
contexts.value |
STRING | Il valore della chiave del contesto personalizzato. |
contexts.type |
STRING | Il tipo di contesto personalizzato. |
contexts.createTime |
TIMESTAMP | La data e l'ora in cui è stata creata la chiave di contesto personalizzata. |
contexts.updateTime |
TIMESTAMP | La data e l'ora in cui è stata aggiornata la chiave del contesto personalizzato. |
contentType |
STRING | Categorizzazione dei contenuti in base al tipo MIME. |
customTime |
TIMESTAMP | Timestamp definito dall'utente. |
generation |
INTEGER | Identificatore della generazione dell'oggetto. |
metadata |
REPEATED RECORD | Metadati personalizzati. |
metadata.key |
STRING | La chiave dei metadati personalizzati. |
metadata.value |
STRING | Il valore dei metadati personalizzati. |
metageneration |
INTEGER | Identificatore della generazione dei metadati. |
retentionExpirationTime |
TIMESTAMP | Data e ora di scadenza della conservazione degli oggetti. |
securityInsights |
RECORD | Contiene insight sull'accesso pubblico per l'oggetto. |
securityInsights.publicAccessInsight |
RECORD | Fornisce lo stato di accessibilità pubblica dell'oggetto. |
securityInsights.publicAccessInsight.readPublicAccess |
STRING | Lo stato di leggibilità pubblica dell'oggetto. I valori supportati sono PUBLIC, NOT_PUBLIC, UNSUPPORTED e ERROR. |
securityInsights.publicAccessInsight.readPublicAccessSource |
STRING | Se readPublicAccess è PUBLIC, restituisce l'origine dell'autorizzazione in lettura pubblica. I valori supportati sono Object, Bucket e ERROR. |
securityInsights.publicAccessInsight.writePublicAccess |
STRING | Lo stato di scrittura pubblica dell'oggetto. I valori supportati sono PUBLIC, NOT_PUBLIC, UNSUPPORTED e ERROR. |
size |
INTEGER | Dimensioni dell'oggetto in byte. |
storageClass |
STRING | La classe di archiviazione assegnata. |
temporaryHold |
BOOLEANO | Stato di blocco attivo che impedisce la release. |
timeCreated |
TIMESTAMP | Orologio di registrazione della generazione iniziale. |
timeStorageClassUpdated |
TIMESTAMP | Data e ora dell'ultimo aggiornamento della classe di archiviazione. |
updated |
TIMESTAMP | Data e ora dell'ultimo aggiornamento dell'oggetto. |
Regole di formattazione delle espressioni
Per consentire l'esecuzione dei job su larga scala, il motore di query applica le seguenti regole di formattazione:
- Condizioni di filtro: puoi unire le condizioni di filtro solo utilizzando l'operatore logico AND (
&&). Il motore di query non supporta l'operatore logico OR (||). - Posizionamento degli argomenti: devi posizionare il campo dei metadati di destinazione sul lato sinistro delle funzioni. Ad esempio, utilizza
name.startsWith("live-")invece di"live-".startsWith(name). - Metodi di array: puoi chiamare la macro
existsdirettamente sui campi ripetuti, ad esempiocontexts.exists(...)ometadata.exists(...). - Limite di bucket: un singolo job di operazioni batch di archiviazione può operare su un massimo di 1000 bucket. Se le espressioni di filtro corrispondono dinamicamente a più di 1000 bucket nel set di dati, la creazione del job non va a buon fine. Utilizza campi specifici a livello di bucket (ad esempio, filtri di località come
location == "us-central1"o corrispondenza dei nomi comename.startsWith("prod-")) per restringere l'ambito della query e soddisfare questo limite. - Limite di caratteri: i filtri dei bucket e i filtri degli oggetti sono limitati a un massimo di 150 caratteri.
Esempi
Gli esempi seguenti mostrano i filtri combinati comuni che puoi utilizzare per scegliere come target le risorse a livello di progetto. Specifica gli snippet di filtro direttamente come flag nel comando gcloud storage batch-operations jobs create:
Scegli come target bucket specifici: applica azioni agli oggetti in bucket specifici:
--bucket-filters="name in ['bucket-1', 'bucket-2']"
Controlla la classe di archiviazione e la località del bucket: applica le azioni agli oggetti nella classe di archiviazione Standard Storage nelle località
US:--bucket-filters="location.startsWith('us')"
--object-filters="storageClass == 'STANDARD'"Filtra per conservazione dell'eliminazione temporanea: applica azioni agli oggetti nei bucket per i quali l'eliminazione temporanea è abilitata per almeno 7 giorni:
--bucket-filters="softDeletePolicy.retentionDurationSeconds >= 604800"
Filtra per dimensioni ed estensioni degli oggetti: trova oggetti PDF di dimensioni superiori a 5 KiB:
--object-filters="size >= 5120 && name.endsWith('.pdf')"Controlla le chiavi di contesto personalizzate: applica azioni agli oggetti che hanno una chiave di contesto personalizzata
env:--object-filters="contexts.exists(context, context.key == 'env')"
Corrispondenza delle coppie chiave-valore del contesto personalizzato: applica azioni agli oggetti che hanno una chiave di contesto personalizzata
envcon un valoreprod:--object-filters="contexts.exists(context, context.key == 'env' && context.value == 'prod')"
Abbina i valori di contesto personalizzati per prefisso e suffisso: applica azioni agli oggetti con un valore di contesto personalizzato che inizia con il prefisso
prode termina con il suffisso.txt:--object-filters="contexts.exists(context, context.value.startsWith('prod') && context.value.endsWith('.txt'))"Identifica le chiavi di contesto mancanti: applica azioni agli oggetti che non hanno una chiave di contesto personalizzata
env:--object-filters="!contexts.exists(context, context.key == 'env')"
Passaggi successivi
- Scopri come creare un job utilizzando i filtri avanzati.
- Scopri come creare e gestire i job di operazioni batch di archiviazione.