Azure Stream Analytics-沿流查询

Azure Stream Analytics-沿流查询,azure,azure-stream-analytics,stream-analytics,Azure,Azure Stream Analytics,Stream Analytics,我正在使用Azure流分析。我有数据进入活动中心。输入的数据如下所示: [ { "id": "a2b8bcd8-ff79-4bb7-a86f-615556104c1f", "mechanism": "geo", "datetimereporting": "2017-07-23 11:08:00", "geometry": { "type": "Point", "coordina

我正在使用Azure流分析。我有数据进入活动中心。输入的数据如下所示:

[
    {
        "id": "a2b8bcd8-ff79-4bb7-a86f-615556104c1f",
        "mechanism": "geo",
        "datetimereporting": "2017-07-23 11:08:00",
        "geometry": {
            "type": "Point",
            "coordinates": [-85.78378, 38.68679]
        }
    },
    {
        "id": "a2b8bcd8-ff79-4bb7-a86f-615556104c1f",
        "mechanism": "geo",
        "datetimereporting": "2017-07-23 11:09:00",
        "geometry": {
            "type": "Point",
            "coordinates": [-85.79378, 38.68679]
        }
    },
    {
        "id": "a2b8bcd8-ff79-4bb7-a86f-615556104c1f",
        "mechanism": "geo",
        "datetimereporting": "2017-07-24 14:08:00",
        "geometry": {
            "type": "Point",
            "coordinates": [-85.78378, 38.68679]
        }
    },
    {
        "id": "a2b8bcd8-ff79-4bb7-a86f-615556104c1f",
        "mechanism": "geo",
        "datetimereporting": "2017-07-24 14:09:00",
        "geometry": {
            "type": "Point",
            "coordinates": [-85.79378, 38.68679]
        }
    },
    {
        "id": "a2b8bcd8-ff79-4bb7-a86f-615556104c1f",
        "mechanism": "geo",
        "datetimereporting": "2017-07-24 14:10:00",
        "geometry": {
            "type": "Point",
            "coordinates": [-85.80378, 38.68679]
        }
    },
    {
        "id": "8bb76874-5b91-400d-b0cb-04c8e6c48d26",
        "mechanism": "geo",
        "datetimereporting": "2017-07-24 14:09:00",
        "geometry": {
            "type": "Point",
            "coordinates": [-115.17281, 36.11464]
        }
    },
    {
        "id": "31453016-067f-4664-ade9-244a1d7b769c",
        "mechanism": "geo",
        "datetimereporting": "2017-07-24 14:10:00",
        "geometry": {
            "type": "Point",
            "coordinates": [-85.76477, 38.32873]
        }
    }   
]
流分析任务是查看数据并确定输入的坐标是否位于特定多边形中。我已经让ST_在查询中工作了。我有一个包含我想要的所有多边形的引用blob。问题是这个。我需要检测坐标在多边形中的时间以及它在多边形中的时间

数据流大约每分钟一次。我每分钟都会得到一个新的坐标。我知道如何检测它最初在多边形中的位置。我的难题是,我如何知道它在多边形中已经存在了多久?我试过LAG和ISFIRST,但都没用。目标如下:

  • 数据进来了
  • 你在多边形中吗
  • 是吗?你在多边形有多久了? 我知道这里我需要了解它是什么时候第一次出现在多边形中的。但是,从上面的数据可以看出,数据可能在24小时前就在多边形中,现在又在那里了。我只是不知道如何构造一个查询来找出我在多边形中的时间和长度。有人能帮忙吗
  • 我只是不知道如何构造一个查询来找出我在多边形中的时间和长度。有人能帮忙吗

    您需要的是从一组分散的数据中获得线性结果。我建议您根据日期时间描述查询出此人最近是否处于多边形中。数据如下

    | id                          | Is in polygon | date time           | 
    |-----------------------------|---------------|-------------------- |
    | a2b8bcd8-ff79-4bb7-a86f-xxx | true          | 2017-07-23 11:08:00 | 
    | a2b8bcd8-ff79-4bb7-a86f-xxx | true          | 2017-07-23 11:07:00 | 
    | a2b8bcd8-ff79-4bb7-a86f-xxx | false         | 2017-07-23 11:06:00 | 
    
    获取数据后,您可以将其存储在任何位置(Azure Redis或Blob存储)。最后,您可以使用Azure函数处理临时数据。下面的示例代码供您参考

    var totalMinutes = 0;
    foreach (var data in collection)
    {
        if (data.IsInPolygon)
        {
            totalMinutes++;
        }
        else
        {
            break;
        }
    }
    
    关于如何将数据输出到Azure函数,下面的链接供您参考

    var totalMinutes = 0;
    foreach (var data in collection)
    {
        if (data.IsInPolygon)
        {
            totalMinutes++;
        }
        else
        {
            break;
        }
    }
    

    您还可以将所有逻辑放入流分析中,以实时获取这些数据。 我将使用一些类似于“典型查询模式”中描述的查询。您的案例类似于“检测条件持续时间”示例。 下面对示例进行一些快速修改,以计算多边形中的总持续时间:

        WITH SelectPreviousEvent AS
    (
    SELECT
    *,
        LAG([time]) OVER (LIMIT DURATION(hour, 24)) as previousTime,
        LAG(ST_WITHIN(mypoint,mypolygon)) OVER (LIMIT DURATION(hour, 24)) as previousST_WITHIN
    FROM input TIMESTAMP BY [time]
    )
    
    SELECT 
        LAG(time) OVER (LIMIT DURATION(hour, 24) WHEN ST_WITHIN(mypoint,mypolygon) = 0 ) [StartFault],
        previousTime [EndFault]
    FROM SelectPreviousEvent
    WHERE
        ST_WITHIN(mypoint,mypolygon) = 0
        AND previousST_WITHIN = 1
    
    您需要对此查询进行一些自定义。让我知道进展如何

    谢谢


    谢谢你的回复,亲爱的。我理解你的意思,但你是否建议将流分析作业中的所有数据输出到某个存储机制中,然后使用Azure函数对其进行操作?因此,数据进入事件中心,流分析作业启动,将数据输出到存储器,azure函数对数据进行操作。这不就是将所有数据从事件中心直接传递到存储吗?没关系,亲爱的,我明白你的意思。我想我已经制定了完整的架构。我会在一切正常后发布我的结果。这很好,但实际上我需要实时分析。由于每个点都在,并且ST_在=1之内,我需要知道在那个事件中有多长时间。我已经试了一整天了。我认为这是不可能的。例如,时间线为1a、1b、1c、0、0、1a、1b、0。有两个事件,但需要知道1b-1a的时间差,然后是1c-1a,因为1即将到来。有办法吗?