Udostępnij za pośrednictwem


operator mv-expand

Dotyczy: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

Rozszerza tablice dynamiczne lub torby właściwości wielowartość na wiele rekordów.

mv-expand można opisać jako przeciwieństwo operatorów agregacji, które pakują wiele wartości do jednej tablicy dynamicznej lub torby właściwości, takich jak summarize ... make-list() i make-series. Każdy element w tablicy (skalarnej) lub worek właściwości generuje nowy rekord w danych wyjściowych operatora. Wszystkie kolumny danych wejściowych, które nie są rozwinięte, są zduplikowane do wszystkich rekordów w danych wyjściowych.

Składnia

T |mv-expand [kind=(bagarray | )] [with_itemindex= IndexColumnName] ColumnName [to typeof( Typename)] [, Nazwakolumny ...] [limit Rowlimit]

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

Dowiedz się więcej na temat konwencji składni.

Parametry

Nazwisko Type Wymagania opis
ColumnName, ArrayExpression string ✔️ Odwołanie do kolumny lub wyrażenie skalarne z wartością typu dynamic , który zawiera tablicę lub torbę właściwości. Poszczególne elementy najwyższego poziomu tablicy lub torby właściwości są rozszerzane na wiele rekordów.
Gdy jest używana funkcja ArrayExpression i nazwa nie jest równa żadnej nazwie kolumny wejściowej, rozszerzona wartość zostanie rozszerzona do nowej kolumny w danych wyjściowych. W przeciwnym razie istniejąca nazwa kolumny zostanie zamieniona.
Nazwa/nazwisko string Nazwa nowej kolumny.
Nazwa typu string ✔️ Wskazuje podstawowy typ elementów tablicy, który staje się typem kolumny wygenerowanej mv-expand przez operatora. Operacja stosowania typu jest tylko rzutowania i nie obejmuje analizowania ani konwersji typów. Elementy tablicy, które nie są zgodne z zadeklarowanymi typami, stają się null wartościami.
Wierszlimit int Maksymalna liczba wierszy wygenerowanych z każdego oryginalnego wiersza. Wartość domyślna to 2147483647. mvexpand to starsza i przestarzała forma operatora mv-expand. Starsza wersja ma domyślny limit wierszy 128.
IndexColumnName string Jeśli with_itemindex zostanie określony, dane wyjściowe zawierają inną kolumnę o nazwie IndexColumnName , która zawiera indeks rozpoczynający się od 0 elementu w oryginalnej rozwiniętej kolekcji.

Zwraca

Dla każdego rekordu w danych wejściowych operator zwraca zero, jeden lub wiele rekordów w danych wyjściowych, jak określono w następujący sposób:

  1. Kolumny wejściowe, które nie są rozwinięte, są wyświetlane w danych wyjściowych z ich oryginalną wartością. Jeśli pojedynczy rekord wejściowy jest rozszerzany na wiele rekordów wyjściowych, wartość jest duplikowana do wszystkich rekordów.

  2. Dla każdej rozwiniętej wartości ColumnName lub ArrayExpression liczba rekordów wyjściowych jest określana dla każdej wartości zgodnie z opisem w trybach rozszerzania. Dla każdego rekordu wejściowego jest obliczana maksymalna liczba rekordów wyjściowych. Wszystkie tablice lub torby właściwości są rozszerzane "równolegle", aby brakujące wartości (jeśli istnieją) zostały zastąpione wartościami null. Elementy są rozszerzane na wiersze w kolejności, w której są wyświetlane w oryginalnej tablicy/torbie.

  3. Jeśli wartość dynamiczna ma wartość null, zostanie wygenerowany pojedynczy rekord dla tej wartości (null). Jeśli wartość dynamiczna jest pustą tablicą lub torbą właściwości, dla tej wartości nie jest generowany żaden rekord. W przeciwnym razie liczba rekordów jest generowanych, ponieważ istnieją elementy w wartości dynamicznej.

Rozwinięte kolumny są typu dynamic, chyba że są jawnie wpisywane przy użyciu klauzuli to typeof() .

Tryby rozszerzania

Obsługiwane są dwa tryby rozszerzeń torby właściwości:

  • kind=bag lub bagexpansion=bag: Torby właściwości są rozszerzane na torby nieruchomości jednokrotnych. Ten tryb jest trybem domyślnym.
  • kind=arraylub bagexpansion=array: Torby właściwości są rozszerzane na dwie [struktury tablicy wartości] klucza elementu,, co umożliwia jednolity dostęp do kluczy i wartości. Ten tryb umożliwia również uruchamianie agregacji unikatowej liczby dla nazw właściwości.

Przykłady

Pojedyncza kolumna — rozszerzanie tablicy

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

Wyjście

a b
1 10
1 20
2 a
2 b

Pojedyncza kolumna — rozszerzanie torby

Proste rozszerzanie pojedynczej kolumny:

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

Wyjście

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

Pojedyncza kolumna — rozszerzanie torby na pary klucz-wartość

Prosta ekspansja torby do par klucz-wartość:

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]

Wyjście

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

Spakowane dwie kolumny

Rozwinięcie dwóch kolumn najpierw spowoduje "zip" odpowiednich kolumn, a następnie rozwinięcie ich:

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

Wyjście

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

Produkt kartezjański dwóch kolumn

Jeśli chcesz uzyskać kartezjański produkt rozszerzający dwie kolumny, rozwiń jeden po drugim:

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

Wyjście

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

Konwertowanie danych wyjściowych

Aby wymusić rozszerzenie mv-expand do określonego typu (wartość domyślna jest dynamiczna), użyj polecenia 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 

Wyjście

ColumnName KolumnaOrdinal Typ daty Typ kolumny
a 0 System.String string
b 1 System.Object dynamic
c 2 System.Int32 int

Zwróć uwagę, że kolumna b jest zwracana w dynamic czasie, gdy c jest zwracana jako int.

Korzystanie z with_itemindex

Rozszerzanie tablicy za pomocą polecenia with_itemindex:

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

Wyjście

x Indeks
1 0
2 1
3 2
4 3