CollectTOP (Azure Stream Analytics)

Возвращает массив ранжированных записей, где ранг определяет ранжированную позицию события в окне в соответствии с заданным порядком. Порядок и ранжирование основаны на столбцах событий и могут быть указаны в предложении ORDER BY.

Синтаксис

-- Aggregate Function Syntax
CollectTop(<number of events as integer literal> [ , <scalar_expression> ]) OVER (ORDER BY (<column name> [ASC |DESC])+)

-- Analytic Function Syntax
CollectTop(<number of events as integer literal> [ , <scalar_expression> ]) OVER ([<PARTITION BY clause>] ORDER BY (<column name> [ASC | DESC])+ <LIMIT DURATION clause>  [<WHEN clause>])

Аргументы

<число событий в виде целочисленного литерала>

Количество основных событий, которые пользователь хочет собрать из окна.

<scalar_expression>

CollectTop принимает необязательное скалярное выражение, которое позволяет указать проекцию по собранным событиям. Без параметра собираются полные записи событий.

<имя столбца>

Имя столбца во входном событии, по которому будет выполнено упорядочение. Разрешено упорядочивание только по типам bigint,float/datetime.

OVER ([<ПРЕДЛОЖЕНИЕ<>PARTITION BY LIMIT DURATION> [<ПРЕДЛОЖЕНИЕ> WHEN]]

Определяет группу строк, к которым применяется CollectTop. Предложение PARTITION BY указывает, что строки с одним ключом секции будут сгруппированы. Предложение LIMIT DURATION указывает, какой объем журнала включен в группу. Предложение WHEN задает логическое условие для строк, которые должны быть включены в группу. Дополнительные сведения об использовании см. в предложении OVER .

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

Массив записей типа { "rank": bigint, "value": <projected_type> }, где <projected_type> является типом <scalar_expression> или записью, если выражение не указано.

Комментарии

Null обрабатывается как минимальное значение. Дополнительные сведения см. в статье https://msdn.microsoft.com/library/ms188385.aspx

Примеры

SELECT   
    value1,  
    CollectTop(2) OVER (ORDER BY value2 ASC, value3 DESC) as top1  
FROM testinput timestamp by time  
GROUP BY TumblingWindow(second, 5), value1  

Пример входных данных:

Пример входных данных

Выходные данные примера:

Пример выходных данных

SELECT   
    value1,  
    CollectTop(2, x + y) OVER (ORDER BY value2 ASC, value3 DESC) as top1  
FROM testinput timestamp by time  
GROUP BY TumblingWindow(second, 5), value1