mv-expand-operator
Gäller för: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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 ...] [limit
Rowlimit]
T|mv-expand
[kind=
(bag
| array
)] [Name=
] ArrayExpression [to typeof(
Typename)
] [,
[Name=
] ArrayExpression [to typeof(
Typename)
] ...] [limit
Rowlimit]
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:
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.
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.
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
ellerbagexpansion=bag
: Egenskapspåsar utökas till enstaka egenskapspåsar. Det här läget är standardläget. -
kind=array
ellerbagexpansion=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 |
Relaterat innehåll
- 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.