Udostępnij za pośrednictwem


APPLY (Azure Stream Analytics)

Operator APPLY umożliwia wywołanie funkcji z wartością tabeli dla każdego wiersza zwróconego przez zewnętrzne wyrażenie tabeli zapytania. Funkcja z wartością tabeli działa jako prawe dane wejściowe, a zewnętrzne wyrażenie tabeli działa jako dane wejściowe po lewej stronie. Prawe dane wejściowe są oceniane dla każdego wiersza z lewej strony wejściowej, a utworzone wiersze są łączone dla końcowych danych wyjściowych. Lista kolumn generowanych przez operator APPLY to zestaw kolumn w lewym wejściu, a następnie lista kolumn zwracanych przez prawe dane wejściowe.

Istnieją dwie formy APPLY: CROSS APPLY i OUTER APPLY.

Funkcja CROSS APPLY zwraca tylko wiersze z tabeli zewnętrznej, które generują zestaw wyników z funkcji z wartością tabeli. Wynik FUNKCJI CROSS APPLY nie może być używany jako wartość docelowa TIMESTAMP BY. Można jednak użyć jednego zadania usługi Azure Stream Analytics, które wykonuje operację CROSS APPLY, i użyć drugiego zadania do wykonania sygnatury CZASOWEJ BY.

Funkcja OUTER APPLY zwraca oba wiersze, które generują zestaw wyników, oraz wiersze, które nie mają wartości NULL w kolumnach generowanych przez funkcję z wartością tabeli.

W usłudze Azure Stream Analytics są dostępne dwie funkcje z wartościami tabel, które ułatwiają pracę z polami typu tablicy i rekordu. Są to GetArrayElements i GetRecordProperties.

Składnia

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

Argumenty

input_name | input_alias

Nazwa lub alias strumienia wejściowego.

Column_name

Nazwa kolumny strumienia wejściowego.

element_name

Nazwa nowej kolumny zawierającej wynik funkcji z wartością tabeli.

Typy zwracane

Dane wyjściowe to rekord zawierający początkowy ładunek i rekord "element_name", który zawiera wynik funkcji z wartością tabeli.

W przypadku funkcji GetArrayElements wynik będzie rekordem z dwoma polami:

  • ArrayIndex: indeks elementu w tablicy

  • ArrayValue: wartość elementu w tablicy.

W przypadku funkcji GetRecordProperties wynik będzie rekordem z dwoma polami:

  • PropertyName: nazwa właściwości w rekordzie.

  • PropertyValue: wartość właściwości w rekordzie.

Przykłady

W tym przykładzie, rozszerzając scenariusz tollbooth, zakładamy, że samochody mogą mieć więcej niż jedną tablicę rejestracyjną (np. holowanie przyczepy będzie miało dwa). Zastosowanie krzyżowe/zewnętrzne może służyć do spłaszczenia tej tablicy, tj. uzyskać jeden wiersz na tablicę rejestracyjną.

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  
  

Kwerendę można zmodyfikować w celu zastosowania zewnętrznego, aby śledzić również samochody bez żadnych tablic rejestracyjnych.

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

Inny przykład użycia zagnieżdżonych tablic (tablic tablic).

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