Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Aplica uma subconsulta a cada registro e retorna a união dos resultados de todas as subconsultas.
Por exemplo, suponha que uma tabela T
tenha uma coluna Metric
do tipo dynamic
cujos valores são matrizes de números real
. A consulta a seguir localiza os dois maiores valores em cada Metric
valor e retorna os registros correspondentes a esses valores.
T | mv-apply Metric to typeof(real) on
(
top 2 by Metric desc
)
O operador mv-apply
tem as seguintes etapas de processamento:
- Usa o operador
mv-expand
para expandir cada registro na entrada em subtabelas (a ordem é preservada). - Aplica a subconsulta para cada uma das subtabelas.
- Adiciona zero ou mais colunas à subtabela resultante. Essas colunas contêm os valores das colunas de origem que não são expandidas e são repetidas onde necessário.
- Devolve a união dos resultados.
O operador mv-apply
obtém as seguintes entradas:
Uma ou mais expressões que são avaliadas em matrizes dinâmicas para expandir. O número de registros em cada subtabela expandida é o comprimento máximo de cada uma dessas matrizes dinâmicas. Valores nulos são adicionados onde várias expressões são especificadas e as matrizes correspondentes têm comprimentos diferentes.
Opcionalmente, os nomes para atribuir os valores das expressões após a expansão. Esses nomes se tornam os nomes das colunas nas subtabelas. Se não for especificado, o nome original da coluna será usado quando a expressão for uma referência de coluna. Um nome aleatório é usado de outra forma.
Observação
Recomendamos que você use os nomes de coluna padrão.
Os tipos de dados dos elementos dessas matrizes dinâmicas, após a expansão. Esses tipos de dados se tornam os tipos de coluna das colunas nas subtabelas. Se não for especificado,
dynamic
é usado.Opcionalmente, o nome de uma coluna a ser adicionada às subtabelas que especifica o índice baseado em 0 do elemento na matriz que resultou no registro de subtabela.
Opcionalmente, o número máximo de elementos de matriz a serem expandidos.
O operador mv-apply
pode ser pensado como uma generalização do operador mv-expand
(na verdade, o último pode ser implementado pelo primeiro, se a subconsulta incluir apenas projeções).
Sintaxe
T|
mv-apply
[ItemIndex] ColumnsToExpand [RowLimit] on
(
Subconsulta)
Onde ItemIndex tem a sintaxe:
with_itemindex
=
IndexColumnName
ColumnsToExpand é uma lista separada por vírgulas de um ou mais elementos do formulário:
[Nome=
] ArrayExpression [to
typeof
(
Typename)
]
RowLimit é simplesmente:
limit
RowLimit
SubQuery tem a mesma sintaxe de qualquer instrução de consulta.
Saiba mais sobre convenções de sintaxe.
Parâmetros
Designação | Tipo | Necessário | Descrição |
---|---|---|---|
ItemIndex |
string |
Indica o nome de uma coluna do tipo long que é anexada à entrada como parte da fase de expansão da matriz e indica o índice de matriz baseado em 0 do valor expandido. |
|
Name |
string |
O nome para atribuir os valores expandidos de matriz de cada expressão expandida de matriz. Se não for especificado, o nome da coluna será usado, se disponível. Um nome aleatório é gerado se ArrayExpression não for um nome de coluna simples. | |
ArrayExpression |
dynamic |
✔️ | A matriz cujos valores são expandidos pela matriz. Se a expressão for o nome de uma coluna na entrada, a coluna de entrada será removida da entrada e uma nova coluna com o mesmo nome, ou ColumnName, se especificado, aparecerá na saída. |
Typename |
string |
O nome do tipo que os elementos individuais da matriz dynamic ArrayExpression tomar. Os elementos que não estão em conformidade com esse tipo são substituídos por um valor nulo. Se não for especificado, dynamic é usado por padrão. |
|
RowLimit |
int |
Um limite no número de registros a serem gerados a partir de cada registro da entrada. Se não for especificado, 2147483647 é usado. | |
SubQuery |
string |
Uma expressão de consulta tabular com uma fonte tabular implícita que é aplicada a cada subtabela expandida pela matriz. |
Observação
Ao contrário do operador mv-expand
, o operador mv-apply
não suporta bagexpand=array
expansão. Se a expressão a ser expandida for um conjunto de propriedades e não uma matriz, você poderá usar um operador interno mv-expand
(consulte o exemplo a seguir).
Exemplos
Reveja os exemplos e execute-os na página de consulta do Data Explorer.
Obtendo o maior elemento da matriz
A consulta gera o menor número par (2) e o menor número ímpar (1).
let _data =
range x from 1 to 8 step 1
| summarize l=make_list(x) by xMod2 = x % 2;
_data
| mv-apply element=l to typeof(long) on
(
top 1 by element
)
Realização
xMod2 |
l | elemento |
---|---|---|
1 | [1, 3, 5, 7] | 7 |
0 | [2, 4, 6, 8] | 8 |
Calculando a soma dos dois maiores elementos em uma matriz
A consulta gera a soma dos dois números pares superiores (6 + 8 = 14) e a soma dos dois números ímpares superiores (5 + 7 = 12).
let _data =
range x from 1 to 8 step 1
| summarize l=make_list(x) by xMod2 = x % 2;
_data
| mv-apply l to typeof(long) on
(
top 2 by l
| summarize SumOfTop2=sum(l)
)
Realização
xMod2 |
l | SumOfTop2 |
---|---|---|
1 | [1,3,5,7] | 12 |
0 | [2,4,6,8] | 14 |
Selecionar elementos em matrizes
A consulta identifica os dois principais elementos de cada matriz dinâmica com base nos valores Arr2 e os resume em novas listas.
datatable (Val:int, Arr1:dynamic, Arr2:dynamic)
[ 1, dynamic(['A1', 'A2', 'A3']), dynamic([10, 30, 7]),
7, dynamic(['B1', 'B2', 'B5']), dynamic([15, 11, 50]),
3, dynamic(['C1', 'C2', 'C3', 'C4']), dynamic([6, 40, 20, 8])
]
| mv-apply NewArr1=Arr1, NewArr2=Arr2 to typeof(long) on (
top 2 by NewArr2
| summarize NewArr1=make_list(NewArr1), NewArr2=make_list(NewArr2)
)
Realização
Val1 | Arr1 | Arr2 | NewArr1 |
NewArr2 |
---|---|---|---|---|
1 | ["A1","A2","A3"] |
[10,30,7] |
["A2',"A1"] |
[30,10] |
7 | ["B1","B2","B5"] |
[15,11,50] |
["B5","B1"] |
[50,15] |
3 | ["C1","C2","C3","C4"] |
[6,40,20,8] |
["C2","C3"] |
[40,20] |
Usando with_itemindex
para trabalhar com um subconjunto da matriz
A consulta resulta em uma tabela com linhas onde o índice é 3 ou superior, incluindo os valores de índice e elemento das listas originais de números pares e ímpares.
let _data =
range x from 1 to 10 step 1
| summarize l=make_list(x) by xMod2 = x % 2;
_data
| mv-apply with_itemindex=index element=l to typeof(long) on
(
// here you have 'index' column
where index >= 3
)
| project index, element
Realização
índice | elemento |
---|---|
3 | 7 |
4 | 9 |
3 | 8 |
4 | 10 |
Usando várias colunas para unir elementos de duas matrizes
A consulta combina elementos de duas matrizes dinâmicas em um novo formato concatenado e, em seguida, resume-os em listas.
datatable (Val: int, Arr1: dynamic, Arr2: dynamic)
[
1, dynamic(['A1', 'A2', 'A3']), dynamic(['B1', 'B2', 'B3']),
5, dynamic(['C1', 'C2']), dynamic(['D1', 'D2'])
]
| mv-apply Arr1, Arr2 on (
extend Out = strcat(Arr1, "_", Arr2)
| summarize Arr1 = make_list(Arr1), Arr2 = make_list(Arr2), Out= make_list(Out)
)
Realização
Val | Arr1 | Arr2 | Out |
---|---|---|---|
1 | ["A1","A2","A3"] | ["B1","B2","B3"] | ["A1_B1","A2_B2","A3_B3"] |
5 | ["C1","C2"] | ["D1","D2"] | ["C1_D1","C2_D2"] |
Aplicando mv-apply a um saco de propriedade
Essa consulta remove dinamicamente as propriedades do objeto de valores compactados com base nos critérios de que seus valores não começam com 555. O resultado final contém as colunas originais com propriedades indesejadas removidas.
datatable(SourceNumber: string, TargetNumber: string, CharsCount: long)
[
'555-555-1234', '555-555-1212', 46,
'555-555-1212', '', int(null)
]
| extend values = pack_all()
| mv-apply removeProperties = values on
(
mv-expand kind = array values
| where values[1] !startswith "555"
| summarize propsToRemove = make_set(values[0])
)
| extend values = bag_remove_keys(values, propsToRemove)
| project-away propsToRemove
Realização
Número da fonte | Número alvo | CharsCount | valores |
---|---|---|---|
555-555-1234 | 555-555-1212 | 46 | { "Número da fonte": "555-555-1234", "Número-alvo": "555-555-1212" } |
555-555-1212 | { "Número da fonte": "555-555-1212" } |
Conteúdo relacionado
- operador de de expansão de MV
- array_iff função