Kombinera och optimera data

Slutförd

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, joinoch 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

Diagram showing query join kinds.

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, , antileftantisemi 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.