Compartilhar via


APLICAR

✅ Fluxo de eventos do Azure Stream Analytics ✅ Fabric

O operador APPLY permite invocar uma função com valor de tabela para cada linha retornada por uma expressão de tabela externa de uma consulta. A função com valor de tabela atua como a entrada direita e a expressão de tabela externa atua como a entrada esquerda. A entrada direita é avaliada para cada linha da entrada esquerda e as linhas produzidas são combinadas para a saída final. A lista de colunas produzidas pelo operador APPLY é o conjunto de colunas na entrada esquerda seguida pela lista de colunas retornadas pela entrada direita.

Há duas formas de APPLY: CROSS APPLY e OUTER APPLY.

CROSS APPLY só retorna linhas da tabela exterior que produzem um conjunto de resultados da função com valor de tabela. O resultado de um CROSS APPLY não pode ser usado como o valor de destino do TIMESTAMP BY. No entanto, você pode usar um trabalho do Azure Stream Analytics que executa o CROSS APPLY e usar um segundo trabalho para executar o TIMESTAMP BY.

OUTER APPLY retorna ambas as linhas que produzem um conjunto de resultados e linhas que não o fazem, com valores NULL nas colunas produzidas pela função com valor de tabela.

Há duas funções com valor de tabela disponíveis no Azure Stream Analytics para facilitar o trabalho com campos de tipo Matriz e Registro. Eles são GetArrayElements e GetRecordProperties.

Sintaxe

  
<input> {CROSS | OUTER} APPLY <elements_selector>  
  
<input> ::= input_name |  input_alias  
  
<elements_selector> ::=   
{GetArrayElements | GetRecordProperties} (<column_name>) AS element_name  
  

Argumentos

input_name | input_alias

O nome ou alias do fluxo de entrada.

column_name

O nome de uma coluna do fluxo de entrada.

element_name

O nome da nova coluna que contém o resultado da função com valor de tabela.

Tipos de retorno

A saída é um registro que contém o conteúdo inicial e um registro 'element_name', que contém o resultado da função com valor de tabela.

Para a função GetArrayElements, o resultado será um registro com dois campos:

  • ArrayIndex: o índice do elemento na matriz

  • ArrayValue: o valor do elemento na matriz.

Para a função GetRecordProperties, o resultado será um registro com dois campos:

  • PropertyName: o nome da propriedade no registro.

  • PropertyValue: o valor da propriedade no registro.

Exemplos

Neste exemplo, estendendo o cenário de pedágio, presumimos que os carros podem ter mais de uma placa (por exemplo, um carro rebocando um trailer teria dois). A aplicação cruzada/externa pode ser usada para nivelar essa matriz, ou seja, obter uma linha por placa de licença.

CREATE TABLE input(TollId nvarchar(max), EntryTime datetime, Licenses array)  
  
SELECT e.TollId, e.EntryTime, flat.ArrayValue AS licensePlate   
   FROM input AS e   
   CROSS APPLY GetArrayElements(e.Licenses) AS flat  
  

A consulta pode ser modificada para usar a aplicação externa para também manter o controle de carros sem nenhuma placa.

SELECT e.TollId, e.EntryTime,   
flat.ArrayValue AS licensePlate, flat.ArrayIndex AS licensePlateIndex  
   FROM input AS e   
   OUTER APPLY GetArrayElements(e.Licenses) AS flat  
  

Outro exemplo usando matrizes aninhadas (matriz de matrizes).

WITH firstQuery AS (  
   SELECT input.TollId, input.EntryTime,   
   flat.ArrayIndex AS i1, flat.ArrayValue AS licenses   
      FROM input   
      CROSS APPLY GetArrayElements(input.ArrayOfArray) AS flat)  
  
SELECT firstQuery.TollId, firstQuery.EntryTime, firstQuery.i1,   
flat2.ArrayIndex AS i2, flat2.ArrayValue AS license  
   FROM firstQuery  
   CROSS APPLY GetArrayElements(firstQuery.licenses) AS flat2