Freigeben über


Ereignisfilter für Abonnements für Azure Event Grid-Namespacethemen

In diesem Artikel werden verschiedene Möglichkeiten zum Angeben von Filtern für Ereignisabonnements für Namespacethemen beschrieben. Mit den Filtern können Sie nur eine Teilmenge von Ereignissen senden, die Publisher an das Ereignisraster an den Zielendpunkt sendet. Beim Erstellen eines Ereignisabonnements haben Sie drei Optionen zum Filtern:

  • Ereignistypen
  • Betreff beginnt mit oder endet mit
  • Erweiterte Felder und Operatoren

Ereignistypfilterung

Standardmäßig werden alle Ereignistypen für die Ereignisquelle an den Endpunkt gesendet. Sie können festlegen, dass nur bestimmte Ereignistypen an Ihren Endpunkt gesendet werden sollen. Sie können beispielsweise über Aktualisierungen ihrer Ressourcen benachrichtigt werden, aber nicht für andere Vorgänge wie Löschungen benachrichtigt werden. Filtern Sie in diesem Fall nach dem Microsoft.Resources.ResourceWriteSuccess Ereignistyp. Stellen Sie ein Array mit den Ereignistypen bereit, oder geben Sie an All , dass alle Ereignistypen für die Ereignisquelle abgerufen werden sollen.

Die JSON-Syntax zum Filtern nach Ereignistyp lautet:

"filter": {
  "includedEventTypes": [
    "Microsoft.Resources.ResourceWriteFailure",
    "Microsoft.Resources.ResourceWriteSuccess"
  ]
}

Betrefffilterung

Geben Sie für einfache Filterung nach Betreff einen Anfangs- oder Endwert für den Betreff an. Sie können z. B. angeben, dass der Betreff endet .txt , um nur Ereignisse im Zusammenhang mit dem Hochladen einer Textdatei in ein Speicherkonto abzurufen. Oder Sie können den Betreff /blobServices/default/containers/testcontainer filtern, um alle Ereignisse für diesen Container abzurufen, aber nicht andere Container im Speicherkonto.

Wenn Sie Ereignisse in benutzerdefinierten Themen veröffentlichen, erstellen Sie Themen für Ihre Ereignisse, die es Abonnenten erleichtern, zu wissen, ob sie an dem Ereignis interessiert sind. Abonnenten verwenden die Subject-Eigenschaft zum Filtern und Weiterleiten von Ereignissen. Erwägen Sie das Hinzufügen des Pfads für den Ort, an dem das Ereignis stattgefunden hat, damit Abonnenten nach Segmenten dieses Pfads filtern können. Mit dem Pfad können Abonnenten Ereignisse schmal oder allgemein filtern. Wenn Sie einen drei Segmentpfad wie /A/B/C im Betreff angeben, können Abonnenten nach dem ersten Segment /A filtern, um einen breiten Satz von Ereignissen zu erhalten. Diese Abonnenten erhalten Ereignisse mit Themen wie /A/B/C oder /A/D/E. Andere Abonnenten können filtern, um /A/B einen schmaleren Satz von Ereignissen zu erhalten.

Beispiele (Blob Storage-Ereignisse)

Blob-Ereignisse können nach dem Ereignistyp, dem Containernamen oder dem Namen des Objekts gefiltert werden, das erstellt oder gelöscht wurde.

Der Betreff von Blob-Speicherereignissen verwendet das Format:

/blobServices/default/containers/<containername>/blobs/<blobname>

Um alle Ereignisse für ein Speicherkonto abzugleichen, können Sie die Betrefffilter leer lassen.

Um Ereignisse aus Blobs abzugleichen, die in einer Gruppe von Containern erstellt wurden, die ein Präfix verwenden, verwenden Sie einen subjectBeginsWith Filter wie:

/blobServices/default/containers/containerprefix

Um Ereignisse aus blobs abzugleichen, die in einem bestimmten Container erstellt wurden, verwenden Sie einen subjectBeginsWith Filter wie:

/blobServices/default/containers/containername/

Verwenden Sie zum Abgleichen von Ereignissen aus Blobs, die in bestimmten Containern erstellt wurden, ein Blobnamenpräfix, wie subjectBeginsWith folgt:

/blobServices/default/containers/containername/blobs/blobprefix

Um Ereignisse aus Blobs abzugleichen, die in einem bestimmten Unterordner eines Containers erstellt werden, verwenden Sie einen subjectBeginsWith Filter wie:

/blobServices/default/containers/{containername}/blobs/{subfolder}/

Verwenden Sie einen subjectEndsWith Filter wie ".log" oder ".jpg", um Ereignisse von Blobs abzugleichen, die in einem bestimmten Container erstellt wurden.

Erweiterte Filterung

Verwenden Sie die erweiterte Filteroption, um nach Werten in den Datenfeldern zu filtern und den Vergleichsoperator anzugeben. In erweiterter Filterung geben Sie Folgendes an:

  • Operatortyp – Der Typ des Vergleichs.
  • key – Das Feld in den Ereignisdaten, die Sie zum Filtern verwenden. Dabei kann es sich um eine Zahl, einen booleschen Wert, eine Zeichenfolge oder ein Array handeln.
  • values - The value or values to compare to the key.

Key

Schlüssel ist das Feld in den Ereignisdaten, die Sie zum Filtern verwenden. Dies kann eine der folgenden Typen sein:

  • Number

  • Boolean

  • String

  • Anordnung. Sie müssen die enableAdvancedFilteringOnArrays Eigenschaft auf "true" festlegen, um dieses Feature zu verwenden.

    "filter":
    {
        "subjectBeginsWith": "/blobServices/default/containers/mycontainer/blobs/log",
        "subjectEndsWith": ".jpg",
        "enableAdvancedFilteringOnArrays": true
    }
    

Verwenden Sie für Ereignisse im Cloud-Ereignisschema die folgenden Werte für den Schlüssel: , , source, eventtype, , eventtypeversionoder Ereignisdaten (z. Bdata.key1. eventid).

Wenn Sie die Standardebene "Event Grid" verwenden, verwenden Sie für Ereignisse im Ereignisrasterschema die folgenden Werte für den Schlüssel: ID, , , Topic, Subject, EventType, DataVersionoder Ereignisdaten (z. B data.key1. ). Verwenden Sie für ein benutzerdefiniertes Eingabeschema die Ereignisdatenfelder (z. B data.key1. ). Verwenden Sie die . Schreibweise (Punkt), um auf Felder im Datenabschnitt zuzugreifen. Beispiel: , data.siteNamedata.appEventTypeDetail.action um auf das folgende Beispielereignis zuzugreifen siteName oder action für das folgende Beispielereignis.

	"data": {
		"appEventTypeDetail": {
			"action": "Started"
		},
		"siteName": "<site-name>",
		"clientRequestId": "None",
		"correlationRequestId": "None",
		"requestId": "292f499d-04ee-4066-994d-c2df57b99198",
		"address": "None",
		"verb": "None"
	},

Hinweis

Das Ereignisraster unterstützt das Filtern nach einem Array von Objekten nicht. Er lässt nur "String", "Boolean", "Numbers" und "Array" desselben Typs zu (z. B. ein ganzzahliges Array oder ein Zeichenfolgenarray).

Werte

Die Werte können sein: Zahl, Zeichenfolge, boolescher Wert oder Array

Betriebspersonal

Die verfügbaren Operatoren für Zahlen sind:

NumberIn

Der Operator NumberIn wertet "true" aus, wenn der Schlüsselwert einer der angegebenen Filterwerte ist. Im folgenden Beispiel wird überprüft, ob der Wert des counter Attributs im data Abschnitt 5 oder 1 ist.

"advancedFilters": [{
    "operatorType": "NumberIn",
    "key": "data.counter",
    "values": [
        5,
        1
    ]
}]

Wenn der Schlüssel ein Array ist, werden alle Werte im Array anhand des Arrays von Filterwerten überprüft. Dies ist der Pseudocode mit dem Schlüssel: [v1, v2, v3] und der Filter: [a, b, c]. Alle Schlüsselwerte mit Datentypen, die nicht mit dem Datentyp des Filters übereinstimmen, werden ignoriert.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF filter == key
            MATCH

NumberNotIn

"NumberNotIn" wird als "true" ausgewertet, wenn der Schlüsselwertkeine der angegebenen Filterwerte ist. Im folgenden Beispiel wird überprüft, ob der Wert des counter Attributs im data Abschnitt nicht 41 und 0 ist.

"advancedFilters": [{
    "operatorType": "NumberNotIn",
    "key": "data.counter",
    "values": [
        41,
        0
    ]
}]

Wenn der Schlüssel ein Array ist, werden alle Werte im Array anhand des Arrays von Filterwerten überprüft. Dies ist der Pseudocode mit dem Schlüssel: [v1, v2, v3] und der Filter: [a, b, c]. Alle Schlüsselwerte mit Datentypen, die nicht mit dem Datentyp des Filters übereinstimmen, werden ignoriert.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF filter == key
            FAIL_MATCH

NumberLessThan

Der Operator NumberLessThan wertet "true" aus, wenn der Schlüsselwertkleiner als der angegebene Filterwert ist. Im folgenden Beispiel wird überprüft, ob der Wert des counter Attributs im data Abschnitt kleiner als 100 ist.

"advancedFilters": [{
    "operatorType": "NumberLessThan",
    "key": "data.counter",
    "value": 100
}]

Wenn der Schlüssel ein Array ist, werden alle Werte im Array anhand des Filterwerts überprüft. Hier sehen Sie den Pseudocode mit dem Schlüssel: [v1, v2, v3]. Alle Schlüsselwerte mit Datentypen, die nicht mit dem Datentyp des Filters übereinstimmen, werden ignoriert.

FOR_EACH key IN (v1, v2, v3)
    IF key < filter
        MATCH

NumberGreaterThan

Der Operator NumberGreaterThan wertet "true" aus, wenn der Schlüsselwertgrößer als der angegebene Filterwert ist. Im folgenden Beispiel wird überprüft, ob der Wert des counter Attributs im data Abschnitt größer als 20 ist.

"advancedFilters": [{
    "operatorType": "NumberGreaterThan",
    "key": "data.counter",
    "value": 20
}]

Wenn der Schlüssel ein Array ist, werden alle Werte im Array anhand des Filterwerts überprüft. Hier sehen Sie den Pseudocode mit dem Schlüssel: [v1, v2, v3]. Alle Schlüsselwerte mit Datentypen, die nicht mit dem Datentyp des Filters übereinstimmen, werden ignoriert.

FOR_EACH key IN (v1, v2, v3)
    IF key > filter
        MATCH

NumberLessThanOrEquals

Der Operator NumberLessThanOrEquals wertet "true" aus, wenn der Schlüsselwertkleiner oder gleich dem angegebenen Filterwert ist. Im folgenden Beispiel wird überprüft, ob der Wert des counter Attributs im data Abschnitt kleiner oder gleich 100 ist.

"advancedFilters": [{
    "operatorType": "NumberLessThanOrEquals",
    "key": "data.counter",
    "value": 100
}]

Wenn der Schlüssel ein Array ist, werden alle Werte im Array anhand des Filterwerts überprüft. Hier sehen Sie den Pseudocode mit dem Schlüssel: [v1, v2, v3]. Alle Schlüsselwerte mit Datentypen, die nicht mit dem Datentyp des Filters übereinstimmen, werden ignoriert.

FOR_EACH key IN (v1, v2, v3)
    IF key <= filter
        MATCH

NumberGreaterThanOrEquals

Der Operator NumberGreaterThanOrEquals wertet "true" aus, wenn der Schlüsselwertgrößer oder gleich dem angegebenen Filterwert ist. Im folgenden Beispiel wird überprüft, ob der Wert des counter Attributs im data Abschnitt größer oder gleich 30 ist.

"advancedFilters": [{
    "operatorType": "NumberGreaterThanOrEquals",
    "key": "data.counter",
    "value": 30
}]

Wenn der Schlüssel ein Array ist, werden alle Werte im Array anhand des Filterwerts überprüft. Hier sehen Sie den Pseudocode mit dem Schlüssel: [v1, v2, v3]. Alle Schlüsselwerte mit Datentypen, die nicht mit dem Datentyp des Filters übereinstimmen, werden ignoriert.

FOR_EACH key IN (v1, v2, v3)
    IF key >= filter
        MATCH

NumberInRange

Der Operator NumberInRange wertet "true" aus, wenn sich der Schlüsselwert in einem der angegebenen Filterbereiche befindet. Im folgenden Beispiel wird überprüft, ob sich der Wert des key1 Attributs im data Abschnitt in einem der beiden Bereiche befindet: 3,14159 - 999,95, 3000 - 4000.

{
    "operatorType": "NumberInRange",
    "key": "data.key1",
    "values": [[3.14159, 999.95], [3000, 4000]]
}

Die values Eigenschaft ist ein Array von Bereichen. Im vorherigen Beispiel handelt es sich um ein Array von zwei Bereichen. Hier sehen Sie ein Beispiel für ein Array mit einem Bereich, der überprüft werden soll.

Array mit einem Bereich:

{
    "operatorType": "NumberInRange",
    "key": "data.key1",
    "values": [[3000, 4000]]
}

Wenn der Schlüssel ein Array ist, werden alle Werte im Array anhand des Arrays von Filterwerten überprüft. Hier ist der Pseudocode mit dem Schlüssel: [v1, v2, v3] und der Filter: ein Array von Bereichen. In diesem Pseudocode a sind b niedrige und hohe Werte für jeden Bereich im Array vorhanden. Alle Schlüsselwerte mit Datentypen, die nicht mit dem Datentyp des Filters übereinstimmen, werden ignoriert.

FOR_EACH (a,b) IN filter.Values
    FOR_EACH key IN (v1, v2, v3)
       IF key >= a AND key <= b
           MATCH

NumberNotInRange

Der Operator NumberNotInRange wertet "true" aus, wenn sich der Schlüsselwertnicht in einem der angegebenen Filterbereiche befindet. Im folgenden Beispiel wird überprüft, ob sich der Wert des key1 Attributs im data Abschnitt in einem der beiden Bereiche befindet: 3,14159 - 999,95, 3000 - 4000. Ist dies der Fehler, gibt der Operator "false" zurück.

{
    "operatorType": "NumberNotInRange",
    "key": "data.key1",
    "values": [[3.14159, 999.95], [3000, 4000]]
}

Die values Eigenschaft ist ein Array von Bereichen. Im vorherigen Beispiel handelt es sich um ein Array von zwei Bereichen. Hier sehen Sie ein Beispiel für ein Array mit einem Bereich, der überprüft werden soll.

Array mit einem Bereich:

{
    "operatorType": "NumberNotInRange",
    "key": "data.key1",
    "values": [[3000, 4000]]
}

Wenn der Schlüssel ein Array ist, werden alle Werte im Array anhand des Arrays von Filterwerten überprüft. Hier ist der Pseudocode mit dem Schlüssel: [v1, v2, v3] und der Filter: ein Array von Bereichen. In diesem Pseudocode a sind b niedrige und hohe Werte für jeden Bereich im Array vorhanden. Alle Schlüsselwerte mit Datentypen, die nicht mit dem Datentyp des Filters übereinstimmen, werden ignoriert.

FOR_EACH (a,b) IN filter.Values
    FOR_EACH key IN (v1, v2, v3)
        IF key >= a AND key <= b
            FAIL_MATCH

Der verfügbare Operator für Booleans lautet:

BoolEquals

Der BoolEquals-Operator wertet "true" aus, wenn der Schlüsselwert der angegebene boolesche Wertfilter ist. Im folgenden Beispiel wird überprüft, ob der Wert des isEnabled Attributs im data Abschnitt lautet true.

"advancedFilters": [{
    "operatorType": "BoolEquals",
    "key": "data.isEnabled",
    "value": true
}]

Wenn der Schlüssel ein Array ist, werden alle Werte im Array anhand des booleschen Filterwerts überprüft. Hier sehen Sie den Pseudocode mit dem Schlüssel: [v1, v2, v3]. Alle Schlüsselwerte mit Datentypen, die nicht mit dem Datentyp des Filters übereinstimmen, werden ignoriert.

FOR_EACH key IN (v1, v2, v3)
    IF filter == key
        MATCH

Die verfügbaren Operatoren für Zeichenfolgen sind:

StringContains

"StringContains" wird als "true" ausgewertet, wenn der Schlüsselwert einen der angegebenen Filterwerte (als Teilzeichenfolgen) enthält. Im folgenden Beispiel wird überprüft, ob der Wert des key1 Attributs im data Abschnitt eine der angegebenen Teilzeichenfolgen enthält: microsoft oder azure. Beispielsweise azure data factory hat azure es darin.

"advancedFilters": [{
    "operatorType": "StringContains",
    "key": "data.key1",
    "values": [
        "microsoft", 
        "azure"
    ]
}]

Wenn der Schlüssel ein Array ist, werden alle Werte im Array anhand des Arrays von Filterwerten überprüft. Dies ist der Pseudocode mit dem Schlüssel: [v1, v2, v3] und der Filter: [a,b,c]. Alle Schlüsselwerte mit Datentypen, die nicht mit dem Datentyp des Filters übereinstimmen, werden ignoriert.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key CONTAINS filter
            MATCH

StringNotContains

Der Operator StringNotContains wertet auf "true" aus, wenn der Schlüssel nicht die angegebenen Filterwerte als Teilzeichenfolgen enthält. Wenn der Schlüssel einen der angegebenen Werte als Teilzeichenfolge enthält, wertet der Operator "false" aus. Im folgenden Beispiel gibt der Operator "true" nur dann zurück, wenn der Wert des key1 Attributs im data Abschnitt nicht und contosofabrikam als Teilzeichenfolgen vorhanden ist.

"advancedFilters": [{
    "operatorType": "StringNotContains",
    "key": "data.key1",
    "values": [
        "contoso", 
        "fabrikam"
    ]
}]

Wenn der Schlüssel ein Array ist, werden alle Werte im Array anhand des Arrays von Filterwerten überprüft. Dies ist der Pseudocode mit dem Schlüssel: [v1, v2, v3] und der Filter: [a,b,c]. Alle Schlüsselwerte mit Datentypen, die nicht mit dem Datentyp des Filters übereinstimmen, werden ignoriert.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key CONTAINS filter
            FAIL_MATCH

Informationen zur aktuellen Einschränkung dieses Operators finden Sie im Abschnitt "Einschränkungen ".

StringBeginsWith

Der Operator StringBeginsWith wertet "true" aus, wenn der Schlüsselwert mit einem der angegebenen Filterwertebeginnt. Im folgenden Beispiel wird überprüft, ob der Wert des key1 Attributs im data Abschnitt mit event oder messagebeginnt. Beginnt z. B event hubs . mit event.

"advancedFilters": [{
    "operatorType": "StringBeginsWith",
    "key": "data.key1",
    "values": [
        "event", 
        "message"
    ]
}]

Wenn der Schlüssel ein Array ist, werden alle Werte im Array anhand des Arrays von Filterwerten überprüft. Dies ist der Pseudocode mit dem Schlüssel: [v1, v2, v3] und der Filter: [a,b,c]. Alle Schlüsselwerte mit Datentypen, die nicht mit dem Datentyp des Filters übereinstimmen, werden ignoriert.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key BEGINS_WITH filter
            MATCH

StringNotBeginsWith

Der Operator StringNotBeginsWith wertet "true" aus, wenn der Schlüsselwertnicht mit einem der angegebenen Filterwerte beginnt. Im folgenden Beispiel wird überprüft, ob der Wert des key1 Attributs im data Abschnitt nicht mit event oder messagebeginnt.

"advancedFilters": [{
    "operatorType": "StringNotBeginsWith",
    "key": "data.key1",
    "values": [
        "event", 
        "message"
    ]
}]

Wenn der Schlüssel ein Array ist, werden alle Werte im Array anhand des Arrays von Filterwerten überprüft. Dies ist der Pseudocode mit dem Schlüssel: [v1, v2, v3] und der Filter: [a,b,c]. Alle Schlüsselwerte mit Datentypen, die nicht mit dem Datentyp des Filters übereinstimmen, werden ignoriert.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key BEGINS_WITH filter
            FAIL_MATCH

StringEndsWith

Der Operator StringEndsWith wertet "true" aus, wenn der Schlüsselwert mit einem der angegebenen Filterwerteendet. Im folgenden Beispiel wird überprüft, ob der Wert des key1 Attributs im data Abschnitt mit jpg oder jpeg oder pngendet. Endet beispielsweise eventgrid.png mit png.

"advancedFilters": [{
    "operatorType": "StringEndsWith",
    "key": "data.key1",
    "values": [
        "jpg", 
        "jpeg", 
        "png"
    ]
}]

Wenn der Schlüssel ein Array ist, werden alle Werte im Array anhand des Arrays von Filterwerten überprüft. Dies ist der Pseudocode mit dem Schlüssel: [v1, v2, v3] und der Filter: [a,b,c]. Alle Schlüsselwerte mit Datentypen, die nicht mit dem Datentyp des Filters übereinstimmen, werden ignoriert.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key ENDS_WITH filter
            MATCH

StringNotEndsWith

Der Operator StringNotEndsWith wertet "true" aus, wenn der Schlüsselwertnicht mit einem der angegebenen Filterwerte endet. Im folgenden Beispiel wird überprüft, ob der Wert des key1 Attributs im data Abschnitt nicht mit jpg oder jpeg oder pngendet.

"advancedFilters": [{
    "operatorType": "StringNotEndsWith",
    "key": "data.key1",
    "values": [
        "jpg", 
        "jpeg", 
        "png"
    ]
}]

Wenn der Schlüssel ein Array ist, werden alle Werte im Array anhand des Arrays von Filterwerten überprüft. Dies ist der Pseudocode mit dem Schlüssel: [v1, v2, v3] und der Filter: [a,b,c]. Alle Schlüsselwerte mit Datentypen, die nicht mit dem Datentyp des Filters übereinstimmen, werden ignoriert.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF key ENDS_WITH filter
            FAIL_MATCH

StringIn

Der StringIn-Operator überprüft, ob der Schlüsselwert genau mit einem der angegebenen Filterwerteübereinstimmt. Im folgenden Beispiel wird überprüft, ob der Wert des Attributs im Abschnitt oder factoryfabrikamcontoso .datakey1

"advancedFilters": [{
    "operatorType": "StringIn",
    "key": "data.key1",
    "values": [
        "contoso", 
        "fabrikam", 
        "factory"
    ]
}]

Wenn der Schlüssel ein Array ist, werden alle Werte im Array anhand des Arrays von Filterwerten überprüft. Dies ist der Pseudocode mit dem Schlüssel: [v1, v2, v3] und der Filter: [a,b,c]. Alle Schlüsselwerte mit Datentypen, die nicht mit dem Datentyp des Filters übereinstimmen, werden ignoriert.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF filter == key
            MATCH

StringNotIn

Der StringNotIn-Operator überprüft, ob der Schlüsselwertkeinem der angegebenen Filterwerte entspricht. Im folgenden Beispiel wird überprüft, ob der Wert des key1 Attributs im data Abschnitt nicht und bridge.aws

"advancedFilters": [{
    "operatorType": "StringNotIn",
    "key": "data.key1",
    "values": [
        "aws", 
        "bridge"
    ]
}]

Wenn der Schlüssel ein Array ist, werden alle Werte im Array anhand des Arrays von Filterwerten überprüft. Dies ist der Pseudocode mit dem Schlüssel: [v1, v2, v3] und der Filter: [a,b,c]. Alle Schlüsselwerte mit Datentypen, die nicht mit dem Datentyp des Filters übereinstimmen, werden ignoriert.

FOR_EACH filter IN (a, b, c)
    FOR_EACH key IN (v1, v2, v3)
        IF filter == key
            FAIL_MATCH

Bei allen Zeichenfolgenvergleichen wird die Groß-/Kleinschreibung nicht beachtet.

Hinweis

Wenn der JSON-Code des Ereignisses nicht den erweiterten Filterschlüssel enthält, wird der Filter als nicht übereinstimmend für die folgenden Operatoren ausgewertet: NumberGreaterThan, NumberGreaterThanOrEquals, NumberLessThanOrEquals, NumberIn, BoolEquals, StringContains, StringNotContains, StringBeginsWith, StringNotBeginsWith, StringNotBeginsWith, StringEndsWith, StringNotEndsWith, StringIn.

Der Filter wird für die folgenden Operatoren ausgewertet: NumberNotIn, StringNotIn.

IsNullOrUndefined

Der IsNullOrUndefined-Operator wertet auf "true" aus, wenn der Wert des Schlüssels NULL oder nicht definiert ist.

{
    "operatorType": "IsNullOrUndefined",
    "key": "data.key1"
}

Im folgenden Beispiel fehlt "key1", sodass der Operator "true" auswertet.

{ 
    "data": 
    { 
        "key2": 5 
    } 
}

Im folgenden Beispiel wird "key1" auf NULL festgelegt, sodass der Operator "true" auswertet.

{
    "data": 
    { 
        "key1": null
    }
}

Wenn key1 einen anderen Wert in diesen Beispielen aufweist, würde der Operator als "false" ausgewertet.

IsNotNull

Der IsNotNull-Operator wertet auf "true" aus, wenn der Wert des Schlüssels nicht NULL oder nicht definiert ist.

{
    "operatorType": "IsNotNull",
    "key": "data.key1"
}

ODER und UND

Wenn Sie einen einzelnen Filter mit mehreren Werten angeben, wird ein OR-Vorgang ausgeführt, sodass der Wert des Schlüsselfelds einer dieser Werte sein muss. Ein Beispiel:

"advancedFilters": [
    {
        "operatorType": "StringContains",
        "key": "Subject",
        "values": [
            "/providers/microsoft.devtestlab/",
            "/providers/Microsoft.Compute/virtualMachines/"
        ]
    }
]

Wenn Sie mehrere verschiedene Filter angeben, wird ein AND-Vorgang ausgeführt, sodass jede Filterbedingung erfüllt sein muss. Ein Beispiel:

"advancedFilters": [
    {
        "operatorType": "StringContains",
        "key": "Subject",
        "values": [
            "/providers/microsoft.devtestlab/"
        ]
    },
    {
        "operatorType": "StringContains",
        "key": "Subject",
        "values": [
            "/providers/Microsoft.Compute/virtualMachines/"
        ]
    }
]

CloudEvents

Verwenden Sie für Ereignisse im CloudEvents-Schema die folgenden Werte für den Schlüssel: , , source, , type, oder dataschemaEreignisdaten (z. Bdata.key1. id).

Sie können auch Erweiterungskontextattribute in CloudEvents 1.0 verwenden. Im folgenden Beispiel comexampleextension1 und comexampleothervalue erweiterungskontextattribute.

{
    "specversion" : "1.0",
    "type" : "com.example.someevent",
    "source" : "/mycontext",
    "id" : "C234-1234-1234",
    "time" : "2018-04-05T17:31:00Z",
    "subject": null,
    "comexampleextension1" : "value",
    "comexampleothervalue" : 5,
    "datacontenttype" : "application/json",
    "data" : {
        "appinfoA" : "abc",
        "appinfoB" : 123,
        "appinfoC" : true
    }
}

Hier ist ein Beispiel für die Verwendung eines Erweiterungskontextattributes in einem Filter.

"advancedFilters": [{
    "operatorType": "StringBeginsWith",
    "key": "comexampleothervalue",
    "values": [
        "5", 
        "1"
    ]
}]

Einschränkungen

Die erweiterte Filterung hat die folgenden Einschränkungen:

  • 25 erweiterte Filter und 25 Filterwerte für alle Filter pro Event Grid-Abonnement
  • 512 Zeichen pro Zeichenfolgenwert
  • Tasten mit . (Punkt) -Zeichen in ihnen. Beispiel: http://schemas.microsoft.com/claims/authnclassreference oder john.doe@contoso.com. Derzeit gibt es keine Unterstützung für Escapezeichen in Tasten.

Derselbe Schlüssel kann in mehreren Filtern verwendet werden.

Nächste Schritte