mv-expand-Operator
Gilt für: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Erweitert dynamische Arrays oder Eigenschaftenbehälter mit mehreren Werten auf mehrere Datensätze.
mv-expand
kann als Gegenteil der Aggregationsoperatoren beschrieben werden, die mehrere Werte in einem einzelnen Array oder Eigenschaftenbehälter des Typs dynamisch packen, z. B. summarize
... make-list()
und make-series
.
Jedes Element im (skalaren) Array oder Eigenschaftenbehälter generiert einen neuen Datensatz in der Ausgabe des Operators. Alle nicht erweiterten Spalten der Eingabe werden in alle Datensätze in der Ausgabe dupliziert.
Syntax
T |mv-expand
[kind=
(bag
array
| )] [with_itemindex=
IndexColumnName] ColumnName [to typeof(
Typename)
] [,
ColumnName ...] [limit
Rowlimit]
T [(bag
| array
)] [kind=
Name =
] ArrayExpression [to typeof(
Typename)
] [,
[Name =
] ArrayExpression [to typeof(
Typename)
] ...] [limit
Rowlimit]|mv-expand
Erfahren Sie mehr über Syntaxkonventionen.
Parameter
Name | Type | Erforderlich | Beschreibung |
---|---|---|---|
ColumnName, ArrayExpression | string |
✔️ | Ein Spaltenverweis oder ein skalarer Ausdruck mit einem Wert vom Typ dynamic , der ein Array oder einen Eigenschaftenbehälter enthält. Die einzelnen Elemente der obersten Ebene des Arrays oder Eigenschaftenbehälters werden auf mehrere Datensätze erweitert.Wenn ArrayExpression verwendet wird und Name keinem Eingabespaltennamen entspricht, wird der erweiterte Wert auf eine neue Spalte in der Ausgabe erweitert. Andernfalls wird der vorhandene ColumnName-Wert ersetzt. |
Name | string |
Ein Name für die neue Spalte. | |
Typname | string |
✔️ | Gibt den zugrunde liegenden Typ der Elemente des Arrays an, der zum Typ der Spalte wird, die vom mv-expand -Operator generiert wird. Der Vorgang zum Anwenden des Typs ist nur Umwandlung und umfasst keine Analyse oder Typkonvertierung. Arrayelemente, die nicht dem deklarierten Typ entsprechen, werden null zu Werten. |
RowLimit | int |
Die maximale Anzahl von Zeilen, die aus jeder ursprünglichen Zeile generiert werden. Der Standardwert ist 2147483647. mvexpand ist eine Legacy- und veraltete Form des Operators mv-expand . Die Legacyversion weist ein Standardzeilenlimit von 128 auf. |
|
IndexColumnName | string |
Wenn with_itemindex angegeben, enthält die Ausgabe eine weitere Spalte mit dem Namen IndexColumnName , die den Index ab 0 des Elements in der ursprünglichen erweiterten Auflistung enthält. |
Gibt zurück
Der Operator gibt für jeden Datensatz in der Eingabe null, einen oder mehrere Datensätze in der Ausgabe zurück, wie auf folgende Weise festgelegt:
Nicht erweiterte Eingabespalten werden in der Ausgabe mit ihrem ursprünglichen Wert angezeigt. Wird ein einzelner Eingabedatensatz auf mehrere Ausgabedatensätze erweitert, wird der Wert in alle Datensätze dupliziert.
Für jeden erweiterten ColumnName - oder ArrayExpression-Wert wird die Anzahl der Ausgabedatensätze für jeden Wert bestimmt, wie im Erweiterungsmodus erläutert. Für jeden Eingabedatensatz wird die maximale Anzahl von Ausgabedatensätzen berechnet. Alle Arrays oder Eigenschaftenbehälter werden parallel erweitert, sodass fehlende Werte (sofern vorhanden) durch NULL-Werte ersetzt werden. Elemente werden in der Reihenfolge, in der Sie im ursprünglichen Array/in der ursprünglichen Sammlung angezeigt werden, in Zeilen erweitert.
Ist der dynamische Wert NULL, wird ein einzelner Datensatz für diesen Wert erstellt (NULL). Ist der dynamische Wert ein leeres Array oder ein leerer Eigenschaftenbehälter, wird kein Datensatz für diesen Wert erstellt. Andernfalls werden so viele Datensätze erstellt, wie es Elemente im dynamischen Wert gibt.
Die erweiterten Spalten sind vom Typ dynamic
, es sei denn, sie werden explizit mit der Klausel to typeof()
typisiert.
Erweiterungsmodi
Zwei Erweiterungsmodi für Eigenschaftenbehälter werden unterstützt:
kind=bag
oderbagexpansion=bag
: Eigenschaftstaschen werden in Ein-Eintrag-Eigenschaftentaschen erweitert. Dieser Modus ist der Standardmodus.kind=array
oderbagexpansion=array
: Eigenschaftenbehälter werden in Zwei-Element-Schlüsselwertarraystrukturen]
[
,
erweitert und ermöglichen einen einheitlichen Zugriff auf Schlüssel und Werte. Dieser Modus ermöglicht beispielsweise auch das Ausführen einer distinct-count-Aggregation über Eigenschaftsnamen.
Beispiele
Einzelne Spalte – Arrayerweiterung
datatable (a: int, b: dynamic)
[
1, dynamic([10, 20]),
2, dynamic(['a', 'b'])
]
| mv-expand b
Output
a | b |
---|---|
1 | 10 |
1 | 20 |
2 | a |
2 | b |
Einzelspalte - Beutelerweiterung
Eine einfache Erweiterung einer einzelnen Spalte:
datatable (a: int, b: dynamic)
[
1, dynamic({"prop1": "a1", "prop2": "b1"}),
2, dynamic({"prop1": "a2", "prop2": "b2"})
]
| mv-expand b
Output
a | b |
---|---|
1 | {"prop1": "a1"} |
1 | {"prop2": "b1"} |
2 | {"prop1": "a2"} |
2 | {"prop2": "b2"} |
Einzelspalte – Beutelerweiterung auf Schlüsselwertpaare
Eine einfache Beutelerweiterung auf Schlüsselwertpaare:
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]
Output
a | b | Schlüssel | val |
---|---|---|---|
1 | ["prop1";"a1"] | prop1 | a1 |
1 | ["prop2";"b1"] | prop2 | b1 |
2 | ["prop1";"a2"] | prop1 | a2 |
2 | ["prop2";"b2"] | prop2 | b2 |
Zippen zweier Spalten
Wenn Sie zwei Spalten erweitern, werden die entsprechenden Spalten zuerst „gezippt“ und dann erweitert:
datatable (a: int, b: dynamic, c: dynamic)[
1, dynamic({"prop1": "a", "prop2": "b"}), dynamic([5, 4, 3])
]
| mv-expand b, c
Output
a | b | c |
---|---|---|
1 | {"prop1":"a"} | 5 |
1 | {"prop2":"b"} | 4 |
1 | 3 |
Kartesisches Produkt von zwei Spalten
Wenn Sie ein kartesisches Produkt des Erweiterns von zwei Spalten erhalten möchten, erweitern Sie ein Spalte nach der anderen:
datatable (a: int, b: dynamic, c: dynamic)
[
1, dynamic({"prop1": "a", "prop2": "b"}), dynamic([5, 6])
]
| mv-expand b
| mv-expand c
Output
a | b | c |
---|---|---|
1 | { "prop1": "a"} | 5 |
1 | { "prop1": "a"} | 6 |
1 | { "prop2": "b"} | 5 |
1 | { "prop2": "b"} | 6 |
Ausgabe konvertieren
Wenn Sie die Ausgabe von mv-expand für einen bestimmten Typ (standardmäßig dynamisch) erzwingen möchten, verwenden Sie 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
Output
ColumnName | ColumnOrdinal | DateType | ColumnType |
---|---|---|---|
a | 0 | System.String | string |
b | 1 | System.Object | dynamic |
c | 2 | System.Int32 | int |
Beachten Sie, dass die Spalte b
als dynamic
zurückgegeben wird, während c
als int
zurückgegeben wird.
Verwenden von with_itemindex
Erweitern eines Arrays mit with_itemindex
:
range x from 1 to 4 step 1
| summarize x = make_list(x)
| mv-expand with_itemindex=Index x
Ausgabe
x | Index |
---|---|
1 | 0 |
2 | 1 |
3 | 2 |
4 | 3 |
Zugehöriger Inhalt
- mv-apply-Operator
- Das Gegenteil des mv-expand-Operators finden Sie in der Zusammenfassung make_list().
- Informationen zum Erweitern dynamischer JSON-Objekte in Spalten mit Eigenschaftenbehälterschlüsseln finden Sie unter bag_unpack() -Plug-In.