Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Applies to: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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:
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.
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.
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=bagobagexpansion=bag: Las bolsas de propiedades se expanden en bolsas de propiedades de entrada única. Este modo es el predeterminado. -
kind=arrayorbagexpansion=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
StormEventstable in the Samples database.
The examples in this article use publicly available tables, such as the
Weathertable 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 |
Related content
- mv-apply operator.
- For the opposite of the mv-expand operator, see summarize make_list().
- For expanding dynamic JSON objects into columns using property bag keys, see bag_unpack() plugin.
- parse_json function
- array_iff function