Megosztás a következőn keresztül:


mv-expand operátor

A következőkre vonatkozik: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft 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 ...] [limitRowlimit]

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

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-expandré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:

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

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

  3. 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 dynamictí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 vagy bagexpansion=bag: A tulajdonságcsomagok egybelépő tulajdonságzsákokká bővülnek. Ez az alapértelmezett mód.
  • kind=array vagy bagexpansion=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 bdynamic, míg cint.

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
  • 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