Compartir a través de


mv-expand operator

Applies to: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel

Expande matrices dinámicas de varios valores o contenedores de propiedades en varios registros.

mv-expand can be described as the opposite of the aggregation operators that pack multiple values into a single dynamic-typed array or property bag, such as summarize ... make-list() and make-series. Cada elemento de la matriz (escalar) o del contenedor de propiedades genera un nuevo registro en la salida del operador. Todas las columnas de la entrada que no se expanden se duplican en todos los registros de la salida.

Syntax

T|mv-expand [kind=(bag | array)] [with_itemindex=IndexColumnName] ColumnName [to typeof(Typename)] [,ColumnName ...] [limitRowlimit]

T|mv-expand [kind=(bag | array)] [Name=] ArrayExpression [to typeof(Typename)] [, [Name=] ArrayExpression [to typeof(Typename)] ...] [limitRowlimit]

Learn more about syntax conventions.

Parameters

Name Type Required Description
ColumnName, ArrayExpression string ✔️ Referencia de columna o expresión escalar con un valor de tipo dynamic que contiene una matriz o un contenedor de propiedades. Los elementos individuales de nivel superior de la matriz o del contenedor de propiedades se expanden en varios registros.
When ArrayExpression is used and Name doesn't equal any input column name, the expanded value is extended into a new column in the output. Otherwise, the existing ColumnName is replaced.
Name string Nombre de la nueva columna.
Typename string ✔️ Indica el tipo subyacente de los elementos de la matriz, que se convierte en el tipo de la columna generada por el operador mv-expand. La operación de aplicar el tipo es de solo conversión y no incluye análisis ni conversión de tipos. Los elementos de matriz que no se ajustan al tipo declarado se convierten en null valores.
RowLimit int Número máximo de filas generadas a partir de cada fila original. El valor predeterminado es 2147483647. mvexpand es una forma heredada y obsoleta del operador mv-expand. La versión heredada tiene un límite de filas predeterminado de 128.
IndexColumnName string If with_itemindex is specified, the output includes another column named IndexColumnName that contains the index starting at 0 of the item in the original expanded collection.

Returns

Para cada registro de la entrada, el operador devuelve cero, uno o muchos registros en la salida, lo que se determina de la siguiente manera:

  1. Las columnas de entrada que no se expanden aparecen en la salida con su valor original. Si un único registro de entrada se expande en varios registros de salida, el valor se duplica en todos los registros.

  2. For each ColumnName or ArrayExpression that is expanded, the number of output records is determined for each value as explained in modes of expansion. Para cada registro de entrada, se calcula el número máximo de registros de salida. Todas las matrices o contenedores de propiedades se expanden "en paralelo" para que los valores que falten (si los hubiera) se reemplacen por valores NULL. Los elementos se expanden en filas en el orden en que aparecen en la matriz o el contenedor originales.

  3. Si el valor dinámico es NULL, se genera un único registro para él (NULL). Si el valor dinámico es una matriz o un contenedor de propiedades vacíos, no se genera ningún registro para ese valor. En caso contrario, se generan tantos registros como elementos hay en el valor dinámico.

Las columnas expandidas son del tipo dynamic, salvo que se escriban explícitamente mediante la cláusula to typeof().

Modos de expansión

Se admiten dos modos de expansiones de contenedores de propiedades:

  • kind=bag o bagexpansion=bag: Las bolsas de propiedades se expanden en bolsas de propiedades de entrada única. Este modo es el predeterminado.
  • kind=array or bagexpansion=array: Property bags are expanded into two-element [key,value] array structures, allowing uniform access to keys and values. Este modo también permite, por ejemplo, ejecutar una agregación de recuento distintiva sobre los nombres de propiedad.

Examples

The examples in this article use publicly available tables in the help cluster, such as the StormEvents table in the Samples database.

The examples in this article use publicly available tables, such as the Weather table in the Weather analytics sample gallery. Es posible que tenga que modificar el nombre de la tabla en la consulta de ejemplo para que coincida con la tabla del área de trabajo.

Los ejemplos de esta sección muestran cómo usar la sintaxis para ayudarle a empezar.

Columna única: expansión de matriz

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

Columna única: expansión de bolsa

Una simple expansión de una única columna:

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"}

Columna única: expansión de contenedor a pares clave-valor

Una expansión de bolsa simple a pares clave-valor:

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 key val
1 ["prop1","a1"] prop1 a1
1 ["prop2","b1"] prop2 b1
2 ["prop1","a2"] prop1 a2
2 ["prop2","b2"] prop2 b2

Dos columnas comprimidas:

Expandir dos columnas primero "zip" las columnas aplicables y, a continuación, expandirlas:

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

Producto cartesiano de dos columnas

Si quiere obtener un producto cartesiano de la expansión de dos columnas, expanda una después de la otra:

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

Convert output

Para forzar la salida de una operación mv-expand a un tipo determinado (el valor predeterminado es dinámico), use 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

Observe que la columna b se devuelve como dynamic, mientras que c se devuelve como int.

Using with_itemindex

Expansión de una matriz con with_itemindex:

range x from 1 to 4 step 1
| summarize x = make_list(x)
| mv-expand with_itemindex=Index x

Output

x Index
1 0
2 1
3 2
4 3