Dela via


Använda referensdata för sökningar i Stream Analytics

Referensdata är en begränsad datauppsättning som är statisk eller långsamt förändrad i naturen. Den används för att utföra en sökning eller för att utöka dina dataströmmar. Referensdata kallas även för en uppslagstabell.

Ta ett IoT-scenario som exempel. Du kan lagra metadata om sensorer, som inte ändras ofta, i referensdata. Sedan kan du ansluta den till IoT-dataströmmar i realtid.

Azure Stream Analytics läser in referensdata i minnet för att uppnå dataströmbearbetning med låg fördröjning. Om du vill använda referensdata i Stream Analytics-jobbet använder du vanligtvis en referensdatakoppling i din fråga.

Exempel

Du kan ha en realtidsström med händelser som genereras när bilar passerar en vägtull. Tollbooth kan fånga registreringsskyltarna i realtid. Dessa data kan kopplas till en statisk datauppsättning som har registreringsinformation för att identifiera registreringsskyltar som har upphört att gälla.

SELECT I1.EntryTime, I1.LicensePlate, I1.TollId, R.RegistrationId  
FROM Input1 I1 TIMESTAMP BY EntryTime  
JOIN Registration R  
ON I1.LicensePlate = R.LicensePlate  
WHERE R.Expired = '1'

Stream Analytics stöder Azure Blob Storage, Azure Data Lake Storage Gen2 och Azure SQL Database som lagringslager för referensdata. Om du har referensdata i andra datalager kan du försöka använda Azure Data Factory för att extrahera, transformera och läsa in data till något av de datalager som stöds. Mer information finns i Översikt över kopieringsaktivitet i Azure Data Factory.

Azure Blob Storage eller Azure Data Lake Storage Gen 2

Referensdata modelleras som en sekvens med blobar i stigande ordning efter det datum/den tid som anges i blobnamnet. Blobbar kan bara läggas till i slutet av sekvensen med hjälp av ett datum/en tid som är större än det som anges av den sista bloben i sekvensen. Blobar definieras i indatakonfigurationen.

Mer information finns i Använda referensdata från Blob Storage för ett Stream Analytics-jobb.

Konfigurera blobreferensdata

För att konfigurera dina referensdata måste du först skapa indata av typen referensdata. I följande tabell förklaras varje egenskap som du behöver ange när du skapar referensdataindata med dess beskrivning.

Egenskapsnamn beskrivning
Inmatat alias Ett eget namn som används i jobbfrågan för att referera till dessa indata.
Lagringskonto Namnet på lagringskontot där dina blobar finns. Om det finns i samma prenumeration som ditt Stream Analytics-jobb väljer du det i listrutan.
Lagringskontonyckel Den hemliga nyckel som är associerad med lagringskontot. Den här nyckeln fylls i automatiskt om lagringskontot finns i samma prenumeration som ditt Stream Analytics-jobb.
Lagringscontainer Containrar tillhandahåller en logisk gruppering för blobar som lagras i Blob Storage. När du laddar upp en blob till Blob Storage måste du ange en container för den bloben.
Sökvägsmönster Den här obligatoriska egenskapen används för att hitta dina blobar i den angivna containern. I sökvägen kan du välja att ange en eller flera instanser av variablerna {date} och {time}.
Exempel 1: produkter/{date}/{time}/product-list.csv
Exempel 2: produkter/{date}/product-list.csv
Exempel 3: product-list.csv

Om bloben inte finns i den angivna sökvägen väntar Stream Analytics-jobbet på obestämd tid på att blobben ska bli tillgänglig.
Datumformat [valfritt] Om du använde {date} i sökvägsmönstret som du angav väljer du det datumformat som blobarna är ordnade i i listrutan med format som stöds.
Exempel: ÅÅÅÅ/MM/DD eller MM/DD/ÅÅÅÅÅ
Tidsformat [valfritt] Om du använde {time} i sökvägsmönstret som du angav väljer du tidsformatet där dina blobar är ordnade från listrutan med format som stöds.
Exempel: HH, HH/mm eller HH-mm
Format för serialisering av händelser För att se till att dina frågor fungerar som förväntat måste Stream Analytics veta vilket serialiseringsformat du använder för inkommande dataströmmar. För referensdata är de format som stöds CSV och JSON.
Encoding UTF-8 är det enda kodningsformat som stöds just nu.

Statiska referensdata

Referensdata kanske inte förväntas ändras. Om du vill aktivera stöd för statiska referensdata anger du en statisk sökväg i indatakonfigurationen.

Stream Analytics hämtar bloben från den angivna sökvägen. Ersättningstoken {date} och {time} krävs inte. Eftersom referensdata inte kan ändras i Stream Analytics rekommenderar vi inte att du skriver över en statisk referensdatablob.

Generera referensdata enligt ett schema

Dina referensdata kan vara en långsamt föränderlig datauppsättning. Om du vill uppdatera referensdata anger du ett sökvägsmönster i indatakonfigurationen med hjälp av ersättningstoken {date} och {time}. Stream Analytics hämtar de uppdaterade referensdatadefinitionerna baserat på det här sökvägsmönstret.

Till exempel instruerar ett mönster sample/{date}/{time}/products.csv med ett datumformat av ÅÅÅÅ-MM-DD och ett tidsformat med HH-mm Stream Analytics att hämta den uppdaterade bloben sample/2015-04-16/17-30/products.csv den 16 april 2015 kl. 17:30 UTC.

Stream Analytics söker automatiskt efter uppdaterade referensdatablobar med ett intervall på en minut. En blob med tidsstämpeln 10:30:00 kan laddas upp med en liten fördröjning, till exempel 10:30:30. Du ser en liten fördröjning i Stream Analytics-jobbet som refererar till den här bloben.

För att undvika sådana scenarier laddar du upp bloben tidigare än målets effektiva tid, som är 10:30:00 i det här exemplet. Stream Analytics-jobbet har nu tillräckligt med tid för att identifiera och läsa in bloben i minnet och utföra åtgärder.

Kommentar

För närvarande letar Stream Analytics-jobb bara efter blobuppdateringen när datortiden går vidare till den tid som kodas i blobnamnet. Jobbet söker sample/2015-04-16/17-30/products.csv till exempel efter så snart som möjligt men inte tidigare än den 16 april 2015 kl. 17:30 UTC. Den söker aldrig efter en blob med en kodad tid tidigare än den senaste som identifierades.

När jobbet till exempel hittar bloben sample/2015-04-16/17-30/products.csvignoreras alla filer med ett kodat datum tidigare än den 16 april 2015 kl. 17:30. Om en sen ankommande sample/2015-04-16/17-25/products.csv blob skapas i samma container kommer jobbet inte att använda den.

I ett annat exempel sample/2015-04-16/17-30/products.csv produceras endast den 16 april 2015 kl. 22:03, men ingen blob med ett tidigare datum finns i containern. Sedan använder jobbet den här filen från och med den 16 april 2015 kl. 22:03 och använder tidigare referensdata tills dess.

Ett undantag till det här beteendet är när jobbet behöver bearbeta data tillbaka i tiden eller när jobbet startas först.

Vid starttiden söker jobbet efter den senaste bloben som skapats innan jobbets starttid har angetts. Det här beteendet säkerställer att det finns en icke-tom referensdatauppsättning när jobbet startar. Om det inte går att hitta någon visar jobbet följande diagnostik: Initializing input without a valid reference data blob for UTC time <start time>.

När en referensdatauppsättning uppdateras genereras en diagnostiklogg: Loaded new reference data from <blob path>. Av många skäl kan ett jobb behöva läsa in en tidigare referensdatauppsättning igen. Oftast är orsaken till att bearbeta tidigare data. Samma diagnostiklogg genereras då. Den här åtgärden innebär inte att aktuella dataströmmar använder tidigare referensdata.

Azure Data Factory kan användas för att samordna uppgiften att skapa de uppdaterade blobar som krävs av Stream Analytics för att uppdatera referensdatadefinitioner.

Data Factory är en molnbaserad dataintegreringstjänst som samordnar och automatiserar förflyttning och transformering av data. Data Factory stöder anslutning till ett stort antal molnbaserade och lokala datalager. Det kan enkelt flytta data enligt ett vanligt schema som du anger.

Mer information om hur du konfigurerar en Data Factory-pipeline för att generera referensdata för Stream Analytics som uppdateras enligt ett fördefinierat schema finns i det här GitHub-exemplet.

Tips om hur du uppdaterar blobreferensdata

  • Skriv inte över referensdatablobar eftersom de inte kan ändras.
  • Det rekommenderade sättet att uppdatera referensdata är att:
    • Använd {date}/{time} i sökvägsmönstret.
    • Lägg till en ny blob med samma container- och sökvägsmönster som definierats i jobbindata.
    • Använd ett datum/en tid som är större än det som angavs av den sista bloben i sekvensen.
  • Referensdatablobar sorteras inte* efter blobens senaste ändringstid . De sorteras endast efter det datum och den tid som anges i blobnamnet med ersättningarna {date} och {time}.
  • För att undvika att behöva lista ett stort antal blobar tar du bort gamla blobar som bearbetningen inte längre kommer att utföras för. Stream Analytics kan behöva bearbeta en liten mängd i vissa scenarier, till exempel en omstart.

Azure SQL Database

Stream Analytics-jobbet hämtar SQL Database-referensdata och lagrar dem som en ögonblicksbild i minnet för bearbetning. Ögonblicksbilden av dina referensdata lagras också i en container på ett lagringskonto. Du anger lagringskontot i konfigurationsinställningarna.

Containern skapas automatiskt när jobbet startas. Om jobbet stoppar eller anger ett feltillstånd tas de automatiskt skapade containrarna bort när jobbet startas om.

Om dina referensdata är en långsamt föränderlig datauppsättning måste du regelbundet uppdatera ögonblicksbilden som används i ditt jobb.

Med Stream Analytics kan du ange en uppdateringsfrekvens när du konfigurerar indataanslutningen för SQL Database. Stream Analytics-körningen frågar din SQL Database-instans med det intervall som anges av uppdateringsfrekvensen. Den snabbaste uppdateringsfrekvensen som stöds är en gång per minut. För varje uppdatering lagrar Stream Analytics en ny ögonblicksbild i det angivna lagringskontot.

Stream Analytics innehåller två alternativ för att fråga din SQL Database-instans. En ögonblicksbildfråga är obligatorisk och måste ingå i varje jobb. Stream Analytics kör ögonblicksbildsfrågan regelbundet baserat på uppdateringsintervallet. Den använder resultatet av frågan (ögonblicksbilden) som referensdatauppsättning.

Ögonblicksbildsfrågan bör passa de flesta scenarier. Om du stöter på prestandaproblem med stora datauppsättningar och snabba uppdateringsfrekvenser använder du alternativet deltafråga. Frågor som tar mer än 60 sekunder att returnera en referensdatauppsättning resulterar i en tidsgräns.

Med alternativet deltafråga kör Stream Analytics ögonblicksbildsfrågan från början för att hämta en referensdatauppsättning för baslinjen. Därefter kör Stream Analytics deltafrågan regelbundet baserat på uppdateringsintervallet för att hämta inkrementella ändringar. Dessa inkrementella ändringar tillämpas kontinuerligt på referensdatauppsättningen för att hålla den uppdaterad. Om du använder alternativet deltafråga kan du minska lagringskostnaden och nätverks-I/O-åtgärder.

Konfigurera SQL Database-referensdata

För att konfigurera dina SQL Database-referensdata måste du först skapa referensdataindata. I följande tabell förklaras varje egenskap som du behöver ange när du skapar referensdataindata med dess beskrivning. Mer information finns i Använda referensdata från en SQL Database för ett Stream Analytics-jobb.

Du kan använda Azure SQL Managed Instance som referensdataindata. Du måste konfigurera en offentlig slutpunkt i SQL Managed Instance. Sedan konfigurerar du följande inställningar manuellt i Stream Analytics. En virtuell Azure-dator som kör SQL Server med en bifogad databas stöds också genom att konfigurera inställningarna manuellt.

Egenskapsnamn beskrivning
Inmatat alias Ett eget namn som används i jobbfrågan för att referera till dessa indata.
Prenumeration Din prenumeration.
Databas SQL Database-instansen som innehåller dina referensdata. För SQL Managed Instance måste du ange port 3342. Ett exempel är sampleserver.public.database.windows.net,3342.
Username Användarnamnet som är associerat med SQL Database-instansen.
Lösenord Lösenordet som är associerat med SQL Database-instansen.
Uppdatera regelbundet Med det här alternativet kan du välja en uppdateringsfrekvens. Välj för att ange uppdateringsfrekvensen i DD:HH:MM.
Ögonblicksbildsfråga Det här standardfrågealternativet hämtar referensdata från SQL Database-instansen.
Deltafråga För avancerade scenarier med stora datauppsättningar och en kort uppdateringshastighet lägger du till en deltafråga.

Storleksbegränsning

Använd referensdatauppsättningar som är mindre än 300 MB för bästa prestanda. Referensdatauppsättningar 5 GB eller lägre stöds i jobb med sex strömningsenheter eller mer. Om du använder en stor referensdatauppsättning kan det påverka svarstiden från slutpunkt till slutpunkt för ditt jobb.

Frågekomplexiteten kan öka till att omfatta tillståndskänslig bearbetning, till exempel fönsterade aggregeringar, temporala kopplingar och temporala analysfunktioner. När komplexiteten ökar minskar den maximala storleken på referensdata som stöds.

Om Stream Analytics inte kan läsa in referensdata och utföra komplexa åtgärder får jobbet slut på minne och misslyckas. I sådana fall når användningsmåttet för strömningsenhetsprocent 100 %.

Antal enheter för direktuppspelning Rekommenderad storlek
1 50 MB eller lägre
3 150 MB eller lägre
6 och senare 5 GB eller lägre

Stöd för komprimering är inte tillgängligt för referensdata. För referensdatauppsättningar som är större än 300 MB använder du SQL Database som källa med alternativet deltafråga för optimal prestanda. Om alternativet deltafråga inte används i sådana scenarier visas toppar i vattenstämpelns fördröjningsmått varje gång referensdatauppsättningen uppdateras.

Ansluta flera referensdatauppsättningar i ett jobb

Du kan bara ansluta en referensdatainmatning till en strömmande indata. Om du vill ansluta flera referensdatauppsättningar kan du dela upp frågan i flera steg. Här är ett exempel:

With Step1 as (
    --JOIN input stream with reference data to get 'Desc'
    SELECT streamInput.*, refData1.Desc as Desc
    FROM    streamInput
    JOIN    refData1 ON refData1.key = streamInput.key 
)
--Now Join Step1 with second reference data
SELECT *
INTO    output 
FROM    Step1
JOIN    refData2 ON refData2.Desc = Step1.Desc 

IoT Edge-jobb

Endast lokala referensdata stöds för Stream Analytics-gränsjobb. När ett jobb distribueras till en IoT Edge-enhet läser det in referensdata från den användardefinierade filsökvägen. Ha en referensdatafil klar på enheten.

För en Windows-container placerar du referensdatafilen på den lokala enheten och delar den lokala enheten med Docker-containern. För en Linux-container skapar du en Docker-volym och fyller i datafilen till volymen.

Referensdata för en IoT Edge-uppdatering utlöses av en distribution. När den har utlösts väljer Stream Analytics-modulen uppdaterade data utan att stoppa jobbet som körs.

Du kan uppdatera referensdata på två sätt:

  • Uppdatera referensdatasökvägen i Stream Analytics-jobbet från Azure-portalen.
  • Uppdatera IoT Edge-distributionen.

Nästa steg