在流分析查询中如何在将数据发送到 UDA 函数之前根据列对数据进行排序
In stream analytics query how to order the data based on column before sending it to a UDA function
所以我有一个 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)
)
但是订单似乎没有生效
Stream Analytics 目前没有 order by
子句。在您的原始查询顺序是 group by
window 之前,因为 ASA 正在处理无界流,为了能够按非时间戳列排序,您必须将事件分组到 windows 首先。在 window 中,您可以订购所有活动。
我看到您有 time, fqn
按列排序。假设time
是payload的时间戳,可以使用select ... from input timestamp by time
.
实现按应用时间排序
然后您可以在 UDA.svgstring
中进行更多级别的排序。函数的输入不会按 fqn
排序,而是按 time
排序。您将必须累积所有事件,当调用 computeResult()
时,按 fqn 排序并在有序行上创建字符串。
所以我有一个 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)
)
但是订单似乎没有生效
Stream Analytics 目前没有 order by
子句。在您的原始查询顺序是 group by
window 之前,因为 ASA 正在处理无界流,为了能够按非时间戳列排序,您必须将事件分组到 windows 首先。在 window 中,您可以订购所有活动。
我看到您有 time, fqn
按列排序。假设time
是payload的时间戳,可以使用select ... from input timestamp by time
.
然后您可以在 UDA.svgstring
中进行更多级别的排序。函数的输入不会按 fqn
排序,而是按 time
排序。您将必须累积所有事件,当调用 computeResult()
时,按 fqn 排序并在有序行上创建字符串。