如何在Stream Analytics中对10分钟间隔数组Cross Apply生成对应时间戳
Azure Stream Analytics 数组展开与时间戳绑定解决方案
完整查询代码
SELECT Input.ID AS DeviceID, -- 按数组下标计算对应采样时间:起始时间 + 下标*10分钟 DATEADD(minute, SamplingValues.ArrayIndex * 10, ThingItem.TMSDUTC) AS SamplingTimeUTC, DataItem.TAGID, SamplingValues.ArrayValue AS SensorValue FROM Input -- 展开第一层嵌套数组THING CROSS APPLY GetArrayElements(Input.THING) AS ThingItem -- 展开第二层嵌套数组DATA CROSS APPLY GetArrayElements(ThingItem.DATA) AS DataItem -- 展开TAGX对应的数值数组 CROSS APPLY GetArrayElements(DataItem.VALUE) AS SamplingValues WHERE DataItem.TAGID = 'TAGX'
实现逻辑说明
- 第一层
CROSS APPLY调用内置函数GetArrayElements展开THING数组,获取每个上报批次的采样基准起始时间TMSDUTC - 第二层
CROSS APPLY展开DATA数组,通过WHERE条件筛选出TAGID为TAGX的传感器数据行 - 第三层
CROSS APPLY展开TAGX对应的VALUE数值数组,返回的每行自动携带从0开始的ArrayIndex(数组下标)和对应的采样值ArrayValue - 时间戳生成直接通过
DATEADD函数计算:以TMSDUTC为基准,每一行对应累加ArrayIndex * 10分钟,完美匹配10分钟一次的采样规则,无需硬编码时间序列
输出样例
| DeviceID | SamplingTimeUTC | TAGID | SensorValue |
|---|---|---|---|
| DEV-001-Test | 2021-10-14T13:00:00.000 | TAGX | 30.34 |
| DEV-001-Test | 2021-10-14T13:10:00.000 | TAGX | 245.65 |
| DEV-001-Test | 2021-10-14T13:20:00.000 | TAGX | 30.34 |
| DEV-001-Test | 2021-10-14T13:30:00.000 | TAGX | 245.65 |
| DEV-001-Test | 2021-10-14T13:40:00.000 | TAGX | 245.65 |
| DEV-001-Test | 2021-10-14T13:50:00.000 | TAGX | 30.34 |
内容的提问来源于stack exchange,提问作者Ahmed Essam
相关产品推荐
相关产品推荐

