operator mv-expand
Rozszerza tablice dynamiczne z wieloma wartościami lub torby właściwości 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ą duplikowane do wszystkich rekordów w danych wyjściowych.
Składnia
T|mv-expand
[kind=
(bag
array
| )] [with_itemindex=
IndexColumnName] Nazwakolumny [to typeof(
Nazwa_)
typu] [,
Nazwakolumny ...] [limit
Rowlimit]
T|mv-expand
[(bag
| array
)] [kind=
Name=
] ArrayExpression [to typeof(
Typename)
] [,
[Name=
] ArrayExpression [to typeof(
Typename)
] ...] [limit
Rowlimit]
Dowiedz się więcej o konwencjach składniowych.
Parametry
Nazwa | Typ | Wymagane | Opis |
---|---|---|---|
ColumnName, ArrayExpression | string |
✔️ | Odwołanie do kolumny lub wyrażenie skalarne z wartością typu dynamic , która 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ść jest rozszerzana na nową kolumnę w danych wyjściowych. W przeciwnym razie istniejąca nazwakolumny zostanie zastąpiona. |
Nazwa | string |
Nazwa nowej kolumny. | |
Typename | 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 jest starszą i przestarzałą formą 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:
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 rozwinięty w wiele rekordów wyjściowych, wartość jest duplikowana do wszystkich rekordów.
Dla każdej rozwiniętej wartości ColumnName lub ArrayExpression liczba rekordów wyjściowych jest określana dla każdej wartości, jak wyjaśniono 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ą rozwijane "równolegle", tak aby brakujące wartości (jeśli istnieją) zostały zastąpione przez wartości null. Elementy są rozszerzane na wiersze w kolejności, w której są wyświetlane w oryginalnej tablicy/torbie.
Jeśli wartość dynamiczna ma wartość null, zostanie wygenerowany pojedynczy rekord dla tej wartości (null). Jeśli wartość dynamiczna jest pustą tablicą lub workiem właściwości, żaden rekord nie jest generowany dla tej wartości. W przeciwnym razie liczba rekordów jest generowanych, ponieważ w wartości dynamicznej znajdują się elementy.
Rozwinięte kolumny mają typ dynamic
, chyba że są jawnie wpisywane przy użyciu klauzuli to typeof()
.
Tryby rozszerzania
Obsługiwane są dwa tryby rozszerzania torby na właściwości:
kind=bag
lubbagexpansion=bag
: Torby na właściwości są rozwinięte w torby na nieruchomości z jednym wejściem. Ten tryb jest trybem domyślnym.kind=array
lubbagexpansion=array
: Torby właściwości są rozszerzane na dwie[
elementy strukturytablicy wartości]
klucza,
, umożliwiając jednolity dostęp do kluczy i wartości. Ten tryb umożliwia również na przykład uruchamianie agregacji distinct-count 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
Dane wyjściowe
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
Dane wyjściowe
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]
Dane wyjściowe
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 spakowanie 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
Dane wyjściowe
a | b | c |
---|---|---|
1 | {"prop1":"a"} | 5 |
1 | {"prop2":"b"} | 4 |
1 | 3 |
Produkt kartezjański dwóch kolumn
Jeśli chcesz uzyskać produkt kartezjański 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
Dane wyjściowe
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
Dane wyjściowe
nazwa_kolumny | KolumnaOrdinal | Typ daty | ColumnType |
---|---|---|---|
a | 0 | System.string | string |
b | 1 | System.Object | dynamic |
c | 2 | System.Int32 | int |
Kolumna b
powiadomienia jest zwracana w dynamic
postaci , 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
Dane wyjściowe
x | Indeks |
---|---|
1 | 0 |
2 | 1 |
3 | 2 |
4 | 3 |
Zawartość pokrewna
- Aby uzyskać więcej przykładów, zobacz Liczba aktywności na żywo w czasie.
- operator mv-apply .
- Aby uzyskać przeciwieństwo operatora mv-expand, zobacz summarize make_list().
- Aby rozszerzyć dynamiczne obiekty JSON na kolumny przy użyciu kluczy torby właściwości, zobacz wtyczkę bag_unpack().
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla