Dela via


Berika data med hjälp av dataflöden

Viktigt!

Den här sidan innehåller instruktioner för att hantera Azure IoT Operations-komponenter med hjälp av Kubernetes-distributionsmanifest, som finns i förhandsversion. Den här funktionen har flera begränsningar och bör inte användas för produktionsarbetsbelastningar.

Juridiska villkor för Azure-funktioner i betaversion, förhandsversion eller som av någon annan anledning inte har gjorts allmänt tillgängliga ännu finns i kompletterande användningsvillkor för Microsoft Azure-förhandsversioner.

Du kan utöka data med hjälp av funktionen kontextualiseringsdatauppsättningar . När inkommande poster bearbetas kan du fråga dessa datauppsättningar baserat på villkor som är relaterade till fälten i den inkommande posten. Den här funktionen möjliggör dynamiska interaktioner. Data från dessa datauppsättningar kan användas för att komplettera information i utdatafälten och delta i komplexa beräkningar under mappningsprocessen.

Om du vill läsa in exempeldata i tillståndslagret använder du state store CLI.

Tänk dig till exempel följande datauppsättning med några poster, som representeras som JSON-poster:

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

Mapparen kommer åt referensdatauppsättningen som lagras i Azure IoT Operations-tillståndslagret med hjälp av ett nyckelvärde baserat på ett villkor som anges i mappningskonfigurationen. Nyckelnamn i tillståndslagret motsvarar en datauppsättning i dataflödeskonfigurationen.

datasets: [
  {
    key: 'position',
    inputs: [
      '$source.Position' //  - $1
      '$context.Position' // - $2
    ],
    expression: '$1 == $2'
  }
]

När en ny post bearbetas utför mapparen följande steg:

  • Databegäran: Mapparen skickar en begäran till tillståndslagret för att hämta datamängden som lagras under nyckeln Position.
  • Postmatchning: Mapparen frågar sedan den här datauppsättningen för att hitta den första posten där Position fältet i datamängden matchar fältet för Position den inkommande posten.
{
  inputs: [
    '$context(position).WorkingHours' //  - $1 
  ]
  output: 'WorkingHours'
}
{
  inputs: [
    'BaseSalary' // - - - - - - - - - - - - $1
    '$context(position).BaseSalary' //  - - $2
  ]
  output: 'BaseSalary'
  expression: 'if($1 == (), $2, $1)'
}

I det här exemplet läggs fältet WorkingHours till i utdataposten, medan det BaseSalary endast används villkorsstyrt när den inkommande posten inte innehåller BaseSalary fältet (eller om värdet är null om det är ett null-fält). Begäran om kontextualiseringsdata sker inte med varje inkommande post. Mapparen begär datauppsättningen och tar sedan emot meddelanden från tillståndslagret om ändringarna, medan den använder en cachelagrad version av datamängden.

Du kan använda flera datauppsättningar:

datasets: [
  {
    key: 'position'
    inputs: [
      '$source.Position'  // - $1
      '$context.Position' // - $2
    ],
    expression: '$1 == $2'
  }
  {
    key: 'permissions'
    inputs: [
      '$source.Position'  // - $1
      '$context.Position' // - $2
    ],
    expression: '$1 == $2'
  }
]

Använd sedan de blandade referenserna:

inputs: [
  '$context(position).WorkingHours'  // - $1
  '$context(permissions).NightShift' // - $2
]

Indatareferenserna använder nyckeln för datauppsättningen som position eller permission. Om nyckeln i tillståndsarkivet är obekväm att använda kan du definiera ett alias:

datasets: [
  {
    key: 'datasets.parag10.rule42 as position'
    inputs: [
      '$source.Position'  // - $1
      '$context.Position' // - $2
    ],
    expression: '$1 == $2'
  }
]

Konfigurationen byter namn på datauppsättningen med nyckeln datasets.parag10.rule42 till position.