ПРИМЕНИТЬ

✅ Поток событий Azure Stream Analytics ✅ Fabric

Оператор APPLY позволяет вызывать табличную функцию для каждой строки, возвращаемой внешним табличным выражением запроса. Функция с табличным значением выступает в качестве правого ввода, а внешнее табличное выражение выступает в качестве левого ввода. Правые входные данные вычисляются для каждой строки из левого входного значения, а созданные строки объединяются для окончательных выходных данных. Список столбцов, созданных оператором APPLY, — это набор столбцов в левом входном поле, за которым следует список столбцов, возвращаемых правыми входными данными.

Существует две формы APPLY: CROSS APPLY и OUTER APPLY.

CROSS APPLY возвращает только строки из внешней таблицы, для которых табличная функция создает результирующий набор данных. Результат CROSS APPLY нельзя использовать в качестве целевого значения TIMESTAMP BY. Однако можно использовать одно задание Azure Stream Analytics, которое выполняет CROSS APPLY, и использовать второе задание для выполнения TIMESTAMP BY.

OUTER APPLY возвращает как строки, образующие результирующий набор, так и строки, которые этого результата не образуют. Для последних значениями столбцов, созданных табличной функцией, являются NULL.

В Azure Stream Analytics доступны две табличные функции, которые упрощают работу с полями типа массива и записи. Они являются GetArrayElements и GetRecordProperties.

Синтаксис

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

Аргументы

input_name | input_alias

Имя или псевдоним входного потока.

column_name

Имя столбца входного потока.

element_name

Имя нового столбца, содержащего результат табличной функции.

Типы возвращаемых данных

Выходные данные — это запись, содержащая начальные полезные данные и запись "element_name", которая содержит результат функции с табличным значением.

Для функции GetArrayElements результат будет записью с двумя полями:

  • ArrayIndex: индекс элемента в массиве

  • ArrayValue: значение элемента в массиве.

Для функции GetRecordProperties результат будет записью с двумя полями:

  • PropertyName: имя свойства в записи.

  • PropertyValue: значение свойства в записи.

Примеры

В этом примере расширение сценария tollbooth предполагается, что автомобили могут иметь более одной номерной знак (например, автомобиль для буксировки прицепа будет иметь два). Перекрестное или внешнее применение можно использовать для выравнивания этого массива, т. е. получения одной строки на номерную знак.

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  
  

Запрос можно изменить, чтобы использовать внешнее применение, чтобы также отслеживать автомобили без номерной знак.

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

Другой пример использования вложенных массивов (массив массивов).

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