Freigeben über


mv-expand-Operator

Gilt für: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft 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=(bagarray | )] [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:

  1. 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.

  2. 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.

  3. 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 oder bagexpansion=bag: Eigenschaftstaschen werden in Ein-Eintrag-Eigenschaftentaschen erweitert. Dieser Modus ist der Standardmodus.
  • kind=arrayoder bagexpansion=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 intzurü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