Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Applies to: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Expande matrizes dinâmicas de vários valores ou pacotes de propriedade em vários 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 na matriz (escalar) ou no recipiente de propriedades gera um novo registro na saída do operador. Todas as colunas da entrada que não são expandidas são duplicadas para todos os registros na saída.
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 | Tipo | Required | Description |
|---|---|---|---|
| ColumnName, ArrayExpression | string |
✔️ | Uma referência de coluna ou uma expressão escalar com um valor de tipo dynamic que contém uma matriz ou um recipiente de propriedades. Os elementos individuais de nível superior da matriz ou do recipiente de propriedades são expandidos em vários 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 |
Um nome para a nova coluna. | |
| Typename | string |
✔️ | indica o tipo subjacente dos elementos da matriz, que se torna o tipo da coluna produzida pelo operador mv-expand. A operação de aplicação do tipo é somente conversão e não inclui análise ou conversão de tipo. Os elementos de matriz que não estão em conformidade com o tipo declarado tornam-se null valores. |
| RowLimit | int |
O número máximo de linhas geradas a partir de cada linha original. O padrão é 2147483647.
mvexpand é uma forma herdada e obsoleta do operador mv-expand. A versão herdada tem um limite de linha padrão 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 na entrada, o operador retorna zero, um ou vários registros na saída, conforme determinado da seguinte maneira:
As colunas de entrada que não são expandidas aparecem na saída com o valor original delas. Se apenas um registro de entrada for expandido em vários registros de saída, o valor será duplicado para todos os 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, o número máximo de registros de saída é calculado. Todas as matrizes ou pacotes de propriedade são expandidos "em paralelo" para que os valores ausentes (se houver) sejam substituídos por valores nulos. Os elementos são expandidos em linhas na ordem em que aparecem na matriz ou no conjunto original.
Se o valor dinâmico for nulo, um registro individual será produzido para esse valor nulo. Se o valor dinâmico for uma matriz vazia ou um recipiente de propriedades, nenhum registro será produzido para esse valor. Caso contrário, será produzido um número de registros igual ao número de elementos no valor dinâmico.
As colunas expandidas são do tipo dynamic, a menos que sejam explicitamente tipificadas pelo uso da cláusula to typeof().
Modos de expansão
Há suporte para dois modos de expansões de recipiente de propriedades:
-
kind=bagoubagexpansion=bag: Os sacos de propriedade são expandidos em sacos de propriedade de entrada única. Esse modo é o padrão. -
kind=arrayorbagexpansion=array: Property bags are expanded into two-element[key,value]array structures, allowing uniform access to keys and values. Esse modo também permite, por exemplo, a execução de uma agregação de contagem distinta por nomes de propriedade.
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. Talvez seja necessário modificar o nome da tabela na consulta de exemplo para corresponder à tabela em seu workspace.
Os exemplos nesta seção mostram como usar a sintaxe para ajudá-lo a começar.
Coluna única - expansão 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 |
Coluna única - expansão do saco
Uma expansão simples de uma única coluna:
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"} |
Coluna única - expansão de embalagem para pares de valores-chave
Uma simples expansão de saco para pares de valores-chave:
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 | chave | val |
|---|---|---|---|
| 1 | ["prop1","a1"] |
prop1 | a1 |
| 1 | ["prop2","b1"] |
prop2 | b1 |
| 2 | ["prop1","a2"] |
prop1 | a2 |
| 2 | ["prop2","b2"] |
prop2 | b2 |
Duas colunas compactadas
Expandindo duas colunas primeiro 'zip' as colunas aplicáveis e, em seguida, expanda-as:
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 |
Produto cartesiano de duas colunas
Se você quiser obter um produto cartesiano da expansão de duas colunas, expanda uma após a outra:
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 forçar a saída de um mv-expand para determinado tipo (o padrão é 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 a coluna b é retornada como dynamic, enquanto c é retornado como int.
Using with_itemindex
Expansão de uma matriz com 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