Auf dieser Seite werden die CEL-Syntax (Common Expression Language) und die unterstützten Vorgänge beschrieben, wenn Sie erweiterte Filter für einen Storage-Batchvorgangsjob basierend auf Storage Insights-Dataset-Feldern erstellen.
Mit erweiterten Filtern können Sie Bedingungen auswerten und Verwaltungsaktionen für Millionen von Dateien basierend auf Feldern in Ihrem Storage Insights-Dataset automatisieren. Unterstützte Filter verwenden CEL-Regeln direkt für Objektmetadaten.
Geben Sie Filterregeln mit den Flags --bucket-filters und --object-filters in der Google Cloud CLI oder den Feldern bucketFilters und objectFilters in der JSON API an, wenn Sie einen Job erstellen. Mit dieser Option müssen Sie BigQuery nicht mehr manuell abfragen, Objektlisten in CSV exportieren und Manifeste wieder in Ihre Buckets hochladen. Wenn Sie Dataset-Filter für die Objektauswahl verwenden, werden bei Storage-Batchvorgängen Objekte berücksichtigt, die zum Zeitpunkt des ausgewählten Dataset-Snapshots live und aktuell sind. Daher enthält der Job nur Objekte, die zum Zeitpunkt des Snapshots sowohl für softDeleteTime als auch für timeDeleted den Wert NULL haben.
Unterstützte Operatoren und Funktionen
Erweiterte Filter unterstützen Bedingungen, die durch logische AND-Anweisungen (&&) verbunden sind. Verwenden Sie die folgenden Operatoren, um Ihre Kriterienstrings zu erstellen:
| Operator | CEL-Verwendung | Entsprechende GoogleSQL-Syntax | Beschreibung |
|---|---|---|---|
| StartsWith | name.startsWith("prefix") |
STARTS_WITH(name, "prefix") |
Objekte mit einem Stringattribut abgleichen, das mit einem bestimmten Präfix beginnt. |
| EndsWith | name.endsWith(".pdf") |
ENDS_WITH(name, ".pdf") |
Objekte mit einem Stringattribut abgleichen, das mit einem bestimmten Suffix endet. |
| Ist gleich | == |
= |
Objekte mit einem Attribut abgleichen, das einem bestimmten Wert entspricht. |
| Ist nicht gleich | != |
!= |
Objekte mit einem Attribut ausschließen, das genau mit einem bestimmten Wert übereinstimmt. |
| Größer als | > |
> |
Objekte mit einem Ganzzahl- oder Zeitstempelattribut abgleichen, das einen Schwellenwert überschreitet. |
| Größer als oder gleich | >= |
>= |
Objekte mit einem Ganzzahl- oder Zeitstempelattribut abgleichen, das einen Schwellenwert erreicht oder überschreitet. |
| Kleiner als | < |
< |
Objekte mit einem Ganzzahl- oder Zeitstempelattribut unter einem Schwellenwert abgleichen. |
| Kleiner als oder gleich | <= |
<= |
Objekte mit einem Ganzzahl- oder Zeitstempelattribut abgleichen, das kleiner oder gleich einem Schwellenwert ist. |
| Enthält | name.contains("substring") |
STRPOS(name, "substring") != 0 |
Objekte mit einem Stringattribut abgleichen, das den Teilstring enthält. |
| In | name in ['a', 'b'] |
name IN UNNEST(ARRAY<STRING>['a', 'b']) |
Objekte mit einem Attribut abgleichen, das in der bereitgestellten Liste vorhanden ist. |
| Logisches NOT | ! |
NOT |
Regel umkehren, um Objekte zu filtern, die nicht den Bedingungen entsprechen. |
| Zeitstempel | timestamp("2025-01-01T00:00:00Z") |
TIMESTAMP "2025-01-01 00:00:00 UTC" |
Wandelt Datumsstrings im RFC 3339-Format in einen Zeitstempel um. Diese Funktion unterstützt eine Mikrosekundenpräzision, die den BigQuery-TIMESTAMP-Typstandards entspricht. |
| Vorhanden | contexts.exists(c, c.key == "env") |
EXISTS(SELECT c FROM UNNEST(contexts) AS c WHERE c.key = "env" LIMIT 1) |
Objekte abgleichen, bei denen mindestens ein Element innerhalb eines Attributs vom Typ „Wiederholter Eintrag“ eine bestimmte Bedingung erfüllt. |
Unterstützte IDs
Beim Erstellen von Filterausdrücken können Sie sowohl auf Felder auf Bucket-Ebene als auch auf Felder auf Objektebene verweisen. Die folgenden Kennungen sind den erkannten Feldern in den Tabellenschemas des Storage Insights-Datasets zugeordnet:
Bucket-Attribute
Mit den folgenden Feldern auf Bucket-Ebene können Sie filtern, welche Buckets in Ihre Storage-Batchvorgangsjobs einbezogen werden.
| Feld | Typ | Beschreibung |
|---|---|---|
name |
STRING | Der Name des Buckets. |
autoclass |
RECORD | Enthält enabled- und toggleTime-Metadaten. |
autoclass.enabled |
BOOLEAN | Gibt an, ob Autoclass für den Bucket aktiviert ist. |
autoclass.toggleTime |
TIMESTAMP | Der Zeitpunkt, zu dem Autoclass zuletzt aktiviert oder deaktiviert wurde. |
labels |
REPEATED RECORD | Enthält Standard-Schlüssel/Wert-Zuordnungen. |
location |
STRING | Bucket-Standort-ID. |
softDeletePolicy |
RECORD | Enthält retentionDurationSeconds und effectiveTime. |
softDeletePolicy.retentionDurationSeconds |
INTEGER | Die Aufbewahrungsdauer für das vorläufige Löschen in Sekunden. |
softDeletePolicy.effectiveTime |
TIMESTAMP | Der Zeitpunkt, zu dem die Richtlinie für vorläufiges Löschen in Kraft getreten ist. |
Objektattribute
Sie können die folgenden Attribute verwenden, um Storage-Batchvorgangsjobs nach Feldern auf Objektebene zu filtern:
| Feld | Typ | Beschreibung |
|---|---|---|
name |
STRING | Der Name des Objekts. |
contexts |
REPEATED RECORD | Kontexte, die an ein Objekt angehängt sind. |
contexts.key |
STRING | Der Schlüssel für den benutzerdefinierten Kontext. |
contexts.value |
STRING | Der Wert des Schlüssels für den benutzerdefinierten Kontext. |
contexts.type |
STRING | Der benutzerdefinierte Kontexttyp. |
contexts.createTime |
TIMESTAMP | Der Zeitpunkt, zu dem der benutzerdefinierte Kontextschlüssel erstellt wurde. |
contexts.updateTime |
TIMESTAMP | Der Zeitpunkt, zu dem der benutzerdefinierte Kontextschlüssel aktualisiert wurde. |
contentType |
STRING | Inhaltskategorisierung nach MIME-Typ. |
customTime |
TIMESTAMP | Benutzerdefinierter Zeitstempel. |
generation |
INTEGER | ID der Objektgenerierung. |
metadata |
REPEATED RECORD | Benutzerdefinierte Metadaten. |
metadata.key |
STRING | Der benutzerdefinierte Metadatenschlüssel. |
metadata.value |
STRING | Der benutzerdefinierte Metadatenwert. |
metageneration |
INTEGER | ID für die Metadatengenerierung. |
retentionExpirationTime |
TIMESTAMP | Zeitpunkt, zu dem die Objektaufbewahrung abläuft. |
securityInsights |
RECORD | Enthält Statistiken zum öffentlichen Zugriff auf das Objekt. |
securityInsights.publicAccessInsight |
RECORD | Gibt den Status der öffentlichen Zugänglichkeit des Objekts an. |
securityInsights.publicAccessInsight.readPublicAccess |
STRING | Der Status der öffentlichen Lesbarkeit des Objekts. Unterstützte Werte sind PUBLIC, NOT_PUBLIC, UNSUPPORTED und ERROR. |
securityInsights.publicAccessInsight.readPublicAccessSource |
STRING | Wenn readPublicAccess den Wert PUBLIC hat, wird die Quelle der öffentlichen Leseberechtigung zurückgegeben. Unterstützte Werte sind Object, Bucket, und ERROR. |
securityInsights.publicAccessInsight.writePublicAccess |
STRING | Der Status der öffentlichen Schreibbarkeit des Objekts. Unterstützte Werte sind PUBLIC, NOT_PUBLIC, UNSUPPORTED und ERROR. |
size |
INTEGER | Objektgröße in Byte. |
storageClass |
STRING | Die zugewiesene Speicherklasse. |
temporaryHold |
BOOLEAN | Aktiver Blockierungsstatus, der die Veröffentlichung verhindert. |
timeCreated |
TIMESTAMP | Uhrzeit der Registrierung der ersten Erstellung. |
timeStorageClassUpdated |
TIMESTAMP | Zeitpunkt, zu dem die Speicherklasse zuletzt aktualisiert wurde. |
updated |
TIMESTAMP | Zeitpunkt, zu dem das Objekt zuletzt aktualisiert wurde. |
Formatierungsregeln für Ausdrücke
Damit Ihre Jobs in großem Umfang ausgeführt werden können, wendet die Abfrage-Engine die folgenden Formatierungsregeln an:
- Filterbedingungen: Sie können Filterbedingungen nur mit dem logischen AND-Operator (
&&) verknüpfen. Die Abfrage-Engine unterstützt den logischen Operator OR (||) nicht. - Argumentpositionierung: Sie müssen das Zielmetadatenfeld auf der linken Seite der Funktionen platzieren. Verwenden Sie z. B.
name.startsWith("live-")statt"live-".startsWith(name). - Array-Methoden: Sie können das Makro
existsdirekt für wiederkehrende Felder wiecontexts.exists(...)odermetadata.exists(...)aufrufen. - Bucket-Limit: Ein einzelner Job für Storage-Batchvorgänge kann bis zu 1.000 Buckets umfassen. Wenn Ihre Filterausdrücke dynamisch mit mehr als 1.000 Buckets in Ihrem Dataset übereinstimmen, schlägt die Joberstellung fehl. Verwenden Sie bestimmte Felder auf Bucket-Ebene (z. B. Standortfilter wie
location == "us-central1"oder Namensübereinstimmungen wiename.startsWith("prod-")), um den Abfrageumfang einzugrenzen und dieses Limit einzuhalten. - Zeichenbeschränkung: Bucket- und Objektfilter sind jeweils auf maximal 150 Zeichen beschränkt.
Beispiele
Die folgenden Beispiele zeigen gängige kombinierte Filter, mit denen Sie Ressourcen projektweit filtern können. Geben Sie die Filter-Snippets direkt als Flags im Befehl gcloud storage batch-operations jobs create an:
Auf bestimmte Buckets abzielen: Wenden Sie Aktionen auf Objekte in bestimmten Buckets an:
--bucket-filters="name in ['bucket-1', 'bucket-2']"
Speicherklasse und Bucket-Standort prüfen: Wenden Sie Aktionen auf Objekte in der Speicherklasse „Standard Storage“ an
US-Standorten an:--bucket-filters="location.startsWith('us')"
--object-filters="storageClass == 'STANDARD'"Nach Aufbewahrung für vorläufiges Löschen filtern: Wenden Sie Aktionen auf Objekte in Buckets an, für die das vorläufige Löschen mindestens 7 Tage lang aktiviert ist:
--bucket-filters="softDeletePolicy.retentionDurationSeconds >= 604800"
Nach Objektgröße und Erweiterungen filtern: PDF-Objekte finden, die größer als 5 KiB sind:
--object-filters="size >= 5120 && name.endsWith('.pdf')"Benutzerdefinierte Kontextschlüssel prüfen: Wenden Sie Aktionen auf Objekte an, die einen benutzerdefinierten Kontextschlüssel
envhaben:--object-filters="contexts.exists(context, context.key == 'env')"
Benutzerdefinierte Kontext-Schlüssel/Wert-Paare abgleichen: Wenden Sie Aktionen auf Objekte an, die einen benutzerdefinierten Kontextschlüssel
envmit dem Wertprodhaben:--object-filters="contexts.exists(context, context.key == 'env' && context.value == 'prod')"
Benutzerdefinierte Kontextwerte nach Präfix und Suffix abgleichen: Wenden Sie Aktionen auf Objekte mit einem benutzerdefinierten Kontextwert an, der mit dem Präfix
prodbeginnt und mit dem Suffix.txtendet:--object-filters="contexts.exists(context, context.value.startsWith('prod') && context.value.endsWith('.txt'))"Fehlende Kontextschlüssel identifizieren: Wenden Sie Aktionen auf Objekte an, die keinen benutzerdefinierten Kontextschlüssel
envhaben:--object-filters="!contexts.exists(context, context.key == 'env')"