Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Önemli
Bu sayfa, ÖNIZLEME aşamasında olan Kubernetes dağıtım bildirimlerini kullanarak Azure IoT İşlemleri bileşenlerini yönetme yönergelerini içerir. Bu özellik çeşitli sınırlamalarla sağlanır ve üretim iş yükleri için kullanılmamalıdır.
Beta veya önizleme aşamasında olan ya da başka bir şekilde henüz genel kullanıma sunulmamış olan Azure özelliklerinde geçerli olan yasal koşullar için bkz. Microsoft Azure Önizlemeleri için Ek Kullanım Koşulları.
Azure IoT İşlemlerindeki verileri dönüştürmek için veri akışı eşleme dilini kullanın. Söz dizimi, verileri bir biçimden diğerine dönüştüren eşlemeleri tanımlamanın basit ama güçlü bir yoludur. Bu makalede veri akışı eşleme diline ve temel kavramlara genel bir bakış sağlanır.
Eşleme, verileri bir biçimden diğerine dönüştürmenizi sağlar. Aşağıdaki giriş kaydını göz önünde bulundurun:
{
"Name": "Grace Owens",
"Place of birth": "London, TX",
"Birth Date": "19840202",
"Start Date": "20180812",
"Position": "Analyst",
"Office": "Kent, WA"
}
Bunu çıkış kaydıyla karşılaştırın:
{
"Employee": {
"Name": "Grace Owens",
"Date of Birth": "19840202"
},
"Employment": {
"Start Date": "20180812",
"Position": "Analyst, Kent, WA",
"Base Salary": 78000
}
}
Çıkış kaydında, giriş kaydı verilerinde aşağıdaki değişiklikler yapılır:
-
Alanlar yeniden adlandırıldı: Alan
Birth DateartıkDate of Birthşeklindedir. -
Yeniden yapılandırılan alanlar: Hem hem de
NameDate of BirthyeniEmployeekategori altında gruplandırılır. -
Alan silindi: Alan
Place of birthçıktıda bulunmadığından kaldırılır. -
Eklenen alan: Alan
Base Salary, kategoridekiEmploymentyeni bir alandır. -
Alan değerleri değiştirildi veya birleştirildi:
PositionÇıktıdaki alan, girişteki vePositionalanlarını birleştirirOffice.
Dönüşümler eşleme yoluyla gerçekleştirilen ve genellikle şunları içerir:
- Giriş tanımı: Kullanılan giriş kayıtlarındaki alanları tanımlama.
- Çıkış tanımı: Giriş alanlarının çıkış kayıtlarında nerede ve nasıl düzenleneceğini belirtme.
-
Dönüştürme (isteğe bağlı): Giriş alanlarını çıkış alanlarına sığacak şekilde değiştirme.
expressionbirden çok giriş alanı tek bir çıkış alanında birleştirildiğinde gereklidir.
Aşağıdaki eşleme bir örnektir:
{
inputs: [
'BirthDate'
]
output: 'Employee.DateOfBirth'
}
{
inputs: [
'Position' // - - - - $1
'Office' // - - - - $2
]
output: 'Employment.Position'
expression: '$1 + ", " + $2'
}
{
inputs: [
'$context(position).BaseSalary'
]
output: 'Employment.BaseSalary'
}
Örnek haritalar:
-
Bire bir eşleme:
BirthDatedönüştürme olmadan doğrudan öğesineEmployee.DateOfBirtheşlenir. -
Çoka bir eşleme: ve
Positiondeğerlerini tekOfficebir alanda birleştirirEmployment.Position. Dönüştürme formülü ($1 + ", " + $2), bu alanları biçimlendirilmiş bir dizeyle birleştirir. -
Bağlamsal veriler:
BaseSalaryadlıpositionbağlamsal veri kümesinden eklenir.
Alan başvuruları
Alan başvuruları, gibi Employee.DateOfBirth nokta gösterimini kullanarak veya aracılığıyla $context(position)bağlamsal bir veri kümesinden verilere erişerek giriş ve çıkıştaki yolların nasıl belirtileceğini gösterir.
MQTT ve Kafka meta veri özellikleri
Kaynak veya hedef olarak MQTT veya Kafka kullandığınızda, eşleme dilinde çeşitli meta veri özelliklerine erişebilirsiniz. Bu özellikler giriş veya çıkışta eşlenebilir.
Mera veri özellikleri
-
Konu: Hem MQTT hem de Kafka için çalışır. İletinin yayımlandığı dizeyi içerir. Örnek:
$metadata.topic. -
Kullanıcı özelliği: MQTT'de bu, bir MQTT iletisinin taşıyabileceği serbest biçimli anahtar/değer çiftlerine başvurur. Örneğin, MQTT iletisi anahtar "priority" ve "high" değerine sahip bir kullanıcı özelliğiyle yayımlandıysa
$metadata.user_property.priority, başvuru "high" değerini tutar. Kullanıcı özellik anahtarları rastgele dizeler olabilir ve kaçış gerektirebilir:$metadata.user_property."weird key""garip anahtar" anahtarını (boşlukla birlikte) kullanır. -
Sistem özelliği: Bu terim, kullanıcı özelliği olmayan her özellik için kullanılır. Şu anda yalnızca tek bir sistem özelliği desteklenmektedir:
$metadata.system_property.content_typeMQTT iletisinin içerik türü özelliğini okuyan (ayarlandıysa). -
Üst bilgi: Bu, MQTT kullanıcı özelliğinin Kafka eşdeğeridir. Kafka anahtar için herhangi bir ikili değeri kullanabilir, ancak veri akışları yalnızca UTF-8 dize anahtarlarını destekler. Örnek:
$metadata.header.priority. Bu işlev, kullanıcı özelliklerine benzer.
Meta veri özelliklerini eşleme
Giriş eşleme
Aşağıdaki örnekte, MQTT topic özelliği çıktıdaki origin_topic alana eşlenir:
inputs: [
'$metadata.topic'
]
output: 'origin_topic'
MQTT iletisinde kullanıcı özelliği priority varsa, aşağıdaki örnekte bunu bir çıkış alanıyla eşleme işlemi gösterilmektedir:
inputs: [
'$metadata.user_property.priority'
]
output: 'priority'
Çıkış eşlemesi
Meta veri özelliklerini bir çıkış üst bilgisi veya kullanıcı özelliğiyle de eşleyebilirsiniz. Aşağıdaki örnekte MQTT topic , çıkışın origin_topic kullanıcı özelliğindeki alana eşlenir:
inputs: [
'$metadata.topic'
]
output: '$metadata.user_property.origin_topic'
Gelen yük bir priority alan içeriyorsa, aşağıdaki örnekte bir MQTT kullanıcı özelliğiyle nasıl eş adım atılması gösterilmektedir:
inputs: [
'priority'
]
output: '$metadata.user_property.priority'
Kafka için de aynı örnek:
inputs: [
'priority'
]
output: '$metadata.header.priority'
Bağlamsallaştırma veri kümesi seçicileri
Bu seçiciler eşlemelerin bağlamsallaştırma veri kümeleri olarak adlandırılan dış veritabanlarından ek verileri tümleştirmesine olanak sağlar.
Kayıt filtreleme
Kayıt filtreleme, hangi kayıtların işleneceği veya bırakılacağına ilişkin koşulların ayarlanmasını içerir.
Noktalı gösterimi
Nokta gösterimi, bilgisayar biliminde, özyinelemeli olarak bile alanlara başvurmak için yaygın olarak kullanılır. Programlamada alan adları genellikle harf ve sayılardan oluşur. Standart bir nokta gösterimi örneği şu örneğe benzer olabilir:
inputs: [
'Person.Address.Street.Number'
]
Veri akışında, nokta gösterimiyle açıklanan bir yol, kaçışa gerek kalmadan dizeleri ve bazı özel karakterleri içerebilir:
inputs: [
'Person.Date of Birth'
]
Diğer durumlarda, kaçış gereklidir:
inputs: [
'Person."Tag.10".Value'
]
Önceki örnek, diğer özel karakterler arasında alan adının içinde noktalar içerir. Kaçış olmadan, alan adı nokta gösteriminde ayırıcı görevi görür.
Veri akışı bir yolu ayrıştırsa da yalnızca iki karakteri özel olarak görür:
- Noktalar (
.), alan ayırıcıları olarak hareket eder. - Tek tırnak işaretleri, bir segmentin başına veya sonuna yerleştirildiğinde, noktaların alan ayırıcısı olarak değerlendirilmediği bir kaçış bölümü başlatın.
Diğer karakterler alan adının bir parçası olarak değerlendirilir. Bu esneklik, alan adlarının rastgele dizeler olabileceği JSON gibi biçimlerde kullanışlıdır.
Bicep'te tüm dizeler tek tırnak içine alınır ('). Kubernetes için YAML'de doğru alıntı yapma örnekleri geçerli değildir.
Kaçan
Noktalı notlu bir yolda kaçışın birincil işlevi, ayırıcılar yerine alan adlarının parçası olan noktaların kullanımına uyum sağlamaktır:
inputs: [
'Payload."Tag.10".Value'
]
Bu örnekte, yol üç bölümden oluşur: Payload, Tag.10ve Value.
Nokta gösteriminde kaçış kuralları
Her segmentten ayrı olarak çıkış: Birden çok segment nokta içeriyorsa, bu segmentler çift tırnak içine alınmalıdır. Diğer segmentler de alıntılanabilir, ancak yol yorumunu etkilemez:
inputs: [ 'Payload."Tag.10".Measurements."Vibration.$12".Value' ]
Çift tırnak işaretlerinin doğru kullanımı: Çift tırnak işaretleri, kaçış segmentini açmalı ve kapatmalıdır. Segmentin ortasındaki tırnak işaretleri alan adının bir parçası olarak kabul edilir:
inputs: [ 'Payload.He said: "Hello", and waved' ]
Bu örnek iki alanı tanımlar: Payload ve He said: "Hello", and waved. Bu koşullar altında bir nokta göründüğünde ayırıcı olarak çalışmaya devam eder:
inputs: [
'Payload.He said: "No. It is done"'
]
Bu durumda, yol , Payloadve He said: "No segmentlerine It is done"bölünür (boşlukla başlar).
Segmentasyon algoritması
- Bir segmentin ilk karakteri tırnak işaretiyse, ayrıştırıcı sonraki tırnak işaretini arar. Bu tırnak işaretleri arasına alınmış dize tek bir kesim olarak kabul edilir.
- Segment tırnak işaretiyle başlamazsa, ayrıştırıcı bir sonraki noktayı veya yolun sonunu arayarak kesimleri tanımlar.
Joker karakter
Birçok senaryoda, çıkış kaydı giriş kaydına çok benzer ve yalnızca küçük değişiklikler gereklidir. Çok sayıda alan içeren kayıtlarla uğraşırken, her alan için eşlemeleri el ile belirtmek yorucu olabilir. Joker karakterler, birden çok alana otomatik olarak uygulanabilen genelleştirilmiş eşlemelere izin vererek bu işlemi basitleştirir.
Eşlemelerde yıldız işareti kullanımını anlamak için temel bir senaryoyu ele alalım:
inputs: [
'*'
]
output: '*'
Bu yapılandırma, girişteki her alanın herhangi bir değişiklik olmadan çıktıdaki aynı alana doğrudan eşlendiği temel bir eşlemeyi gösterir. Yıldız işareti (*), giriş kaydındaki herhangi bir alanla eşleşen bir joker karakter görevi görür.
Yıldız işareti (*) bu bağlamda şu şekilde çalışır:
- Desen eşleştirme: Yıldız işareti bir yolun tek bir kesimini veya birden çok kesimini eşleştirebilir. Yoldaki tüm kesimler için yer tutucu görevi görür.
-
Alan eşleştirme: Eşleme işlemi sırasında algoritma, giriş kaydındaki her alanı içinde
inputsbelirtilen desene göre değerlendirir. Önceki örnekteki yıldız işareti tüm olası yollarla eşleşir ve girişteki her bir alanı etkili bir şekilde sığdırır. -
Yakalanan kesim: Yolun yıldız işaretiyle eşleştikleri bölümü olarak adlandırılır
captured segment. -
Çıkış eşlemesi: Çıkış yapılandırmasında
captured segment, yıldız işareti göründüğü yere yerleştirilir. Bu, girişin yapısının çıkıştacaptured segmentkorunduğu ve yıldız işareti tarafından sağlanan yer tutucunun doldurulduğu anlamına gelir.
Başka bir örnek, joker karakterlerin alt bölümlerle eşleştirmek ve bunları birlikte taşımak için nasıl kullanılabileceğini gösterir. Bu örnek, bir JSON nesnesi içindeki iç içe yapıları etkili bir şekilde düzleştirmeyi sağlar.
Özgün JSON:
{
"ColorProperties": {
"Hue": "blue",
"Saturation": "90%",
"Brightness": "50%",
"Opacity": "0.8"
},
"TextureProperties": {
"type": "fabric",
"SurfaceFeel": "soft",
"SurfaceAppearance": "matte",
"Pattern": "knitted"
}
}
Joker karakterler kullanan eşleme yapılandırması:
{
inputs: [
'ColorProperties.*'
]
output: '*'
}
{
inputs: [
'TextureProperties.*'
]
output: '*'
}
Sonuçta elde edilen JSON:
{
"Hue": "blue",
"Saturation": "90%",
"Brightness": "50%",
"Opacity": "0.8",
"type": "fabric",
"SurfaceFeel": "soft",
"SurfaceAppearance": "matte",
"Pattern": "knitted"
}
Joker karakter yerleştirme
Joker karakter yerleştirdiğinizde şu kurallara uymanız gerekir:
-
Veri başvurusu başına tek yıldız: Tek bir veri başvurusu içinde yalnızca bir yıldız işaretine (
*) izin verilir. -
Tam kesim eşleştirme: Yıldız işareti her zaman yolun tüm kesimiyle eşleşmelidir. Bir segmentin yalnızca bir bölümüyle (örneğin
path1.partial*.path3) eşleştirmek için kullanılamaz. -
Konumlandırma: Yıldız işareti, veri başvurusunun çeşitli bölümlerine konumlandırılabilir:
-
Başlangıçta:
*.path2.path3- Burada yıldız işareti, 'apath2.path3kadar olan tüm segmentlerle eşleşir. -
Ortada:
path1.*.path3- Bu yapılandırmada yıldız işareti ilepath1arasındakipath3tüm segmentlerle eşleşir. -
Sonunda:
path1.path2.*- Sonundaki yıldız işareti, sonrasındakipath1.path2tüm segmentlerle eşleşir.
-
Başlangıçta:
- Yıldız işaretini içeren yol tek tırnak içine alınmalıdır (
').
Çok girişli joker karakterler
Özgün JSON:
{
"Saturation": {
"Max": 0.42,
"Min": 0.67,
},
"Brightness": {
"Max": 0.78,
"Min": 0.93,
},
"Opacity": {
"Max": 0.88,
"Min": 0.91,
}
}
Joker karakterler kullanan eşleme yapılandırması:
inputs: [
'*.Max' // - $1
'*.Min' // - $2
]
output: 'ColorProperties.*'
expression: '($1 + $2) / 2'
Sonuçta elde edilen JSON:
{
"ColorProperties" : {
"Saturation": 0.54,
"Brightness": 0.85,
"Opacity": 0.89
}
}
Çok girişli joker karakterler kullanıyorsanız, yıldız işareti (*) her girişte tutarlı olarak aynı Captured Segment değeri göstermelidir. Örneğin, deseninde *yakalamalar Saturation olduğunda*.Max, eşleme algoritması karşılık gelenin Saturation.Min desenle *.Mineşleşmesini bekler. Burada, * sonraki girişler için eşleştirmeye yol gösteren, ilk girişten ile değiştirilir Captured Segment .
Bu ayrıntılı örneği göz önünde bulundurun:
Özgün JSON:
{
"Saturation": {
"Max": 0.42,
"Min": 0.67,
"Mid": {
"Avg": 0.51,
"Mean": 0.56
}
},
"Brightness": {
"Max": 0.78,
"Min": 0.93,
"Mid": {
"Avg": 0.81,
"Mean": 0.82
}
},
"Opacity": {
"Max": 0.88,
"Min": 0.91,
"Mid": {
"Avg": 0.89,
"Mean": 0.89
}
}
}
Joker karakterler kullanan ilk eşleme yapılandırması:
inputs: [
'*.Max' // - $1
'*.Min' // - $2
'*.Avg' // - $3
'*.Mean' // - $4
]
Bu ilk eşleme bir dizi oluşturmaya çalışır (örneğin, : Opacity).[0.88, 0.91, 0.89, 0.89] Bu yapılandırma şu nedenden dolayı başarısız oluyor:
- İlk giriş
*.MaxgibiSaturationbir kesim yakalar. - Eşleme, sonraki girişlerin aynı düzeyde mevcut olmasını bekler:
Saturation.MaxSaturation.MinSaturation.AvgSaturation.Mean
Avg ve Mean içinde Midiç içe olduğundan, ilk eşlemedeki yıldız işareti bu yolları doğru şekilde yakalamaz.
Düzeltilen eşleme yapılandırması:
inputs: [
'*.Max' // - $1
'*.Min' // - $2
'*.Mid.Avg' // - $3
'*.Mid.Mean' // - $4
]
Bu düzeltilmiş eşleme gerekli alanları doğru bir şekilde yakalar. JSON yapısının farklı düzeylerinde yıldız işaretlerinin etkili bir şekilde çalışmasını sağlayan iç içe Mid nesnenin eklendiği yolları doğru şekilde belirtir.
İkinci kural ve özelleştirme karşılaştırması
Çok girişli joker karakterlerden önceki örneği kullandığınızda, her özellik için iki türetilmiş değer oluşturan aşağıdaki eşlemeleri göz önünde bulundurun:
{
inputs: [
'*.Max' // - $1
'*.Min' // - $2
]
output: 'ColorProperties.*.Avg'
expression: '($1 + $2) / 2'
}
{
inputs: [
'*.Max' // - $1
'*.Min' // - $2
]
output: 'ColorProperties.*.Diff'
expression: '$1 - $2'
}
Bu eşleme, altındaki Avgher özellik için iki ayrı hesaplama (Diff ve ColorProperties) oluşturmaya yöneliktir. Bu örnekte sonuç gösterilmektedir:
{
"ColorProperties": {
"Saturation": {
"Avg": 0.54,
"Diff": 0.25
},
"Brightness": {
"Avg": 0.85,
"Diff": 0.15
},
"Opacity": {
"Avg": 0.89,
"Diff": 0.03
}
}
}
Burada, aynı girişlerdeki ikinci eşleme tanımı eşleme için ikinci bir kural görevi görür.
Şimdi, belirli bir alanın farklı bir hesaplamaya ihtiyaç duyduğu bir senaryo düşünün:
{
inputs: [
'*.Max' // - $1
'*.Min' // - $2
]
output: 'ColorProperties.*'
expression: '($1 + $2) / 2'
}
{
inputs: [
'Opacity.Max' // - $1
'Opacity.Min' // - $2
]
output: 'ColorProperties.OpacityAdjusted'
expression: '($1 + $2 + 1.32) / 2'
}
Bu durumda, Opacity alanın benzersiz bir hesaplaması vardır. Bu çakışan senaryoyla başa çıkabilmek için iki seçenek şunlardır:
- için
Opacityher iki eşlemeyi de ekleyin. Bu örnekte çıkış alanları farklı olduğundan, birbirini geçersiz kılmaz. - için
Opacitydaha özel kuralı kullanın ve daha genel olanı kaldırın.
Doğru eylemi belirlemeye yardımcı olması için aynı alanlar için özel bir durum düşünün:
{
inputs: [
'*.Max' // - $1
'*.Min' // - $2
]
output: 'ColorProperties.*'
expression: '($1 + $2) / 2'
}
{
inputs: [
'Opacity.Max' // - $1
'Opacity.Min' // - $2
]
output: ''
}
İkinci tanımdaki boş output bir alan, çıkış kaydındaki alanların yazılmadığını (etkili bir şekilde kaldırıldığı Opacity) anlamına gelir. Bu kurulum bir değerinden Specialization daha fazlasıdır Second Rule.
Veri akışlarına göre çakışan eşlemelerin çözümü:
- Değerlendirme, eşleme tanımındaki en üst kuraldan ilerler.
- Yeni bir eşleme önceki kuralla aynı alanlara çözümlanırsa, aşağıdaki koşullar geçerlidir:
- A
Rank, joker karakterin yakaladığı segment sayısına göre çözümlenen her giriş için hesaplanır. Örneğin, iseCaptured SegmentsProperties.OpacityRank2'dir. YalnızcaOpacityise,Rank1'dir. Joker karakter içermeyen bir eşleme 0'a sahiptirRank. -
Rankİkinci kuralın değeri önceki kurala eşit veya daha yüksekse, veri akışı bunu olarakSecond Rulekabul eder. - Aksi takdirde, veri akışı yapılandırmayı olarak
Specializationele alır.
- A
Örneğin, boş bir çıkışa ve yönlendiren Opacity.MaxOpacity.Min eşleme 0'a sahiptir Rank . İkinci kural öncekinden daha düşük Rank olduğundan, bir özelleştirme olarak kabul edilir ve için Opacitybir değer hesaplayacak olan önceki kuralı geçersiz kılar.
Bağlamsallaştırma veri kümelerindeki joker karakterler
Şimdi örnek aracılığıyla bağlamsallaştırma veri kümelerinin joker karakterlerle nasıl kullanılabileceğini görelim. Aşağıdaki kaydı içeren adlı position bir veri kümesini göz önünde bulundurun:
{
"Position": "Analyst",
"BaseSalary": 70000,
"WorkingHours": "Regular"
}
Önceki bir örnekte, bu veri kümesinden belirli bir alanı kullandık:
inputs: [
'$context(position).BaseSalary'
]
output: 'Employment.BaseSalary'
Bu eşleme, bağlam veri kümesinden doğrudan çıkış kaydının BaseSalary bölümüne kopyalanırEmployment. İşlemi otomatikleştirmek ve veri kümesindeki positionEmployment tüm alanları bölümüne eklemek istiyorsanız joker karakterler kullanabilirsiniz:
inputs: [
'$context(position).*'
]
output: 'Employment.*'
Bu yapılandırma, veri kümesindeki position her alanın çıkış kaydının Employment bölümüne kopyalandığı dinamik eşlemeye olanak tanır:
{
"Employment": {
"Position": "Analyst",
"BaseSalary": 70000,
"WorkingHours": "Regular"
}
}
Bilinen son değer
Bir özelliğin bilinen son değerini izleyebilirsiniz. Alanın bilinen son değerini yakalamak için giriş alanına ? $last son ek ekleyin. Bir özellik sonraki giriş yükünde bir değer eksik olduğunda, bilinen son değer çıkış yüküne eşlenir.
Örneğin, aşağıdaki eşlemeyi göz önünde bulundurun:
inputs: [
'Temperature ? $last'
]
output: 'Thermostat.Temperature'
Bu örnekte, bilinen son değeri Temperature izlenir. Sonraki giriş yükü bir Temperature değer içermiyorsa, çıktıda bilinen son değer kullanılır.