Dela via


mv-expand-operator

Gäller för: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel

Expanderar dynamiska matriser med flera värden eller egenskapspåsar till flera poster.

mv-expand kan beskrivas som motsatsen till de aggregeringsoperatorer som packar flera värden i en enda dynamisk-typad matris eller egenskapsväska, till exempel summarize ... make-list() och make-series. Varje element i matrisen (skalär) eller egenskapspåsen genererar en ny post i operatorns utdata. Alla kolumner i indata som inte expanderas dupliceras till alla poster i utdata.

Syntax

T|mv-expand [kind=(bag | array)] [with_itemindex=IndexColumnName] ColumnName [to typeof(Typename)] [,ColumnName ...] [limitRowlimit]

T|mv-expand [kind=(bag | array)] [Name=] ArrayExpression [to typeof(Typename)] [, [Name=] ArrayExpression [to typeof(Typename)] ...] [limitRowlimit]

Läs mer om syntaxkonventioner.

Parametrar

Namn Typ Krävs Beskrivning
ColumnName, ArrayExpression string ✔️ En kolumnreferens eller ett skalärt uttryck med ett värde av typen dynamic som innehåller en matris eller en egenskapspåse. De enskilda elementen på den översta nivån i matrisen eller egenskapsväskan expanderas till flera poster.
När ArrayExpression- används och Namn inte är lika med något kolumnnamn för indata utökas det expanderade värdet till en ny kolumn i utdata. Annars ersätts den befintliga ColumnName-.
namn string Ett namn på den nya kolumnen.
Typename string ✔️ Anger den underliggande typen av matriselement, som blir den typ av kolumn som skapas av mv-expand-operatorn. Åtgärden för att tillämpa typen är endast gjuten och omfattar inte parsning eller typkonvertering. Matriselement som inte överensstämmer med den deklarerade typen blir null värden.
RowLimit int Det maximala antalet rader som genereras från varje ursprunglig rad. Standardvärdet är 2147483647. mvexpand är en äldre och föråldrad form av operatorn mv-expand. Den äldre versionen har en standardradgräns på 128.
IndexColumnName string Om with_itemindex anges innehåller utdata en annan kolumn med namnet IndexColumnName som innehåller indexet från och med 0 för objektet i den ursprungliga expanderade samlingen.

Returnerar

För varje post i indata returnerar operatorn noll, en eller flera poster i utdata, enligt följande:

  1. Indatakolumner som inte expanderas visas i utdata med sitt ursprungliga värde. Om en enskild indatapost expanderas till flera utdataposter dupliceras värdet till alla poster.

  2. För varje ColumnName eller ArrayExpression som expanderas, bestäms antalet utdataposter för varje värde enligt beskrivningen i lägen för expansion. För varje indatapost beräknas det maximala antalet utdataposter. Alla matriser eller egenskapspåsar expanderas "parallellt" så att saknade värden (om några) ersätts med null-värden. Element expanderas till rader i den ordning de visas i den ursprungliga matrisen/påsen.

  3. Om det dynamiska värdet är null skapas en enskild post för det värdet (null). Om det dynamiska värdet är en tom matris eller egenskapspåse skapas ingen post för det värdet. Annars skapas lika många poster som det finns element i det dynamiska värdet.

De expanderade kolumnerna är av typen dynamic, såvida de inte uttryckligen skrivs med hjälp av to typeof()-satsen.

Expansionslägen

Två lägen för expansioner av egenskapsväskan stöds:

  • kind=bag eller bagexpansion=bag: Egenskapspåsar utökas till enstaka egenskapspåsar. Det här läget är standardläget.
  • kind=array eller bagexpansion=array: Egenskapspåsar expanderas till tvåelement [nyckel,värde] matrisstrukturer, vilket ger enhetlig åtkomst till nycklar och värden. I det här läget kan du till exempel köra en distinkt sammansättning över egenskapsnamn.

Exempel

Exemplen i den här artikeln använder offentligt tillgängliga tabeller i hjälpkluster, till exempel tabellen StormEvents i databasen Samples.

Exemplen i den här artikeln använder offentligt tillgängliga tabeller, till exempel tabellen StormEvents i Väderanalys exempeldata.

Exemplen i det här avsnittet visar hur du använder syntaxen för att komma igång.

En kolumn – matrisexpansion

datatable (a: int, b: dynamic)
[
    1, dynamic([10, 20]),
    2, dynamic(['a', 'b'])
]
| mv-expand b

utdata

a b
1 10
1 20
2 a
2 b

Enkel kolumn – påsexpansion

En enkel expansion av en enskild kolumn:

datatable (a: int, b: dynamic)
[
    1, dynamic({"prop1": "a1", "prop2": "b1"}),
    2, dynamic({"prop1": "a2", "prop2": "b2"})
]
| mv-expand b

utdata

a b
1 {"prop1": "a1"}
1 {"prop2": "b1"}
2 {"prop1": "a2"}
2 {"prop2": "b2"}

Enkel kolumn – påsexpansion till nyckel/värde-par

En enkel påse-expansion till nyckel/värde-par:

datatable (a: int, b: dynamic)
[
    1, dynamic({"prop1": "a1", "prop2": "b1"}),
    2, dynamic({"prop1": "a2", "prop2": "b2"})
]
| mv-expand kind=array b 
| extend key = b[0], val=b[1]

utdata

a b nyckel val
1 ["prop1","a1"] prop1 a1
1 ["prop2","b1"] prop2 b1
2 ["prop1","a2"] prop1 a2
2 ["prop2","b2"] prop2 b2

Zippade två kolumner

Om du expanderar två kolumner "zippar" du först de tillämpliga kolumnerna och expanderar dem sedan:

datatable (a: int, b: dynamic, c: dynamic)[
    1, dynamic({"prop1": "a", "prop2": "b"}), dynamic([5, 4, 3])
]
| mv-expand b, c

utdata

a b c
1 {"prop1":"a"} 5
1 {"prop2":"b"} 4
1 3

Kartesisk produkt av två kolumner

Om du vill få en kartesisk produkt av att expandera två kolumner expanderar du en efter en:

datatable (a: int, b: dynamic, c: dynamic)
[
    1, dynamic({"prop1": "a", "prop2": "b"}), dynamic([5, 6])
]
| mv-expand b
| mv-expand c

utdata

a b c
1 { "prop1": "a"} 5
1 { "prop1": "a"} 6
1 { "prop2": "b"} 5
1 { "prop2": "b"} 6

Konvertera utdata

Om du vill tvinga utdata från en mv-expandering till en viss typ (standardvärdet är dynamiskt) använder du to typeof:

datatable (a: string, b: dynamic, c: dynamic)[
    "Constant", dynamic([1, 2, 3, 4]), dynamic([6, 7, 8, 9])
]
| mv-expand b, c to typeof(int)
| getschema 

utdata

ColumnName ColumnOrdinal DateType ColumnType
a 0 System.String string
b 1 System.Object dynamic
c 2 System.Int32 int

Meddelandekolumnen b returneras som dynamic medan c returneras som int.

Använda with_itemindex

Expansion av en matris med with_itemindex:

range x from 1 to 4 step 1
| summarize x = make_list(x)
| mv-expand with_itemindex=Index x

utdata

x Index
1 0
2 1
3 2
4 3
  • mv-apply operator.
  • Motsatsen till operatorn mv-expand finns i sammanfatta make_list().
  • Information om hur du expanderar dynamiska JSON-objekt i kolumner med hjälp av egenskapssäcksnycklar finns i bag_unpack() plugin-program.