Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
✅ Поток событий 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