Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
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-expand
Uż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,
dynamic
zostanie 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 [to
typeof
(
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.
Pobieranie największego elementu z tablicy
Zapytanie zwraca najmniejszą liczbę parzystą (2) i najmniejszą liczbę nieparzystą (1).
let _data =
range x from 1 to 8 step 1
| summarize l=make_list(x) by xMod2 = x % 2;
_data
| mv-apply element=l to typeof(long) on
(
top 1 by element
)
Wyjście
xMod2 |
l | — element |
---|---|---|
1 | [1, 3, 5, 7] | 7 |
0 | [2, 4, 6, 8] | 8 |
Obliczanie sumy największych dwóch elementów w tablicy
Zapytanie zwraca sumę dwóch pierwszych parzystych liczb (6 + 8 = 14) i sumę dwóch pierwszych liczb nieparzyszonych (5 + 7 = 12).
let _data =
range x from 1 to 8 step 1
| summarize l=make_list(x) by xMod2 = x % 2;
_data
| mv-apply l to typeof(long) on
(
top 2 by l
| summarize SumOfTop2=sum(l)
)
Wyjście
xMod2 |
l | SumOfTop2 |
---|---|---|
1 | [1,3,5,7] | 12 |
0 | [2,4,6,8] | 14 |
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ść 3 lub większą, w tym wartości indeksu i elementu z oryginalnych list parzystek i nieparzystek.
let _data =
range x from 1 to 10 step 1
| summarize l=make_list(x) by xMod2 = x % 2;
_data
| mv-apply with_itemindex=index element=l to typeof(long) on
(
// here you have 'index' column
where index >= 3
)
| project index, element
Wyjście
indeks | — element |
---|---|
3 | 7 |
100 | 9 |
3 | 8 |
100 | 10 |
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', 'A3']), dynamic(['B1', 'B2', 'B3']),
5, dynamic(['C1', 'C2']), dynamic(['D1', 'D2'])
]
| mv-apply Arr1, Arr2 on (
extend Out = strcat(Arr1, "_", Arr2)
| summarize Arr1 = make_list(Arr1), Arr2 = make_list(Arr2), Out= make_list(Out)
)
Wyjście
Val | Arr1 | Arr2 | Out |
---|---|---|---|
1 | ["A1","A2","A3"] | ["B1","B2","B3"] | ["A1_B1","A2_B2","A3_B3"] |
5 | ["C1","C2"] | ["D1","D2"] | ["C1_D1","C2_D2"] |
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(SourceNumber: string, TargetNumber: string, CharsCount: long)
[
'555-555-1234', '555-555-1212', 46,
'555-555-1212', '', int(null)
]
| extend values = pack_all()
| mv-apply removeProperties = values on
(
mv-expand kind = array values
| where values[1] !startswith "555"
| summarize propsToRemove = make_set(values[0])
)
| extend values = bag_remove_keys(values, propsToRemove)
| project-away propsToRemove
Wyjście
Numer źródła | Numer docelowy | CharsCount | wartości |
---|---|---|---|
555-555-1234 | 555-555-1212 | 46 | { "SourceNumber": "555-555-1234", "TargetNumber": "555-555-1212" } |
555-555-1212 | { "SourceNumber": "555-555-1212" } |
Powiązana zawartość
- Operator mv-expand
- array_iff , funkcja