operator mv-expand
Hiermee breidt u dynamische matrices of eigenschappenverzamelingen met meerdere waarden uit naar meerdere records.
mv-expand
kan worden beschreven als het tegenovergestelde van de aggregatieoperators die meerdere waarden in een matrix of eigenschappenverzameling met één dynamisch type verpakken, zoals summarize
... make-list()
en make-series
.
Elk element in de (scalaire) matrix of eigenschappenverzameling 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.
Syntax
T|mv-expand
[kind=
(bag
array
| )] [with_itemindex=
IndexColumnName] ColumnName [to typeof(
Typename)
] [,
ColumnName ...] [limit
Rowlimit]
T|mv-expand
[kind=
(bag
| array
)] [Naam=
] MatrixExpression [to typeof(
Typename)
] [,
[Naam=
] MatrixExpressie [to typeof(
Typename)
] ...] [limit
Rijscheidingsteken]
Meer informatie over syntaxisconventies.
Parameters
Naam | Type | Vereist | Beschrijving |
---|---|---|---|
ColumnName, ArrayExpression | string |
✔️ | Een kolomreferentie of een scalaire expressie met een waarde van het type dynamic die een matrix of een eigenschappenverzameling bevat. De afzonderlijke elementen op het hoogste niveau van de matrix of eigenschappenverzameling worden uitgebreid naar meerdere records.Wanneer MatrixExpression wordt gebruikt en Naam niet gelijk is aan de naam van een invoerkolom, 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. | |
Typename | string |
✔️ | Geeft het onderliggende type van de elementen van de matrix aan. Dit wordt het type kolom dat door de mv-expand operator wordt geproduceerd. De bewerking voor het toepassen van het type is alleen cast en omvat geen parsering of typeconversie. Matrixelementen die niet voldoen aan het opgegeven type, worden null waarden. |
RowLimit | int |
Het maximum aantal rijen dat wordt 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 uitgevouwen verzameling. |
Retouren
Voor elke record in de invoer retourneert de operator nul, één of veel records in de uitvoer, zoals op de volgende manier wordt bepaald:
Invoerkolommen die niet zijn uitgevouwen, worden in de uitvoer weergegeven met hun oorspronkelijke waarde. Als één invoerrecord wordt uitgevouwen in meerdere uitvoerrecords, wordt de waarde gedupliceerd naar alle records.
Voor elke kolomnaam of matrixexpressie die is uitgevouwen, wordt het aantal uitvoerrecords bepaald voor elke waarde, zoals uitgelegd in de uitbreidingsmodi. Voor elke invoerrecord wordt het maximum aantal uitvoerrecords berekend. Alle matrices of eigenschappenverzamelingen 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 eigenschappenverzameling is, wordt er geen record voor die waarde geproduceerd. Anders worden er net 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 voor uitbreidingen van eigenschapsverzamelingen ondersteund:
kind=bag
ofbagexpansion=bag
: Eigenschapszakken worden uitgebreid tot eigenschappenverzamelingen met één invoer. Deze modus is de standaardmodus.kind=array
ofbagexpansion=array
: eigenschapsverzamelingen worden uitgebreid in matrixstructuren voor sleutelwaarden,
]
met twee elementen[
, waardoor uniforme toegang tot sleutels en waarden mogelijk is. Met deze modus kunt u bijvoorbeeld ook een distinct-count-aggregatie uitvoeren voor eigenschapsnamen.
Voorbeelden
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 - zakuitbreiding
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- zakuitbreiding naar sleutel-waardeparen
Een eenvoudige bag-uitbreiding 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 uitvouwen van twee kolommen wilt ophalen, vouwt u de ene 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
Als u de uitvoer van een mv-expand wilt afdwingen naar een bepaald type (standaard is dynamisch), gebruikt u 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
Uitvoer
ColumnName | KolomOrdinaal | DateType | ColumnType |
---|---|---|---|
een | 0 | System.String | string |
b | 1 | System.Object | dynamic |
c | 2 | System.Int32 | int |
Kennisgevingskolom b
wordt geretourneerd als terwijl c
dynamic
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 |
Gerelateerde inhoud
- Zie Grafiekaantal liveactiviteiten in de loop van de tijd voor meer voorbeelden.
- mv-apply operator.
- Zie summarize make_list() voor het tegenovergestelde van de operator mv-expand.
- Zie de invoegtoepassing bag_unpack() voor het uitbreiden van dynamische JSON-objecten in kolommen met behulp van eigenschappenverzamelingsleutels.
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor