operator mv-expand
Van toepassing op: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel-
Breidt dynamische matrices of eigenschapszakken met meerdere waarden uit naar meerdere records.
mv-expand
kan worden beschreven als het tegenovergestelde van de aggregatieoperators die meerdere waarden in één dynamische-getypte matrix of eigenschapszak, zoals summarize
... make-list()
en make-series
.
Elk element in de (scalaire) matrix of eigenschapsverzameling genereert een nieuwe record in de uitvoer van de operator. Alle kolommen van de invoer die niet zijn uitgevouwen, worden gedupliceerd naar alle records in de uitvoer.
Syntaxis
T|mv-expand
[kind=
(bag
| array
)] [with_itemindex=
IndexColumnName] ColumnName [to typeof(
Typename)
] [,
ColumnName ...] [limit
]
T-|mv-expand
[kind=
(bag
| array
)] [naam=
] matrixexpressie [to typeof(
typenaam)
] [,
[naam=
] matrixexpressie [to typeof(
typenaam)
] ...] [limit
rijscheidingsteken]
Meer informatie over syntaxisconventies.
Parameters
Naam | Type | Vereist | Beschrijving |
---|---|---|---|
ColumnNameArrayExpression | string |
✔️ | Een kolomreferentie of een scalaire expressie met een waarde van het type dynamic die een matrix of een eigenschapsverzameling bevat. De afzonderlijke elementen op het hoogste niveau van de matrix of eigenschapsverzameling worden uitgebreid naar meerdere records.Wanneer MatrixExpression- wordt gebruikt en Naam niet gelijk is aan een kolomnaam voor invoer, wordt de uitgevouwen waarde uitgebreid naar een nieuwe kolom in de uitvoer. Anders wordt de bestaande ColumnName vervangen. |
naam | string |
Een naam voor de nieuwe kolom. | |
typenaam | string |
✔️ | Geeft het onderliggende type van de elementen van de matrix aan, wat het type wordt van de kolom die wordt geproduceerd door de operator mv-expand . De bewerking van het toepassen van het type is alleen cast en bevat geen parsering of typeconversie. Matrixelementen die niet voldoen aan het gedeclareerde type, worden null waarden. |
RowLimit- | int |
Het maximum aantal rijen dat is gegenereerd op basis van elke oorspronkelijke rij. De standaardwaarde is 2147483647.
mvexpand is een verouderde en verouderde vorm van de operator mv-expand . De verouderde versie heeft een standaardrijlimiet van 128. |
|
IndexColumnName- | string |
Als with_itemindex is opgegeven, bevat de uitvoer een andere kolom met de naam IndexColumnName die de index bevat die begint bij 0 van het item in de oorspronkelijke uitgebreide verzameling. |
Retourneert
Voor elke record in de invoer retourneert de operator nul, één of veel records in de uitvoer, zoals wordt bepaald op de volgende manier:
Invoerkolommen die niet zijn uitgevouwen, worden weergegeven in de uitvoer met de oorspronkelijke waarde. Als één invoerrecord wordt uitgebreid naar meerdere uitvoerrecords, wordt de waarde gedupliceerd naar alle records.
Voor elke ColumnName of ArrayExpression die is uitgevouwen, wordt het aantal uitvoerrecords bepaald voor elke waarde, zoals wordt uitgelegd in uitbreidingsmodi. Voor elke invoerrecord wordt het maximum aantal uitvoerrecords berekend. Alle matrices of eigenschapszakken worden 'parallel' uitgevouwen, zodat ontbrekende waarden (indien aanwezig) worden vervangen door null-waarden. Elementen worden uitgevouwen in rijen in de volgorde waarin ze worden weergegeven in de oorspronkelijke matrix/zak.
Als de dynamische waarde null is, wordt er één record geproduceerd voor die waarde (null). Als de dynamische waarde een lege matrix of eigenschapsverzameling is, wordt er geen record voor die waarde geproduceerd. Anders worden er zoveel records geproduceerd als er elementen in de dynamische waarde zijn.
De uitgevouwen kolommen zijn van het type dynamic
, tenzij ze expliciet worden getypt met behulp van de to typeof()
-component.
Uitbreidingsmodi
Er worden twee modi van uitbreidingen van eigenschappentas ondersteund:
-
kind=bag
ofbagexpansion=bag
: eigenschappentassen worden uitgebreid tot tassen met één vermelding. Deze modus is de standaardmodus. -
kind=array
ofbagexpansion=array
: eigenschapstassen worden uitgevouwen in twee elementen[
sleutelwaarde,
waarde]
matrixstructuren, zodat sleutels en waarden uniform kunnen worden geopend. In deze modus kunt u bijvoorbeeld ook een aggregatie met afzonderlijke aantallen uitvoeren voor eigenschapsnamen.
Voorbeelden
In de voorbeelden in dit artikel worden openbaar beschikbare tabellen gebruikt in de Help-cluster, zoals de
StormEvents
tabel in de Voorbeelden database.
In de voorbeelden in dit artikel worden openbaar beschikbare tabellen gebruikt, zoals de tabel
StormEvents
in de weather analytics voorbeeldgegevens.
In de voorbeelden in deze sectie ziet u hoe u de syntaxis kunt gebruiken om aan de slag te gaan.
Eén kolom - matrixuitbreiding
datatable (a: int, b: dynamic)
[
1, dynamic([10, 20]),
2, dynamic(['a', 'b'])
]
| mv-expand b
uitvoer
een | b |
---|---|
1 | 10 |
1 | 20 |
2 | een |
2 | b |
Eén kolom - baguitbreiding
Een eenvoudige uitbreiding van één kolom:
datatable (a: int, b: dynamic)
[
1, dynamic({"prop1": "a1", "prop2": "b1"}),
2, dynamic({"prop1": "a2", "prop2": "b2"})
]
| mv-expand b
uitvoer
een | b |
---|---|
1 | {"prop1": "a1"} |
1 | {"prop2": "b1"} |
2 | {"prop1": "a2"} |
2 | {"prop2": "b2"} |
Eén kolom - baguitbreiding naar sleutel-waardeparen
Een eenvoudige baguitbreiding naar sleutel-waardeparen:
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]
uitvoer
een | b | sleutel | Val |
---|---|---|---|
1 | ["prop1","a1"] | prop1 | a1 |
1 | ["prop2","b1"] | prop2 | b1 |
2 | ["prop1","a2"] | prop1 | a2 |
2 | ["prop2","b2"] | prop2 | b2 |
Twee kolommen gezipt
Als u twee kolommen uitvouwt, worden eerst de toepasselijke kolommen gezipt en vervolgens uitgevouwen:
datatable (a: int, b: dynamic, c: dynamic)[
1, dynamic({"prop1": "a", "prop2": "b"}), dynamic([5, 4, 3])
]
| mv-expand b, c
uitvoer
een | b | c |
---|---|---|
1 | {"prop1":"a"} | 5 |
1 | {"prop2":"b"} | 4 |
1 | 3 |
Cartesisch product van twee kolommen
Als u een Cartesisch product van het uitbreiden van twee kolommen wilt krijgen, vouwt u een na de andere uit:
datatable (a: int, b: dynamic, c: dynamic)
[
1, dynamic({"prop1": "a", "prop2": "b"}), dynamic([5, 6])
]
| mv-expand b
| mv-expand c
uitvoer
een | b | c |
---|---|---|
1 | { "prop1": "a"} | 5 |
1 | { "prop1": "a"} | 6 |
1 | { "prop2": "b"} | 5 |
1 | { "prop2": "b"} | 6 |
Uitvoer converteren
Gebruik to typeof
om de uitvoer van een mv-expand naar een bepaald type (standaard is dynamisch) af te dwingen:
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
uitvoer
ColumnName | ColumnOrdinal | DateType | ColumnType |
---|---|---|---|
een | 0 | System.String | string |
b | 1 | System.Object | dynamic |
c | 2 | System.Int32 | int |
U ziet dat kolom b
wordt geretourneerd als dynamic
terwijl c
wordt geretourneerd als int
.
With_itemindex gebruiken
Uitbreiding van een matrix met with_itemindex
:
range x from 1 to 4 step 1
| summarize x = make_list(x)
| mv-expand with_itemindex=Index x
uitvoer
x | Index |
---|---|
1 | 0 |
2 | 1 |
3 | 2 |
4 | 3 |
Verwante inhoud
- operator mv-apply.
- Zie summarize make_list()voor het tegenovergestelde van de operator mv-expand.
- Zie bag_unpack() plugin voor het uitbreiden van dynamische JSON-objecten in kolommen met behulp van eigenschapsverzamelingssleutels.