mv-expand operátor
Többértékű dinamikus tömböket vagy tulajdonságcsomagokat bont ki több rekordra.
mv-expand
Az aggregációs operátorok ellentéteként írható le, amelyek több értéket csomagolnak egyetlen dinamikus típusú tömbbe vagy tulajdonságcsomagba, például summarize
... make-list()
és make-series
.
A (skaláris) tömb vagy tulajdonságcsomag minden eleme új rekordot hoz létre az operátor kimenetében. A bemenet nem kibontott összes oszlopa duplikálva lesz a kimenet összes rekordjára.
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]
További információ a szintaxis konvenciókról.
Paraméterek
Név | Típus | Kötelező | Leírás |
---|---|---|---|
ColumnName, ArrayExpression | string |
✔️ | Oszlophivatkozás vagy skaláris kifejezés egy tömböt vagy tulajdonságcsomagot tartalmazó típusú dynamic értékkel. A tömb vagy tulajdonságcsomag egyes legfelső szintű elemei több rekordra lesznek kibontva.Ha a ArrayExpression függvényt használja, és a Name nem egyenlő egyetlen bemeneti oszlop nevével sem, a kibontott érték a kimenet egy új oszlopára lesz kiterjesztve. Ellenkező esetben a rendszer lecseréli a meglévő ColumnName oszlopot . |
Név | string |
Az új oszlop neve. | |
Típusnév | string |
✔️ | A tömb elemeinek mögöttes típusát jelzi, amely az operátor által mv-expand létrehozott oszlop típusává válik. A típus alkalmazásának művelete csak öntött, és nem tartalmaz elemzést vagy típuskonverziót. Azok a tömbelemek, amelyek nem felelnek meg a deklarált típusnak, értékekké válnak null . |
RowLimit | int |
Az egyes eredeti sorokból létrehozott sorok maximális száma. Az alapértelmezett érték 2147483647. mvexpand az operátor mv-expand örökölt és elavult formája. Az örökölt verzió alapértelmezett sorkorlátja 128. |
|
IndexColumnName | string |
Ha with_itemindex meg van adva, a kimenet egy másik , IndexColumnName nevű oszlopot is tartalmaz, amely az indexet az eredeti kibontott gyűjtemény elemének 0-tól kezdődően tartalmazza. |
Válaszok
A bemenet minden rekordja esetében az operátor nullát, egy vagy több rekordot ad vissza a kimenetben az alábbi módon meghatározott módon:
A ki nem bontott bemeneti oszlopok az eredeti értékükkel jelennek meg a kimenetben. Ha egyetlen bemeneti rekord több kimeneti rekordra van kibontva, az érték minden rekordra duplikálva lesz.
Minden kibontott ColumnName vagy ArrayExpression esetében a kimeneti rekordok száma az egyes értékekhez lesz meghatározva a bővítési módokban leírtak szerint. Minden bemeneti rekord esetében a rendszer a kimeneti rekordok maximális számát számítja ki. Az összes tömb vagy tulajdonságcsomag "párhuzamosan" van kibontva, így a hiányzó értékek (ha vannak ilyenek) null értékekre cserélődnek. Az elemek sorokra vannak bontva az eredeti tömbben/zsákban megjelenő sorrendben.
Ha a dinamikus érték null, akkor egyetlen rekord jön létre ehhez az értékhez (null). Ha a dinamikus érték egy üres tömb vagy tulajdonságcsomag, akkor ehhez az értékhez nem jön létre rekord. Ellenkező esetben annyi rekord lesz létrehozva, amennyit a dinamikus érték elemei tartalmaznak.
A kibontott oszlopok típusa dynamic
, kivéve, ha explicit módon a záradék használatával to typeof()
vannak begépelve.
Bővítési módok
A tulajdonságzsákok bővítésének két módja támogatott:
kind=bag
vagybagexpansion=bag
: A tulajdonságcsomagok egybejegyzéses tulajdonságcsomagokká vannak kibontva. Ez az alapértelmezett mód.kind=array
vagybagexpansion=array
: A tulajdonságcsomagok kételemű[
kulcsérték,
]
tömbstruktúrákká vannak kibontva, így egységes hozzáférés érhető el a kulcsokhoz és értékekhez. Ez a mód lehetővé teszi például egy distinct-count aggregáció futtatását a tulajdonságneveken.
Példák
Egyoszlopos – tömbbővítés
datatable (a: int, b: dynamic)
[
1, dynamic([10, 20]),
2, dynamic(['a', 'b'])
]
| mv-expand b
Kimenet
a | b |
---|---|
1 | 10 |
1 | 20 |
2 | a |
2 | b |
Egyoszlopos – táskabővítés
Egyetlen oszlop egyszerű bővítése:
datatable (a: int, b: dynamic)
[
1, dynamic({"prop1": "a1", "prop2": "b1"}),
2, dynamic({"prop1": "a2", "prop2": "b2"})
]
| mv-expand b
Kimenet
a | b |
---|---|
1 | {"prop1": "a1"} |
1 | {"prop2": "b1"} |
2 | {"prop1": "a2"} |
2 | {"prop2": "b2"} |
Egyoszlopos – zsákbővítés kulcs-érték párokra
Egyszerű táskabővítés kulcs-érték párokra:
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]
Kimenet
a | b | kulcs | val |
---|---|---|---|
1 | ["prop1","a1"] | prop1 | a1 |
1 | ["prop2","b1"] | prop2 | b1 |
2 | ["prop1","a2"] | prop1 | a2 |
2 | ["prop2";"b2"] | prop2 | B2 |
Két oszlop összecsukva
A két oszlop kibontása először a megfelelő oszlopokat "tömöríti", majd kibontja őket:
datatable (a: int, b: dynamic, c: dynamic)[
1, dynamic({"prop1": "a", "prop2": "b"}), dynamic([5, 4, 3])
]
| mv-expand b, c
Kimenet
a | b | c |
---|---|---|
1 | {"prop1":"a"} | 5 |
1 | {"prop2":"b"} | 4 |
1 | 3 |
Két oszlop cartesian terméke
Ha két oszlop kibontására vonatkozó Cartesian-terméket szeretne kapni, bontsa ki egymás után az alábbi elemet:
datatable (a: int, b: dynamic, c: dynamic)
[
1, dynamic({"prop1": "a", "prop2": "b"}), dynamic([5, 6])
]
| mv-expand b
| mv-expand c
Kimenet
a | b | c |
---|---|---|
1 | { "prop1": "a"} | 5 |
1 | { "prop1": "a"} | 6 |
1 | { "prop2": "b"} | 5 |
1 | { "prop2": "b"} | 6 |
Kimenet konvertálása
Ha egy mv-expand kimenetét egy bizonyos típusra szeretné kényszeríteni (az alapértelmezett érték dinamikus), használja a következőt 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
Kimenet
ColumnName | ColumnOrdinal | DateType | ColumnType |
---|---|---|---|
a | 0 | System.String | string |
b | 1 | System.Object | dynamic |
c | 2 | System.Int32 | int |
A megfigyelt oszlop b
a visszaadott értékként int
dynamic
c
jelenik meg.
A with_itemindex használata
Tömb bővítése a következővel with_itemindex
:
range x from 1 to 4 step 1
| summarize x = make_list(x)
| mv-expand with_itemindex=Index x
Kimenet
x | Index |
---|---|
1 | 0 |
2 | 1 |
3 | 2 |
4 | 3 |
Kapcsolódó tartalom
- További példákért lásd: Az élő tevékenységek időbeli számának diagramja.
- mv-apply operátor.
- Az mv-expand operátor ellentéteként tekintse meg a make_list() összegzését.
- A dinamikus JSON-objektumok tulajdonságzsákkulcsokkal történő oszlopba való kibontásához lásd: bag_unpack() beépülő modul.
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: