使用 Azure TimeSeries Insights 获取时间序列的最后一个值

Get Last Value of a Time Series with Azure TimeSeries Insights

我如何查询最后一个(最近的)事件及其时间序列中的时间戳?

描述的方法 对我不起作用,因为我不能保证最近的事件发生在固定时间 window 内。就我而言,事件可能是几小时或几天前收到的。

LAST() 函数 return 最后的事件和 Get Series API 应该根据文档保留实际的事件时间戳,但我对得到的结果有点困惑从这个 API 回来。我得到了多个结果(有时甚至没有按时间戳排序)并且必须自己找出最新的值。 我还注意到查询结果实际上并没有反映最新的摄取值。如果我多次摄取该值,则最新摄取的值仅包含在结果集中。

是否有更直接或更可靠的方法来使用 Azure 时序见解获取时序的最后一个值?

目前获取最后已知值的最可靠方法是使用 AggregateSeries API。

您可以在计算最后一个事件 属性 和最后一个时间戳 属性 的变量中使用 last() 聚合。您必须在查询中提供搜索范围,因此您仍然需要“猜测”最新值何时出现。

一些选项总是具有比您可能需要的更大的搜索跨度(例如,如果传感器每天发送数据,您可以输入一周的搜索跨度以确保安全)或使用可用性 API 获取整个数据集在所有 TSID 中的时间范围和分布,并将其用作搜索范围。请记住,具有较大的搜索跨度会影响查询的性能。

这是一个 LKV 查询示例:

"aggregateSeries": {

    "searchSpan": {

        "from": "2020-02-01T00:00:00.000Z",

        "to": "2020-02-07T00:00:00.000Z"

    },

    "timeSeriesId": [

        "motionsensor"

    ],

    "interval": "P30D",

    "inlineVariables": {

        "LastValue": {

            "kind": "aggregate",

            "aggregation": {

                "tsx": "last($event['motion_detected'].Bool)"

            }

        },

        "LastTimestamp": {

            "kind": "aggregate",

            "aggregation": {

                "tsx": "last($event.$ts)"

            }

        }

    },

    "projectedVariables": [

        "LastValue", 

        "LastTimestamp"

    ]

}