流分析输出

时间:2015-06-26 07:49:00

标签: azure-eventhub azure-stream-analytics cortana-intelligence

我有一个使用事件中心接收数据的项目,这是每秒发送一次,数据是由网站使用SignalR接收的,这一切都运行正常,我已经将数据存储到blob存储中了流分析工作,但访问速度非常慢,而且我只收到6台设备的数据量,随着这种情况的增加,它会变得更慢,我需要访问数据,以便通过图表显示历史数据。网站,然后这是充满了实时数据。

我真的不需要每秒存储一次数据,所以考虑每隔30秒只存储一次数据,而是考虑进入SQL数据库,我想要做的是,每秒仍然会收到数据但是每隔30天才存储一次,我尝试了一个翻滚窗口,但从我所看到的情况来看,这只是每隔30秒而不是单个条目转储所有内容。

我错过了解翻滚,滑动和跳跃的窗户,我猜我不能以这种方式使用它们?如果是这种情况,我猜测唯一的方法就是将输出db作为输入,所以我可以将时间戳与当前时间交叉引用?

除非有人有任何其他想法?任何帮助将不胜感激。

由于

3 个答案:

答案 0 :(得分:1)

  我很想念翻滚,滑动和跳跃的窗户

这是正确的,这会将所有事件放在Tumbling / Sliding / Hopping窗口中。但是,这仅在逐个案例中有效,这需要在该组上进行聚合功能。

有一个聚合函数Collect(),它将在一个组中创建一个事件数组。

我认为当您使用Collect()在30秒翻滚窗口内对每个事件进行分组时,这应该是可能的,然后在下一步中,CROSS APPLY每个记录,应该输出30个内的所有接收事件秒。

With Grouper AS (
    SELECT Collect() AS records
    FROM Input TIMESTAMP BY time
    GROUP BY TumblingWindow(second, 30)
)
SELECT 
    record.ArrayValue.FieldA AS FieldA,
    record.ArrayValue.FieldB AS FieldB
INTO Output
FROM Grouper
CROSS APPLY GetArrayElements(Grouper.records) AS record

答案 1 :(得分:0)

如果您尝试每30秒将30个条目聚合到一个摘要行中,那么翻滚窗口是一个不错的选择。以下内容应该有效:

SELECT System.TimeStamp AS OutTime, TollId, COUNT(*) as cnt, sum(TollCharge) as TollCharge
FROM Input TIMESTAMP BY EntryTime
GROUP BY TollId, TumblingWindow(second, 30)

答案 2 :(得分:0)

感谢您的回复,我一直在与微软的联系人交谈,他提出类似的建议,我也在网上的各种例子中找到了类似的东西。我真正想要做的是,每30秒只用数据更新数据库。所以我会收到活动,存储它,直到30秒过后我才会再次存储。我不确定如何使用和ASA工作说实话,因为我需要记录上次更新时间,我实际上从我的网站连接到事件中心,所以在接收器中,我将执行一个简单的检查,然后从那里存储数据。