Gegevens converteren met behulp van gegevensstroomconversies
Belangrijk
Deze pagina bevat instructies voor het beheren van Azure IoT Operations-onderdelen met behulp van Kubernetes-implementatiemanifesten, die in preview zijn. Deze functie is voorzien van verschillende beperkingen en mag niet worden gebruikt voor productieworkloads.
Raadpleeg de Aanvullende voorwaarden voor Microsoft Azure-previews voor juridische voorwaarden die van toepassing zijn op Azure-functies die in bèta of preview zijn of die anders nog niet algemeen beschikbaar zijn.
U kunt gegevensstroomconversies gebruiken om gegevens te transformeren in Azure IoT Operations. Het conversieelement in een gegevensstroom wordt gebruikt om waarden voor uitvoervelden te berekenen. U kunt invoervelden, beschikbare bewerkingen, gegevenstypen en typeconversies gebruiken in gegevensstroomconversies.
Het conversieelement voor gegevensstromen wordt gebruikt voor het berekenen van waarden voor uitvoervelden:
inputs: [
'*.Max' // - $1
'*.Min' // - $2
]
output: 'ColorProperties.*'
expression: '($1 + $2) / 2'
Er zijn verschillende aspecten die u moet begrijpen over conversies:
- Verwijzing naar invoervelden: verwijzing naar waarden uit invoervelden in de conversieformule.
- Beschikbare bewerkingen: bewerkingen die kunnen worden gebruikt in conversies. Bijvoorbeeld optellen, aftrekken, vermenigvuldigen en delen.
- Gegevenstypen: typen gegevens die een formule kan verwerken en bewerken. Bijvoorbeeld gehele getallen, drijvende komma en tekenreeks.
- Typeconversies: hoe gegevenstypen worden geconverteerd tussen de waarden van het invoerveld, de formule-evaluatie en de uitvoervelden.
Invoervelden
In conversies kunnen formules worden uitgevoerd op statische waarden, zoals een getal zoals 25 of parameters die zijn afgeleid van invoervelden. Een toewijzing definieert deze invoervelden waartoe de formule toegang heeft. Naar elk veld wordt verwezen volgens de volgorde in de invoerlijst:
inputs: [
'*.Max' // - $1
'*.Min' // - $2
'*.Mid.Avg' // - $3
'*.Mid.Mean' // - $4
]
output: 'ColorProperties.*'
expression: '($1, $2, $3, $4)'
In dit voorbeeld resulteert de conversie in een matrix met de waarden van [Max, Min, Mid.Avg, Mid.Mean]
. De opmerkingen in het YAML-bestand (# - $1
, # - $2
) zijn optioneel, maar ze helpen bij het verduidelijken van de verbinding tussen elke veldeigenschap en de bijbehorende rol in de conversieformule.
Data types
Verschillende serialisatie-indelingen ondersteunen verschillende gegevenstypen. JSON biedt bijvoorbeeld een aantal primitieve typen: tekenreeks, getal, Booleaanse waarde en null. Het bevat ook matrices van deze primitieve typen.
Wanneer de mapper een invoereigenschap leest, wordt deze geconverteerd naar een intern type. Deze conversie is nodig voor het opslaan van de gegevens in het geheugen totdat deze zijn weggeschreven naar een uitvoerveld. De conversie naar een intern type gebeurt ongeacht of de indelingen voor invoer- en uitvoerserialisatie hetzelfde zijn.
De interne weergave maakt gebruik van de volgende gegevenstypen:
Type | Description |
---|---|
bool |
Logische waar/onwaar. |
integer |
Opgeslagen als een geheel getal van 128-bits teken. |
float |
Opgeslagen als 64-bits drijvendekommanummer. |
string |
Een UTF-8-tekenreeks. |
bytes |
Binaire gegevens, een tekenreeks met niet-ondertekende waarden van 8 bits. |
datetime |
UTC of lokale tijd met nanoseconde resolutie. |
time |
Tijdstip van de dag met nanoseconde resolutie. |
duration |
Een duur met nanoseconde resolutie. |
array |
Een matrix van alle typen die eerder worden vermeld. |
map |
Een vector van (sleutel-, waardeparen) van alle eerder vermelde typen. |
Invoerrecordvelden
Wanneer een invoerrecordveld wordt gelezen, wordt het onderliggende type geconverteerd naar een van deze interne typevarianten. De interne weergave is veelzijdig genoeg om de meeste invoertypen met minimale of geen conversie te verwerken.
Voor sommige indelingen worden surrogaattypen gebruikt. JSON heeft datetime
bijvoorbeeld geen type en slaat datetime
in plaats daarvan waarden op als tekenreeksen die zijn opgemaakt volgens ISO8601. Wanneer de mapper een dergelijk veld leest, blijft de interne weergave een tekenreeks.
Uitvoerrecordvelden
De mapper is ontworpen om flexibel te zijn door interne typen te converteren naar uitvoertypen voor scenario's waarin gegevens afkomstig zijn van een serialisatie-indeling met een beperkt typesysteem. In de volgende voorbeelden ziet u hoe conversies worden verwerkt:
- Numerieke typen: deze typen kunnen worden geconverteerd naar andere weergaven, zelfs als dit betekent dat precisie verloren gaat. Een 64-bits drijvendekommagetal (
f64
) kan bijvoorbeeld worden geconverteerd naar een 32-bits geheel getal (i32
). - Tekenreeksen naar getallen: Als de binnenkomende record een tekenreeks bevat zoals
123
en het uitvoerveld een 32-bits geheel getal is, converteert en schrijft de mapper de waarde als een getal. - Tekenreeksen naar andere typen:
- Als het uitvoerveld is
datetime
, probeert de mapper de tekenreeks te parseren als een ISO8601 opgemaaktdatetime
. - Als het uitvoerveld is
binary/bytes
, probeert de mapper deserialiseren van de tekenreeks van een met base64 gecodeerde tekenreeks.
- Als het uitvoerveld is
- Booleaanse waarden:
- Wordt geconverteerd naar
0
/1
of het uitvoerveld numeriek is. - Wordt geconverteerd naar
true
/false
of het uitvoerveld een tekenreeks is.
- Wordt geconverteerd naar
Een conversieformule gebruiken met typen
In toewijzingen kan een optionele formule opgeven hoe gegevens uit de invoer worden verwerkt voordat ze naar het uitvoerveld worden geschreven. Als er geen formule is opgegeven, kopieert de mapper het invoerveld naar de uitvoer met behulp van het interne type en de conversieregels.
Als er een formule is opgegeven, zijn de gegevenstypen die beschikbaar zijn voor gebruik in formules beperkt tot:
- Gehele getallen
- Getallen met drijvende komma
- Tekenreeksen
- Booleaans
- Matrices van de voorgaande typen
- Ontbrekende waarde
Map
en byte
kan niet deelnemen aan formules.
Typen die betrekking hebben op tijd (datetime
time
, en duration
) worden geconverteerd naar gehele getallen die de tijd in seconden vertegenwoordigen. Na de evaluatie van formules worden de resultaten opgeslagen in de interne weergave en niet terug geconverteerd. Geconverteerd naar seconden blijft bijvoorbeeld datetime
een geheel getal. Als de waarde wordt gebruikt in datetime
velden, moet er een expliciete conversiemethode worden toegepast. Een voorbeeld is het converteren van de waarde naar een ISO8601 tekenreeks die automatisch wordt geconverteerd naar het datetime
type uitvoerserialisatieindeling.
Onregelmatige typen gebruiken
Speciale overwegingen zijn van toepassing op typen, zoals matrices en ontbrekende waarde.
Matrices
Matrices kunnen worden verwerkt met behulp van aggregatiefuncties om één waarde van meerdere elementen te berekenen. Bijvoorbeeld met behulp van de invoerrecord:
{
"Measurements": [2.34, 12.3, 32.4]
}
Met de toewijzing:
inputs: [
'Measurements' // - $1
]
output: 'Measurement'
expression: 'min($1)'
Deze configuratie selecteert de kleinste waarde in de Measurements
matrix voor het uitvoerveld.
Matrices kunnen ook worden gemaakt op basis van meerdere waarden:
inputs: [
'minimum' // - - $1
'maximum' // - - $2
'average' // - - $3
'mean' // - - $4
]
output: 'stats'
expression: '($1, $2, $3, $4)'
Met deze toewijzing maakt u een matrix die het minimum, maximum, gemiddelde en gemiddelde bevat.
Ontbrekende waarde
Ontbrekende waarde is een speciaal type dat wordt gebruikt in scenario's, zoals:
- Ontbrekende velden in de invoer verwerken door een alternatieve waarde op te geven.
- Een veld voorwaardelijk verwijderen op basis van de aanwezigheid ervan.
Voorbeeldtoewijzing die gebruikmaakt van een ontbrekende waarde:
{
"Employment": {
"Position": "Analyst",
"BaseSalary": 75000,
"WorkingHours": "Regular"
}
}
De invoerrecord bevat het BaseSalary
veld, maar mogelijk is dat optioneel. Stel dat als het veld ontbreekt, een waarde moet worden toegevoegd vanuit een contextuele gegevensset:
{
"Position": "Analyst",
"BaseSalary": 70000,
"WorkingHours": "Regular"
}
Een toewijzing kan controleren of het veld aanwezig is in de invoerrecord. Als het veld wordt gevonden, ontvangt de uitvoer die bestaande waarde. Anders ontvangt de uitvoer de waarde van de contextgegevensset. Voorbeeld:
inputs: [
'BaseSalary' // - - - - - - - - - - - $1
'$context(position).BaseSalary' // - $2
]
output: 'BaseSalary'
expression: 'if($1 == (), $2, $1)'
De conversion
functie gebruikt de if
functie met drie parameters:
- De eerste parameter is een voorwaarde. In het voorbeeld wordt gecontroleerd of het
BaseSalary
veld van het invoerveld (aliased as$1
) de ontbrekende waarde is. - De tweede parameter is het resultaat van de functie als de voorwaarde in de eerste parameter waar is. In dit voorbeeld is dit het
BaseSalary
veld van de contextgegevensset (alias genoemd als$2
). - De derde parameter is de waarde voor de voorwaarde als de eerste parameter onwaar is.
Beschikbare functies
Gegevensstromen bieden een set ingebouwde functies die kunnen worden gebruikt in conversieformules. Deze functies kunnen worden gebruikt om algemene bewerkingen uit te voeren, zoals rekenkundige bewerkingen, vergelijkingen en tekenreeksbewerkingen. De beschikbare functies zijn:
Functie | Beschrijving | Voorbeelden |
---|---|---|
min |
Retourneert de minimumwaarde van een matrix. | min(2, 3, 1) retourneert 1 , min($1) retourneert de minimumwaarde van de matrix $1 |
max |
Retourneert de maximumwaarde van een matrix. | max(2, 3, 1) retourneert 3 , max($1) retourneert de maximumwaarde van de matrix $1 |
if |
Retourneren tussen waarden op basis van een voorwaarde. | if($1 > 10, 'High', 'Low') retourneert 'High' als $1 deze groter is dan 10 , anders 'Low' |
len |
Retourneert de tekenlengte van een tekenreeks of het aantal elementen in een tuple. | len("Azure") retourneert, len(1, 2, 3) retourneert5 3 , len($1) retourneert het aantal elementen in de matrix$1 |
floor |
Hiermee wordt het grootste gehele getal geretourneerd dat kleiner is dan of gelijk is aan een getal. | floor(2.9) Retourneert 2 |
round |
Retourneer het dichtstbijzijnde gehele getal naar een getal, waarbij halve richtingen worden afgerond van 0,0. | round(2.5) Retourneert 3 |
ceil |
Retourneert het kleinste gehele getal dat groter is dan of gelijk is aan een getal. | ceil(2.1) Retourneert 3 |
scale |
Schaal een waarde van het ene bereik naar het andere. | scale($1, 0, 10, 0, 100) schaalt de invoerwaarde van het bereik 0 tot 10 naar het bereik 0 tot 100 |
Conversiefuncties
Gegevensstromen bieden verschillende ingebouwde conversiefuncties voor algemene eenheidsconversies, zoals temperatuur, druk, lengte, gewicht en volume. Hieronder volgen een aantal voorbeelden:
Conversie | Formule | Functienaam |
---|---|---|
Celsius tot Fahrenheit | F = (C * 9/5) + 32 | cToF |
PSI naar staaf | Staaf = PSI * 0,0689476 | psiToBar |
Inch tot cm | Cm = inch * 2,54 | inToCm |
Voet naar meter | Meter = voet * 0,3048 | ftToM |
Lbs tot kg | Kg = lbs * 0,453592 | lbToKg |
Gallon naar liter | Liter = gallons * 3,78541 | galToL |
Omgekeerde conversies worden ook ondersteund:
Conversie | Formule | Functienaam |
---|---|---|
Fahrenheit naar Celsius | C = (F - 32) * 5/9 | fToC |
Staaf naar PSI | PSI = staaf / 0,0689476 | barToPsi |
Cm tot inch | Inch = cm / 2,54 | cmToIn |
Meter tot voet | Voet = meter / 0,3048 | mToFt |
Kg tot lbs | Lbs = kg / 0,453592 | kgToLb |
Liter naar gallons | Gallons = liter / 3,78541 | lToGal |
Daarnaast kunt u uw eigen conversiefuncties definiëren met behulp van eenvoudige wiskundige formules. Het systeem ondersteunt operators zoals optellen (+
), aftrekken (-
), vermenigvuldigen (*
) en delen (/
). Deze operators volgen de standaardregels van prioriteit, die kunnen worden aangepast met haakjes om de juiste volgorde van bewerkingen te garanderen. Hiermee kunt u eenheidsconversies aanpassen aan specifieke behoeften.
Beschikbare operators op prioriteit
Operator | Beschrijving |
---|---|
^ | Exponentiatie: $ 1 ^ 3 |
Omdat Exponentiation
de hoogste prioriteit heeft, wordt deze eerst uitgevoerd, tenzij haakjes deze volgorde overschrijven:
$1 * 2 ^ 3
wordt geïnterpreteerd als$1 * 8
omdat het2 ^ 3
onderdeel eerst wordt uitgevoerd, vóór vermenigvuldigen.($1 * 2) ^ 3
verwerkt de vermenigvuldiging vóór exponentiatie.
Operator | Beschrijving |
---|---|
- | Negatie |
! | Logisch niet |
Negation
en Logical not
hebben hoge prioriteit, zodat ze altijd bij hun directe buur blijven, behalve wanneer exponentiatie betrokken is:
-$1 * 2
negeert$1
eerst en vermenigvuldigt vervolgens.-($1 * 2)
vermenigvuldigt het en negeert het resultaat.
Operator | Beschrijving |
---|---|
* | Vermenigvuldiging: $ 1 * 10 |
/ | Deling: $ 1 / 25 (resultaat is een geheel getal als beide argumenten gehele getallen zijn, anders zwevend) |
% | Modulo: $ 1 % 25 |
Multiplication
, Division
en Modulo
, met dezelfde prioriteit, worden van links naar rechts uitgevoerd, tenzij de volgorde wordt gewijzigd door haakjes.
Operator | Beschrijving |
---|---|
+ | Optellen voor numerieke waarden, samenvoeging voor tekenreeksen |
- | Aftrekken |
Addition
en Subtraction
worden beschouwd als zwakkere bewerkingen vergeleken met de bewerkingen in de vorige groep:
$1 + 2 * 3
resulteert in$1 + 6
omdat2 * 3
het eerst wordt uitgevoerd vanwege de hogere prioriteit vanmultiplication
.($1 + 2) * 3
prioriteertAddition
vóórMultiplication
.
Operator | Beschrijving |
---|---|
< | Kleiner dan |
> | Groter dan |
<= | Kleiner dan of gelijk aan |
>= | Groter dan of gelijk aan |
== | Gelijk aan |
!= | Niet gelijk aan |
Comparisons
werken op numerieke, Booleaanse en tekenreekswaarden. Omdat ze een lagere prioriteit hebben dan rekenkundige operatoren, zijn er geen haakjes nodig om de resultaten effectief te vergelijken:
$1 * 2 <= $2
is equivalent aan($1 * 2) <= $2
.
Operator | Beschrijving |
---|---|
|| | Logische OR |
&& | Logische EN |
Logische operators worden gebruikt om voorwaarden te koppelen:
$1 > 100 && $2 > 200