Partilhar via


CANDIDATAR-SE

✅ Azure Stream Analytics ✅ Fabric Eventstream

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 produzida pelo operador APPLY é o conjunto de colunas na entrada esquerda seguido pela lista de colunas retornadas pela entrada direita.

Existem duas formas de APLICAR: CROSS APPLY e OUTER APPLY.

CROSS APPLY retorna apenas as linhas da tabela externa que produzem um conjunto de resultados a partir da função de 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.

O OUTER APPLY retorna tanto as linhas que produzem um conjunto de resultados quanto as que não produzem, incluindo valores NULL nas colunas geradas 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 de 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 devolução

A saída é um registo que contém a carga útil inicial e um registo «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, assumimos que os carros podem ter mais de uma placa (por exemplo, um carro rebocando um reboque teria duas). A aplicação transversal/externa pode ser usada para achatar essa matriz, ou seja, obter uma linha por placa.

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 aplicação externa, a fim de também manter o controle de carros sem qualquer 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