所以我有一个azure流分析查询。它连接两个输入,并且需要是用户定义的聚合函数的输入。在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)
)但看起来order by并没有生效
发布于 2019-01-08 02:38:12
流分析目前没有order by子句。在最初的order by查询中,在group by窗口之前,由于ASA正在处理一个无界的流,为了能够按非时间戳列进行排序,您必须首先将事件分组到窗口中。在该窗口中,您可以对所有事件进行排序。
我看到你的time, fqn是按列排序的。假设time是负载的时间戳,您可以使用select ... from input timestamp by time实现按应用时间排序。
然后,您可以在UDA.svgstring中执行更高级别的排序。函数的输入不会按fqn排序,而是按time排序。您必须累积所有事件,并且在调用computeResult()时,按fqn排序并在已排序的行上创建字符串。
https://stackoverflow.com/questions/54075753
复制相似问题