Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Stosuje podzapytywanie do każdego rekordu i zwraca unię wyników wszystkich podzapytania.
Załóżmy na przykład, że tabela T ma kolumnę Metric typu dynamic , której wartości są tablicami real liczb. Poniższe zapytanie lokalizuje dwie największe wartości w każdej Metric wartości i zwraca rekordy odpowiadające tym wartościom.
T | mv-apply Metric to typeof(real) on
(
top 2 by Metric desc
)
Operator mv-apply ma następujące kroki przetwarzania:
-
mv-expandUżywa operatora do rozwijania każdego rekordu w danych wejściowych do podtabli (kolejność jest zachowywana). - Stosuje podzapytywanie dla każdej z podtabli.
- Dodaje zero lub więcej kolumn do wynikowej tabeli podrzędnej. Te kolumny zawierają wartości kolumn źródłowych, które nie są rozwinięte i są powtarzane w razie potrzeby.
- Zwraca unię wyników.
Operator mv-apply pobiera następujące dane wejściowe:
Co najmniej jedno wyrażenie, które ocenia w tablicach dynamicznych w celu rozwinięcia. Liczba rekordów w każdej rozwiniętej tabeli podrzędnej jest maksymalną długością każdej z tych tablic dynamicznych. Wartości null są dodawane, gdy określono wiele wyrażeń, a odpowiadające im tablice mają różne długości.
Opcjonalnie nazwy do przypisania wartości wyrażeń po rozszerzeniu. Te nazwy stają się nazwami kolumn w podtabelach. Jeśli nie zostanie określona, oryginalna nazwa kolumny jest używana, gdy wyrażenie jest odwołaniem do kolumny. W przeciwnym razie jest używana losowa nazwa.
Uwaga
Zalecamy używanie domyślnych nazw kolumn.
Typy danych elementów tych tablic dynamicznych po rozwinięciu. Te typy danych stają się typami kolumn w podtabelach. Jeśli nie zostanie określony,
dynamiczostanie użyty.Opcjonalnie nazwa kolumny, która ma zostać dodana do podtabli, która określa 0-oparty na indeksie elementu w tablicy, co spowodowało utworzenie rekordu podtabli.
Opcjonalnie maksymalna liczba elementów tablicy do rozwinięcia.
Operator mv-apply można traktować jako uogólnienie mv-expand operatora (w rzeczywistości ten ostatni może być implementowany przez ten pierwszy, jeśli podzapytywanie zawiera tylko projekcje).
Składnia
T|mv-apply [ItemIndex] ColumnsToExpand [RowLimit] on(SubQuery)
Gdzie element ItemIndex ma składnię:
with_itemindex
=
IndexColumnName
ColumnsToExpand to rozdzielana przecinkami lista co najmniej jednego elementu formularza:
[Name=] ArrayExpression [totypeof(Typename])
WierszLimit to po prostu:
limit
Wierszlimit
SubQuery ma tę samą składnię dowolnej instrukcji zapytania.
Dowiedz się więcej na temat konwencji składni.
Parametry
| Nazwisko | Typ | Wymagania | opis |
|---|---|---|---|
ItemIndex |
string |
Wskazuje nazwę kolumny typu long dołączonego do danych wejściowych w ramach fazy rozszerzania tablicy i wskazuje indeks tablicy rozszerzonej wartości na podstawie 0. |
|
Name |
string |
Nazwa do przypisania wartości rozwiniętej tablicy każdego wyrażenia rozwiniętego tablicą. Jeśli nie zostanie określona, nazwa kolumny jest używana, jeśli jest dostępna. Losowa nazwa jest generowana, jeśli ArrayExpression nie jest prostą nazwą kolumny. | |
ArrayExpression |
dynamic |
✔️ | Tablica, której wartości są rozwinięte w tablicy. Jeśli wyrażenie jest nazwą kolumny w danych wejściowych, kolumna wejściowa zostanie usunięta z danych wejściowych i nowa kolumna o tej samej nazwie lub Nazwakolumny , jeśli zostanie określona, pojawi się w danych wyjściowych. |
Typename |
string |
Nazwa typu, który przyjmują poszczególne elementy dynamic tablicy ArrayExpression . Elementy, które nie są zgodne z tym typem, są zastępowane wartością null. Jeśli nieokreślone, dynamic jest używany domyślnie. |
|
RowLimit |
int |
Limit liczby rekordów do wygenerowania z każdego rekordu danych wejściowych. Jeśli nie określono, 2147483647 jest używana. | |
SubQuery |
string |
Wyrażenie zapytania tabelarycznego z niejawnym źródłem tabelarycznym, które jest stosowane do każdej tabeli rozwijanej tablicy. |
Uwaga
mv-expand W przeciwieństwie do operatora operator mv-apply nie obsługuje bagexpand=array rozszerzania. Jeśli wyrażenie do rozwinięcia jest workiem właściwości, a nie tablicą, możesz użyć operatora wewnętrznego mv-expand (zobacz poniższy przykład).
Przykłady
Przejrzyj przykłady i uruchom je na stronie zapytania Eksploratora danych.
Wewnętrzne rozszerzenie mv-expand wykonane przez mv-apply
Zapytanie pomaga zrozumieć rozszerzenie mv-expand wykonywane wewnętrznie przez mv-apply
let data = datatable (index: int, Arr: dynamic)
[
0, dynamic([7]),
1, dynamic([6, 11, 7])
];
data
| mv-apply Arr2=Arr to typeof(long) on
(
take 100
)
Wyjście
| indeks | Arr | Arr2 |
|---|---|---|
| 0 | [7] | 7 |
| 1 | [6, 11, 7] | 6 |
| 1 | [6, 11, 7] | 11 |
| 1 | [6, 11, 7] | 7 |
Pobieranie największego elementu z tablicy
Zapytanie tworzy nową kolumnę zawierającą największy element tablicy.
let data = datatable (index: int, Arr: dynamic)
[
0, dynamic([1, 5, 3]),
1, dynamic([10, 2, 5, 7])
];
data
| mv-apply topElem=Arr to typeof(long) on
(
top 1 by topElem
)
Wyjście
| indeks | Arr | topElem |
|---|---|---|
| 0 | [1, 5, 3] | 5 |
| 1 | [10, 2, 5, 7] | 10 |
Znajdowanie dwóch pierwszych elementów w tablicy
Zapytanie zapisuje dwa pierwsze elementy tablicy w nowej kolumnie tablicy Top2.
let data = datatable (index: int, Arr: dynamic)
[
0, dynamic([5, 1, 3]),
1, dynamic([4, 10, 8, 7])
];
data
| mv-apply Arr2=Arr to typeof(long) on
(
top 2 by Arr2
| summarize Top2=make_list(Arr2)
)
Wyjście
| indeks | Arr | Top2 |
|---|---|---|
| 0 | [5, 1, 3] | [5, 3] |
| 1 | [4, 10, 8, 7] | [10, 8] |
Wybieranie elementów w tablicach
Zapytanie identyfikuje dwa pierwsze elementy z każdej tablicy dynamicznej na podstawie wartości Arr2 i podsumowuje je na nowych listach.
datatable (Val:int, Arr1:dynamic, Arr2:dynamic)
[ 1, dynamic(['A1', 'A2', 'A3']), dynamic([10, 30, 7]),
7, dynamic(['B1', 'B2', 'B5']), dynamic([15, 11, 50]),
3, dynamic(['C1', 'C2', 'C3', 'C4']), dynamic([6, 40, 20, 8])
]
| mv-apply NewArr1=Arr1, NewArr2=Arr2 to typeof(long) on (
top 2 by NewArr2
| summarize NewArr1=make_list(NewArr1), NewArr2=make_list(NewArr2)
)
Wyjście
| Val1 | Arr1 | Arr2 | NewArr1 |
NewArr2 |
|---|---|---|---|---|
| 1 | ["A1","A2","A3"] |
[10,30,7] |
["A2',"A1"] |
[30,10] |
| 7 | ["B1","B2","B5"] |
[15,11,50] |
["B5","B1"] |
[50,15] |
| 3 | ["C1","C2","C3","C4"] |
[6,40,20,8] |
["C2","C3"] |
[40,20] |
Używanie with_itemindex do pracy z podzbiorem tablicy
Zapytanie powoduje utworzenie tabeli z wierszami, w których indeks ma wartość 2 lub większą, w tym wartości indeksu i elementu z oryginalnych list.
let data = datatable (row: int, Arr: dynamic)
[
0, dynamic([5, 1, 3]),
1, dynamic([4, 10, 8, 7])
];
data
| mv-apply with_itemindex=index value=Arr to typeof(long) on
(
// here you have 'index' column
where index >= 2
)
Wyjście
| szereg | Arr | value |
index |
|---|---|---|---|
| 0 | [5, 1, 3] | 3 | 2 |
| 1 | [4, 10, 8, 7] | 8 | 2 |
| 1 | [4, 10, 8, 7] | 7 | 3 |
Używanie wielu kolumn do sprzężenia elementu dwóch tablic
Zapytanie łączy elementy z dwóch tablic dynamicznych w nowy format połączony, a następnie podsumowuje je na listach.
datatable (Val: int, Arr1: dynamic, Arr2: dynamic)
[
1, dynamic(['A1', 'A2']), dynamic(['B1', 'B2', 'B3']),
5, dynamic(['C1', 'C2']), dynamic(['D1'])
]
| mv-apply T1=Arr1, T2=Arr2 on (
extend Out = strcat(T1, "_", T2)
| summarize Out= make_list(Out)
)
Wyjście
| Val | Arr1 | Arr2 | Out |
|---|---|---|---|
| 1 | ["A1","A2"] | ["B1","B2","B3"] | ["A1_B1","A2_B2","_B3"] |
| 5 | ["C1","C2"] | ["D1"] | ["C1_D1","C2_"] |
Stosowanie mv-apply do torby właściwości
To zapytanie dynamicznie usuwa właściwości z obiektu spakowanych wartości na podstawie kryteriów, których wartości nie zaczynają się od 555. Końcowy wynik zawiera oryginalne kolumny z usuniętymi niechcianymi właściwościami.
datatable(Source: string, Target: string, Count: long)
[
'555-1234', '555-1212', 46,
'555-2424', '', int(null)
]
| extend Pack = pack_all()
| mv-apply removeProperties = Pack on
(
mv-expand kind = array Pack
| where Pack[1] !startswith "555"
| summarize propsToRemove = make_set(Pack[0])
)
| extend values = bag_remove_keys(Pack, propsToRemove)
| project-away propsToRemove
Wyjście
| Źródło | Target | Liczba | Paczka | values |
|---|---|---|---|---|
| 555-1234 | 555-1212 | 46 | { "Źródło": "555-1234", "Target": "555-1212", "Liczba": 46 } |
{ "Źródło": "555-1234", "Target": "555-1212" } |
| 555-2424 | { "Źródło": "555-2424", "Target": "", "Count": null } |
{ "Źródło": "555-2424" } |
Powiązana zawartość
- Operator mv-expand
- array_iff , funkcja