Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wendet eine Unterabfrage auf jeden Datensatz an und gibt die Vereinigung der Ergebnisse aller Unterabfragen zurück.
Angenommen, eine Tabelle T weist eine Spalte Metric vom Typ dynamic auf, deren Werte Arrays von real Zahlen sind. Die folgende Abfrage sucht die beiden größten Werte in jedem Metric Wert und gibt die Datensätze zurück, die diesen Werten entsprechen.
T | mv-apply Metric to typeof(real) on
(
top 2 by Metric desc
)
Der mv-apply Operator verfügt über die folgenden Verarbeitungsschritte:
- Verwendet den
mv-expandOperator, um jeden Datensatz in der Eingabe in Untertabellen zu erweitern (Reihenfolge wird beibehalten). - Wendet die Unterabfrage für jede der Untertabellen an.
- Fügt der resultierenden Untertabelle null oder mehr Spalten hinzu. Diese Spalten enthalten die Werte der nicht erweiterten Quellspalten und werden bei Bedarf wiederholt.
- Gibt die Vereinigung der Ergebnisse zurück.
Der mv-apply Operator ruft die folgenden Eingaben ab:
Mindestens ein Ausdruck, der zu dynamischen Arrays ausgewertet wird, um zu erweitern. Die Anzahl der Datensätze in jeder erweiterten Untertabelle ist die maximale Länge der einzelnen dynamischen Arrays. Nullwerte werden hinzugefügt, wenn mehrere Ausdrücke angegeben werden und die entsprechenden Arrays unterschiedliche Längen aufweisen.
Optional weisen die Namen die Werte der Ausdrücke nach der Erweiterung zu. Diese Namen werden zu den Spaltennamen in den Untertabellen. Wenn nicht angegeben, wird der ursprüngliche Name der Spalte verwendet, wenn der Ausdruck ein Spaltenverweis ist. Andernfalls wird ein zufälliger Name verwendet.
Hinweis
Es wird empfohlen, die Standardspaltennamen zu verwenden.
Die Datentypen der Elemente dieser dynamischen Arrays nach der Erweiterung. Diese Datentypen werden zu den Spaltentypen in den Untertabellen. Wenn dieser nicht angegeben wurde, wird
dynamicverwendet.Optional kann der Name einer Spalte, die den Untertabellen hinzugefügt werden soll, der den 0-basierten Index des Elements im Array angibt, das zu dem unterbaren Datensatz geführt hat.
Optional kann die maximale Anzahl von Arrayelementen erweitert werden.
Der mv-apply Operator kann als Verallgemeinerung des mv-expand Operators betrachtet werden (in der Tat kann letzteres vom früheren implementiert werden, wenn die Unterabfrage nur Projektionen enthält.)
Syntax
T|mv-apply [ItemIndex] ColumnsToExpand [RowLimit] on(SubQuery)
Dabei weist ItemIndex die Syntax auf:
with_itemindex
=
IndexColumnName
ColumnsToExpand ist eine durch Trennzeichen getrennte Liste eines oder mehrerer Elemente des Formulars:
[Name=] ArrayExpression [totypeof(Typename])
RowLimit ist einfach:
limit
RowLimit
SubQuery weist dieselbe Syntax einer abfrage-Anweisung auf.
Erfahren Sie mehr über Syntaxkonventionen.
Parameter
| Name | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
ItemIndex |
string |
Gibt den Namen einer Spalte vom Typ long an, die als Teil der Arrayerweiterungsphase an die Eingabe angefügt wird, und gibt den 0-basierten Arrayindex des erweiterten Werts an. |
|
Name |
string |
Der Name zum Zuweisen der Array-erweiterten Werte jedes array-erweiterten Ausdrucks. Wenn nicht angegeben, wird der Name der Spalte verwendet, falls verfügbar. Ein zufälliger Name wird generiert, wenn ArrayExpression kein einfacher Spaltenname ist. | |
ArrayExpression |
dynamic |
✔️ | Das Array, dessen Werte Array erweitert sind. Wenn der Ausdruck der Name einer Spalte in der Eingabe ist, wird die Eingabespalte aus der Eingabe entfernt, und eine neue Spalte mit demselben Namen oder ColumnName (sofern angegeben) wird in der Ausgabe angezeigt. |
Typename |
string |
Der Name des Typs, den die einzelnen Elemente des dynamic Array ArrayExpressionübernehmen. Elemente, die diesem Typ nicht entsprechen, werden durch einen Nullwert ersetzt. Wenn nicht angegeben, dynamic wird standardmäßig verwendet. |
|
RowLimit |
int |
Ein Grenzwert für die Anzahl der Datensätze, die aus jedem Datensatz der Eingabe generiert werden sollen. Wenn nicht angegeben, wird 2147483647 verwendet. | |
SubQuery |
string |
Ein Tabellarischer Abfrageausdruck mit einer impliziten tabellarischen Quelle, die auf jede Array-erweiterte Untertabelle angewendet wird. |
Hinweis
mv-expand Im Gegensatz zum Operator unterstützt mv-apply der bagexpand=array Operator keine Erweiterung. Wenn der zu erweiternde Ausdruck ein Eigenschaftenbehälter und kein Array ist, können Sie einen inneren mv-expand Operator verwenden (siehe das folgende Beispiel).
Beispiele
Überprüfen Sie die Beispiele, und führen Sie sie auf der Abfrageseite des Daten-Explorers aus.
Interner mv-expand durch mv-apply
Die Abfrage hilft beim Verständnis des mv-expand-done intern durch 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
)
Ausgabe
| Index | Arr | Arr2 |
|---|---|---|
| 0 | [7] | 7 |
| 1 | [6, 11, 7] | 6 |
| 1 | [6, 11, 7] | 11 |
| 1 | [6, 11, 7] | 7 |
Abrufen des größten Elements aus dem Array
Die Abfrage erstellt eine neue Spalte mit dem größten Element eines Arrays.
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
)
Ausgabe
| Index | Arr | topElem |
|---|---|---|
| 0 | [1, 5, 3] | 5 |
| 1 | [10, 2, 5, 7] | 10 |
Suchen der beiden obersten Elemente in einem Array
Die Abfrage speichert die beiden obersten Elemente eines Arrays in einer neuen Matrixspalte 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)
)
Ausgabe
| Index | Arr | Top2 |
|---|---|---|
| 0 | [5, 1, 3] | [5, 3] |
| 1 | [4, 10, 8, 7] | [10, 8] |
Auswählen von Elementen in Arrays
Die Abfrage identifiziert die beiden wichtigsten Elemente aus jedem dynamischen Array basierend auf den Arr2-Werten und fasst sie in neue Listen zusammen.
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)
)
Ausgabe
| 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] |
Verwenden with_itemindex für die Arbeit mit einer Teilmenge des Arrays
Die Abfrage führt zu einer Tabelle mit Zeilen, in denen der Index 2 oder höher ist, einschließlich der Index- und Elementwerte aus den ursprünglichen Listen.
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
)
Ausgabe
| rudern | Arr | value |
index |
|---|---|---|---|
| 0 | [5, 1, 3] | 3 | 2 |
| 1 | [4, 10, 8, 7] | 8 | 2 |
| 1 | [4, 10, 8, 7] | 7 | 3 |
Verwenden mehrerer Spalten zum Verbinden von Elementen zweier Arrays
Die Abfrage kombiniert Elemente aus zwei dynamischen Arrays in einem neuen verketteten Format und fasst sie dann in Listen zusammen.
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)
)
Ausgabe
| Val | Arr1 | Arr2 | Out |
|---|---|---|---|
| 1 | ["A1";"A2"] | ["B1";"B2";"B3"] | ["A1_B1";"A2_B2";"_B3"] |
| 5 | ["C1";"C2"] | ["D1"] | ["C1_D1";"C2_"] |
Anwenden von mv-apply auf einen Eigenschaftenbehälter
Diese Abfrage entfernt eigenschaften dynamisch aus dem gepackten Werteobjekt basierend auf den Kriterien, die ihre Werte nicht mit 555 beginnen. Das Endergebnis enthält die ursprünglichen Spalten mit entfernten unerwünschten Eigenschaften.
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
Ausgabe
| Quelle | Ziel | Anzahl | Verpackung | values |
|---|---|---|---|---|
| 555-1234 | 555-1212 | 46 | { "Quelle": "555-1234", "Target": "555-1212", "Anzahl": 46 } |
{ "Quelle": "555-1234", "Target": "555-1212" } |
| 555-2424 | { "Quelle": "555-2424", "Target": "", "Count": null } |
{ "Quelle": "555-2424" } |