Comprendre le filtrage d’événements pour les abonnements Event GridUnderstand event filtering for Event Grid subscriptions

Cet article décrit les différentes façons de filtrer les événements qui sont envoyés à votre point de terminaison.This article describes the different ways to filter which events are sent to your endpoint. Quand vous créez un abonnement à un événement, trois options de filtrage s’offrent à vous :When creating an event subscription, you have three options for filtering:

  • Types d’événementsEvent types
  • Objet commençant ou se terminant parSubject begins with or ends with
  • Opérateurs et champs avancésAdvanced fields and operators

Filtrage par type d’événementEvent type filtering

Par défaut, tous les types d’événements pour la source de l’événement sont envoyés au point de terminaison.By default, all event types for the event source are sent to the endpoint. Vous pouvez décider d’envoyer uniquement certains types d’événements à votre point de terminaison.You can decide to send only certain event types to your endpoint. Par exemple, vous pouvez être notifié des mises à jour de vos ressources, mais ne pas être notifié d’autres opérations comme les suppressions.For example, you can get notified of updates to your resources, but not notified for other operations like deletions. Dans ce cas, effectuez le filtrage par type d’événement Microsoft.Resources.ResourceWriteSuccess.In that case, filter by the Microsoft.Resources.ResourceWriteSuccess event type. Fournissez un tableau avec les types d’événements, ou spécifiez All pour obtenir tous les types d’événements de la source de l’événement.Provide an array with the event types, or specify All to get all event types for the event source.

La syntaxe JSON pour le filtrage par type d’événement est :The JSON syntax for filtering by event type is:

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

Filtrage par objetSubject filtering

Pour le filtrage simple par objet, spécifiez une valeur de départ ou de fin pour l’objet.For simple filtering by subject, specify a starting or ending value for the subject. Par exemple, vous pouvez spécifier que l’objet se termine par .txt pour obtenir uniquement les événements liés au chargement d’un fichier texte sur le compte de stockage.For example, you can specify the subject ends with .txt to only get events related to uploading a text file to storage account. Ou vous pouvez filtrer sur l’objet commençant par /blobServices/default/containers/testcontainer pour obtenir tous les événements pour ce conteneur, mais pas pour d’autres conteneurs du compte de stockage.Or, you can filter the subject begins with /blobServices/default/containers/testcontainer to get all events for that container but not other containers in the storage account.

Lorsque vous publiez des événements dans des rubriques personnalisées, créez des objets pour vos événements permettant aux abonnés de savoir facilement si l’événement les intéresse.When publishing events to custom topics, create subjects for your events that make it easy for subscribers to know whether they're interested in the event. Les abonnés utilisent la propriété d’objet pour filtrer et router des événements.Subscribers use the subject property to filter and route events. Envisagez d’ajouter le chemin à l’origine de l’événement, de sorte que les abonnés puissent filtrer sur des segments de ce chemin.Consider adding the path for where the event happened, so subscribers can filter by segments of that path. Le chemin d’accès permet aux abonnés de filtrer les événements avec précision ou à grande échelle.The path enables subscribers to narrowly or broadly filter events. Si vous fournissez un chemin de trois segments comme /A/B/C dans l’objet, les abonnés peuvent filtrer sur le premier segment /A pour obtenir un vaste ensemble d’événements.If you provide a three segment path like /A/B/C in the subject, subscribers can filter by the first segment /A to get a broad set of events. Ces abonnés obtiennent des événements avec des objets tels que /A/B/C ou /A/D/E.Those subscribers get events with subjects like /A/B/C or /A/D/E. Les autres abonnés peuvent filtrer par /A/B pour obtenir un ensemble plus restreint d’événements.Other subscribers can filter by /A/B to get a narrower set of events.

La syntaxe JSON pour le filtrage par objet est :The JSON syntax for filtering by subject is:

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

Filtrage avancéAdvanced filtering

Pour filtrer sur des valeurs dans les champs de données et spécifier l’opérateur de comparaison, utilisez l’option de filtrage avancé.To filter by values in the data fields and specify the comparison operator, use the advanced filtering option. Dans le filtrage avancé, vous spécifiez les éléments suivants :In advanced filtering, you specify the:

  • type d'opérateur : type de comparaison.operator type - The type of comparison.
  • clé : champ des données d’événement que vous utilisez pour le filtrage.key - The field in the event data that you're using for filtering. Il peut s’agir d’un nombre, d’une valeur booléenne, d’une chaîne ou d’un tableau.It can be a number, boolean, string, or an array.
  • valeurs : valeur ou valeurs à comparer à la clé.values - The value or values to compare to the key.

CléKey

La clé est le champ des données d’événement que vous utilisez pour le filtrage.Key is the field in the event data that you're using for filtering. Les types possibles sont les suivants :It can be one of the following types:

  • NumberNumber

  • BooleanBoolean

  • StringString

  • Array.Array. Vous devez définir la propriété enableAdvancedFilteringOnArrays sur true pour utiliser cette fonctionnalité.You need to set the enableAdvancedFilteringOnArrays property to true to use this feature. Actuellement, le portail Azure ne prend pas en charge l’activation de cette fonctionnalité.Currently, the Azure portal doesn't support enabling this feature.

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

Pour les événements dans le schéma Event Grid, utilisez les valeurs suivantes pour la clé : ID, Topic, Subject, EventType, DataVersion ou événement de donnée (comme data.key1).For events in the Event Grid schema, use the following values for the key: ID, Topic, Subject, EventType, DataVersion, or event data (like data.key1).

Pour les événements dans le schéma des événements cloud, utilisez les valeurs suivantes pour la clé : eventid, source, eventtype, eventtypeversion ou événement de données (comme data.key1).For events in Cloud Events schema, use the following values for the key: eventid, source, eventtype, eventtypeversion, or event data (like data.key1).

Pour le schéma d’entrée personnalisé, utilisez les champs de données d’événement (comme data.key1).For custom input schema, use the event data fields (like data.key1). Pour accéder aux champs de la section de données, utilisez la notation . (point).To access fields in the data section, use the . (dot) notation. Par exemple, data.sitename, data.appEventTypeDetail.action pour accéder à sitename ou action pour l’exemple d’événement suivant.For example, data.sitename, data.appEventTypeDetail.action to access sitename or action for the following sample event.

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

ValeursValues

Les valeurs peuvent être : nombre, chaîne, booléen ou tableauThe values can be: number, string, boolean, or array

OpérateursOperators

Les opérateurs disponibles pour les nombres sont les suivants :The available operators for numbers are:

NumberInNumberIn

L’opérateur NumberIn prend la valeur true si la valeur de clé est l’une des valeurs de filtre spécifiées.The NumberIn operator evaluates to true if the key value is one of the specified filter values. Dans l’exemple suivant, il vérifie si la valeur de l'attribut counter dans la section data est 5 ou 1.In the following example, it checks whether the value of the counter attribute in the data section is 5 or 1.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport au tableau de valeurs de filtre.If the key is an array, all the values in the array are checked against the array of filter values. Voici le pseudo-code avec la clé : [v1, v2, v3] et le filtre : [a, b, c].Here's the pseudo code with the key: [v1, v2, v3] and the filter: [a, b, c]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.Any key values with data types that don’t match the filter’s data type are ignored.

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

NumberNotInNumberNotIn

L’opérateur NumberNotIn prend la valeur true si la valeur de clé n’est pas l’une des valeurs de filere spécifiées.The NumberNotIn evaluates to true if the key value is not any of the specified filter values. Dans l’exemple suivant, il vérifie si la valeur de l'attribut counter dans la section data n’est pas 41 ou 0.In the following example, it checks whether the value of the counter attribute in the data section isn't 41 and 0.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport au tableau de valeurs de filtre.If the key is an array, all the values in the array are checked against the array of filter values. Voici le pseudo-code avec la clé : [v1, v2, v3] et le filtre : [a, b, c].Here's the pseudo code with the key: [v1, v2, v3] and the filter: [a, b, c]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.Any key values with data types that don’t match the filter’s data type are ignored.

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

NumberLessThanNumberLessThan

L’opérateur NumberLessThan prend la valeur true si la valeur de clé est inférieure à la valeur de filtre spécifiée.The NumberLessThan operator evaluates to true if the key value is less than the specified filter value. Dans l’exemple suivant, il vérifie si la valeur de l'attribut counter dans la section data est inférieure à 100.In the following example, it checks whether the value of the counter attribute in the data section is less than 100.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport à la valeur de filtre.If the key is an array, all the values in the array are checked against the filter value. Voici le pseudo-code avec la clé : [v1, v2, v3].Here's the pseudo code with the key: [v1, v2, v3]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.Any key values with data types that don’t match the filter’s data type are ignored.

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

NumberGreaterThanNumberGreaterThan

L’opérateur NumberGreaterThan prend la valeur true si la valeur de clé est supérieure à la valeur de filtre spécifiée.The NumberGreaterThan operator evaluates to true if the key value is greater than the specified filter value. Dans l’exemple suivant, il vérifie si la valeur de l'attribut counter dans la section data est supérieure à 20.In the following example, it checks whether the value of the counter attribute in the data section is greater than 20.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport à la valeur de filtre.If the key is an array, all the values in the array are checked against the filter value. Voici le pseudo-code avec la clé : [v1, v2, v3].Here's the pseudo code with the key: [v1, v2, v3]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.Any key values with data types that don’t match the filter’s data type are ignored.

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

NumberLessThanOrEqualsNumberLessThanOrEquals

L’opérateur NumberLessThanOrEquals prend la valeur true si la valeur de clé est inférieure ou égale à la valeur de filtre spécifiée.The NumberLessThanOrEquals operator evaluates to true if the key value is less than or equal to the specified filter value. Dans l’exemple suivant, il vérifie si la valeur de l'attribut counter dans la section data est inférieure ou égale à 100.In the following example, it checks whether the value of the counter attribute in the data section is less than or equal to 100.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport à la valeur de filtre.If the key is an array, all the values in the array are checked against the filter value. Voici le pseudo-code avec la clé : [v1, v2, v3].Here's the pseudo code with the key: [v1, v2, v3]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.Any key values with data types that don’t match the filter’s data type are ignored.

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

NumberGreaterThanOrEqualsNumberGreaterThanOrEquals

L’opérateur NumberGreaterThanOrEquals prend la valeur true si la valeur de clé est supérieure ou égale à la valeur de filtre spécifiée.The NumberGreaterThanOrEquals operator evaluates to true if the key value is greater than or equal to the specified filter value. Dans l’exemple suivant, il vérifie si la valeur de l'attribut counter dans la section data est supérieure ou égale à 30.In the following example, it checks whether the value of the counter attribute in the data section is greater than or equal to 30.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport à la valeur de filtre.If the key is an array, all the values in the array are checked against the filter value. Voici le pseudo-code avec la clé : [v1, v2, v3].Here's the pseudo code with the key: [v1, v2, v3]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.Any key values with data types that don’t match the filter’s data type are ignored.

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

NumberInRangeNumberInRange

L’opérateur NumberInRange prend la valeur true si la valeur de clé est dans l’une des plages de filtres spécifiées.The NumberInRange operator evaluates to true if the key value is in one of the specified filter ranges. Dans l’exemple suivant, il vérifie si la valeur de l'attribut key1 dans la section data est dans l’une de ces deux plages : 3.14159 - 999.95, 3000 - 4000.In the following example, it checks whether the value of the key1 attribute in the data section is in one of the two ranges: 3.14159 - 999.95, 3000 - 4000.

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

La propriété values est un tableau de plages.The values property is an array of ranges. Dans l’exemple précédent, il s’agit d’un tableau de deux plages.In the previous example, it's an array of two ranges. Voici un exemple de tableau avec une plage à vérifier.Here's an example of an array with one range to check.

Tableau avec une plage :Array with one range:

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport au tableau de valeurs de filtre.If the key is an array, all the values in the array are checked against the array of filter values. Voici le pseudo-code avec la clé : [v1, v2, v3] et le filtre : un tableau de plages.Here's the pseudo code with the key: [v1, v2, v3] and the filter: an array of ranges. Dans ce pseudo-code, a et b sont des valeurs basses et élevées de chaque plage du tableau.In this pseudo code, a and b are low and high values of each range in the array. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.Any key values with data types that don’t match the filter’s data type are ignored.

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

NumberNotInRangeNumberNotInRange

L’opérateur NumberNotInRange prend la valeur true si la valeur de clé n’est pas dans l’une des plages de filtres spécifiées.The NumberNotInRange operator evaluates to true if the key value is not in any of the specified filter ranges. Dans l’exemple suivant, il vérifie si la valeur de l'attribut key1 dans la section data est dans l’une de ces deux plages : 3.14159 - 999.95, 3000 - 4000.In the following example, it checks whether the value of the key1 attribute in the data section is in one of the two ranges: 3.14159 - 999.95, 3000 - 4000. Si c’est le cas, l’opérateur retourne false.If it's, the operator returns false.

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

La propriété values est un tableau de plages.The values property is an array of ranges. Dans l’exemple précédent, il s’agit d’un tableau de deux plages.In the previous example, it's an array of two ranges. Voici un exemple de tableau avec une plage à vérifier.Here's an example of an array with one range to check.

Tableau avec une plage :Array with one range:

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport au tableau de valeurs de filtre.If the key is an array, all the values in the array are checked against the array of filter values. Voici le pseudo-code avec la clé : [v1, v2, v3] et le filtre : un tableau de plages.Here's the pseudo code with the key: [v1, v2, v3] and the filter: an array of ranges. Dans ce pseudo-code, a et b sont des valeurs basses et élevées de chaque plage du tableau.In this pseudo code, a and b are low and high values of each range in the array. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.Any key values with data types that don’t match the filter’s data type are ignored.

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

L’opérateur disponible pour les valeurs booléennes est :The available operator for booleans is:

BoolEqualsBoolEquals

L’opérateur BoolEquals prend la valeur true si la valeur de clé est le filtre de valeur booléenne spécifié.The BoolEquals operator evaluates to true if the key value is the specified boolean value filter. Dans l’exemple suivant, il vérifie si la valeur de l'attribut isEnabled dans la section data est true.In the following example, it checks whether the value of the isEnabled attribute in the data section is true.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport à la valeur booléenne du filtre.If the key is an array, all the values in the array are checked against the filter boolean value. Voici le pseudo-code avec la clé : [v1, v2, v3].Here's the pseudo code with the key: [v1, v2, v3]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.Any key values with data types that don’t match the filter’s data type are ignored.

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

Les opérateurs disponibles pour les chaînes sont les suivants :The available operators for strings are:

StringContainsStringContains

L’opérateur StringContains prend la valeur true si la valeur de clé contient une des valeurs de filtre spécifiées (sous forme de substrings).The StringContains evaluates to true if the key value contains any of the specified filter values (as substrings). Dans l’exemple suivant, il vérifie si la valeur de l'attribut key1 dans la section data contient l’une des substrings spécifiées : microsoft ou azure.In the following example, it checks whether the value of the key1 attribute in the data section contains one of the specified substrings: microsoft or azure. Par exemple, azure data factory contient azure.For example, azure data factory has azure in it.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport au tableau de valeurs de filtre.If the key is an array, all the values in the array are checked against the array of filter values. Voici le pseudo-code avec la clé : [v1, v2, v3] et le filtre : [a,b,c].Here's the pseudo code with the key: [v1, v2, v3] and the filter: [a,b,c]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.Any key values with data types that don’t match the filter’s data type are ignored.

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

StringNotContainsStringNotContains

L’opérateur StringNotContains prend la valeur true si la clé ne contient pas les valeurs de filtre spécifiées sous la forme de substrings.The StringNotContains operator evaluates to true if the key does not contain the specified filter values as substrings. Si la clé contient une des valeurs spécifiées sous la forme d’une substring, l’opérateur prend la valeur false.If the key contains one of the specified values as a substring, the operator evaluates to false. Dans l’exemple suivant, l’opérateur retourne true uniquement si la valeur de l'attribut key1 dans la section data ne contient pas contoso et fabrikam comme substrings.In the following example, the operator returns true only if the value of the key1 attribute in the data section doesn't have contoso and fabrikam as substrings.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport au tableau de valeurs de filtre.If the key is an array, all the values in the array are checked against the array of filter values. Voici le pseudo-code avec la clé : [v1, v2, v3] et le filtre : [a,b,c].Here's the pseudo code with the key: [v1, v2, v3] and the filter: [a,b,c]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.Any key values with data types that don’t match the filter’s data type are ignored.

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

StringBeginsWithStringBeginsWith

L’opérateur StringBeginsWith prend la valeur true si la valeur de clé commence par l’une des valeurs de filtre spécifiées.The StringBeginsWith operator evaluates to true if the key value begins with any of the specified filter values. Dans l’exemple suivant, il vérifie si la valeur de l'attribut key1 dans la section data commence par event ou grid.In the following example, it checks whether the value of the key1 attribute in the data section begins with event or grid. Par exemple, event hubs commence par event.For example, event hubs begins with event.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport au tableau de valeurs de filtre.If the key is an array, all the values in the array are checked against the array of filter values. Voici le pseudo-code avec la clé : [v1, v2, v3] et le filtre : [a,b,c].Here's the pseudo code with the key: [v1, v2, v3] and the filter: [a,b,c]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.Any key values with data types that don’t match the filter’s data type are ignored.

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

StringNotBeginsWithStringNotBeginsWith

L’opérateur StringNotBeginsWith prend la valeur true si la valeur de clé ne commence pas par l’une des valeurs de filtre spécifiées.The StringNotBeginsWith operator evaluates to true if the key value does not begin with any of the specified filter values. Dans l’exemple suivant, il vérifie si la valeur de l'attribut key1 dans la section data commence par event ou message.In the following example, it checks whether the value of the key1 attribute in the data section doesn't begin with event or message.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport au tableau de valeurs de filtre.If the key is an array, all the values in the array are checked against the array of filter values. Voici le pseudo-code avec la clé : [v1, v2, v3] et le filtre : [a,b,c].Here's the pseudo code with the key: [v1, v2, v3] and the filter: [a,b,c]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.Any key values with data types that don’t match the filter’s data type are ignored.

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

StringEndsWithStringEndsWith

L’opérateur StringEndsWith prend la valeur true si la valeur de clé se termine par l’une des valeurs de filtre spécifiées.The StringEndsWith operator evaluates to true if the key value ends with one of the specified filter values. Dans l’exemple suivant, il vérifie si la valeur de l'attribut key1 dans la section data se termine par jpg ou jpeg ou png.In the following example, it checks whether the value of the key1 attribute in the data section ends with jpg or jpeg or png. Par exemple, eventgrid.png se termine par png .For example, eventgrid.png ends with png.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport au tableau de valeurs de filtre.If the key is an array, all the values in the array are checked against the array of filter values. Voici le pseudo-code avec la clé : [v1, v2, v3] et le filtre : [a,b,c].Here's the pseudo code with the key: [v1, v2, v3] and the filter: [a,b,c]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.Any key values with data types that don’t match the filter’s data type are ignored.

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

StringNotEndsWithStringNotEndsWith

L’opérateur StringNotEndsWith prend la valeur true si la valeur de clé ne se termine pas par l’une des valeurs de filtre spécifiées.The StringNotEndsWith operator evaluates to true if the key value does not end with any of the specified filter values. Dans l’exemple suivant, il vérifie si la valeur de l'attribut key1 dans la section data ne se termine pas par jpg ou jpeg ou png.In the following example, it checks whether the value of the key1 attribute in the data section doesn't end with jpg or jpeg or png.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport au tableau de valeurs de filtre.If the key is an array, all the values in the array are checked against the array of filter values. Voici le pseudo-code avec la clé : [v1, v2, v3] et le filtre : [a,b,c].Here's the pseudo code with the key: [v1, v2, v3] and the filter: [a,b,c]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.Any key values with data types that don’t match the filter’s data type are ignored.

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

StringInStringIn

L’opérateur StringIn vérifie si la valeur de clé correspond exactement à l’une des valeurs de filtre spécifiées.The StringIn operator checks whether the key value exactly matches one of the specified filter values. Dans l’exemple suivant, il vérifie si la valeur de l'attribut key1 dans la section data est exact ou string ou matches.In the following example, it checks whether the value of the key1 attribute in the data section is exact or string or matches.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport au tableau de valeurs de filtre.If the key is an array, all the values in the array are checked against the array of filter values. Voici le pseudo-code avec la clé : [v1, v2, v3] et le filtre : [a,b,c].Here's the pseudo code with the key: [v1, v2, v3] and the filter: [a,b,c]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.Any key values with data types that don’t match the filter’s data type are ignored.

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

StringNotInStringNotIn

L’opérateur StringNotIn vérifie si la valeur de clé ne correspond à l’une des valeurs de filtre spécifiées.The StringNotIn operator checks whether the key value does not match any of the specified filter values. Dans l’exemple suivant, il vérifie si la valeur de l'attribut key1 dans la section data n’est pas aws et bridge.In the following example, it checks whether the value of the key1 attribute in the data section isn't aws and bridge.

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

Si la clé est un tableau, toutes les valeurs du tableau sont vérifiées par rapport au tableau de valeurs de filtre.If the key is an array, all the values in the array are checked against the array of filter values. Voici le pseudo-code avec la clé : [v1, v2, v3] et le filtre : [a,b,c].Here's the pseudo code with the key: [v1, v2, v3] and the filter: [a,b,c]. Les valeurs de clé avec des types de données qui ne correspondent pas au type de données du filtre sont ignorées.Any key values with data types that don’t match the filter’s data type are ignored.

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

Les comparaisons de chaînes ne respectent pas toutes la casse.All string comparisons aren't case-sensitive.

Notes

Si le JSON de l’événement ne contient pas de clé de filtre avancé, le filtre est évalué comme non correspondant pour les opérateurs suivants : NumberGreaterThan, NumberGreaterThanOrEquals, NumberLessThan, NumberLessThanOrEquals, NumberIn, BoolEquals, StringContains, StringNotContains, StringBeginsWith, StringNotBeginsWith, StringEndsWith, StringNotEndsWith, StringIn.If the event JSON doesn't contain the advanced filter key, filter is evaulated as not matched for the following operators: NumberGreaterThan, NumberGreaterThanOrEquals, NumberLessThan, NumberLessThanOrEquals, NumberIn, BoolEquals, StringContains, StringNotContains, StringBeginsWith, StringNotBeginsWith, StringEndsWith, StringNotEndsWith, StringIn.

Le filtre est évalué comme correspondant pour les opérateurs suivants : NumberNotIn, StringNotIn.The filter is evaulated as matched for the following operators:NumberNotIn, StringNotIn.

IsNullOrUndefinedIsNullOrUndefined

L’opérateur IsNullOrUndefined prend la valeur true si la valeur de la clé est NULL ou non définie.The IsNullOrUndefined operator evaluates to true if the key's value is NULL or undefined.

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

Dans l’exemple suivant, key1 est manquant, donc l’opérateur prend la valeur true.In the following example, key1 is missing, so the operator would evaluate to true.

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

Dans l’exemple suivant, key1 est défini sur null, donc l’opérateur prend la valeur true.In the following example, key1 is set to null, so the operator would evaluate to true.

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

Si key1 a une autre valeur dans ces exemples, l’opérateur prend la valeur false.if key1 has any other value in these examples, the operator would evaluate to false.

IsNotNullIsNotNull

L’opérateur IsNotNull prend la valeur true si la valeur de la clé n’est pas NULL ou n’est pas définie.The IsNotNull operator evaluates to true if the key's value isn't NULL or undefined.

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

OR et ANDOR and AND

Si vous spécifiez un seul filtre avec plusieurs valeurs, une opération OU est effectuée : la valeur du champ clé doit donc être une de ces valeurs.If you specify a single filter with multiple values, an OR operation is performed, so the value of the key field must be one of these values. Voici un exemple :Here is an example:

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

Si vous spécifiez plusieurs filtres différents, une opération ET est effectuée : chaque condition du filtre doit donc être satisfaite.If you specify multiple different filters, an AND operation is done, so each filter condition must be met. Voici un exemple :Here's an example:

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

CloudEventsCloudEvents

Pour les événements dans le schéma des événements cloud, utilisez les valeurs suivantes pour la clé : eventid, source, eventtype, eventtypeversion ou événement de données (comme data.key1).For events in the CloudEvents schema, use the following values for the key: eventid, source, eventtype, eventtypeversion, or event data (like data.key1).

Vous pouvez également utiliser des attributs de contexte d’extension dans CloudEvents 1.0.You can also use extension context attributes in CloudEvents 1.0. Dans l’exemple suivant, comexampleextension1 et comexampleothervalue sont des attributs de contexte d’extension.In the following example, comexampleextension1 and comexampleothervalue are extension context attributes.

{
    "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
    }
}

Voici un exemple d’utilisation d’un attribut de contexte d’extension dans un filtre.Here's an example of using an extension context attribute in a filter.

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

LimitesLimitations

Le filtrage avancé présente les limites suivantes :Advanced filtering has the following limitations:

  • 5 filtres avancés et 25 valeurs de filtre pour tous les filtres par abonnement Event Grid5 advanced filters and 25 filter values across all the filters per event grid subscription
  • 512 caractères par valeur de type chaîne512 characters per string value
  • Cinq valeurs pour les opérateurs dans et pas dansFive values for in and not in operators
  • Clés contenant le signe . (point) .Keys with . (dot) character in them. Par exemple, http://schemas.microsoft.com/claims/authnclassreference ou john.doe@contoso.com.For example: http://schemas.microsoft.com/claims/authnclassreference or john.doe@contoso.com. Actuellement, les caractères d’échappement ne sont pas pris en charge dans les clés.Currently, there's no support for escape characters in keys.

La même clé peut être utilisée dans plusieurs filtres.The same key can be used in more than one filter.

Étapes suivantesNext steps