Questa pagina descrive la sintassi di Common Expression Language (CEL) e le operazioni supportate quando crei filtri avanzati per i job di operazioni batch di archiviazione basati sui campi del set di dati 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 Storage Insights. I filtri supportati utilizzano CEL 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 manualmente query su BigQuery, esportare elenchi di oggetti in CSV e caricare di nuovo i manifest nei bucket. Quando utilizzi i filtri del 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") |
Applica una regola agli oggetti con un attributo stringa che inizia con un prefisso specifico. |
| EndsWith | name.endsWith(".pdf") |
ENDS_WITH(name, ".pdf") |
Applica una regola agli oggetti con un attributo stringa che termina con un suffisso specifico. |
| Equals | == |
= |
Applica una regola agli 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 | > |
> |
Applica una regola agli oggetti con un attributo intero o timestamp che supera una soglia. |
| Maggiore o uguale a | >= |
>= |
Applica una regola agli oggetti con un attributo intero o timestamp uguale o superiore a una soglia. |
| Minore di | < |
< |
Applica una regola agli oggetti con un attributo intero o timestamp inferiore a una soglia. |
| Minore o uguale a | <= |
<= |
Applica una regola agli oggetti con un attributo intero o timestamp uguale o inferiore a una soglia. |
| Contiene | name.contains("substring") |
STRPOS(name, "substring") != 0 |
Applica una regola agli oggetti con un attributo stringa che contiene la sottostringa. |
| In | name in ['a', 'b'] |
name IN UNNEST(ARRAY<STRING>['a', 'b']) |
Applica una regola agli 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 data formattate in RFC 3339 in un timestamp. Questa funzione supporta la precisione in microsecondi per soddisfare gli 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) |
Applica una regola agli 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 in gli schemi delle tabelle del set di dati Storage Insights:
Attributi del bucket
Puoi utilizzare i seguenti campi a livello di bucket per filtrare i bucket inclusi nei job di 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 è abilitato per il bucket. |
autoclass.toggleTime |
TIMESTAMP | L'ora in cui Autoclass è stato abilitato o disabilitato l'ultima volta. |
labels |
RECORD RIPETUTO | 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 | L'ora in cui la policy di eliminazione temporanea è diventata effettiva. |
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 |
RECORD RIPETUTO | 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 | L'ora in cui è stata creata la chiave del contesto personalizzato. |
contexts.updateTime |
TIMESTAMP | L'ora in cui è stata aggiornata la chiave del contesto personalizzato. |
contentType |
STRING | Classificazione dei contenuti in base al tipo MIME. |
customTime |
TIMESTAMP | Timestamp definito dall'utente. |
generation |
INTEGER | Identificatore della generazione dell'oggetto. |
metadata |
RECORD RIPETUTO | Metadati personalizzati. |
metadata.key |
STRING | La chiave dei metadati personalizzata. |
metadata.value |
STRING | Il valore dei metadati personalizzato. |
metageneration |
INTEGER | Identificatore della generazione dei metadati. |
retentionExpirationTime |
TIMESTAMP | L'ora in cui scade la conservazione dell'oggetto. |
securityInsights |
RECORD | Contiene approfondimenti sull'accesso pubblico all'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 di lettura pubblica. I valori supportati sono Object, Bucket ed ERROR. |
securityInsights.publicAccessInsight.writePublicAccess |
STRING | Lo stato di scrivibilità pubblica dell'oggetto. I valori supportati sono PUBLIC, NOT_PUBLIC, UNSUPPORTED e ERROR. |
size |
INTEGER | Le dimensioni dell'oggetto in byte. |
storageClass |
STRING | La classe di archiviazione assegnata. |
temporaryHold |
BOOLEANO | Stato di blocco attivo che impedisce il rilascio. |
timeCreated |
TIMESTAMP | L'ora di registrazione della generazione iniziale. |
timeStorageClassUpdated |
TIMESTAMP | L'ora dell'ultimo aggiornamento della classe di archiviazione. |
updated |
TIMESTAMP | L'ora dell'ultimo aggiornamento dell'oggetto. |
Regole di formato 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 AND logico (
&&). Il motore di query non supporta l'operatore OR logico (||). - Posizionamento degli argomenti: devi inserire il campo dei metadati di destinati sul lato
sinistro delle funzioni. Ad esempio, utilizza
name.startsWith("live-")anziché"live-".startsWith(name). - Metodi array: puoi chiamare la macro
existsdirettamente sui campi ripetuti, ad esempiocontexts.exists(...)ometadata.exists(...). - Limite dei 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 riesce. Utilizza campi specifici
a livello di bucket (ad esempio, il filtro per località come
location == "us-central1"o la 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 ciascuno.
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 azioni agli oggetti nella classe di archiviazione Standard Storage nelle località
US:--bucket-filters="location.startsWith('us')"
--object-filters="storageClass == 'STANDARD'"Filtra in base alla conservazione dell'eliminazione temporanea: applica azioni agli oggetti nei bucket in cui l'eliminazione temporanea è abilitata per almeno 7 giorni:
--bucket-filters="softDeletePolicy.retentionDurationSeconds >= 604800"
Filtra in base alle dimensioni e alle estensioni degli oggetti: trova gli oggetti PDF di dimensioni superiori a 5 KiB:
--object-filters="size >= 5120 && name.endsWith('.pdf')"Controlla le chiavi del contesto personalizzato: applica azioni agli oggetti che hanno una chiave del contesto personalizzato
env:--object-filters="contexts.exists(context, context.key == 'env')"
Applica una regola alle coppie chiave-valore del contesto personalizzato: applica azioni agli oggetti che hanno una chiave del contesto personalizzato
envcon un valore diprod:--object-filters="contexts.exists(context, context.key == 'env' && context.value == 'prod')"
Applica una regola ai valori del contesto personalizzato in base al prefisso e al suffisso: applica azioni agli oggetti con un valore del 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 del contesto mancanti: applica azioni agli oggetti che non hanno una chiave del contesto personalizzato
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.