В потоке аналитика запрос, как упорядочить данные на основе столбца перед отправкой в ​​функцию UDA - PullRequest
0 голосов
/ 07 января 2019

Итак, у меня есть запрос на анализ потока Azure. Он объединяет 2 входа, и это должно быть входом определенной пользователем агрегатной функции. В функции UDA мне нужно выполнить конкатенацию строк для входящих строк и вывести одну заключительную строку. Таким образом, порядок или строки из соединения должны быть в порядке одного из столбцов, который является строкой. Работы SA не позволяют мне заказывать, так как я могу это сделать. Ниже приведен фрагмент кода запроса ..

CalcData AS
(
SELECT 
  x.fqn AS fqn,       
  x.value as xvalue,
  y.value as yvalue,
  x.time as time
FROM (select fqn
,value, time from DataInput1 ) y
join
(SELECT
fqn as fqn,
 value as value,
  time as time
FROM DataInput2 ) x on y.time=x.time and x.fqn=y.fqn and DATEDIFF(second, x, y) = 0
--order by time asc, fqn 
),
FormatData AS
(
SELECT UDA.svgstring(CalcData) AS v,
time    FROM CalcData
GROUP BY time,TumblingWindow(minute, 1)
)

Мне нужно упорядочить по столбцу fqn, но выдает ошибку

Syntax errors: The ORDER BY clause is not valid in views, inline functions, derived tables, sub-queries, and common table expressions, unless TOP or FOR XML or OFFSET is also specified.

Любая помощь будет принята с благодарностью.

Редактировать: также я пытался

Я пытался

CalcData AS
 (
SELECT TOP 10000
x.fqn AS fqn,       
x.value as xvalue,
y.value as yvalue,
x.time as time
FROM (select fqn
,value, time from DataInput1 ) y
join
(SELECT
fqn as fqn,
value as value,
time as time
FROM DataInput2 ) x on y.time=x.time and x.fqn=y.fqn and DATEDIFF (second,   x, y) = 0
order by time, fqn 
),
FormatData AS
(
SELECT UDA.svgstring(CalcData) AS v,
time    FROM CalcData
 GROUP BY time,TumblingWindow(minute, 1)
)

но не похоже, что порядок вступает в силу

1 Ответ

0 голосов
/ 07 января 2019

Stream Analytics не имеет предложения order by на данный момент. В вашем исходном порядке запроса был до окна group by, поскольку ASA обрабатывает неограниченный поток, чтобы иметь возможность упорядочить по столбцу без метки времени, вам сначала нужно сгруппировать события в окна. И в этом окне вы можете заказать все события.

Я вижу, что у вас есть time, fqn как порядок по столбцам. Предполагая, что time является временной меткой полезной нагрузки, вы можете выполнить заказ по времени приложения, используя select ... from input timestamp by time.

И тогда вы можете сделать еще один уровень порядка внутри UDA.svgstring. Входы в функцию не будут упорядочены fqn, они будут упорядочены time. Вам нужно будет накапливать все события и, когда вызывается computeResult(), упорядочить по fqn и создать строку в упорядоченных строках.

...