Vysvětlení filtrování událostí pro odběry Služby Event Grid

Tento článek popisuje různé způsoby filtrování událostí odesílaných do koncového bodu. Při vytváření odběru událostí máte tři možnosti filtrování:

  • Typy událostí
  • Předmět začíná nebo končí na
  • Pokročilá pole a operátory

Šablona Azure Resource Manageru

Příklady uvedené v tomto článku jsou fragmenty kódu JSON pro definování filtrů v šablonách Azure Resource Manageru (ARM). Příklad kompletní šablony ARM a nasazení šablony ARM najdete v tématu Rychlý start: Směrování událostí úložiště objektů blob do webového koncového bodu pomocí šablony ARM. Tady je několik dalších částí oddílu filter z příkladu v rychlém startu. Šablona ARM definuje následující prostředky.

  • Účet služby Azure Storage
  • Systémové téma pro účet úložiště
  • Odběr událostí pro systémové téma. Pododdíl uvidíte filter v části odběru události.

V následujícím příkladu odběr událostí filtruje události Microsoft.Storage.BlobCreated a Microsoft.Storage.BlobDeleted události.

{
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-08-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "accessTier": "Hot"
      }
    },
    {
      "type": "Microsoft.EventGrid/systemTopics",
      "apiVersion": "2021-12-01",
      "name": "[parameters('systemTopicName')]",
      "location": "[parameters('location')]",
      "properties": {
        "source": "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]",
        "topicType": "Microsoft.Storage.StorageAccounts"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]"
      ]
    },
    {
      "type": "Microsoft.EventGrid/systemTopics/eventSubscriptions",
      "apiVersion": "2021-12-01",
      "name": "[format('{0}/{1}', parameters('systemTopicName'), parameters('eventSubName'))]",
      "properties": {
        "destination": {
          "properties": {
            "endpointUrl": "[parameters('endpoint')]"
          },
          "endpointType": "WebHook"
        },
        "filter": {
          "includedEventTypes": [
            "Microsoft.Storage.BlobCreated",
            "Microsoft.Storage.BlobDeleted"
          ]
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.EventGrid/systemTopics', parameters('systemTopicName'))]"
      ]
    }
  ]
}

Filtrování typů událostí

Ve výchozím nastavení se do koncového bodu odesílají všechny typy událostí pro zdroj událostí. Můžete se rozhodnout, že do koncového bodu odešlete jenom určité typy událostí. Můžete například dostávat oznámení o aktualizacích vašich prostředků, ale nemusíte dostávat oznámení o jiných operacích, jako jsou odstranění. V takovém případě vyfiltrujte podle Microsoft.Resources.ResourceWriteSuccess typu události. Zadejte pole s typy událostí nebo určete All , jestli chcete získat všechny typy událostí pro zdroj události.

Syntaxe JSON pro filtrování podle typu události je:

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

Filtrování předmětu

Pro jednoduché filtrování podle předmětu zadejte počáteční nebo koncovou hodnotu předmětu. Můžete například zadat předmět končící .txt tak, aby se události související s nahráním textového souboru do účtu úložiště dostaly jenom s událostmi. Nebo můžete vyfiltrovat předmět, který začíná /blobServices/default/containers/testcontainer tím, že získá všechny události pro daný kontejner, ale ne jiné kontejnery v účtu úložiště.

Při publikování událostí do vlastních témat vytvářejte předměty pro události, které usnadňují odběratelům zjistit, jestli se o událost zajímají. Odběratelé používají vlastnost předmětu k filtrování a směrování událostí. Zvažte přidání cesty pro místo, kde k události došlo, aby předplatitelé mohli filtrovat podle segmentů této cesty. Tato cesta umožňuje odběratelům zúžit nebo široce filtrovat události. Pokud zadáte tři segmentové cesty jako /A/B/C v předmětu, předplatitelé můžou filtrovat podle prvního segmentu /A , aby získali širokou sadu událostí. Tito odběratelé získají události s tématy, jako /A/B/C je nebo /A/D/E. Další předplatitelé můžou filtrovat podle /A/B toho, aby získali užší sadu událostí.

Příklady (události služby Blob Storage)

Události objektu blob je možné filtrovat podle typu události, názvu kontejneru nebo názvu objektu, který byl vytvořen nebo odstraněn.

Předmět událostí služby Blob Storage používá formát:

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

Pokud chcete shodovat všechny události pro účet úložiště, můžete nechat filtry předmětu prázdné.

Pokud chcete shodovat události z objektů blob vytvořených v sadě kontejnerů sdílejících předponu, použijte filtr podobný subjectBeginsWith hle:

/blobServices/default/containers/containerprefix

Pokud chcete shodovat události z objektů blob vytvořených v konkrétním kontejneru, použijte filtr podobný následujícímu subjectBeginsWith :

/blobServices/default/containers/containername/

Pokud chcete shodovat události z objektů blob vytvořených v konkrétním kontejneru sdílející předponu názvu objektu blob, použijte filtr podobný subjectBeginsWith hle:

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

Pokud chcete shodovat události z objektů blob, které se vytvoří v konkrétní podsložce kontejneru, použijte filtr podobný následujícímu subjectBeginsWith :

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

Pokud chcete shodovat události z objektů blob vytvořených v konkrétním kontejneru sdílející příponu objektu blob, použijte subjectEndsWith filtr, jako je .log nebo .jpg.

Rozšířené filtrování

Pokud chcete filtrovat podle hodnot v datových polích a zadat relační operátor, použijte možnost rozšířeného filtrování. V rozšířeném filtrování zadáte:

  • typ operátoru – typ porovnání.
  • key – Pole v datech události, která používáte k filtrování. Může to být číslo, logická hodnota, řetězec nebo pole.
  • hodnoty – hodnota nebo hodnoty, které se mají porovnat s klíčem.

Key

Klíč je pole v datech událostí, která používáte k filtrování. Může to být jeden z následujících typů:

  • Číslo

  • Logická hodnota

  • Řetězec

  • Pole. Abyste mohli tuto funkci použít, musíte vlastnost nastavit enableAdvancedFilteringOnArrays na true.

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

Pro události ve schématu událostí cloudu použijte následující hodnoty pro klíč: eventid, source, eventtype, eventtypeversion, nebo data události (například data.key1).

Pokud používáte základní úroveň Event Gridu, použijte pro události ve schématu Event Gridu následující hodnoty pro klíč: ID, , Topic, EventTypeSubject, , DataVersionnebo data události (napříkladdata.key1). Pro vlastní vstupní schéma použijte datová pole události (například data.key1). Pro přístup k polím v datové části použijte notaci (tečka . ). Například data.siteNamepro přístup k siteName následující ukázkové události nebo action pro následující data.appEventTypeDetail.action ukázkovou událost.

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

Poznámka:

Event Grid nepodporuje filtrování podle pole objektů. Povoluje pouze řetězec, logickou hodnotu, čísla a pole stejných typů (například celočíselné pole nebo pole řetězců).

Hodnoty

Hodnoty můžou být: číslo, řetězec, logická hodnota nebo pole.

Operátory

Dostupné operátory pro čísla jsou:

NumberIn

Operátor NumberIn se vyhodnotí jako true, pokud je hodnota klíče jednou ze zadaných hodnot filtru . V následujícím příkladu zkontroluje, zda je hodnota counter atributu v oddílu data 5 nebo 1.

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

Pokud je klíčem matice, zkontrolují se všechny hodnoty v matici hodnot filtru. Tady je pseudokód s klíčem: [v1, v2, v3] a filtr: [a, b, c]. Všechny hodnoty klíče s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

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

NumberNotIn

NumberNotIn se vyhodnotí jako true, pokud hodnota klíče není žádnou ze zadaných hodnot filtru. V následujícím příkladu zkontroluje, jestli hodnota atributu counter v oddílu data není 41 a 0.

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

Pokud je klíčem matice, zkontrolují se všechny hodnoty v matici hodnot filtru. Tady je pseudokód s klíčem: [v1, v2, v3] a filtr: [a, b, c]. Všechny hodnoty klíče s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

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

NumberLessThan

Operátor NumberLessThan se vyhodnotí jako true, pokud je hodnota klíče menší než zadaná hodnota filtru. V následujícím příkladu zkontroluje, zda je hodnota counter atributu v oddílu data menší než 100.

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

Pokud je klíčem matice, jsou všechny hodnoty v poli kontrolovány proti hodnotě filtru. Tady je pseudokód s klíčem: [v1, v2, v3]. Všechny hodnoty klíče s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

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

NumberGreaterThan

Operátor NumberGreaterThan se vyhodnotí jako true, pokud je hodnota klíče větší než zadaná hodnota filtru. V následujícím příkladu zkontroluje, zda je hodnota counter atributu v oddílu data větší než 20.

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

Pokud je klíčem matice, jsou všechny hodnoty v poli kontrolovány proti hodnotě filtru. Tady je pseudokód s klíčem: [v1, v2, v3]. Všechny hodnoty klíče s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

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

NumberLessThanOrEquals

Operátor NumberLessThanOrEquals se vyhodnotí jako true, pokud je hodnota klíče menší nebo rovna zadané hodnotě filtru. V následujícím příkladu zkontroluje, zda je hodnota counter atributu v oddílu data menší nebo rovna 100.

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

Pokud je klíčem matice, jsou všechny hodnoty v poli kontrolovány proti hodnotě filtru. Tady je pseudokód s klíčem: [v1, v2, v3]. Všechny hodnoty klíče s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

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

NumberGreaterThanOrEquals

Operátor NumberGreaterThanOrEquals se vyhodnotí jako true, pokud je hodnota klíče větší nebo rovna zadané hodnotě filtru. V následujícím příkladu zkontroluje, zda je hodnota counter atributu v oddílu data větší nebo rovna 30.

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

Pokud je klíčem matice, jsou všechny hodnoty v poli kontrolovány proti hodnotě filtru. Tady je pseudokód s klíčem: [v1, v2, v3]. Všechny hodnoty klíče s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

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

NumberInRange

Operátor NumberInRange se vyhodnotí jako true, pokud je hodnota klíče v jedné ze zadaných oblastí filtru. V následujícím příkladu zkontroluje, zda je hodnota key1 atributu v oddílu data v jednom ze dvou oblastí: 3,14159 - 999,95, 3000 - 4000.

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

Vlastnost values je pole oblastí. V předchozím příkladu se jedná o matici dvou oblastí. Tady je příklad pole s jednou oblastí, která se má zkontrolovat.

Matice s jednou oblastí:

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

Pokud je klíčem matice, zkontrolují se všechny hodnoty v matici hodnot filtru. Tady je pseudokód s klíčem: [v1, v2, v3] a filtrem: pole oblastí. V tomto pseudokódu a jsou b nízké a vysoké hodnoty jednotlivých oblastí v poli. Všechny hodnoty klíče s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

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

NumberNotInRange

Operátor NumberNotInRange se vyhodnotí jako true, pokud hodnota klíče není v žádném ze zadaných rozsahů filtru. V následujícím příkladu zkontroluje, zda je hodnota key1 atributu v oddílu data v jednom ze dvou oblastí: 3,14159 - 999,95, 3000 - 4000. Pokud ano, vrátí operátor hodnotu false.

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

Vlastnost values je pole oblastí. V předchozím příkladu se jedná o matici dvou oblastí. Tady je příklad pole s jednou oblastí, která se má zkontrolovat.

Matice s jednou oblastí:

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

Pokud je klíčem matice, zkontrolují se všechny hodnoty v matici hodnot filtru. Tady je pseudokód s klíčem: [v1, v2, v3] a filtrem: pole oblastí. V tomto pseudokódu a jsou b nízké a vysoké hodnoty jednotlivých oblastí v poli. Všechny hodnoty klíče s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

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

Dostupný operátor pro logické hodnoty je:

BoolEquals

Operátor BoolEquals se vyhodnotí jako true, pokud je hodnota klíče zadaným logickým filtrem hodnot. V následujícím příkladu zkontroluje, zda hodnota isEnabled atributu v oddílu data je true.

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

Pokud je klíčem matice, zkontrolují se všechny hodnoty v matici s logickou hodnotou filtru. Tady je pseudokód s klíčem: [v1, v2, v3]. Všechny hodnoty klíče s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

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

Dostupné operátory pro řetězce jsou:

StringContains

StringContains se vyhodnotí jako true, pokud hodnota klíče obsahuje některou ze zadaných hodnot filtru (jako podřetězce). V následujícím příkladu zkontroluje, zda hodnota key1 atributu v oddílu data obsahuje jeden ze zadaných podřetědců: microsoft nebo azure. Obsahuje ho například azure data factory azure .

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

Pokud je klíčem matice, zkontrolují se všechny hodnoty v matici hodnot filtru. Tady je pseudokód s klíčem: [v1, v2, v3] a filtr: [a,b,c]. Všechny hodnoty klíče s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

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

StringNotContains

Operátor StringNotContains se vyhodnotí jako true, pokud klíč neobsahuje zadané hodnoty filtru jako podřetězce. Pokud klíč obsahuje jednu ze zadaných hodnot jako podřetězec, operátor vyhodnotí hodnotu false. V následujícím příkladu vrátí operátor hodnotu true pouze v případě, že hodnota key1 atributu v oddílu data nemá contoso a fabrikam jako podřetězezece.

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

Pokud je klíčem matice, zkontrolují se všechny hodnoty v matici hodnot filtru. Tady je pseudokód s klíčem: [v1, v2, v3] a filtr: [a,b,c]. Všechny hodnoty klíče s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

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

Aktuální omezení tohoto operátoru najdete v části Omezení .

StringBeginsWith

Operátor StringBeginsWith se vyhodnotí jako true, pokud hodnota klíče začíná některou ze zadaných hodnot filtru. V následujícím příkladu zkontroluje, zda hodnota key1 atributu v oddílu data začíná event nebo message. Například event hubs začíná na event.

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

Pokud je klíčem matice, zkontrolují se všechny hodnoty v matici hodnot filtru. Tady je pseudokód s klíčem: [v1, v2, v3] a filtr: [a,b,c]. Všechny hodnoty klíče s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

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

StringNotBeginsWith

Operátor StringNotBeginsWith se vyhodnotí jako true, pokud hodnota klíče nezačíná žádnou ze zadaných hodnot filtru. V následujícím příkladu zkontroluje, zda hodnota key1 atributu v oddílu data nezačíná event nebo message.

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

Pokud je klíčem matice, zkontrolují se všechny hodnoty v matici hodnot filtru. Tady je pseudokód s klíčem: [v1, v2, v3] a filtr: [a,b,c]. Všechny hodnoty klíče s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

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

StringEndsWith

Operátor StringEndsWith se vyhodnotí jako true, pokud hodnota klíče končí jednou ze zadaných hodnot filtru. V následujícím příkladu zkontroluje, zda hodnota atributu key1 v oddílu data končí jpg nebo jpeg nebo png. Například eventgrid.png končí na png.

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

Pokud je klíčem matice, zkontrolují se všechny hodnoty v matici hodnot filtru. Tady je pseudokód s klíčem: [v1, v2, v3] a filtr: [a,b,c]. Všechny hodnoty klíče s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

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

StringNotEndsWith

Operátor StringNotEndsWith se vyhodnotí jako true, pokud hodnota klíče nekončí žádnou ze zadaných hodnot filtru. V následujícím příkladu zkontroluje, zda hodnota atributu key1 v oddílu data nekončí jpg nebo jpeg nebo png.

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

Pokud je klíčem matice, zkontrolují se všechny hodnoty v matici hodnot filtru. Tady je pseudokód s klíčem: [v1, v2, v3] a filtr: [a,b,c]. Všechny hodnoty klíče s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

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

StringIn

Operátor StringIn zkontroluje, jestli hodnota klíče přesně odpovídá jedné ze zadaných hodnot filtru. V následujícím příkladu zkontroluje, zda je hodnota key1 atributu v oddílu data nebo fabrikam .factorycontoso

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

Pokud je klíčem matice, zkontrolují se všechny hodnoty v matici hodnot filtru. Tady je pseudokód s klíčem: [v1, v2, v3] a filtr: [a,b,c]. Všechny hodnoty klíče s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

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

StringNotIn

Operátor StringNotIn zkontroluje, zda hodnota klíče neodpovídá žádné ze zadaných hodnot filtru. V následujícím příkladu zkontroluje, zda hodnota key1 atributu v oddílu data není aws a bridge.

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

Pokud je klíčem matice, zkontrolují se všechny hodnoty v matici hodnot filtru. Tady je pseudokód s klíčem: [v1, v2, v3] a filtr: [a,b,c]. Všechny hodnoty klíče s datovými typy, které neodpovídají datovému typu filtru, se ignorují.

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

Všechna porovnání řetězců nerozlišují malá a velká písmena.

Poznámka:

Pokud JSON události neobsahuje rozšířený klíč filtru, filtr se vyhodnotí jako neodpovídající pro následující operátory: NumberGreaterThan, NumberGreaterThanOrEquals, NumberLessThan, NumberLessThan, NumberLessThan, NumberLessThanOrEquals, NumberIn, BoolEquals, StringContains, StringNotContains, StringBeginsWith, StringNotBeginsWith, StringEndsWith, StringNotEndsWith, StringIn.

Filtr se vyhodnotí jako odpovídající pro následující operátory: NumberNotIn, StringNotIn.

IsNullOrUndefined

Operátor IsNullOrUndefined se vyhodnotí jako true, pokud je hodnota klíče NULL nebo nedefinovaná.

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

V následujícím příkladu chybí klíč1, takže operátor by se vyhodnotil jako true.

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

V následujícím příkladu je klíč1 nastaven na hodnotu null, takže operátor by se vyhodnotil jako true.

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

Pokud má klíč1 v těchto příkladech jinou hodnotu, operátor by se vyhodnotil jako false.

IsNotNull

Operátor IsNotNull se vyhodnotí jako true, pokud hodnota klíče není NULL nebo není definována.

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

OR and AND

Pokud zadáte jeden filtr s více hodnotami, provede se operace OR , takže hodnota pole klíče musí být jedna z těchto hodnot. Tady je příklad:

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

Pokud zadáte více různých filtrů, provede se operace AND , takže každá podmínka filtru musí být splněna. Tady je příklad:

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

CloudEvents

U událostí ve schématu CloudEvents použijte pro klíč následující hodnoty: eventid, source, eventtype, eventtypeversion, nebo data události (napříkladdata.key1).

V CloudEvents 1.0 můžete také použít atributy kontextu rozšíření. V následujícím příkladu comexampleextension1 jsou comexampleothervalue atributy kontextu rozšíření.

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

Tady je příklad použití atributu kontextu rozšíření ve filtru.

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

Omezení

Rozšířené filtrování má následující omezení:

  • 25 rozšířených filtrů a 25 hodnot filtru napříč všemi filtry na odběr Služby Event Grid
  • 512 znaků na řetězcovou hodnotu
  • Klíče s znakem . (tečka) v nich. Například: http://schemas.microsoft.com/claims/authnclassreference nebo john.doe@contoso.com. V současné době nejsou v klávesách podporovány řídicí znaky.

Stejný klíč lze použít ve více než jednom filtru.

Další kroky