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

T|mv-expand [kind=(bagarray | )] [Name=] ArrayExpression [to typeof(Typename)] [, [Name=] ArrayExpression [to typeof(Typename)] ...] [limitRowlimit]

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:

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

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

  3. 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 vagy bagexpansion=bag: A tulajdonságcsomagok egybejegyzéses tulajdonságcsomagokká vannak kibontva. Ez az alapértelmezett mód.
  • kind=arrayvagy bagexpansion=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 intdynamicc 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