Condividi tramite


Filtrare e instradare i dati nei grafici del flusso di dati

Importante

Questa pagina include istruzioni per la gestione dei componenti Azure IoT Operations usando i manifesti di distribuzione kubernetes, disponibile in ANTEPRIMA. Questa funzionalità viene fornita con diverse limitazioni e non deve essere usata per i carichi di lavoro di produzione.

Consultare i Termini supplementari di utilizzo per le anteprime di Microsoft Azure per i termini legali applicabili alle funzionalità di Azure in versione beta, anteprima o non ancora rilasciate in versione generale.

I grafici del flusso di dati offrono due modi per controllare i messaggi che passano attraverso la pipeline: i filtri eliminano i messaggi indesiderati e i branch trasformano e instradano ogni messaggio verso uno dei due percorsi in base a una condizione. Dopo la diramazione, una trasformazione concat unisce nuovamente i percorsi.

Per una panoramica dei grafici del flusso di dati e della composizione delle trasformazioni in una pipeline, vedere Panoramica dei grafici del flusso di dati.

Prerequisiti

  • Istanza di Azure IoT Operations distribuita in un cluster Kubernetes abilitato per Arc. Per altre informazioni, vedere Deploy Azure IoT Operations.
  • Un endpoint del Registro di sistema predefinito denominato default che punta a mcr.microsoft.com viene creato automaticamente durante la distribuzione. Le trasformazioni predefinite usano questo endpoint.

Trasformazione filtro

Una trasformazione filtro valuta ogni messaggio in arrivo rispetto a una o più regole e decide se il messaggio continua attraverso la pipeline o viene eliminato.

Funzionamento delle regole di filtro

Ogni regola di filtro ha queste proprietà:

Proprietà Obbligatorio Descrizione
inputs Elenco dei percorsi dei campi da leggere dal messaggio in arrivo.
expression Formula applicata ai valori di input. Deve restituire un valore booleano.
description No Etichetta leggibile usata nei messaggi di errore.

Gli input vengono assegnate variabili posizionali in base all'ordine: il primo input è $1, il secondo è $2e così via.

Quando si definiscono più regole, usano la logica OR: se una regola restituisce true, il messaggio viene eliminato. Il motore va in cortocircuito una volta che una regola corrisponde.

Vincoli di chiave:

  • L'espressione è obbligatoria. Ogni regola di filtro deve includere un oggetto expression.
  • Nessun input con caratteri jolly. Ogni input deve fare riferimento a un percorso di campo specifico.
  • I campi mancanti causano errori. Se un campo a cui si fa riferimento in inputs non esiste, il filtro restituisce un errore anziché passare automaticamente il messaggio.
  • I risultati non booleani causano errori. Se un'espressione restituisce un valore non booleano,ad esempio una stringa o un numero, il filtro restituisce un errore.

Eliminare i messaggi in base alla condizione

Per eliminare i messaggi in cui la temperatura supera 100:

Nella configurazione della trasformazione del filtro aggiungere una regola:

Impostazione Valore
Inserimento temperature
Expression $1 > 100

I messaggi in cui la temperatura è di 100 o meno vengono trasmessi. I messaggi superiori a 100 vengono eliminati.

Usare più condizioni

Quando si definiscono più regole, il filtro elimina il messaggio se una regola corrisponde:

Aggiungere due regole:

Inserimento Expression Descrizione
temperature $1 > 100 Riduzione della temperatura elevata
humidity $1 > 95 Eliminare l'umidità elevata
Message regola della temperatura regola di umidità Result
{"temperature": 150, "humidity": 60} true falso Dropped
{"temperature": 80, "humidity": 98} falso true Dropped
{"temperature": 80, "humidity": 60} falso falso Pass

Suggerimento

Usare più input in una regola quando è necessaria la logica AND tra i campi. Usare più regole quando è necessaria la logica OR in condizioni indipendenti.

Usare espressioni complesse

Fare riferimento a più campi in una singola regola e combinarli con operatori logici:

Aggiungere una regola con gli input temperature e humidity, e l'espressione $1 > 30 && $2 < 60.

Per l'elenco completo di operatori e funzioni, vedere Riferimenti alle espressioni.

Convalidare i messaggi in base a uno schema

È possibile configurare una trasformazione di filtro per convalidare i messaggi in ingresso in base a uno schema JSON prima dell'esecuzione delle regole di filtro. I messaggi che non sono conformi allo schema vengono eliminati immediatamente.

Per abilitare la convalida dello schema, impostare su validateSchematrue nella configurazione del filtro. Se abilitato, il filtro recupera lo schema dall'impostazione dell'origine del flusso di schemaRef dati.

Istruzioni:

  • Usare un solo filtro di convalida per ogni pipeline.
  • Posizionare prima il filtro di convalida in modo che i messaggi non validi vengano eliminati prima di altre elaborazioni.
  • Le regole di filtro vengono comunque applicate dopo il passaggio della convalida dello schema. Se è necessaria solo la convalida dello schema, lasciare vuote le regole di filtro.

Per informazioni sulla configurazione degli schemi, vedere Informazioni sugli schemi dei messaggi.

Arricchire le regole di filtro con dati esterni

Le regole di filtro supportano i set di dati, che consentono di confrontare i valori con i dati di un archivio stati esterno. Per informazioni dettagliate sulla configurazione dei set di dati, vedere Arricchire con dati esterni.

Configurazione completa del filtro

Nella configurazione della trasformazione del filtro aggiungere una o più regole con input ed espressioni booleane. Facoltativamente, abilitare la convalida dello schema e configurare i set di dati per le ricerche di arricchimento.

Chiave Obbligatorio Descrizione
filter Matrice di regole di filtro.
datasets No Matrice di definizioni di set di dati per le ricerche di arricchimento.
validateSchema No Quando true, convalida i messaggi rispetto a uno schema JSON prima dell'esecuzione delle regole di filtro. Il valore predefinito è false.

Trasformazione del ramo

Una trasformazione di ramo valuta una condizione in ogni messaggio in arrivo e la indirizza a uno dei due percorsi di output: true o false. A differenza di un filtro (che elimina i messaggi), un ramo mantiene ogni messaggio e lo indirizza verso il basso nel percorso appropriato.

Funzionamento della diramazione

Ogni messaggio va esattamente a uno dei due percorsi. Non viene eliminato nulla.

Vincoli di chiave:

  • L'espressione di ramo deve restituire un valore booleano. I risultati non booleani causano un errore (a differenza del filtro, che genera errori anche per i risultati non booleani).
  • Nessun input con caratteri jolly.
  • Esattamente una regola di ramificazione. La branch chiave accetta un singolo oggetto, non una matrice.

Importante

La diramazione suddivide i messaggi in percorsi di elaborazione separati, ma tutti i percorsi devono essere uniti usando una trasformazione concat prima di raggiungere la destinazione. Considerare la diramazione come un modo per applicare trasformazioni diverse a messaggi diversi, non come un modo per instradare verso più endpoint.

Definire una regola di ramo

Per creare un ramo dei messaggi in base a una soglia di gravità:

Nella configurazione della trasformazione del ramo impostare:

Impostazione Valore
Inserimento severity
Expression $1 > 5

I messaggi in cui severity è maggiore di 5 passano al percorso true. Tutti gli altri vanno al percorso false.

Connettere gli output dei rami

Nella configurazione della pipeline usare il nome del nodo seguito da .output.true o .output.false per collegare ogni percorso a una trasformazione downstream.

Nell'editor del grafico del flusso di dati, trascinare le connessioni dagli output vero e falso della trasformazione di ramo alle trasformazioni downstream adatte.

Unire percorsi con la funzione "concat"

Tutti i percorsi dei rami devono convergere prima di raggiungere una destinazione. Una operazione di concatenazione unisce i dati. Non ha alcuna configurazione e nessuna regola. I messaggi provenienti da tutti gli input connessi passano senza modifiche.

Aggiungere una trasformazione concat al canvas e connettere entrambi i percorsi dei rami, quindi connettere il concat alla destinazione.

Esempio: filtrare, diramare e unire

Questo esempio end-to-end filtra letture non valide, si dirama in base alla gravità, applica diverse trasformazioni della mappa a ogni percorso e unisce i risultati.

Screenshot del canvas dell'esperienza operativa che mostra un filtro, un ramo, una mappa, una concat e una pipeline di destinazione.

Per compilare questa pipeline nell'esperienza Operazioni:

  1. Creare un grafo del flusso di dati e aggiungere un'origine che legge da telemetry/sensors.
  2. Aggiungere una trasformazione di filtro . Configurare una regola che elimina i messaggi in cui temperature > 1000.
  3. Aggiungere una trasformazione di ramo . Configurare la condizione severity > 5 per instradare i messaggi con gravità elevata al percorso vero.
  4. Aggiungere una trasformazione mappa sul percorso vero. Configurare le regole per rinominare deviceId in id, temperature in temp, e aggiungere un campo alert impostato su true.
  5. Aggiungere una trasformazione mappa sul percorso false. Configurare le regole per rinominare deviceId in id e temperature in temp.
  6. Aggiungere una trasformazione concat per unire entrambi i percorsi.
  7. Aggiungere una destinazione che invia a telemetry/processed.
  8. Connettere gli elementi: sorgente → filtro → ramo → (percorso vero: mappa degli avvisi, percorso falso: mappa normale) → concat → destinazione.

Passaggi successivi