Kombinera och optimera data
Organisationer sorterar ofta olika typer av information från många källor. Informationen lagras i ett stort antal tabeller. Ibland kan du behöva koppla tabeller baserat på logiska relationer mellan dem, för djupare analys eller rapportering. I detaljhandelsscenariot använder du tabeller för kunder, produkter och försäljningsinformation.
I den här modulen får du lära dig om olika sätt att kombinera data i Kusto-frågor för att ge dina teammedlemmar den information de behöver för att öka produktmedvetenheten och öka försäljningen.
Förstå dina data
Innan du börjar skriva frågor som kombinerar information från dina tabeller måste du förstå dina data. När du arbetar med Kusto-frågor vill du se tabeller som i stort sett hör till någon av två kategorier:
- Faktatabeller: Tabeller vars poster är oföränderliga fakta, till exempel tabellen SalesFact i detaljhandelsscenariot. I dessa tabeller läggs poster progressivt till på ett strömmande sätt eller i stora segment. Posterna finns kvar i tabellen tills de tas bort och de uppdateras aldrig.
- Dimensionstabeller: Tabeller vars poster är föränderliga dimensioner, till exempel tabellerna Kunder och Produkter i detaljhandelsscenariot. Dessa tabeller innehåller referensdata, till exempel uppslagstabeller från en entitetsidentifierare till dess egenskaper. Dimensionstabeller uppdateras inte regelbundet med nya data.
I vårt detaljhandelsföretagsscenario använder du dimensionstabeller för att utöka tabellen SalesFact med ytterligare information eller för att tillhandahålla fler alternativ för att filtrera data för frågor.
Du vill också förstå de datavolymer som du arbetar med och dess struktur eller schema (kolumnnamn och typer). Du kan köra följande frågor för att hämta den informationen genom att ersätta TABLE_NAME med namnet på tabellen som du undersöker:
Om du vill hämta antalet poster i en tabell använder du operatorn
count
:TABLE_NAME | count
Använd operatorn för att hämta schemat för
getschema
en tabell:TABLE_NAME | getschema
När du kör dessa frågor på fakta- och dimensionstabellerna i detaljhandelsföretagets scenario får du information som i följande exempel:
Register | Poster | Schema |
---|---|---|
SalesFact | 2,832,193 | - SalesAmount (verklig) - TotalCost (verklig) – DateKey (datetime) - ProductKey (lång) - CustomerKey (lång) |
Kunder | 18,484 | – CityName (sträng) – CompanyName (sträng) – ContinentName (sträng) - CustomerKey (lång) - Utbildning (sträng) – FirstName (sträng) - Kön (sträng) – Efternamn (sträng) – MaritalStatus (sträng) - Yrke (sträng) – RegionCountryName (sträng) – StateProvinceName (sträng) |
Produkter | 2,517 | – ProductName (sträng) – Tillverkare (sträng) - ColorName (sträng) – ClassName (sträng) – ProductCategoryName (sträng) – ProductSubcategoryName (sträng) - ProductKey (lång) |
I tabellen har vi markerat de unika identifierarna CustomerKey och ProductKey som används för att kombinera poster mellan tabeller.
Förstå frågor med flera tabeller
När du har analyserat dina data måste du förstå hur du kombinerar tabeller för att tillhandahålla den information du behöver. Kusto-frågor tillhandahåller flera operatorer som du kan använda för att kombinera data från flera tabeller, inklusive operatorerna lookup
, join
och union
.
Operatorn join
sammanfogar raderna i två tabeller genom att matcha värdena för de angivna kolumnerna från varje tabell. Den resulterande tabellen beror på vilken typ av koppling du använder. Om du till exempel använder en inre koppling har tabellen samma kolumner som den vänstra tabellen (kallas ibland den yttre tabellen), plus kolumnerna från den högra tabellen (kallas ibland den inre tabellen). Du lär dig mer om kopplingstyper i nästa avsnitt. För bästa prestanda, om en tabell alltid är mindre än den andra, använder du den som vänster sida av operatorn join
.
Operatorn lookup
är en särskild implementering av en join
operator som optimerar prestandan för frågor där en faktatabell berikas med data från en dimensionstabell. Den utökar faktatabellen med värden som letas upp i en dimensionstabell. För bästa prestanda förutsätter systemet som standard att den vänstra tabellen är den större tabellen (fakta) och att den högra tabellen är den mindre tabellen (dimensionen). Detta antagande är precis motsatsen till det antagande som används av operatorn join
.
Operatorn union
returnerar alla rader från två eller flera tabeller. Det är användbart när du vill kombinera data från flera tabeller.
Funktionen materialize()
cachelagrar resultat i en frågekörning för efterföljande återanvändning i frågan. Det är som att ta en ögonblicksbild av resultatet av en underfråga och använda den flera gånger i frågan. Den här funktionen är användbar för att optimera frågor för scenarier där resultatet:
- Är dyra att beräkna
- Är nondeterministiska
Inom kort lär du dig mer om de olika tabellsammanslagningens operatorer och materialize()
funktionen och hur du använder dem.
Typer av koppling
Det finns många olika typer av kopplingar som kan utföras som påverkar schemat och raderna i den resulterande tabellen. I följande tabell visas de typer av kopplingar som stöds av Kusto-frågespråk och schema och rader som de returnerar:
Koppla variant | beskrivning | Illustration |
---|---|---|
innerunique (standard) |
Inre koppling med deduplicering på vänster sida Schema: Alla kolumner från båda tabellerna, inklusive matchande nycklar Rader: Alla deduplicerade rader från den vänstra tabellen som matchar rader från den högra tabellen |
|
inner |
Inre standardkoppling Schema: Alla kolumner från båda tabellerna, inklusive matchande nycklar Rader: Endast matchande rader från båda tabellerna |
|
leftouter |
Vänster yttre koppling Schema: Alla kolumner från båda tabellerna, inklusive matchande nycklar Rader: Alla poster från den vänstra tabellen och endast matchande rader från den högra tabellen |
|
rightouter |
Höger yttre koppling Schema: Alla kolumner från båda tabellerna, inklusive matchande nycklar Rader: Alla poster från den högra tabellen och endast matchande rader från den vänstra tabellen |
|
fullouter |
Fullständig yttre koppling Schema: Alla kolumner från båda tabellerna, inklusive matchande nycklar Rader: Alla poster från båda tabellerna med omatchade celler ifyllda med null |
|
leftsemi |
Vänster halvkoppling Schema: Alla kolumner från den vänstra tabellen Rader: Alla poster från den vänstra tabellen som matchar poster från den högra tabellen |
|
leftanti , , anti leftantisemi |
Vänster antikoppling och semivariant Schema: Alla kolumner från den vänstra tabellen Rader: Alla poster från den vänstra tabellen som inte matchar poster från den högra tabellen |
|
rightsemi |
Höger halvkoppling Schema: Alla kolumner från den högra tabellen Rader: Alla poster från den högra tabellen som matchar poster från den vänstra tabellen |
|
rightanti , rightantisemi |
Höger antikoppling och semivariant Schema: Alla kolumner från den högra tabellen Rader: Alla poster från den högra tabellen som inte matchar poster från den vänstra tabellen |
Observera att standardkopplingstypen är innerunique
, och att den inte behöver anges. Det är dock bästa praxis att alltid uttryckligen ange kopplingstyp för tydlighetens skull.
När du går igenom den här modulen lär du dig även om arg_min()
funktionerna och arg_max()
aggregeringsfunktionerna, operatorn as
som ett alternativ till -instruktionen let
startofmonth()
och funktionen för att hjälpa till med att gruppera data per månad.