Dela via


Användningsfall för materialiserade vyer

Gäller för: ✅Microsoft FabricAzure Data Explorer

Materialiserade vyer exponera en aggregering fråga över en källtabell eller en annan materialiserad vy. Den här artikeln beskriver vanliga och avancerade användningsfall för materialiserade vyer.

Vanliga användningsfall

Följande är vanliga scenarier som kan hanteras med hjälp av en materialiserad vy:

  • Uppdatera data: Uppdatera data genom att returnera den senaste posten per entitet med hjälp av arg_max() (sammansättningsfunktion). Skapa till exempel en vy som bara materialiserar poster som matas in från och med nu:

    .create materialized-view ArgMax on table T
    {
        T | summarize arg_max(Timestamp, *) by User
    }
    
  • Minska dataupplösningen Minska dataupplösningen genom att beräkna periodisk statistik över rådata. Använd olika sammansättningsfunktioner efter tidsperiod. Du kan till exempel underhålla en up-toögonblicksbild av distinkta användare per dag:

    .create materialized-view UsersByDay on table T
    {
        T | summarize dcount(User) by bin(Timestamp, 1d)
    }
    
  • Deduplicera poster: Deduplicera poster i en tabell med hjälp av take_any() (sammansättningsfunktion). Skapa till exempel en materialiserad vy som deduplicerar källtabellen baserat på kolumnen EventId med en tillbakablick på 6 timmar. Poster dedupliceras endast mot poster som matas in 6 timmar före aktuella poster.

    .create materialized-view with(lookback=6h) DeduplicatedTable on table T
    {
        T
        | summarize take_any(*) by EventId
    }
    

    Not

    Du kan dölja källtabellen genom att skapa en funktion med samma namn som tabellen som refererar till den materialiserade vyn i stället. Det här mönstret säkerställer att anropare som frågar tabellen får åtkomst till den deduplicerade materialiserade vyn eftersom funktioner åsidosätter tabeller med samma namn. Om du vill undvika cykliska referenser i vydefinitionen använder du funktionen table() för att referera till källtabellen:

    .create materialized-view DeduplicatedTable on table T
    {
        table('T')
        | summarize take_any(*) by EventId
    }
    

Fler exempel finns i kommandot .create materialized-view.

Avancerat scenario

Du kan använda en materialiserad vy för att skapa/uppdatera/ta bort händelsebearbetning. För poster med ofullständig eller inaktuell information i varje kolumn kan en materialiserad vy tillhandahålla de senaste uppdateringarna för varje kolumn, exklusive entiteter som har tagits bort.

Överväg följande indatatabell med namnet Events:

indata

Tidsstämpel Cud ID col1 col2 col3
2023-10-24 00:00:00.0000000 C 1 1 2
2023-10-24 01:00:00.0000000 U 1 22 33
2023-10-24 02:00:00.0000000 U 1 23
2023-10-24 00:00:00.0000000 C 2 1 2
2023-10-24 00:10:00.0000000 U 2 4
2023-10-24 02:00:00.0000000 D 2

Skapa en materialiserad vy för att hämta den senaste uppdateringen per kolumn med hjälp av aggregeringsfunktionen arg_max():

.create materialized-view ItemHistory on table Events
{
    Events
    | extend Timestamp_col1 = iff(isnull(col1), datetime(1970-01-01), Timestamp),
                Timestamp_col2 = iff(isnull(col2), datetime(1970-01-01), Timestamp),
                Timestamp_col3 = iff(isnull(col3), datetime(1970-01-01), Timestamp)
    | summarize arg_max(Timestamp_col1, col1), arg_max(Timestamp_col2, col2), arg_max(Timestamp_col3, col3), arg_max(Timestamp, cud) by id
}

utdata

ID Timestamp_col1 col1 Timestamp_col2 col2 Timestamp_col3 col3 Tidsstämpel Cud
2 2023-10-24 00:00:00.0000000 1 2023-10-24 00:10:00.0000000 4 1970-01-01 00:00:00.0000000 2023-10-24 02:00:00.0000000 D
1 2023-10-24 00:00:00.0000000 1 2023-10-24 02:00:00.0000000 23 2023-10-24 01:00:00.0000000 33 2023-10-24 02:00:00.0000000 U

Du kan skapa en lagrad funktion för att ytterligare rensa resultatet:

ItemHistory
| project Timestamp, cud, id, col1, col2, col3
| where cud != "D"
| project-away cud

slututdata

Den senaste uppdateringen för varje kolumn för ID 1sedan ID 2 togs bort.

Tidsstämpel ID col1 col2 col3
2023-10-24 02:00:00.0000000 1 1 23 33

Materialiserade vyer jämfört med uppdateringsprinciper

Materialiserade vyer och uppdateringsprinciper fungerar annorlunda och hanterar olika användningsfall. Använd följande riktlinjer för att identifiera vilken du ska använda:

  • Materialiserade vyer är lämpliga för sammansättningar, medan uppdateringsprinciper inte är det. Uppdateringsprinciper körs separat för varje inmatningsbatch och kan därför bara utföra aggregeringar inom samma inmatningsbatch. Om du behöver en aggregeringsfråga använder du alltid materialiserade vyer.

  • Uppdateringsprinciper är användbara för datatransformationer, berikanden med dimensionstabeller (vanligtvis med uppslagsoperator) och andra datamanipuleringar som kan köras i omfånget för en enda inmatning.

  • Uppdateringsprinciper körs under inmatningstiden. Data är inte tillgängliga för frågor i källtabellen eller måltabellen förrän alla uppdateringsprinciper har körts. Materialiserade vyer är däremot inte en del av inmatningspipelinen. materialiseringsprocessen körs regelbundet i bakgrunden, efter inmatning. Poster i källtabellen är tillgängliga för frågor innan de materialiseras.

  • Både uppdateringsprinciper och materialiserade vyer kan innehålla kopplingar, men deras effektivitet är begränsad till specifika scenarier. Mer specifikt är kopplingar endast lämpliga när de data som krävs för kopplingen från båda sidor är tillgängliga vid tidpunkten för uppdateringsprincipen eller materialiseringsprocessen. Om matchande entiteter matas in när uppdateringsprincipen eller materialiseringen körs finns det risk för att data förbises. Läs mer om dimension tables i materialiserad vyfrågeparameter och i fakta- och dimensionstabeller.

Not

Om du behöver materialisera kopplingar som inte är lämpliga för uppdateringsprinciper och materialiserade vyer kan du hantera den här processen själv. Om du vill skapa och lagra resultatet av kopplingsåtgärder använder du orkestreringsverktyg och mata in från frågekommandon.