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=(bagarray | )] [with_itemindex=IndexColumnName] ColumnName [to typeof(Typename)] [,ColumnName ...] [limitRowlimit]

T|mv-expand [kind=(bag | array)] [Naam=] MatrixExpression [to typeof(Typename)] [, [Naam=] MatrixExpressie [to typeof(Typename)] ...] [limitRijscheidingsteken]

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:

  1. 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.

  2. 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.

  3. 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 of bagexpansion=bag: Eigenschapszakken worden uitgebreid tot eigenschappenverzamelingen met één invoer. Deze modus is de standaardmodus.
  • kind=arrayof bagexpansion=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 cdynamic 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