如何解决在 Azure 数据资源管理器中使用 Kusto 查询中的先前值填充空字段
背景
我们在 Azure 数据资源管理器中有一个具有以下格式的数据集。
sensorid | 时间戳 | 价值 |
---|---|---|
阀门 1 | 24-03-2021 | 123 |
阀门 1 | 23-03-2021 | 234 |
汽缸速度 | 23-03-2021 | 1.2 |
阀门状态 | 23-03-2021 | 打开 |
阀门状态 | 24-03-2021 | 关闭 |
汽缸速度 | 25-03-2021 | 2 |
不同的传感器有不同的报告间隔,有些每秒报告一次,有些每天报告几次。
通过使用此查询
datatable (sourcetimestamp: datetime,sensorid:string,value:dynamic)
[datetime(2021-03-23),"valve1",123,datetime(2021-03-24),234,datetime(2021-03-23),"cylinderspeed",1.2,"valvestatus","open","closed",datetime(2021-03-25),2]
| summarize average=any(value) by bin(sourcetimestamp,1s),sensorid
| evaluate pivot(sensorid,any(average))
我可以生成这张表
时间戳 | valve1 | 汽缸速度 | 阀门状态 |
---|---|---|---|
23-03-2021 | 123 | 1,2 | 打开 |
24-03-2021 | 234 | 关闭 | |
25-03-2021 | 2 |
问题
如何继续执行上述查询,以便使用该列中的先前值填充空单元格?
解决方法
您可以使用 series_fill 函数之一,例如 series_fill_forward。请注意,填充数组的最简单方法是使用 make-series 运算符
因为 timeseries 需要系列中的数值,所以我将 Valvestatus 的枚举转换为两倍。
datatable (sourcetimestamp: datetime,sensorid:string,value:dynamic)
[datetime(2021-03-23),"valve1",123,datetime(2021-03-24),234,datetime(2021-03-23),"valvestatus","open","closed","cylinderspeed",1.2,2]
| extend value = case(value=="open",double(1),value=="closed",double(0),value)
| make-series values = any(value) default=double(null) on sourcetimestamp from(datetime(2021-03-23 00:00:00.0000000)) to(datetime(2021-03-24 00:00:00.0000000)) step 1h by sensorid
| extend values = series_fill_forward(values)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。