Partilhar via


APLICAR (Azure Stream Analytics)

O operador APPLY permite-lhe invocar uma função com valor de tabela para cada linha devolvida por uma expressão de tabela externa de uma consulta. A função com valor de tabela funciona como a entrada direita e a expressão da tabela externa funciona como a entrada esquerda. A entrada à direita é avaliada para cada linha da entrada esquerda e as linhas produzidas são combinadas para o resultado final. A lista de colunas produzidas pelo operador APPLY é o conjunto de colunas na entrada esquerda seguida da lista de colunas devolvidas pela entrada direita.

Existem duas formas de APLICAR: APLICAR CRUZADA E APLICAR EXTERNAMENTE.

CROSS APPLY devolve apenas linhas da tabela externa que produzem um conjunto de resultados da função com valor de tabela. O resultado de uma Aplicação CRUZADA não pode ser utilizado como o valor de destino do CARIMBO DE DATA/HORA POR. No entanto, pode utilizar uma tarefa do Azure Stream Analytics que executa a função CROSS APPLY e utilizar uma segunda tarefa para executar o TIMESTAMP BY.

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

Existem duas funções com valor de tabela disponíveis no Azure Stream Analytics para facilitar o trabalho com os campos Tipo de matriz e registo. 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

O resultado é um registo que contém o payload 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 registo 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 registo com dois campos:

  • PropertyName: o nome da propriedade no registo.

  • PropertyValue: o valor da propriedade no registo.

Exemplos

Neste exemplo, alargando o cenário de portagem, partimos do princípio de que os automóveis podem ter mais do que uma matrícula (por exemplo, um automóvel a rebocar um reboque teria dois). A aplicação cruzada/externa pode ser utilizada para aplanar esta 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 utilizar a aplicação externa para manter também o registo de automóveis sem matrícula.

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 com 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