DolphinDB实时统计分析:滑动窗口计算

发布时间:2026/7/16 0:39:32

DolphinDB实时统计分析:滑动窗口计算
摘要本文深入讲解DolphinDB实时统计分析技术。从滑动窗口原理到窗口函数应用从实时统计到趋势计算从多维度分析到性能优化全面介绍滑动窗口计算的核心方法。通过丰富的代码示例帮助读者掌握实时统计分析的核心技能。一、滑动窗口概述1.1 滑动窗口原理滑动窗口数据流窗口1窗口2窗口3统计结果1.2 窗口类型类型说明滚动窗口固定大小不重叠滑动窗口固定大小可重叠会话窗口基于活动间隔1.3 应用场景场景窗口类型分钟级统计滚动窗口移动平均滑动窗口会话分析会话窗口二、滚动窗口2.1 时间序列引擎//创建数据流 share streamTable(100000:0,device_idtimestamptemperaturehumidity,[SYMBOL,TIMESTAMP,DOUBLE,DOUBLE])assensor_stream//创建聚合结果表 share table(1:0,time_windowdevice_idavg_tempmax_tempmin_tempcount,[TIMESTAMP,SYMBOL,DOUBLE,DOUBLE,DOUBLE,LONG])asagg_result//创建时间序列引擎 aggEnginecreateTimeSeriesEngine(temp_agg,60000,//1分钟窗口[avg(temperature)asavg_temp,max(temperature)asmax_temp,min(temperature)asmin_temp,count(*)ascount],agg_result,timestamp,device_id)//订阅 subscribeTable(,sensor_stream,agg,-1,aggEngine,true)2.2 多窗口聚合//多窗口聚合defmultiWindowAgg(){//1分钟窗口 agg1mcreateTimeSeriesEngine(agg_1m,60000,[avg(temperature)asavg_temp],agg_1m_result,timestamp,device_id)//5分钟窗口 agg5mcreateTimeSeriesEngine(agg_5m,300000,[avg(temperature)asavg_temp],agg_5m_result,timestamp,device_id)//1小时窗口 agg1hcreateTimeSeriesEngine(agg_1h,3600000,[avg(temperature)asavg_temp],agg_1h_result,timestamp,device_id)}2.3 自定义聚合//自定义聚合函数defmyAgg(data){returndict(STRING,ANY,[[mean,avg(data)],[std,std(data)],[skewness,skewness(data)],[kurtosis,kurtosis(data)]])}三、滑动窗口3.1 移动平均//移动平均defmovingAverage(data,window){returnselect timestamp,mavg(temperature,window)asmafromdata}//使用 ttable(1..100asid,now()1..100*1000astimestamp,rand(20.0..30.0,100)astemperature)resultmovingAverage(t,10)3.2 移动统计//移动统计defmovingStats(data,window){returnselect timestamp,temperature,mavg(temperature,window)asmoving_avg,mstd(temperature,window)asmoving_std,mmax(temperature,window)asmoving_max,mmin(temperature,window)asmoving_min,msum(temperature,window)asmoving_sumfromdata}3.3 指数移动平均//指数移动平均defema(data,alpha0.1){resultarray(DOUBLE,data.rows())result[0]data[0]for(iin1..data.rows()){result[i]alpha*data[i](1-alpha)*result[i-1]}returnresult}四、实时统计4.1 实时计数//实时计数 share table(1:0,time_windowcount,[TIMESTAMP,LONG])ascount_result countEnginecreateTimeSeriesEngine(count_engine,60000,[count(*)ascount],count_result,timestamp)subscribeTable(,sensor_stream,count,-1,countEngine,true)4.2 实时求和//实时求和 share table(1:0,time_windowtotal_temp,[TIMESTAMP,DOUBLE])assum_result sumEnginecreateTimeSeriesEngine(sum_engine,60000,[sum(temperature)astotal_temp],sum_result,timestamp)subscribeTable(,sensor_stream,sum,-1,sumEngine,true)4.3 实时百分位//实时百分位defpercentileAgg(data,p){returnpercentile(data,p)}//使用 share table(1:0,time_windowp50p90p99,[TIMESTAMP,DOUBLE,DOUBLE,DOUBLE])aspercentile_result percentileEnginecreateTimeSeriesEngine(percentile_engine,60000,[percentile(temperature,50)asp50,percentile(temperature,90)asp90,percentile(temperature,99)asp99],percentile_result,timestamp)subscribeTable(,sensor_stream,percentile,-1,percentileEngine,true)五、趋势计算5.1 变化率//变化率defcalculateChangeRate(data){returnselect timestamp,temperature,deltas(temperature)aschange,deltas(temperature)/prev(temperature)*100aschange_ratefromdata}5.2 累计统计//累计统计defcumulativeStats(data){returnselect timestamp,temperature,cumsum(temperature)ascum_sum,cumavg(temperature)ascum_avg,cummax(temperature)ascum_max,cummin(temperature)ascum_minfromdata}5.3 趋势检测//趋势检测defdetectTrend(data,window10){resultselect timestamp,temperature,mavg(temperature,window)asma,iif(temperaturemavg(temperature,window),up,iif(temperaturemavg(temperature,window),down,stable))astrendfromdatareturnresult}六、多维度分析6.1 分组统计//分组统计defgroupStats(data,groupCol){returnselect avg(temperature)asavg_temp,max(temperature)asmax_temp,min(temperature)asmin_temp,std(temperature)asstd_temp,count(*)ascountfromdata group byeval(groupCol)}6.2 多维度聚合//多维度聚合defmultiDimAgg(data){returnselect device_id,bar(timestamp,1h)ashour,avg(temperature)asavg_temp,max(temperature)asmax_temp,min(temperature)asmin_tempfromdata group by device_id,bar(timestamp,1h)}6.3 交叉分析//交叉分析defcrossAnalysis(data){returnselect device_id,iif(temperature25,high,low)astemp_level,count(*)ascount,avg(humidity)asavg_humidityfromdata group by device_id,iif(temperature25,high,low)}七、性能优化7.1 增量计算//增量计算defincrementalAgg(newData,existingStats){//更新统计量 newCountexistingStats.countnewData.rows()newSumexistingStats.sumsum(newData.temperature)newAvgnewSum/newCountreturndict(STRING,ANY,[[count,newCount],[sum,newSum],[avg,newAvg]])}7.2 并行计算//并行计算defparallelAgg(data,numPartitions4){resultsarray(ANY,0)for(iin0..numPartitions){partitionselect*fromdata where device_id%numPartitionsi results.append!(aggPartition(partition))}//合并结果returnmergeResults(results)}八、实战案例8.1 完整实时统计系统//实时统计分析系统//1.创建数据流 share streamTable(100000:0,device_idtimestamptemperaturehumiditypressure,[SYMBOL,TIMESTAMP,DOUBLE,DOUBLE,DOUBLE])assensor_stream enableTablePersistence(sensor_stream,true,true,1000000)//2.创建聚合结果表 share table(1:0,time_windowdevice_idavg_tempmax_tempmin_tempstd_tempcount,[TIMESTAMP,SYMBOL,DOUBLE,DOUBLE,DOUBLE,DOUBLE,LONG])asagg_result//3.创建时间序列引擎 aggEnginecreateTimeSeriesEngine(sensor_agg,60000,[avg(temperature)asavg_temp,max(temperature)asmax_temp,min(temperature)asmin_temp,std(temperature)asstd_temp,count(*)ascount],agg_result,timestamp,device_id)subscribeTable(,sensor_stream,agg,-1,aggEngine,true)//4.移动统计 share table(1:0,timestampdevice_idtemperaturema_10ma_30,[TIMESTAMP,SYMBOL,DOUBLE,DOUBLE,DOUBLE])asma_resultdefcalculateMA(data){insert into ma_result select timestamp,device_id,temperature,mavg(temperature,10)asma_10,mavg(temperature,30)asma_30fromdata context by device_id}subscribeTable(,sensor_stream,ma,-1,def(msg){calculateMA(msg)},true)//5.模拟数据defgenerateMockData(){while(true){datatable(take(1..10,10)asdevice_id,take(now(),10)astimestamp,rand(20.0..30.0,10)astemperature,rand(40.0..60.0,10)ashumidity,rand(1000.0..1020.0,10)aspressure)sensor_stream.append!(data)sleep(5000)}}submitJob(mock_data,模拟数据,generateMockData)//6.查询接口defgetLatestStats(){returnselect*fromagg_result order by time_window desc limit10}addFunctionView(getLatestStats)print(实时统计分析系统启动完成)九、总结本文详细介绍了DolphinDB实时统计分析滚动窗口时间序列引擎、多窗口聚合滑动窗口移动平均、移动统计、指数移动平均实时统计实时计数、实时求和、实时百分位趋势计算变化率、累计统计、趋势检测多维度分析分组统计、多维度聚合、交叉分析性能优化增量计算、并行计算思考题如何选择合适的窗口大小如何优化滑动窗口计算性能如何处理乱序数据参考资料DolphinDB时间序列引擎DolphinDB流计算系列预告下一篇将介绍实时关联分析敬请期待

相关新闻

影刀RPA 报表自动调度:定时查询数据库并生成业务报表

影刀RPA 报表自动调度:定时查询数据库并生成业务报表

2026/7/16 0:29:31

影刀RPA 报表自动调度:定时查询数据库并生成业务报表 作者:林焱 什么情况用什么 大多数公司都有几个"祖传报表":每天早上销售总监要看前一天的销售额,每周一运营总监要看上周的用户增长,每月1号财务要看上…

影刀RPA 批量操作的断点记录与续跑方案

影刀RPA 批量操作的断点记录与续跑方案

2026/7/16 0:29:31

影刀RPA 批量操作的断点记录与续跑方案 作者:林焱 什么情况用这个 处理5000条数据到第3891条时流程中断了。你重启流程——从头开始。前3891条白跑了,还要花同样的时间重新处理。更糟的是,前面已经提交到系统的数据没法"撤回"&…

Windows系统文件DaOtpCredentialProvider.dll丢失找不到问题解决

Windows系统文件DaOtpCredentialProvider.dll丢失找不到问题解决

2026/7/16 0:29:31

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

从零搭建Unreal Engine Pixel Streaming:云端渲染与WebRTC实时交互全解析

从零搭建Unreal Engine Pixel Streaming:云端渲染与WebRTC实时交互全解析

2026/7/16 1:59:35

1. 项目概述:为什么我们需要Pixel Streaming?如果你是一个Unreal Engine的开发者,尤其是做过一些高保真度、对硬件要求苛刻的项目,比如一个写实风格的开放世界游戏,或者一个需要实时渲染复杂模型的工业仿真应用&#x…

MCU裸机编程的状态机框架--从理论到实战:构建高效事件驱动模型

MCU裸机编程的状态机框架--从理论到实战:构建高效事件驱动模型

2026/7/16 1:59:35

1. 状态机基础:从理论到裸机实践我第一次接触状态机是在大学实验室调试一个智能家居控制器项目。当时用传统的前后台编程方式,代码里到处都是while(!flag)这样的忙等待,系统响应慢得像蜗牛,按键按下后要等半秒才有反应。导师扔给我…

【DW组队学】llm-algo-leetcode 05LLaMA3 Block 教程 + 00PyTorch 热身

【DW组队学】llm-algo-leetcode 05LLaMA3 Block 教程 + 00PyTorch 热身

2026/7/16 1:59:35

这里写自定义目录标题纯粹的复健流程00. PyTorch 热身Part 1: 张量维度变换与 einopsPart 2: 嵌入层 (Embedding Layer) 的本质纯粹的复健流程 很久没有摸过这些库,现在重新拾起来有点困难。 00. PyTorch 热身 # 导入所有必需的库 import torch import torch.nn …

树莓派型号抉择:从旗舰B到微型Zero,如何按需匹配?

树莓派型号抉择:从旗舰B到微型Zero,如何按需匹配?

2026/7/16 1:59:35

1. 树莓派家族概览:从性能怪兽到微型战士树莓派自2012年问世以来,已经发展出多个系列和型号,形成了一个完整的生态系统。对于刚接触树莓派的朋友来说,面对B系列、A系列、Zero系列这些型号,可能会感到一头雾水。其实这些…

基于Multisim的高频小信号谐振放大器性能调优与阻尼电阻影响深度分析

基于Multisim的高频小信号谐振放大器性能调优与阻尼电阻影响深度分析

2026/7/16 1:59:35

1. 高频小信号谐振放大器基础与Multisim仿真准备高频小信号谐振放大器是无线通信系统中的关键部件,主要功能是对微弱的高频信号进行选择性放大。这类放大器通常工作在几百kHz到几百MHz的频率范围,其核心特征是利用LC并联谐振回路作为负载,兼具…

从爱尔兰B表到迭代算法:GSM与CDMA网络容量规划的实战计算与对比

从爱尔兰B表到迭代算法:GSM与CDMA网络容量规划的实战计算与对比

2026/7/16 1:49:35

1. GSM与CDMA网络容量规划的核心差异第一次接触网络容量规划时,我被GSM和CDMA这两种技术完全不同的设计哲学震撼到了。GSM像是个严谨的会计师,每个用户都要分配固定的"座位";而CDMA则像个灵活的魔术师,所有用户共享同一…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/16 0:35:09

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/13 20:43:19

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/15 0:26:43

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

Python实现跨境电商商品图批量翻译教程

Python实现跨境电商商品图批量翻译教程

2026/7/16 0:09:31

一、问题引入做跨境电商的卖家朋友,你是否遇到过这样的困扰?每次上架新品到亚马逊、Shopee或Lazada等平台,都需要处理大量商品图片的多语言版本。比如上架200款衣服,每款需要翻译成英语、日语、韩语等5种语言,这意味着…

跨境电商多语言商品图翻译方案实现

跨境电商多语言商品图翻译方案实现

2026/7/16 0:09:31

一、问题引入对于做跨境电商的卖家来说,多语言商品图的制作一直是令人头疼的环节。当你准备在亚马逊、Shopee、Lazada等多个平台同步上架新品时,首先遇到的就是图片翻译问题。以一位做家居用品的卖家为例,他需要将200张商品图片中的英文文案全…

Windows系统文件d3dx9_36.dll丢失找不到问题解决

Windows系统文件d3dx9_36.dll丢失找不到问题解决

2026/7/16 0:09:31

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…