mv-expand operátor
A következőkre vonatkozik: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Többértékű dinamikus tömböket vagy tulajdonságcsomagokat bont ki több rekordra.
mv-expand
a több értéket 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 nem kibontott bemenet összes oszlopa duplikálva lesz a kimenet összes rekordjára.
Szintaxis
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ó szintaxiskonvenciákról.
Paraméterek
Név | Típus | Szükséges | Leírás |
---|---|---|---|
ColumnName, ArrayExpression | string |
✔️ | Egy tömböt vagy tulajdonságcsomagot tartalmazó dynamic típusú oszlophivatkozás vagy skaláris kifejezés. A tömb vagy tulajdonságcsomag egyes legfelső szintű elemei több rekordra bonthatók.Ha ArrayExpression van használatban, és Név nem egyenlő egyetlen bemeneti oszlop nevével sem, a kibontott érték egy új oszlopra lesz kiterjesztve a kimenetben. Ellenkező esetben a meglévő ColumnName lecserélődik. |
név | string |
Az új oszlop neve. | |
Typename | string |
✔️ | A tömb elemeinek mögöttes típusát jelzi, amely a mv-expand operátor által létrehozott oszloptípus lesz. Az alkalmazástípus művelete csak öntött, és nem tartalmaz elemzést vagy típusátalakítást. A deklarált típusnak nem megfelelő tömbelemek null értékekké válnak. |
RowLimit | int |
Az egyes eredeti sorokból létrehozott sorok maximális száma. Az alapértelmezett érték a 2147483647.
mvexpand az operátor mv-expand régi és elavult formája. Az örökölt verzió alapértelmezett sorkorlátja 128. |
|
IndexColumnName | string |
Ha with_itemindex van megadva, a kimenet egy másik, IndexColumnName nevű oszlopot tartalmaz, amely az indexet az eredeti kibontott gyűjtemény elemének 0-tól kezdődően tartalmazza. |
Visszatér
A bemenet minden rekordja esetében az operátor nulla, 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 egy bemeneti rekord több kimeneti rekordra van kibontva, az érték az összes rekordra duplikálva lesz.
A kibontott ColumnName vagy ArrayExpression esetében a kimeneti rekordok száma az egyes értékekhez lesz meghatározva bővítési. Minden bemeneti rekord esetében a rendszer kiszámítja a kimeneti rekordok maximális számát. Minden 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 sorokat bontanak ki 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 üres tömb vagy tulajdonságcsomag, akkor ehhez az értékhez nem jön létre rekord. Ellenkező esetben a rendszer annyi rekordot hoz létre, amennyi a dinamikus érték elemeit tartalmazza.
A kibontott oszlopok dynamic
típusúak, kivéve, ha explicit módon vannak begépelve a to typeof()
záradék használatával.
A bővítés módjai
A tulajdonságtáska-bővítés két módja támogatott:
-
kind=bag
vagybagexpansion=bag
: A tulajdonságcsomagok egybelépő tulajdonságzsákokká bővülnek. Ez az alapértelmezett mód. -
kind=array
vagybagexpansion=array
: A tulajdonságcsomagok kételemes[
kulcsokra,
]
tömbstruktúrákra vannak bontva, így egységes hozzáférést biztosítanak a kulcsokhoz és értékekhez. Ez a mód lehetővé teszi például a különböző darabszámú összesítések futtatását a tulajdonságneveken.
Példák
A cikkben szereplő példák a nyilvánosan elérhető tábláit használják a fürt, például a
StormEvents
adatbázis tábláját.
A cikkben szereplő példák nyilvánosan elérhető táblákat használnak, például a Weather Analytics
StormEvents
táblát, mintaadatokat.
Az ebben a szakaszban szereplő példák bemutatják, hogyan használhatja a szintaxist az első lépésekhez.
Egyoszlopos – tömbbővítés
datatable (a: int, b: dynamic)
[
1, dynamic([10, 20]),
2, dynamic(['a', 'b'])
]
| mv-expand b
kimeneti
egy | b |
---|---|
1 | 10 |
1 | 20 |
2 | egy |
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
kimeneti
egy | b |
---|---|
1 | {"prop1": "a1"} |
1 | {"prop2": "b1"} |
2 | {"prop1": "a2"} |
2 | {"prop2": "b2"} |
Egyoszlopos – táskabő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]
kimeneti
egy | 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 "tömöríti" a megfelelő oszlopokat, majd kibontja őket:
datatable (a: int, b: dynamic, c: dynamic)[
1, dynamic({"prop1": "a", "prop2": "b"}), dynamic([5, 4, 3])
]
| mv-expand b, c
kimeneti
egy | b | c |
---|---|---|
1 | {"prop1":"a"} | 5 |
1 | {"prop2":"b"} | 4 |
1 | 3 |
Két oszlop cartesian szorzata
Ha két oszlop kibontásához egy Cartesian-terméket szeretne kapni, bontsa ki egymás után a következőt:
datatable (a: int, b: dynamic, c: dynamic)
[
1, dynamic({"prop1": "a", "prop2": "b"}), dynamic([5, 6])
]
| mv-expand b
| mv-expand c
kimeneti
egy | 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 dinamikus), használja a 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
kimeneti
Oszlopnév | ColumnOrdinal | DateType | ColumnType |
---|---|---|---|
egy | 0 | System.String | string |
b | 1 | System.Object | dynamic |
c | 2 | System.Int32 | int |
Figyelje meg, hogy a b
dynamic
, míg c
int
.
With_itemindex használata
Tömb bővítése with_itemindex
:
range x from 1 to 4 step 1
| summarize x = make_list(x)
| mv-expand with_itemindex=Index x
kimeneti
x | Index |
---|---|
1 | 0 |
2 | 1 |
3 | 2 |
4 | 3 |
Kapcsolódó tartalom
- mv-apply operátor.
- Az mv-expand operátor ellentéteként tekintse meg make_list()összegzését.
- A dinamikus JSON-objektumok tulajdonságzsákkulcsokkal történő oszlopba való kibontásához tekintse meg bag_unpack() beépülő modult.
- parse_json függvény