我需要将下面的C#代码转换为Azure Stream Analytics可以使用的代码。
我有一个类似于以下内容的C#应用程序:
var inputEvents = new List<Event>();
foreach (var file in files){
(List<Event> events, DateTime maxDate) = ProcessEvents(file, inputEvents);
inputEvents = events.Where(e => e.Duration == null).ToList();
}
ProcessEvents()将inputEvents传递给其他辅助方法的地方
我需要使用Stream Analytics来实现整个代码。 var文件部分是通过使用Collect()收集一堆事件来实现的。每一批都发送到充当 ProcessEvents()的UDF。但是,ProcessEvents()返回下一次迭代所需的其他事件。由于UDF是无状态的,因此下一批将无法使用前一批返回的事件。
如何在Stream Analytics中重写上面的C#代码?
我尝试了以下操作:
流分析T-SQL查询:
WITH eventsCollection AS (SELECT COLLECT() AS allEvents
FROM EventHubStreamMessage
GROUP BY SessionWindow(minute,2,4)),
step1 AS (
SELECT UDF.SampleProcessEvents(allEvents) as Source
FROM eventsCollection
)
SELECT *
INTO [StorageTable]
FROM step1
Stream Analytics UDF代码(简短版本):
function main(allEvents){
allEvents = JSON.stringify(allEvents);
var inputEvents = new Array ();
return processEvents(JSON.parse(allEvents), inputEvents)
}
function processEvents(allEvents, inputEvents){
for (i=0l i<allEvents.length; i++){
if (allEvents[i].Event =="ON"){
powerOn(inputEvents);
}
}
}
function powerOn(inputEvents){
return true;
}