【问题标题】:Stream Analytics Output流分析输出
【发布时间】:2015-06-26 07:49:00
【问题描述】:

我有一个项目使用事件中心接收数据,每秒发送一次,网站使用 SignalR 接收数据,一切正常,我一直通过流分析作业,但这访问起来真的很慢,而且我只从 6 台设备接收到的数据量,随着它的增加,它会变得更慢,我需要访问数据以通过图表上的图表显示历史数据网站,然后用传入的实时数据进行补充。

我真的不需要每秒存储一次数据,所以考虑只每 30 秒存储一次,但是到 SQL DB 中,我想要做的仍然是每秒接收数据,但只存储每 30 次,我尝试了一个翻滚窗口,但据我所知,这只是每 30 秒转储一次所有内容,而不是单个条目。

我是否想念翻滚、滑动和跳跃窗口,我猜我不能以这种方式使用它们?如果是这种情况,我猜唯一的方法就是将输出数据库作为输入,这样我就可以将时间戳与当前时间交叉引用?

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

谢谢

【问题讨论】:

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


    【解决方案1】:

    我错过了对 Tumbling、Sliding 和 Hopping 窗口的理解

    您是正确的,这会将 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
    

    【讨论】:

      【解决方案2】:

      如果您尝试每 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)
      

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 我不知道你是否可以暂停输出。你是说你想存储每一个传入的行吗?但每 30 秒只有一次?为什么?
        猜你喜欢
        • 1970-01-01
        • 2021-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多