Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In Azure IoT-bewerkingen neemt een maptransformatie elk binnenkomend bericht in een dataflowgrafiek en produceert een outputbericht op basis van jouw regels. U kunt velden een andere naam geven, ze opnieuw orden in nieuwe structuren, afgeleide waarden berekenen of ongewenste velden verwijderen. Door wildcardregels te gebruiken, kun je alle velden tegelijk kopiëren.
Zie Het overzicht van gegevensstroomgrafieken voor een overzicht van gegevensstroomgrafieken en hoe transformaties in een pijplijn worden samengesteld.
Transformaties gebruiken een expressietaal om waarden, testvoorwaarden en referentievelden te berekenen. Expressies verwijzen naar invoer op positie, niet op naam: de eerste invoer in de inputs lijst is $1, de tweede is $2, enzovoort. Ingebouwde functies zoals cToF converteren en manipuleren deze waarden.
Voor de volledige lijst van operatoren, functies, datatypes en metadatavelden, zie de referentie Expressions.
Vereiste voorwaarden
- Een exemplaar van Azure IoT-bewerkingen geïmplementeerd in een Kubernetes-cluster. Zie Deploy Azure IoT-bewerkingen voor meer informatie.
- Een standaardregistereindpunt dat naar
defaultmcr.microsoft.comverwijst wordt automatisch gemaakt tijdens de implementatie. De ingebouwde transformaties gebruiken dit eindpunt.
De Azure CLI voorbeelden in dit artikel gebruiken omgevingsvariabelen zodat je elke waarde één keer kunt instellen en vervolgens de commando's kunt kopiëren en plakken as-is. Als je de Azure IoT-bewerkingen Codespaces-omgeving vanuit de quickstart gebruikt, zijn deze variabelen al voor je ingesteld en kun je deze stap overslaan. Anders stel je de volgende omgevingsvariabelen in je shell voordat je de commando's uitvoert.
De volgende scripts stellen de meest gebruikte omgevingsvariabelen in:
| Omgevingsvariabele | Beschrijving |
|---|---|
SUBSCRIPTION_ID |
De ID van het abonnement dat je Azure IoT-bewerkingen-instantie bevat. |
RESOURCE_GROUP |
De naam van de resourcegroep die je Azure IoT-bewerkingen-instantie bevat. |
AIO_INSTANCE_NAME |
De naam van je Azure IoT-bewerkingen instance. Om je instanties op te sommen, voer az iot ops list -o tableje . |
CLUSTER_NAME |
De naam van de Azure Arc-enabled Kubernetes-cluster die jouw instantie host. |
LOCATION |
De Azure-regio om te gebruiken voor nieuwe bronnen, bijvoorbeeld eastus. |
SUBSCRIPTION_ID=<subscription-id>
RESOURCE_GROUP=<resource-group-name>
AIO_INSTANCE_NAME=<instance-name>
CLUSTER_NAME=<cluster-name>
LOCATION=<region>
Je hoeft alleen de variabelen in te stellen die dit artikel gebruikt. Dit artikel kan extra omgevingsvariabelen gebruiken voor de bronnamen die je kiest. Het artikel legt uit hoe je ze op de plek kunt plaatsen waar ze worden geïntroduceerd.
Hoe kaartregels werken
Elke kaartregel heeft vier delen:
| Vastgoed | Verplicht | Beschrijving |
|---|---|---|
inputs |
Ja | Lijst met veldpaden die moeten worden gelezen vanuit het binnenkomende bericht. |
output |
Ja | Veldpad waar het resultaat in het uitvoerbericht verschijnt. |
expression |
No | Formule toegepast op de invoerwaarden. Als je het weglaat, kopieert de eerste invoerwaarde direct. |
description |
No | Leesbaar label voor de regel, opgenomen in foutberichten. |
De maptransformatie wijst positievariabelen toe aan invoer in volgorde. Bijvoorbeeld, als inputs is , dan ['Position', 'Office'] is de waarde van $1 en Position is de waarde van $2Office.
De naam van een veld wijzigen
Als u de naam wilt wijzigen BirthDateDateOfBirth, wijst u één invoer toe aan een ander uitvoerpad. Je hebt geen uitdrukking nodig. De waarde wordt gekopieerd zoals het is.
In de mappingconfiguratie, voeg een regel toe:
| Configuratie | Waarde |
|---|---|
| Invoer | BirthDate |
| Uitvoer | DateOfBirth |
Velden opnieuw structureren
Gebruik punt notatie in het uitvoerpad om velden naar een geneste structuur te verplaatsen.
Voeg twee regels toe:
| Invoer | Uitvoer |
|---|---|
Name |
Employee.Name |
BirthDate |
Employee.DateOfBirth |
Op basis van deze invoer:
{
"Name": "Grace Owens",
"BirthDate": "19840202",
"Position": "Analyst"
}
Deze twee regels produceren:
{
"Employee": {
"Name": "Grace Owens",
"DateOfBirth": "19840202"
}
}
Alleen velden die in de uitvoer van een regel worden vermeld, worden weergegeven in het resultaat. Het resultaat bevat het Position veld niet omdat er geen regel het toewijst.
Meerdere invoer combineren
Wanneer je meerdere invoer vermeldt, gebruik dan hun positionele variabelen om ze samen te voegen tot een expressie.
Een regel toevoegen:
| Configuratie | Waarde |
|---|---|
| Ingangen |
Position, Office |
| Uitvoer | Employment.Position |
| Uitdrukking | $1 + ", " + $2 |
Gegeven Position: "Analyst" en Office: "Kent, WA", de uitvoer is "Analyst, Kent, WA".
Waarden transformeren met expressies
Gebruik het expression veld om ingebouwde functies of rekenkundige functies toe te passen. Het volgende voorbeeld gebruikt cToF, een ingebouwde eenheidsconversiefunctie die een Celsiuswaarde omzet naar Fahrenheit. Onthoud dat dit $1 verwijst naar de eerste invoer, niet naar een veldnaam.
Voor de volledige lijst van operatoren, functies en geavanceerde functies, zie de referentie Expressions. De referentiegroepen groeperen functies per categorie, zoals eenheidsconversie, schalen en afronden, wiskunde en stringfuncties .
Voeg een rekenregel toe. Als u bijvoorbeeld Celsius wilt converteren naar Fahrenheit:
| Configuratie | Waarde |
|---|---|
| Invoer | temperature |
| Uitvoer | temperature_f |
| Uitdrukking | cToF($1) |
Als u een sensor wilt schalen naar een bereik van 0-100, gebruikt u de expressie scale($1, 0, 4095, 0, 100).
Alle velden met jokertekens kopiëren
Wanneer de uitvoer nauw moet overeenkomen met de invoer met slechts enkele wijzigingen, gebruikt u een jokertekenregel om elk veld tegelijk te kopiëren. Voeg vervolgens regels toe om specifieke velden te overschrijven, toe te voegen of te verwijderen.
Voeg een passthrough-regel toe waarmee alle velden worden gekopieerd. Stel de invoer in op * en de uitvoer op *.
Vereisten voor jokertekenregels
- Een jokertekenregel moet de eerste regel in de kaartconfiguratie zijn.
- Een maptransformatie ondersteunt slechts één wildcard-regel.
- Het sterretje komt overeen met een of meer padsegmenten en moet een volledig segment vertegenwoordigen. De maptransformatie ondersteunt geen gedeeltelijke patronen zoals
partial*.
Prefix-jokertekens
Beperk de joker tot een specifiek voorvoegsel. Om alle velden van ColorProperties naar het rootniveau te flattenen:
Voeg een regel toe met invoer ColorProperties.* en uitvoer *.
Gegeven:
{
"ColorProperties": {
"Hue": "blue",
"Saturation": "90%",
"Brightness": "50%"
}
}
De uitvoer is:
{
"Hue": "blue",
"Saturation": "90%",
"Brightness": "50%"
}
Velden uit de uitvoer verwijderen
Stel de output in op een lege tekenreeks om specifieke velden uit te sluiten. Meestal gebruik je deze aanpak na een jokerregel: kopieer alles, en verwijder dan wat je niet nodig hebt.
- Voeg een passthrough-regel toe om alle velden te kopiëren.
- Voeg een verwijderregel toe en selecteer de velden die u wilt uitsluiten (bijvoorbeeld
passwordeninternal_id).
Een verwijderingsregel mag geen uitdrukking bevatten.
Jokertekens voor specifieke velden overschrijven
Wanneer een jokertekenregel en een specifieke regel beide overeenkomen met hetzelfde veld, heeft de meer specifieke regel voorrang.
- Voeg een passthrough-regel toe om alle velden te kopiëren.
- Voeg een rekenregel toe voor
temperaturemet de expressiecToF($1).
De kaarttransformatie past de specifieke regel toe op temperature en kopieert alle andere velden zoals ze zijn.
Metagegevensvelden gebruiken
Lees uit en schrijf naar berichten metadata zoals MQTT-onderwerpen en gebruikerseigenschappen. Zie metagegevensvelden in de verwijzing naar expressies.
Voeg een regel met invoer region en uitvoer $metadata.user_property.region toe om een veldwaarde naar een MQTT-gebruikerseigenschap te schrijven.
Zie Berichten doorsturen naar verschillende onderwerpen voor een volledig voorbeeld van dynamische onderwerproutering.
Laatst bekende waarde en standaardwaarden gebruiken
Wanneer sensorgegevens af en toe binnenkomen, kunt u ontbrekende velden invullen met de laatst bekende waarde of een statische standaardwaarde. Zie Laatst bekende waarde en Standaardwaarden in de verwijzing naar expressies.
Voeg een regel toe voor het temperature veld en schakel laatst bekende waarde in. Stel een standaardwaarde van 0 in als een terugvaloptie.
Deze regel gebruikt de huidige waarde wanneer deze aanwezig is, valt terug op de laatst bekende waarde en gebruikt 0 als er geen van beide beschikbaar is.
Verrijken met externe gegevens
Verrijking is optioneel. Je hebt het alleen nodig als je binnenkomende berichten wilt combineren met referentiegegevens die in de state store zijn opgeslagen, zoals een opzoektabel van apparaatmetadata. Als je berichten al alles bevatten wat je nodig hebt, sla dan deze sectie over.
Wanneer je verrijking nodig hebt, configureer dan een contextualisatiedataset die de runtime tijdens de verwerking opzoekt. Zoek bijvoorbeeld de metagegevens van een apparaat op op basis van de id en neem deze op in de uitvoer. Zie Verrijken met externe gegevens voor meer informatie.
Exclusieve functies voor gegevensstroomgrafiek
Gegevensstroomgrafieken ondersteunen verschillende functies die niet beschikbaar zijn in gegevensstroom-mapping builtInTransformation.
Standaardwaarden voor ontbrekende velden
Gebruik de ?? <default> syntaxis voor een invoer om een statische terugval te bieden wanneer een veld ontbreekt. Dit is eenvoudiger dan het schrijven van een if expressie om te controleren op lege waarden.
Stel in de transformatie van de kaartconfiguratie de invoer in om de ?? syntaxis op te nemen, gevolgd door de standaardwaarde. Voer bijvoorbeeld temperature ?? 0 in als het invoerveld dat moet worden gebruikt wanneer het temperatuurveld ontbreekt, 0.
Zie Standaardwaarden in de verwijzing naar expressies voor meer informatie over ondersteunde standaardtypen en het combineren van standaardwaarden met laatst bekende waarden.
Regex-functies
Gegevensstroomgrafieken ondersteunen reguliere expressiekoppeling en vervanging:
-
str::regex_matches(string, pattern): retourneert waar als de tekenreeks overeenkomt met het regex-patroon. -
str::regex_replace(string, pattern, replacement): vervangt alle regex-overeenkomsten door de vervangende tekenreeks.
Deze functies zijn handig in filterexpressies of voor het opschonen en transformeren van tekenreeksgegevens. Zie Tekenreeksfuncties in de verwijzing naar expressies voor de volledige lijst met tekenreeksfuncties.
Voorbeeld van volledige configuratie
Hier is een complete kaartconfiguratie waarmee alle velden worden gekopieerd, gevoelige gegevens worden verwijderd, een veld opnieuw wordt gestructureerd en een afgeleide waarde wordt berekend.
Maak in de bewerkingservaring een gegevensstroomgrafiek en voeg een kaarttransformatie toe. Voeg in het deelvenster voor kaartconfiguratie regels toe:
- Kopieer alle velden met een jokerteken-passthrough.
-
Verwijder gevoelige velden door de uitvoer in te stellen op leeg voor
passwordensecret_key. -
Herstructureer het
BirthDateveld inEmployee.DateOfBirth. -
Bereken een Fahrenheit-omrekening met behulp van de formule
cToF($1)op hettemperatureveld. -
Voeg de
PositionenOfficevelden samen met de formule$1 + ", " + $2.