operador mv-apply
Aplica uma subconsulta a cada registo e devolve a união dos resultados de todas as subconsultas.
Por exemplo, suponha que uma tabela T
tem uma coluna Metric
do tipo dynamic
cujos valores são matrizes de real
números. A consulta seguinte localiza os dois maiores valores em cada Metric
valor e devolve os registos correspondentes a estes valores.
T | mv-apply Metric to typeof(real) on
(
top 2 by Metric desc
)
O mv-apply
operador tem os seguintes passos de processamento:
- Utiliza o
mv-expand
operador para expandir cada registo na entrada em sub-tabelas (a ordem é preservada). - Aplica a subconsulta para cada uma das sub-tabelas.
- Adiciona zero ou mais colunas à subtalho resultante. Estas colunas contêm os valores das colunas de origem que não estão expandidas e são repetidas sempre que necessário.
- Devolve a união dos resultados.
O mv-apply
operador obtém as seguintes entradas:
Uma ou mais expressões que são avaliadas em matrizes dinâmicas a expandir. O número de registos em cada subtalho expandido é o comprimento máximo de cada uma dessas matrizes dinâmicas. São adicionados valores nulos onde são especificadas múltiplas expressões e as matrizes correspondentes têm comprimentos diferentes.
Opcionalmente, os nomes a atribuir aos valores das expressões após a expansão. Estes nomes tornam-se os nomes das colunas nas sub-tabelas. Se não for especificado, o nome original da coluna é utilizado quando a expressão é uma referência de coluna. Caso contrário, é utilizado um nome aleatório.
Nota
Recomenda-se que utilize os nomes de coluna predefinidos.
Os tipos de dados dos elementos dessas matrizes dinâmicas, após a expansão. Estes tornam-se os tipos de coluna das colunas nas sub-tabelas. Se não for especificado,
dynamic
será utilizado.Opcionalmente, o nome de uma coluna a adicionar às sub-tabelas que especifica o índice baseado em 0 do elemento na matriz que resultou no registo subtável.
Opcionalmente, o número máximo de elementos de matriz a expandir.
O mv-apply
operador pode ser considerado como uma generalização do mv-expand
operador (na verdade, este último pode ser implementado pelo primeiro, se a subconsulta incluir apenas projeções.)
Syntax
SubconsultaT|
mv-apply
[ItemIndex] ColumnsToExpand [RowLimit] on
(
)
Em que 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
LinhaLimitar
e a SubConsulta tem a mesma sintaxe de qualquer instrução de consulta.
Saiba mais sobre as convenções de sintaxe.
Parâmetros
Nome | 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. |
|
Nome | string |
O nome para atribuir os valores expandidos pela matriz de cada expressão expandida por matriz. Se não for especificado, o nome da coluna será utilizado, se disponível. É gerado um nome aleatório se ArrayExpression não for um nome de coluna simples. | |
MatrizExpressão | 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 é removida da entrada e é apresentada uma nova coluna com o mesmo nome ou ColumnName , se especificado, na saída. |
Nomedotilizador | string |
O nome do tipo que os elementos individuais da dynamic matriz ArrayExpression assumem. Os elementos que não estão em conformidade com este tipo são substituídos por um valor nulo. Se não for especificado, dynamic é utilizado por predefinição. |
|
LinhaLimitar | int |
Um limite do número de registos a gerar a partir de cada registo da entrada. Se não for especificado, é utilizado 2147483647. | |
Subconsulta | string |
Uma expressão de consulta tabular com uma origem tabular implícita que é aplicada a cada subtable expandida por matriz. |
Nota
Ao contrário do mv-expand
operador, o mv-apply
operador não suporta bagexpand=array
a expansão. Se a expressão a expandir for um conjunto de propriedades e não uma matriz, pode utilizar um operador interno mv-expand
(veja o exemplo abaixo).
Exemplos
Obter o elemento maior da matriz
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
)
Saída
xMod2 |
l | elemento |
---|---|---|
1 | [1, 3, 5, 7] | 7 |
0 | [2, 4, 6, 8] | 8 |
Calcular a soma dos dois maiores elementos numa matriz
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)
)
Saída
xMod2 |
l | SumOfTop2 |
---|---|---|
1 | [1,3,5,7] | 12 |
0 | [2,4,6,8] | 14 |
Selecionar elementos em matrizes
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)
)
Saída
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] |
Utilizar with_itemindex
para trabalhar com um subconjunto da matriz
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
Saída
índice | elemento |
---|---|
3 | 7 |
4 | 9 |
3 | 8 |
4 | 10 |
Utilizar colunas mutiple para associar o elemento de 2 matrizes
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)
)
Saída
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"] |
Aplicar mv-apply a um saco de propriedades
No exemplo seguinte, mv-apply
é utilizado em combinação com um interior mv-expand
para remover valores que não começam com "555" de um saco de propriedades:
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
Saída
SourceNumber | Número de Destino | CharsCount | values |
---|---|---|---|
555-555-1234 | 555-555-1212 | 46 | { "SourceNumber": "555-555-1234", "TargetNumber": "555-555-1212" } |
555-555-1212 | { "SourceNumber": "555-555-1212" } |
Conteúdo relacionado
- operador mv-expand
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários