如何在Kusto中生成从实际起始时间开始的24小时时间序列数据
Kusto实现从实际起始时间生成24小时补全序列方案
原代码使用make-series时未指定start参数,Kusto会自动将起始时间对齐到step(1小时)的整数倍,导致第一条记录从整点开始,而非数据的实际起始时间。以下是两种解决方法:
方法1:指定make-series的起止时间
let source_data = datatable(Time:timespan, Status:int) [ timespan(1.00:10:00), 4 ,timespan(1.04:00:00), 2 ,timespan(2.12:00:00), 4 ,timespan(2.20:00:00), 2 ]; // 获取数据的实际起始时间 let start_time = toscalar(source_data | summarize min(Time)); source_data // 明确指定起止时间:从实际起始时间开始,覆盖24小时(共24个时间点) | make-series take_any(Status) default=int(null) on Time from start_time to start_time + 23h step 1h // 展开序列并向前填充缺失的状态值 | mv-expand Time to typeof(timespan), Status = series_fill_forward(take_any_Status) to typeof(int)
方法2:用range生成时间序列后左连接
let source_data = datatable(Time:timespan, Status:int) [ timespan(1.00:10:00), 4 ,timespan(1.04:00:00), 2 ,timespan(2.12:00:00), 4 ,timespan(2.20:00:00), 2 ]; let start_time = toscalar(source_data | summarize min(Time)); // 生成从实际起始时间开始的24小时每小时时间点 range Time from start_time to start_time + 23h step 1h // 左连接原数据匹配状态值 | left join source_data on Time // 向前填充缺失的状态值 | fill_forward(Status)
两种方法均能确保时间序列从数据的实际起始时间(如示例中的1.00:10:00)开始,自动补全24小时内所有缺失的小时段,并通过向前填充逻辑补全状态值。
内容的提问来源于stack exchange,提问作者Swathi Miney
相关产品推荐
相关产品推荐

