Aracılığıyla paylaş


Veri akışı dönüştürmelerini kullanarak verileri dönüştürme

Ö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ışı dönüştürmelerini kullanabilirsiniz. Veri akışındaki dönüştürme öğesi, çıkış alanlarının değerlerini hesaplamak için kullanılır. Veri akışı dönüştürmelerinde giriş alanlarını, kullanılabilir işlemleri, veri türlerini ve tür dönüştürmelerini kullanabilirsiniz.

Veri akışı dönüştürme öğesi, çıkış alanlarının değerlerini hesaplamak için kullanılır:

inputs: [
  '*.Max' // - $1
  '*.Min' // - $2
]
output: 'ColorProperties.*'
expression: '($1 + $2) / 2'

Dönüştürmeler hakkında anlaşılması gereken çeşitli yönler vardır:

  • Giriş alanlarına başvuru: Dönüştürme formülündeki giriş alanlarından değerlere başvurma.
  • Kullanılabilir işlemler: Dönüştürmelerde kullanılabilecek işlemler. Örneğin, toplama, çıkarma, çarpma ve bölme.
  • Veri türleri: Bir formülün işleyebileceği ve işleyebileceği veri türleri. Örneğin, tamsayı, kayan nokta ve dize.
  • Tür dönüştürmeleri: Veri türlerinin giriş alanı değerleri, formül değerlendirmesi ve çıkış alanları arasında nasıl dönüştürüldüğü.

Giriş alanları

Dönüşümlerde formüller, 25 gibi bir sayı veya giriş alanlarından türetilen parametreler gibi statik değerler üzerinde çalışabilir. Eşleme, formülün erişebileceği bu giriş alanlarını tanımlar. Her alana giriş listesindeki sırasına göre başvurulur:

inputs: [
  '*.Max'      // - $1
  '*.Min'      // - $2
  '*.Mid.Avg'  // - $3
  '*.Mid.Mean' // - $4
]
output: 'ColorProperties.*'
expression: '($1, $2, $3, $4)'

Bu örnekte dönüştürme, değerlerini içeren bir diziyle [Max, Min, Mid.Avg, Mid.Mean]sonuç verir. YAML dosyasındaki (# - $1, # - $2) açıklamalar isteğe bağlıdır, ancak her alan özelliği ile dönüştürme formülündeki rolü arasındaki bağlantıyı netleştirmeye yardımcı olur.

Veri türleri

Farklı serileştirme biçimleri çeşitli veri türlerini destekler. Örneğin, JSON birkaç temel tür sunar: dize, sayı, Boole ve null. Ayrıca bu temel türlerin dizilerini içerir.

Eşleyici bir giriş özelliğini okuduğunda, bunu bir iç türe dönüştürür. Bu dönüştürme, verileri bir çıkış alanına yazılana kadar bellekte tutmak için gereklidir. İç türe dönüştürme, giriş ve çıkış serileştirme biçimlerinin aynı olup olmamasına bakılmaksızın gerçekleşir.

İç gösterim aşağıdaki veri türlerini kullanır:

Türü Açıklama
bool Mantıksal true/false.
integer 128 bit imzalı tamsayı olarak depolanır.
float 64 bit kayan nokta numarası olarak depolanır.
string UTF-8 dizesi.
bytes İkili veriler, 8 bit işaretsiz değerler dizesidir.
datetime Nanosaniye çözünürlüğü ile UTC veya yerel saat.
time Nanosaniye çözünürlüğe sahip günün saati.
duration Nanosaniye çözünürlüğe sahip bir süre.
array Daha önce listelenen türlerden oluşan bir dizi.
map Daha önce listelenen türlerin (anahtar, değer) çiftlerinden oluşan bir vektör.

Giriş kaydı alanları

Giriş kaydı alanı okunduğunda, temel alınan türü bu iç tür değişkenlerinden birine dönüştürülür. İç gösterim, en az dönüştürmeyle veya hiç dönüştürme olmadan çoğu giriş türünü işleyecek kadar çok yönlüdür.

Bazı biçimler için vekil türler kullanılır. Örneğin, JSON'un türü datetime yoktur ve bunun yerine değerleri ISO8601 göre biçimlendirilmiş dizeler olarak depolar datetime . Eşleyici böyle bir alanı okuduğunda, iç gösterim bir dize olarak kalır.

Çıkış kaydı alanları

Eşleyici, verilerin sınırlı tür sistemine sahip bir serileştirme biçiminden geldiği senaryolara uyum sağlamak için iç türleri çıkış türlerine dönüştürerek esnek olacak şekilde tasarlanmıştır. Aşağıdaki örnekler, dönüştürmelerin nasıl işleneceğini gösterir:

  • Sayısal türler: Duyarlık kaybı anlamına gelse bile bu türler diğer gösterimlere dönüştürülebilir. Örneğin, 64 bit kayan noktalı sayı (f64), 32 bit tamsayıya (i32) dönüştürülebilir.
  • Sayı dizeleri: Gelen kayıt gibi 123 bir dize içeriyorsa ve çıkış alanı 32 bitlik bir tamsayıysa, eşleyici değeri sayı olarak dönüştürür ve yazar.
  • Diğer türlerdeki dizeler:
    • Çıkış alanı ise datetime, eşleyici dizeyi ISO8601 biçimlendirilmiş datetimeolarak ayrıştırmaya çalışır.
    • Çıkış alanı ise binary/bytes, eşleyici dizeyi base64 ile kodlanmış bir dizeden seri durumdan çıkarmaya çalışır.
  • Boole değerleri:
    • Çıkış alanı sayısal ise olarak dönüştürülür 0/1 .
    • Çıkış alanı dizeyse olarak dönüştürülür true/false .

Türlerle dönüştürme formülü kullanma

Eşlemelerde isteğe bağlı bir formül, çıkış alanına yazılmadan önce girişteki verilerin nasıl işleneceğini belirtebilir. Formül belirtilmezse, eşleyici iç türü ve dönüştürme kurallarını kullanarak giriş alanını çıkışa kopyalar.

Bir formül belirtilirse, formüllerde kullanılabilen veri türleri şunlarla sınırlıdır:

  • Tam Sayılar
  • Kayan noktalı sayılar
  • Dizeler
  • Boolean değerleri
  • Önceki türlerin dizileri
  • Eksik değer

Map ve byte formüllere katılamaz.

Saatle (datetime, ve time) ilgili türler, durationsaniye cinsinden zamanı temsil eden tamsayı değerlerine dönüştürülür. Formül değerlendirmesinin ardından sonuçlar iç gösterimde depolanır ve geri dönüştürülmez. Örneğin, datetime saniyeye dönüştürülen bir tamsayı kalır. Değer alanlarda kullanılacaksa datetime , açık bir dönüştürme yöntemi uygulanmalıdır. Bir örnek, değeri otomatik olarak çıkış serileştirme biçiminin türüne dönüştürülen bir ISO8601 dizesine datetime dönüştürmektir.

Düzensiz türler kullanma

Diziler ve eksik değer gibi türlerde dikkat edilmesi gereken özel noktalar vardır.

Diziler

Diziler, birden çok öğeden tek bir değeri hesaplamak için toplama işlevleri kullanılarak işlenebilir. Örneğin, giriş kaydını kullanarak:

{
  "Measurements": [2.34, 12.3, 32.4]
}

Eşleme ile:

inputs: [
  'Measurements' // - $1
]
output: 'Measurement'
expression: 'min($1)'

Bu yapılandırma, çıkış alanı için dizideki Measurements en küçük değeri seçer.

Diziler birden çok tek değerden de oluşturulabilir:

inputs: [
  'minimum' // - - $1
  'maximum' // - - $2
  'average' // - - $3
  'mean'    // - - $4
]
output: 'stats'
expression: '($1, $2, $3, $4)'

Bu eşleme minimum, maksimum, ortalama ve ortalama değerlerini içeren bir dizi oluşturur.

Eksik değer

Eksik değer, senaryolarda kullanılan özel bir türdür, örneğin:

  • Alternatif bir değer sağlayarak girişteki eksik alanları işleme.
  • Bir alanı, varlığına göre koşullu olarak kaldırma.

Eksik bir değer kullanan örnek eşleme:

{
  "Employment": {      
    "Position": "Analyst",
    "BaseSalary": 75000,
    "WorkingHours": "Regular"
  }
}

Giriş kaydı alanını BaseSalary içerir, ancak bu isteğe bağlıdır. Alan eksikse bağlamsallaştırma veri kümesinden bir değer eklenmesi gerektiğini varsayalım:

{
  "Position": "Analyst",
  "BaseSalary": 70000,
  "WorkingHours": "Regular"
}

Eşleme, alanın giriş kaydında mevcut olup olmadığını denetleyebilir. Alan bulunursa, çıkış bu mevcut değeri alır. Aksi takdirde, çıkış değeri bağlam veri kümesinden alır. Örneğin:

inputs: [
  'BaseSalary' // - - - - - - - - - - - $1
  '$context(position).BaseSalary' //  - $2
]
output: 'BaseSalary'
expression: 'if($1 == (), $2, $1)'

üç conversion parametresi olan işlevini kullanır if :

  • İlk parametre bir koşuldur. Örnekte, giriş alanının alanının (diğer BaseSalaryadla) eksik değer olup olmadığını $1 denetler.
  • İkinci parametre, ilk parametredeki koşul true ise işlevin sonucudur. Bu örnekte bağlamsallaştırma BaseSalary veri kümesinin alanıdır (diğer adı olarak $2adlandırılır).
  • Üçüncü parametre, ilk parametre false ise koşulun değeridir.

Kullanılabilir işlevler

Veri akışları, dönüştürme formüllerinde kullanılabilecek bir dizi yerleşik işlev sağlar. Bu işlevler aritmetik, karşılaştırma ve dize işleme gibi yaygın işlemleri gerçekleştirmek için kullanılabilir. Kullanılabilir işlevler şunlardır:

İşlev Açıklama Örnekler
min Bir diziden en düşük değeri döndürür. min(2, 3, 1) döndürür 1, min($1) diziden en küçük değeri verir $1
max Bir diziden en büyük değeri döndürür. max(2, 3, 1) döndürür 3, max($1) diziden en büyük değeri verir $1
if Bir koşula göre değerler arasında dönüş. if($1 > 10, 'High', 'Low')değerinden 'High'büyükse $1 döndürür10, aksi takdirde'Low'
len Bir dizenin karakter uzunluğunu veya bir tanımlama grubundaki öğe sayısını döndürür. len("Azure") döndürür 5, len(1, 2, 3) döndürür 3, len($1) dizideki öğe sayısını verir $1
floor Bir sayıya eşit veya ondan küçük en büyük tamsayıyı döndürür. floor(2.9) Döndürür 2
round En yakın tamsayıyı bir sayıya döndürerek yarım durumları 0,0'dan uzağa yuvarlar. round(2.5) Döndürür 3
ceil Bir sayından büyük veya buna eşit en küçük tamsayıyı döndürür. ceil(2.1) Döndürür 3
scale Bir değeri bir aralıktan diğerine ölçeklendirin. scale($1, 0, 10, 0, 100) giriş değerini 0 ile 10 aralığından 0 ile 100 arasında ölçeklendirir

Dönüştürme işlevleri

Veri akışları sıcaklık, basınç, uzunluk, ağırlık ve hacim gibi yaygın birim dönüştürmeleri için çeşitli yerleşik dönüştürme işlevleri sağlar. Burada bazı örnekler verilmiştir:

Dönüştürme Formül İşlev adı
Santigrat'tan Fahrenheit'e F = (C * 9/5) + 32 cToF
Psi to bar Çubuk = PSI * 0,0689476 psiToBar
İnç - cm Cm = inç * 2,54 inToCm
Metreye ayak Ölçüm = ayak * 0,3048 ftToM
Pound'dan kilograma Kg = lbs * 0,453592 lbToKg
Litreye galon Litre = galon * 3.78541 galToL

Ters dönüştürmeler de desteklenir:

Dönüştürme Formül İşlev adı
Fahrenheit'ten Celsius'a C = (F - 32) * 5/9 fToC
Çubuk-PSI PSI = çubuk / 0,0689476 barToPsi
Cm to inç İnç = cm / 2,54 cmToIn
Metreden ayaka Ayak = ölçüm / 0,3048 mToFt
Kilogramdan pound'a Lbs = kg / 0,453592 kgToLb
Litreden galon'a Galon = litre / 3.78541 lToGal

Ayrıca, temel matematiksel formülleri kullanarak kendi dönüştürme işlevlerinizi tanımlayabilirsiniz. Sistem toplama (), çıkarma (+-), çarpma (*) ve bölme (/ gibi işleçleri destekler. Bu işleçler, doğru işlem sırasını sağlamak için parantezler kullanılarak ayarlanabilen standart öncelik kurallarına uyar. Bu sayede birim dönüşümlerini belirli gereksinimleri karşılayacak şekilde özelleştirebilirsiniz.

Önceliğe göre kullanılabilir işleçler

Operatör Açıklama
^ Üs: $1 ^ 3

En yüksek önceliğe sahip olduğundan Exponentiation , parantezler bu sırayı geçersiz kılmadığı sürece önce yürütülür:

  • $1 * 2 ^ 3 olarak yorumlanır $1 * 8 çünkü 2 ^ 3 parça ilk olarak, çarpmadan önce yürütülür.
  • ($1 * 2) ^ 3 üstelleştirmeden önce çarpmayı işler.
Operatör Açıklama
- Olumsuzlama
! Mantıksal değil

Negation ve Logical not yüksek önceliğe sahiptir, bu nedenle üslemenin söz konusu olduğu durumlar dışında her zaman yakın komşularına bağlı kalırlar:

  • -$1 * 2 önce olumsuzlar $1 ve sonra çarpar.
  • -($1 * 2) çarpar ve ardından sonucu olumsuzlar.
Operatör Açıklama
* Çarpma: $1 * 10
/ Bölme: $1 / 25 (Her iki bağımsız değişken de tamsayıysa sonuç bir tamsayıdır, aksi takdirde kayan değerdir)
% Modulo: $1 % 25

Multiplication, Divisionve Modulo, aynı önceliğe sahip, sıra parantezlerle değiştirilmediği sürece soldan sağa yürütülür.

Operatör Açıklama
+ Sayısal değerler için ekleme, dizeler için birleştirme
- Çıkarma

Addition ve Subtraction önceki gruptaki işlemlerle karşılaştırıldığında daha zayıf işlemler olarak kabul edilir:

  • $1 + 2 * 3 $1 + 6, yüksek önceliği nedeniyle ilk olarak yürütülür çünkü 2 * 3 ile sonuçlanırmultiplication.
  • ($1 + 2) * 3 önceliğini önceler AdditionMultiplication.
Operatör Açıklama
< Küçüktür
> Büyüktür
<= Küçüktür veya eşittir
>= Büyüktür veya eşittir
== Eşittir
!= Eşit değil

Comparisons sayısal, Boole ve dize değerleri üzerinde çalışır. Aritmetik işleçlerden daha düşük önceliğe sahip olduklarından sonuçları etkili bir şekilde karşılaştırmak için parantez gerekmez:

  • $1 * 2 <= $2 eşdeğeri, ($1 * 2) <= $2 olur.
Operatör Açıklama
|| Mantıksal VEYA
&& Mantıksal VE

Mantıksal işleçler koşulları zincirleme için kullanılır:

  • $1 > 100 && $2 > 200