Influxdb自定义数据采样(CQ)

本文介绍了如何使用JAVA实现Influxdb的数据自定义采样,特别是月度采样。Influxdb的CQ无法实现月度、季度和年度采样,但通过代码实现,可以对现有数据进行按天、按月采样。文章详细阐述了采样逻辑,包括日采样和月采样的SQL语句,并展示了采样结果。
摘要由CSDN通过智能技术生成

Influxdb提供了两种方式来进行数据的整合Continuous Queries (CQ:连续查询) 和 Retention Policies (RP:保留策略)。这两种方式结合使用,在降低精度的前提下,既可以保留很久以前的数据,又可以减轻数据所占用系统资源。一般都把连续查询成为数据采样,相信看这篇文章的朋友都对这些有所了解。

官网上提供的数据采样精度最大只能到周,如果我想实现按月采样,按季度采样后者按年采样,使用Influxdb的CQ是无法实现的,必须要自己来处理。

这里我们说下用JAVA来实现数据的自定义时间采样,其它语言也是同样道理,也可参考。

首先我们说下需求,对现有数据进行按天采样和按月采样。

先造数据:
从现在开始往前几百个小时,每小时一条,其中myname和address是tag,age是field,这里按照平均年龄采样。
这里写图片描述

注:name在Influxdb中类似于关键字的存在,所以最好别用,如果使用的话,一般查询的时候需要加引号。

首先按照日采样,这个功能Influxdb的CQ就能完成,这里我们采用代码的方式来实现,方便下面月的采样的理解。
先说明下采样执行的sql:

select mean(age) as age into database.rp.day_test from database.rp.mytest where time >=startTime and time <endTime group by time(1h),*

注:
1、这个sql可以在CQ执行的时候通过influx的日志获取到。
2、其中被采样的表我在执行的时候有时加上database和rp的时候查询不到,下面我把被采样的表的数据库和保留策略都省掉。但是采样之后的数据插入表必须要说明数据库和保留策略。
3、group by time(1h)这里的时间是根据自己的采样区间设定的,设定的时候如果时间不大于1h可以直接设定单位,如果大于1h,如1d就需要考虑时间偏移了。而我们这里的startTime和endTime就是我们的采样区间,直接就确定了这里time中的时间,所以我们把time()给省掉,这也是我们能够实现月采样或者季度年等实现的关键。去掉后startTime会成为被采样之后所有数据的时间,整合符合需求。
4、group by中的*表示所有的tag,如果只需要其中某些tag可以单独列出来。

日采样,我们设定每天执行一次(或者几次),这个跟CQ逻辑一样。看代码:

    public void dayCQ(){

            HashMap<String,String> hashMap=this.yesterdayTimeZone();

            String url="http:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值