Compartir a través de


APPLY (Azure Stream Analytics)

El operador APPLY permite invocar una función con valores de tabla para cada fila devuelta por una expresión de tabla externa de una consulta. La función con valores de tabla actúa como la entrada derecha y la expresión de tabla externa como la entrada izquierda. La entrada de la derecha se evalúa para cada fila de la entrada izquierda y las filas producidas se combinan en la salida final. La lista de columnas producidas por el operador APPLY corresponde al conjunto de columnas de la entrada izquierda, seguido de la lista de columnas devueltas por la entrada derecha.

Existen dos formas de APPLY: CROSS APPLY y OUTER APPLY.

CROSS APPLY solo devuelve las filas de la tabla externa que producen un conjunto de resultados de la función con valores de tabla. El resultado de cross APPLY no se puede usar como valor de destino de TIMESTAMP BY. Sin embargo, puede usar un trabajo de Azure Stream Analytics que realice CROSS APPLY y usar un segundo trabajo para realizar TIMESTAMP BY.

OUTER APPLY devuelve tanto las filas que producen un conjunto de resultados como las que no, con valores NULL en la columna producida por la función con valores de tabla.

Hay dos funciones con valores de tabla disponibles en Azure Stream Analytics para facilitar el trabajo con los campos Tipo de matriz y Registro. Son GetArrayElements y GetRecordProperties.

Sintaxis

  
<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

El nombre o alias del flujo de entrada.

column_name

El nombre de una columna del flujo de entrada.

element_name

Nombre de la nueva columna que contiene el resultado de la función con valores de tabla.

Tipos de valor devuelto

La salida es un registro que contiene la carga inicial y un registro "element_name", que contiene el resultado de la función con valores de tabla.

Para la función GetArrayElements, el resultado será un registro con dos campos:

  • ArrayIndex: índice del elemento de la matriz

  • ArrayValue: el valor del elemento de la matriz.

Para la función GetRecordProperties, el resultado será un registro con dos campos:

  • PropertyName: el nombre de la propiedad en el registro.

  • PropertyValue: el valor de la propiedad en el registro.

Ejemplos

En este ejemplo, al extender el escenario de peaje, se supone que los automóviles pueden tener más de una placa de licencia (por ejemplo, un coche de remolque tendría dos). CROSS/OUTER APPLY se pueden aplicar para aplanar esta matriz, es decir, obtener una fila por cada número de licencia.

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  
  

La consulta s e puede modificar para usar OUTER APPLY y realizar un seguimiento también de los automóviles sin ningún número de licencia.

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

Otro ejemplo del uso de matrices anidadas (matriz de matrices).

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