Aracılığıyla paylaş


Event Grid abonelikleri için olay filtrelemeyi anlama

Bu makalede, uç noktanıza hangi olayların gönderileceğini filtrelemenin farklı yolları açıklanmaktadır. Olay aboneliği oluştururken filtreleme için üç seçeneğiniz vardır:

  • Olay tipleri
  • Konu ... ile başlar veya ... ile biter
  • Gelişmiş alanlar ve işleçler

Azure Resource Manager şablonu

Bu makalede gösterilen örnekler, Azure Resource Manager (ARM) şablonlarında filtre tanımlamaya yönelik JSON kod parçacıklarıdır. Eksiksiz bir ARM şablonu ve ARM şablonu dağıtma örneği için bkz . Hızlı Başlangıç: ARM şablonu kullanarak Blob depolama olaylarını web uç noktasına yönlendirme. Hızlı başlangıçtaki örnekteki filter bölümünün etrafındaki bazı ek bölümler şöyle: ARM şablonu aşağıdaki kaynakları tanımlar.

  • Azure depolama hesabı
  • Depolama hesabı için sistem konusu
  • Sistem konusuna yönelik olay aboneliği. Olay aboneliği bölümündeki filter alt bölüme bakın.

Aşağıdaki örnekte, Microsoft.Storage.BlobCreated ve Microsoft.Storage.BlobDeleted olayları için abonelik filtrelenir.

{
  "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'))]"
      ]
    }
  ]
}

Olay türü filtreleme

Varsayılan olarak, olay kaynağı için tüm olay türleri uç noktaya gönderilir. Uç noktanıza yalnızca belirli olay türlerini göndermeye karar vekleyebilirsiniz. Örneğin, kaynaklarınızdaki güncelleştirmeler için bildirim alabilir, ancak silme işlemleri gibi diğer işlemler için bildirim alamayabilirsiniz. Bu durumda, olay türüne Microsoft.Resources.ResourceWriteSuccess göre filtreleyin. Olay türlerini içeren bir dizi sağlayın veya olay kaynağı için tüm olay türlerini almak üzere belirtin All .

Olay türüne göre filtrelemeye yönelik JSON söz dizimi şöyledir:

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

Konu filtreleme

Konuya göre basit filtreleme için konu için bir başlangıç veya bitiş değeri belirtin. Örneğin, yalnızca bir metin dosyasının bir depolama hesabına yüklenmesiyle ilgili olayları almak için, konunun .txt ile bittiğini belirtebilirsiniz. Alternatif olarak, /blobServices/default/containers/testcontainer ile başlayan konuları filtreleyebilir ve bu kapsayıcının tüm olaylarını alabilir, ancak depolama hesabındaki diğer kapsayıcılardan gelenleri alamazsınız.

Olayları özel konulara yayımlarken, abonelerin olayla ilgilenip ilgilenmediklerini bilmelerini kolaylaştıran etkinlikleriniz için konular oluşturun. Aboneler olayları filtrelemek ve yönlendirmek için subject özelliğini kullanır. Abonelerin bu yolun segmentlerine göre filtrelemesi için olayın gerçekleştiği yerin yolunu eklemeyi göz önünde bulundurun. Yol, abonelerin olayları dar veya geniş kapsamlı bir şekilde filtrelemesini sağlar. Konuda olduğu gibi /A/B/C üç segment yolu sağlarsanız, aboneler geniş bir olay kümesi elde etmek için ilk segmente /A göre filtreleyebilir. Bu aboneler, /A/B/C veya /A/D/E gibi konularla ilgili olaylar alır. Diğer aboneler, /A/B ölçütüne göre filtreleyerek daha dar bir olay kümesi elde edebilir.

Örnekler (Blob Depolama olayları)

Blob olayları, oluşturulan veya silinen nesnenin olay türüne, kapsayıcı adına veya adına göre filtrelenebilir.

Blob depolama olaylarının konusu şu biçimi kullanır:

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

Depolama hesabının tüm olaylarını eşleştirmek için konu filtrelerini boş bırakabilirsiniz.

Ön eki paylaşan bir kapsayıcı kümesinde oluşturulan bloblardan gelen olayları eşleştirmek için aşağıdaki gibi bir subjectBeginsWith filtre kullanın:

/blobServices/default/containers/containerprefix

Belirli bir kapsayıcıda oluşturulan bloblardan gelen olayları eşleştirmek için aşağıdaki gibi bir subjectBeginsWith filtre kullanın:

/blobServices/default/containers/containername/

Blob adı ön ekini paylaşan belirli bir kapsayıcıda oluşturulan bloblardan gelen olayları eşleştirmek için aşağıdaki gibi bir subjectBeginsWith filtre kullanın:

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

Kapsayıcının belirli bir alt klasöründe oluşturulan bloblardan gelen olayları eşleştirmek için aşağıdaki gibi bir subjectBeginsWith filtre kullanın:

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

Bir blob sonekini paylaşan belirli bir kapsayıcıda oluşturulan bloblardan gelen olayları eşleştirmek için ".log" veya ".jpg" gibi bir subjectEndsWith filtre kullanın.

Gelişmiş filtreleme

Veri alanlarındaki değerlere göre filtrelemek ve karşılaştırma işlecini belirtmek için gelişmiş filtreleme seçeneğini kullanın. Gelişmiş filtrelemede şunları belirtirsiniz:

  • işleç türü - Karşılaştırma türü.
  • key - Filtreleme için kullandığınız olay verilerindeki alan. Bir sayı, boolean, dize veya dizi olabilir.
  • values - Anahtarla karşılaştırılacak değer veya değerler.

Anahtar

Anahtar, filtreleme için kullandığınız olay verilerindeki alandır. Aşağıdaki türlerden biri olabilir:

  • Sayı

  • Boolean

  • String

  • Dizi. Bu özelliği kullanmak için özelliğini true olarak ayarlamanız enableAdvancedFilteringOnArrays gerekir.

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

Bulut Olayları şemasındaki olaylar için anahtar için aşağıdaki değerleri kullanın: eventid, source, eventtype, veya eventtypeversionolay verileri (gibidata.key1).

Event Grid temel katmanını kullanıyorsanız, Event Grid şemasındaki olaylar için anahtar için şu değerleri kullanın: , ID, Topic, Subject, , EventTypeveya olay verileri (gibiDataVersion).data.key1 Özel giriş şeması için olay verisi alanlarını (gibi data.key1) kullanın. Veri bölümündeki alanlara erişmek için (nokta) gösterimini . kullanın. Örneğin, aşağıdaki örnek olay için siteName'e erişmek amacıyla data.siteName, data.appEventTypeDetail.action veya action kullanılabilir.

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

Not

Event Grid, bir nesne dizisinde filtrelemeyi desteklemez. Yalnızca aynı türlerdeki Dize, Boole, Sayılar ve Dizi'ye (tamsayı dizisi veya dize dizisi gibi) izin verir.

Değerler

Değerler şunlar olabilir: sayı, dize, boole veya dizi

İşleçler

Sayılar için kullanılabilir işleçler şunlardır:

NumberIn

Anahtar değeri belirtilen filtre değerlerinden biriyse NumberIn işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümündeki özniteliğin counter değerinin data 5 mi yoksa 1 mi olduğunu denetler.

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren sahte kod şu şekildedir: [v1, v2, v3][a, b, c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

NumberNotIn

Anahtar değeri belirtilen filtre değerlerinden biri değilse NumberNotIn değeri true olarak değerlendirilir. Aşağıdaki örnekte, data bölümündeki counter özniteliğinin değerinin 41 ve 0 olmadığını kontrol eder.

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren sahte kod şu şekildedir: [v1, v2, v3][a, b, c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

NumberLessThan

Anahtar değeri belirtilen filtre değerinden küçükse NumberLessThan işleci true olarak değerlendirilir. Aşağıdaki örnekte, data bölümündeki counter özniteliğinin değerinin 100'den küçük olup olmadığını kontrol eder.

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerine göre denetlenir. Anahtarı ile sahte kod aşağıdadır: [v1, v2, v3]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

NumberGreaterThan

Anahtar değeri belirtilen filtre değerinden büyükse NumberGreaterThan işleci true olarak değerlendirilir. Aşağıdaki örnekte, data bölümündeki counter özniteliğinin değerinin 20'den büyük olup olmadığını denetler.

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerine göre denetlenir. Anahtarı ile sahte kod aşağıdadır: [v1, v2, v3]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

SayiKucukVeyaEsit

Anahtar değeri belirtilen filtre değerinden küçük veya buna eşitse NumberLessThanOrEquals işleci true olarak değerlendirilir. Aşağıdaki örnekte, data bölümündeki counter özniteliğinin değerinin 100'e eşit veya küçük olup olmadığını kontrol eder.

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerine göre denetlenir. Anahtarı ile sahte kod aşağıdadır: [v1, v2, v3]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

SayıBüyüktürVeyaEşittir

Anahtar değeri belirtilen filtre değerinden büyük veya buna eşitse NumberGreaterThanOrEquals işleci true olarak değerlendirilir. Aşağıdaki örnekte, data bölümündeki counter özniteliğinin değerinin 30'a büyük ya da eşit mi diye kontrol eder.

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerine göre denetlenir. Anahtarı ile sahte kod aşağıdadır: [v1, v2, v3]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

NumberInRange

Anahtar değeri belirtilen filtre aralıklarından birindeyse NumberInRange işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümdeki key1 özniteliğin değerinin data iki aralık arasında olup olmadığını denetler: 3.14159 - 999.95, 3000 - 4000.

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

values özelliği bir aralık dizisidir. Önceki örnekte, iki aralıklı bir dizidir. Denetlenecek tek aralıklı bir dizi örneği aşağıda verilmiştir.

Tek aralıklı dizi:

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtara sahip sahte kod ve [v1, v2, v3] filtre: bir aralık dizisi. Bu sahte kodda a ve b dizideki her aralığın düşük ve yüksek değerleridir. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

SayıAralığınDışında

Anahtar değeri belirtilen filtre aralıklarından birinde değilse NumberNotInRange işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümdeki key1 özniteliğin değerinin data iki aralık arasında olup olmadığını denetler: 3.14159 - 999.95, 3000 - 4000. Eğer öyleyse, operatör false döndürür.

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

values özelliği bir aralık dizisidir. Önceki örnekte, iki aralıklı bir dizidir. Denetlenecek tek aralıklı bir dizi örneği aşağıda verilmiştir.

Tek aralıklı dizi:

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtara sahip sahte kod ve [v1, v2, v3] filtre: bir aralık dizisi. Bu sahte kodda a ve b dizideki her aralığın düşük ve yüksek değerleridir. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

Boole'lar için kullanılabilir işleç şu şekildedir:

BoolEquals

Anahtar değeri belirtilen boole filtresi ise BoolEquals işleci true olarak değerlendirilir. Aşağıdaki örnekte, bölümündeki isEnabledözniteliğin data değerinin true olup olmadığını denetler.

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

Anahtar bir diziyse, dizideki tüm değerler filtre boole değeriyle denetlenir. Anahtarı ile sahte kod aşağıdadır: [v1, v2, v3]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

Dizeler için kullanılabilir işleçler şunlardır:

Dizeİçerir

StringContains içinde belirtilen filtre değerlerinden herhangi bir anahtardeğer içeriyorsa true olarak değerlendirilir (alt dizeler olarak). Aşağıdaki örnekte, bölümündeki özniteliğin key1 değerinin data belirtilen alt dizelerden birini içerip içermediğini denetler: microsoft veya azure. Örneğin, azure data factory içinde azure var.

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren sahte kod şu şekildedir: [v1, v2, v3][a,b,c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

StringNotContains

StringNotContains işleci, anahtar belirtilen filtre değerlerini alt dize olarak içermiyorsa true olarak değerlendirilir. Anahtar, alt dize olarak belirtilen değerlerden birini içeriyorsa, işleç false olarak değerlendirilir. Aşağıdaki örnekte, operatör yalnızca key1 bölümündeki özniteliğin değeri contoso ve fabrikam alt dizelerini içermiyorsa true döndürür.

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren sahte kod şu şekildedir: [v1, v2, v3][a,b,c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

Bu işlecin geçerli sınırlaması için Sınırlamalar bölümüne bakın.

StringBeginsWith

StringBeginsWith işleci, anahtar değeri, belirtilen filtre değerlerinden herhangi biriyle başlıyorsa true olarak değerlendirilir. Şu örnekte, data bölümündeki key1 özniteliğinin değerinin event veya message ile başlayıp başlamadığını denetler. Örneğin, event hubsevent ile başlar.

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren sahte kod şu şekildedir: [v1, v2, v3][a,b,c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

StringNotBeginsWith

StringNotBeginsWith işleci, anahtar değeri belirtilen filtre değerlerinden herhangi biriyle başlamıyorsa true olarak değerlendirilir. Aşağıdaki örnekte, data bölümündeki key1 özniteliğinin değerinin event veya message ile başlamadığını denetler.

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren sahte kod şu şekildedir: [v1, v2, v3][a,b,c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

StringEndsWith - Bir dizenin belirli bir alt dize ile bitip bitmediğini kontrol eden fonksiyon.

StringEndsWith işleci, anahtar değeri belirtilen filtre değerlerinden biriyle bitiyorsa true olarak değerlendirilir. Aşağıdaki örnekte, bölümündeki özniteliğin key1 değerinin data veya jpgjpeg ile png bitip bitmediğini denetler. Örneğin, eventgrid.png ile pngbiter.

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren sahte kod şu şekildedir: [v1, v2, v3][a,b,c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

DizeSonlanmıyor

StringNotEndsWith işleci, anahtar değeri belirtilen filtre değerlerinden herhangi biriyle bitmiyorsa true olarak değerlendirilir. Aşağıdaki örnekte, key1 özniteliğinin data bölümündeki değerinin jpg veya jpeg ya da png ile bitmediğini denetler.

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren sahte kod şu şekildedir: [v1, v2, v3][a,b,c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

StringIn

StringIn işleci anahtar değerinin belirtilen filtre değerlerinden biriyle tam olarak eşleşip eşleşmediğini denetler. Aşağıdaki örnekte, bölümündeki key1 özniteliğin data değerinin contoso veya fabrikamfactoryolup olmadığını denetler.

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren sahte kod şu şekildedir: [v1, v2, v3][a,b,c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

StringNotIn

StringNotIn işleci, anahtar değerinin belirtilen filtre değerlerinden herhangi biriyle eşleşip eşleşmediğini denetler. Aşağıdaki örnekte, data bölümündeki key1 özniteliğinin değerinin aws ve bridge olmadığını denetler.

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

Anahtar bir diziyse, dizideki tüm değerler filtre değerleri dizisine göre denetlenir. Anahtarı ve filtresini içeren sahte kod şu şekildedir: [v1, v2, v3][a,b,c]. Filtrenin veri türüyle eşleşmeyen veri türlerine sahip tüm anahtar değerler yoksayılır.

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

Tüm dize karşılaştırmaları büyük/küçük harfe duyarlı değildir.

Not

Olay JSON gelişmiş filtre anahtarını içermiyorsa, filtre şu işleçler için eşleşmedi olarak değerlendirilir: NumberGreaterThan, NumberGreaterThanOrEquals, NumberLessThan, NumberLessThanOrEquals, NumberIn, BoolEquals, StringContains, StringNotContains, StringBeginsWith, StringNotBeginsWith, StringEndsWith, StringNotEndsWith, StringIn.

Filtre, aşağıdaki işleçler için eşleşmiş olarak değerlendirilir: NumberNotIn, StringNotIn.

IsNullOrUndefined

IsNullOrUndefined işleci, anahtarın değeri NULL veya tanımsız olduğunda true olarak değerlendirilir.

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

Aşağıdaki örnekte anahtar1 eksik olduğundan işleç true olarak değerlendirilir.

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

Aşağıdaki örnekte anahtar1 null olarak ayarlandığından işleç true olarak değerlendirilir.

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

Anahtar1 bu örneklerde başka bir değere sahipse işleç false olarak değerlendirilir.

Isnotnull

Anahtarın değeri NULL veya tanımsız değilse IsNotNull işleci true olarak değerlendirilir.

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

VEYA ve VE

Birden çok değer içeren tek bir filtre belirtirseniz, bir OR işlemi gerçekleştirilir, bu nedenle anahtar alanının değeri bu değerlerden biri olmalıdır. Bir örnek aşağıda verilmiştir:

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

Birden çok farklı filtre belirtirseniz, bir AND işlemi yapılır, bu nedenle her filtre koşulu karşılanmalıdır. Bir örnek aşağıda verilmiştir:

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

CloudEvents

CloudEvents şemasındaki olaylar için anahtar için aşağıdaki değerleri kullanın: id, source, type, dataschemaveya olay verileri (gibidata.key1).

CloudEvents 1.0'da uzantı bağlamı özniteliklerini de kullanabilirsiniz. Aşağıdaki örnekte comexampleextension1 ve comexampleothervalue uzantı bağlamı öznitelikleridir.

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

Aşağıda, bir filtrede uzantı bağlam özniteliği kullanma örneği verilmiştır.

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

Sınırlamalar

Gelişmiş filtreleme aşağıdaki sınırlamalara sahiptir:

  • Event Grid aboneliği başına tüm filtreler arasında 25 gelişmiş filtre ve 25 filtre değeri
  • Dize değeri başına 512 karakter
  • . İçlerinde (nokta) karakter bulunan tuşlar. Örneğin: http://schemas.microsoft.com/claims/authnclassreference veya john.doe@contoso.com. Şu anda anahtarlarda kaçış karakterleri için destek yoktur.

Aynı anahtar birden fazla filtrede kullanılabilir.

Sonraki adımlar