首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在流分析查询中,如何在将数据发送到UDA函数之前基于列对数据进行排序

问在流分析查询中,如何在将数据发送到UDA函数之前基于列对数据进行排序
EN

Stack Overflow用户
提问于 2019-01-07 21:54:46
回答 1查看 887关注 0票数 0

所以我有一个azure流分析查询。它连接两个输入,并且需要是用户定义的聚合函数的输入。在UDA函数中,我需要对传入的行进行一些字符串连接,并输出最后一个字符串。因此,连接的顺序或行必须符合其中一列的顺序,即字符串。SA作业不允许我订购,所以我如何才能完成此任务。下面是查询的代码摘录。

代码语言:javascript
复制
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排序,但它给出了错误

代码语言:javascript
复制
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.

任何帮助都将不胜感激。

编辑:我也试过了

我试过了

代码语言:javascript
复制
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并没有生效

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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排序并在已排序的行上创建字符串。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54075753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档