mv-expand işleci

Çok değerli dinamik dizileri veya özellik torbalarını birden çok kayda genişletir.

mv-expandbirden çok değeri tek bir dinamik türü belirlenmiş dizide veya özellik paketinde (... ve make-seriesgibi) paketleyen toplama işleçlerinin tersi olarak summarize tanımlanabilir. make-list() (skaler) dizi veya özellik paketindeki her öğe, işlecin çıkışında yeni bir kayıt oluşturur. Girişin genişletilmeyen tüm sütunları çıkıştaki tüm kayıtlara çoğaltılır.

Syntax

T|mv-expand [kind=(bag | array)] [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]

Söz dizimi kuralları hakkında daha fazla bilgi edinin.

Parametreler

Ad Tür Gerekli Açıklama
ColumnName, ArrayExpression string ✔️ Bir sütun başvurusu veya diziyi veya özellik çantasını tutan türde dynamic bir değere sahip skaler ifade. Dizi veya özellik çantasının tek tek en üst düzey öğeleri birden çok kayda genişletir.
ArrayExpression kullanıldığında ve Ad herhangi bir giriş sütunu adına eşit olmadığında, genişletilmiş değer çıktıda yeni bir sütuna genişletilir. Aksi takdirde, mevcut ColumnName değiştirilir.
Ad string Yeni sütun için bir ad.
Typename string ✔️ Dizi öğelerinin temel türünü gösterir ve bu, işleç tarafından mv-expand üretilen sütunun türü olur. Tür uygulama işlemi yalnızca atamadır ve ayrıştırma veya tür dönüştürme içermez. Bildirilen türle uyumlu olmayan dizi öğeleri değerlere dönüşür null .
RowLimit int Her özgün satırdan oluşturulan en fazla satır sayısı. Varsayılan değer 2147483647’dir. mvexpand işlecinin mv-expandeski ve eski bir biçimidir. Eski sürümde varsayılan satır sınırı 128'dir.
IndexColumnName string belirtilirse with_itemindex çıkış, özgün genişletilmiş koleksiyondaki öğenin 0'ında başlayan dizini içeren IndexColumnName adlı başka bir sütun içerir.

Döndürülenler

Girişteki her kayıt için işleç, aşağıdaki şekilde belirlendiği gibi çıkışta sıfır, bir veya daha fazla kayıt döndürür:

  1. Genişletilmeyen giriş sütunları çıkışta özgün değerleriyle birlikte görünür. Tek bir giriş kaydı birden çok çıkış kaydına genişletilirse, değer tüm kayıtlara çoğaltılır.

  2. Genişletilen her ColumnName veya ArrayExpression için, genişletme modlarında açıklandığı gibi her değer için çıkış kayıtlarının sayısı belirlenir. Her giriş kaydı için en fazla çıkış kaydı sayısı hesaplanır. Eksik değerlerin (varsa) null değerlerle değiştirilmesi için tüm diziler veya özellik paketleri "paralel" olarak genişletilir. Öğeler, özgün dizide/torbada göründükleri sırayla satırlara genişletilir.

  3. Dinamik değer null ise, bu değer için tek bir kayıt oluşturulur (null). Dinamik değer boş bir dizi veya özellik paketiyse, bu değer için hiçbir kayıt üretilmemiştir. Aksi takdirde, dinamik değerdeki öğeler kadar çok kayıt oluşturulur.

Genişletilmiş sütunlar, yan tümcesi kullanılarak to typeof() açıkça yazılmadıkça türündedirdynamic.

Genişletme modları

İki özellik paketi genişletme modu desteklenir:

  • kind=bag veya bagexpansion=bag: Özellik çantaları tek girişli özellik torbalarına genişletilir. Bu mod varsayılan moddur.
  • kind=array veya bagexpansion=array: Özellik paketleri iki öğeli [anahtar,değeri] dizi yapılarına genişletilir ve anahtarlara ve değerlere tekdüzen erişim sağlar. Bu mod, örneğin özellik adları üzerinde ayrı sayı toplaması çalıştırmaya da olanak tanır.

Örnekler

Tek sütun - dizi genişletme

datatable (a: int, b: dynamic)
[
    1, dynamic([10, 20]),
    2, dynamic(['a', 'b'])
]
| mv-expand b

Çıkış

a b
1 10
1 20
2 a
2 b

Tek sütun - torba genişletme

Tek bir sütunun basit genişletmesi:

datatable (a: int, b: dynamic)
[
    1, dynamic({"prop1": "a1", "prop2": "b1"}),
    2, dynamic({"prop1": "a2", "prop2": "b2"})
]
| mv-expand b

Çıkış

a b
1 {"prop1": "a1"}
1 {"prop2": "b1"}
2 {"prop1": "a2"}
2 {"prop2": "b2"}

Tek sütun - anahtar-değer çiftlerine paket genişletme

Anahtar-değer çiftlerine basit bir paket genişletmesi:

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]

Çıkış

a b anahtar Val
1 ["prop1","a1"] prop1 a1
1 ["prop2","b1"] prop2 b1
2 ["prop1","a2"] prop1 a2
2 ["prop2","b2"] prop2 B2

sıkıştırılmış iki sütun

İki sütunun genişletilmesi önce geçerli sütunları 'sıkıştıracak' ve sonra da genişletecektir:

datatable (a: int, b: dynamic, c: dynamic)[
    1, dynamic({"prop1": "a", "prop2": "b"}), dynamic([5, 4, 3])
]
| mv-expand b, c

Çıkış

a b c
1 {"prop1":"a"} 5
1 {"prop2":"b"} 4
1 3

İki sütunun kartezyen ürünü

İki sütunu genişleten bir Kartezyen ürünü elde etmek istiyorsanız, birini ardı ardına genişletin:

datatable (a: int, b: dynamic, c: dynamic)
[
    1, dynamic({"prop1": "a", "prop2": "b"}), dynamic([5, 6])
]
| mv-expand b
| mv-expand c

Çıkış

a b c
1 { "prop1": "a"} 5
1 { "prop1": "a"} 6
1 { "prop2": "b"} 5
1 { "prop2": "b"} 6

Çıkışı dönüştür

Mv-expand'in çıkışını belirli bir türe zorlamak için (varsayılan dinamiktir) kullanın 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 

Çıkış

ColumnName ColumnOrdinal Datetype ColumnType
a 0 System string
b 1 System.Object dynamic
c 2 System.Int32 int

Sütunun olarak dynamic döndürülürken c olarak döndürülürint.b

with_itemindex kullanma

ile with_itemindexbir dizinin genişletilmesi:

range x from 1 to 4 step 1
| summarize x = make_list(x)
| mv-expand with_itemindex=Index x

Çıkış

x Dizin oluşturma
1 0
2 1
3 2
4 3