Operador MV-Expand
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Expande matrizes dinâmicas de vários valores ou pacotes de propriedades em vários registros.
mv-expand
pode ser descrito como o oposto dos operadores de agregação que empacotam vários valores em um único matrizdinâmica ou pacote de propriedades, como summarize
... make-list()
e make-series
.
Cada elemento na matriz (escalar) ou saco 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.
Sintaxe
T|mv-expand
[kind=
(bag
| array
)] [with_itemindex=
IndexColumnName] ColumnName [to typeof(
Typename)
] [,
ColumnName ...] [limit
Rowlimit]
T|mv-expand
[kind=
(bag
| array
)] [ Nome=
] ArrayExpression [to typeof(
Typename)
] [,
[Name=
] ArrayExpression [to typeof(
Typename)
] ...] [limit
Rowlimit]
Saiba mais sobre convenções de sintaxe.
Parâmetros
Designação | Tipo | Necessário | Descrição |
---|---|---|---|
ColumnNameArrayExpression | string |
✔️ | Uma referência de coluna ou uma expressão escalar com um valor do tipo dynamic que contém uma matriz ou um conjunto de propriedades. Os elementos individuais de nível superior da matriz ou do pacote de propriedades são expandidos em vários registros.Quando ArrayExpression é usada e Name não é igual a nenhum nome de coluna de entrada, o valor expandido é estendido para uma nova coluna na saída. Caso contrário, o ColumnName existente será substituído. |
Nome | 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 de 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 valores null . |
RowLimit | int |
O número máximo de linhas geradas a partir de cada linha original. O padrão é 2147483647.
mvexpand é uma forma legada e obsoleta do operador mv-expand . A versão herdada tem um limite de linha padrão de 128. |
|
IndexColumnName | string |
Se with_itemindex for especificado, a saída incluirá outra coluna chamada IndexColumnName que contém o índice a partir de 0 do item na coleção expandida original. |
Devoluções
Para cada registro na entrada, o operador retorna zero, um ou muitos registros na saída, conforme determinado da seguinte maneira:
As colunas de entrada que não são expandidas aparecem na saída com seu valor original. Se um único registro de entrada for expandido em vários registros de saída, o valor será duplicado para todos os registros.
Para cada ColumnName ou ArrayExpression expandida, o número de registros de saída é determinado para cada valor, conforme explicado em modos de expansão. Para cada registro de entrada, o número máximo de registros de saída é calculado. Todas as matrizes ou pacotes de propriedades 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/saco original.
Se o valor dinâmico for null, um único registro será produzido para esse valor (null). Se o valor dinâmico for uma matriz vazia ou um conjunto de propriedades, nenhum registro será produzido para esse valor. Caso contrário, são produzidos tantos registos quantos forem os elementos no valor dinâmico.
As colunas expandidas são do tipo dynamic
, a menos que sejam explicitamente digitadas usando a cláusula to typeof()
.
Modos de expansão
São suportados dois modos de expansão de sacos de propriedade:
-
kind=bag
oubagexpansion=bag
: Os sacos de propriedade são expandidos em sacos de propriedade de entrada única. Este modo é o modo padrão. -
kind=array
oubagexpansion=array
: Os sacos de propriedade são expandidos em dois elementos[
chave,
valor]
estruturas de matriz, permitindo acesso uniforme a chaves e valores. Esse modo também permite, por exemplo, executar uma agregação de contagem distinta sobre nomes de propriedade.
Exemplos
Os exemplos neste artigo usam tabelas disponíveis publicamente no de cluster de ajuda, como a tabela
StormEvents
no banco de dados Samples.
Os exemplos neste artigo usam tabelas disponíveis publicamente, como a tabela
StormEvents
na análise do tempo dados de exemplo.
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
um | b |
---|---|
1 | 10 |
1 | 20 |
2 | um |
2 | b |
Coluna única - expansão do saco
Uma simples expansão 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
um | b |
---|---|
1 | {"prop1": "a1"} |
1 | {"prop2": "b1"} |
2 | {"prop1": "a2"} |
2 | {"prop2": "b2"} |
Coluna única - expansão do saco para pares chave-valor
Uma simples expansão de saco para pares chave-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
um | 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
Expandir duas colunas primeiro 'zip' as colunas aplicáveis e, em seguida, expandi-las:
datatable (a: int, b: dynamic, c: dynamic)[
1, dynamic({"prop1": "a", "prop2": "b"}), dynamic([5, 4, 3])
]
| mv-expand b, c
Output
um | b | c |
---|---|---|
1 | {"prop1":"a"} | 5 |
1 | {"prop2":"b"} | 4 |
1 | 3 |
Produto cartesiano de duas colunas
Se você quiser obter um produto cartesiano de 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
um | b | c |
---|---|---|
1 | { "prop1": "a"} | 5 |
1 | { "prop1": "a"} | 6 |
1 | { "prop2": "b"} | 5 |
1 | { "prop2": "b"} | 6 |
Converter saída
Para forçar a saída de um mv-expand para um 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
Nome da coluna | ColumnOrdinal | Tipo de Data | Tipo de coluna |
---|---|---|---|
um | 0 | System.String | string |
b | 1 | System.Object | dynamic |
c | 2 | Sistema.Int32 | int |
Observe que a coluna b
é retornada como dynamic
enquanto c
é retornada como int
.
Usando 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 | Índice |
---|---|
1 | 0 |
2 | 1 |
3 | 2 |
4 | 3 |
Conteúdo relacionado
- operador de mv-apply.
- Para o oposto do operador mv-expand, consulte resumir make_list().
- Para expandir objetos JSON dinâmicos em colunas usando chaves de saco de propriedades, consulte bag_unpack() plugin.