Delen via


operator mv-expand

Van toepassing op: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft 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)] ...] [limitrijscheidingsteken]

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:

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

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

  3. 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 of bagexpansion=bag: eigenschappentassen worden uitgebreid tot tassen met één vermelding. Deze modus is de standaardmodus.
  • kind=array of bagexpansion=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 typeofom 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