Share via


Azure Digital Twins-frågeprogram för Azure Data Explorer

Den här artikeln beskriver plugin-programmet för Azure Digital Twin-frågor för Azure Data Explorer, hur du använder Azure Data Explorer IoT-data med Azure Digital Twins, hur du mappar data i Azure Data Explorer och Azure Digital Twins med mera.

Med Plugin-programmet Azure Digital Twins för Azure Data Explorer kan du köra Azure Data Explorer-frågor som kommer åt och kombinerar data i Azure Digital Twins-grafen och Azure Data Explorer-tidsseriedatabaser. Använd plugin-programmet för att kontextualisera olika tidsseriedata genom att resonera mellan digitala tvillingar och deras relationer för att få insikter om beteendet för modellerade miljöer.

Med det här plugin-programmet kan du till exempel skriva en Kusto-fråga som:

  1. Väljer digitala tvillingar av intresse via Azure Digital Twins-frågeprogrammet,
  2. Kopplar dessa tvillingar mot respektive tidsserie i Azure Data Explorer och sedan
  3. Utför avancerad tidsserieanalys på dessa tvillingar.

Genom att kombinera data från ett tvillingdiagram i Azure Digital Twins med tidsseriedata i Azure Data Explorer kan du förstå driftsbeteendet för olika delar av lösningen.

Använda plugin-programmet

Du kan anropa plugin-programmet i en Kusto-fråga med följande kommando. Det finns två platshållare och <Azure-Digital-Twins-endpoint><Azure-Digital-Twins-query>, som är strängar som representerar Azure Digital Twins-instansslutpunkten respektive Azure Digital Twins-frågan.

evaluate azure_digital_twins_query_request(<Azure-Digital-Twins-endpoint>, <Azure-Digital-Twins-query>) 

Plugin-programmet fungerar genom att anropa Azure Digital Twins Query API och frågespråkstrukturen är densamma som när du använder API:et, med två undantag:

  • Jokertecknet * i SELECT -satsen stöds inte. I stället bör Azure Digital Twin-frågor som körs med hjälp av plugin-programmet använda alias i SELECT -satsen.

    Tänk dig till exempel azure digital twins-frågan nedan som körs med hjälp av API:et:

    SELECT * FROM DIGITALTWINS
    

    Om du vill köra den frågan när du använder plugin-programmet bör den skrivas om så här:

    SELECT T FROM DIGITALTWINS T
    
  • Kolumnnamn som returneras av plugin-programmet kanske inte börjar med .$ Om du använder alias i SELECT -satsen kan du också undvika det här scenariot.

    Tänk dig till exempel azure digital twins-frågan nedan som körs med hjälp av API:et:

    SELECT T.$dtId, T.Temperature FROM DIGITALTWINS T
    

    Om du vill köra den frågan när du använder plugin-programmet bör den skrivas om så här:

    SELECT T.$dtId as tid, T.Temperature FROM DIGITALTWINS T
    

Viktigt!

Användaren av plugin-programmet måste beviljas rollen Azure Digital Twins Data Reader eller rollen Azure Digital Twins-dataägare eftersom användarens Microsoft Entra-token används för att autentisera. Information om hur du tilldelar den här rollen finns i Security for Azure Digital Twins-lösningar.

Mer information om hur du använder plugin-programmet finns i Kusto-dokumentationen för plugin-programmet azure_digital_twins_query_request.

Om du vill se exempelfrågor och slutföra en genomgång med exempeldata kan du läsa Azure Digital Twins-frågeprogrammet för Azure Data Explorer: Exempelfrågor och genomgång i GitHub.

Mata in Azure Digital Twins-data i Azure Data Explorer

Innan du frågar med plugin-programmet måste du mata in dina Azure Digital Twins-data i Azure Data Explorer. Det finns två huvudsakliga sätt att göra detta: via funktionen för datahistorik eller genom direkt inmatning. I följande avsnitt beskrivs dessa alternativ mer utförligt.

Mata in med datahistorik

Det enklaste sättet att mata in IoT-data från Azure Digital Twins i Azure Data Explorer är att använda funktionen för datahistorik . Med den här funktionen kan du konfigurera en anslutning mellan din Azure Digital Twins-instans och ett Azure Data Explorer-kluster och grafuppdateringar (inklusive uppdateringar av tvillingegenskap, händelser för tvillinglivscykel och relationslivscykelhändelser) historiseras automatiskt till klustret. Det här är ett bra val om du använder enhetstelemetridata för att väcka dina digitala tvillingar till liv. Mer information om den här funktionen finns i Datahistorik (med Azure Data Explorer).

Direkt inmatning

Du kan också välja att mata in IoT-data direkt i ditt Azure Data Explorer-kluster från IoT Hub eller från andra källor. Sedan används Azure Digital Twins-grafen för att kontextualisera tidsseriedata med hjälp av gemensamma Azure Digital Twins-/Azure Data Explorer-frågor. Det här alternativet är ett bra val för direktinmatningsarbetsbelastningar– men du kommer inte att kunna använda Azure Digital Twins händelsebaserade arkitektur för att uppdatera andra tvillingar, utlösa underordnade tjänster eller generera meddelanden när tvillingar ändrar tillstånd. Mer information om den här processen finns i resten av det här avsnittet.

Mappa data i Azure Data Explorer och Azure Digital Twins

Om du matar in tidsseriedata direkt i Azure Data Explorer kan du behöva konvertera dessa rådata för tidsserier till ett schema som är lämpligt för gemensamma Azure Digital Twins-/Azure Data Explorer-frågor.

Med en uppdateringsprincip i Azure Data Explorer kan du automatiskt transformera och lägga till data i en måltabell när nya data infogas i en källtabell.

Om sensor-ID:t i enhetens telemetridata skiljer sig från motsvarande tvilling-ID i Azure Digital Twins kan du använda en uppdateringsprincip för att utöka dina rådata för tidsserier med tvilling-ID:t och spara dem i en måltabell. Med hjälp av tvilling-ID:t kan måltabellen sedan kopplas mot de digitala tvillingar som valts av Plugin-programmet Azure Digital Twins.

Anta till exempel att du har skapat följande tabell för att lagra rådata för tidsserier som flödar till din Azure Data Explorer-instans.

.create-merge table rawData (Timestamp:datetime, someId:string, Value:string, ValueType:string)  

Du kan skapa en mappningstabell för att relatera tidsserie-ID:t med tvilling-ID:t och andra valfria fält.

.create-merge table mappingTable (someId:string, twinId:string, otherMetadata:string) 

Skapa sedan en måltabell för att lagra berikade tidsseriedata.

.create-merge table timeseriesSilver (twinId:string, Timestamp:datetime, someId:string, otherMetadata:string, ValueNumeric:real, ValueString:string)  

Skapa sedan en funktion Update_rawData för att utöka rådata genom att koppla den till mappningstabellen. Om du gör det läggs tvilling-ID:t till i den resulterande måltabellen.

.create-or-alter function with (folder = "Update", skipvalidation = "true") Update_rawData() { 
rawData 
| join kind=leftouter mappingTable on someId 
| project 
    Timestamp, ValueNumeric = toreal(Value), ValueString = Value, ... 
} 

Slutligen skapar du en uppdateringsprincip för att anropa funktionen och uppdatera måltabellen.

.alter table timeseriesSilver policy update 
@'[{"IsEnabled": true, "Source": "rawData", "Query": "Update_rawData()", "IsTransactional": false, "PropagateIngestionProperties": false}]' 

När måltabellen har skapats kan du använda Plugin-programmet Azure Digital Twins för att välja tvillingar av intresse och sedan ansluta dem mot tidsseriedata i måltabellen.

Exempelschema

Här är ett exempel på ett schema som kan användas för att representera delade data. Exemplet följer datahistorikschemat för Azure Data Explorer för uppdateringar av tvillingegenskaper.

TimeStamp SourceTimeStamp TwinId ModelId Name Value RelationshipTarget RelationshipID
2021-02-01 17:24 2021-02-01 17:11 ConfRoomTempSensor dtmi:com:example:TemperatureSensor;1 temperatur 301.0

Egenskaper för digital tvilling lagras som nyckel/värde-par (name, value). name och value lagras som dynamiska datatyper.

Schemat stöder också lagring av egenskaper för relationer, enligt fälten relationshipTarget och relationshipID . Nyckel/värde-schemat undviker behovet av att skapa en kolumn för varje tvillingegenskap.

Representerar egenskaper med flera fält

Du kanske vill lagra en egenskap i schemat med flera fält. Dessa egenskaper representeras av lagring av ett JSON-objekt som value i schemat.

Om du till exempel vill representera en egenskap med tre fält för roll, pitch och yaw ser värdeobjektet ut så här: {"roll": 20, "pitch": 15, "yaw": 45}.

Nästa steg