【大数据】InfluxDB的连续查询有什么作用呢

InfluxDB尽管每秒可以处理数十万的数据,但如果长时间存储大量数据,对于存储是很大的压力。那么我们既想数据保存得久一些或者永久保存,又想减轻存储的压力,该怎么办呢,这就要用到连续查询了,其实是用连续查询和保留策略(Retention Policy 简称RP)来一起实现

一、保留策略

1、保留策略是什么呢

保留策略指的是InfluxDB保存数据的时间,InfluxDB会比较服务器本地的时间戳和请求数据里的时间戳,并删除比在RPs里面用DURATION设置的更老的数据
一个数据库中可以有多个保留策略,但每个数据库的保留策略是唯一的
刚已经了解到连续查询是将降采样的数据放到另一个表(与原表相同的库下的另一个表)中,我们可以将这个连续查询的表设置一个保留策略,这个保留策略设置时间旧一些甚至永久,将原表的保留策略设置一个短一些的时间,这个要看自己业务需要以及数据库能支撑多久来这只一个合适的时间

2、保留策略相关语法

(1)查看保留策略

show RETENTION POLICIES on <database_name>

(2)新建保留策略

CREATE RETENTION POLICY <rq_name> ON <database_name> DURATION 保留时长 REPLICATION 1 (default)

例如
为数据库test创建一个保留52周的非默认保留策略

CREATE RETENTION POLICY "a_year" ON "test" DURATION 52w REPLICATION 1

最后加default的话,则是默认的保留策略,若是默认保留策略,则在读写的时候如果没有指定保留策略,就是使用默认策略

二、连续查询

1、连续查询是什么呢

连续查询(Continuous Query 简称CQ)是在数据库内部自动周期性跑着的一个InfluxQL的查询,其将查询的数据存到与原表同一个库下的另一个表中。
它的查询语句是对原数据的一个降采样,比如原数据可能是每分钟一条数据甚至每秒一条数据,那么我们可以将其汇合为一个小时或者更久(自定义)一条数据,通过group by time()来实现

2、连续查询相关语法

(1)查询连续查询

SHOW CONTINUOUS QUERIES

(2)新建连续查询

基本语法
CREATE CONTINUOUS QUERY <cq_name> ON <database_name>
BEGIN
  <cq_query>
END

例如:

CREATE CONTINUOUS QUERY <cq_name> ON <database_name> 
BEGIN
  SELECT mean(<filed_name>) AS <new_filed_name>
  INTO <cq_name>.<new_table_name>
  FROM <table_name>
  GROUP BY time(1h),*
END

运行时间点
ROUP BY time()间隔为1小时,则CQ每小时开始执行一次
覆盖的时间范围
CQ执行时,是now()和now()减去GROUP BY time()间隔的时间范围运行单个查询(如果当前时间为21:00,ROUP BY time()间隔为1小时,查询的时间范围则是20:00至20:59999999999)

注意:cq_query不需要时间范围。 InfluxDB在执行CQ时自动生成cq_query的时间范围。cq_query的WHERE子句中的任何用户指定的时间范围将被系统忽略

高级语法
CREATE CONTINUOUS QUERY <cq_name> ON <database_name>
RESAMPLE EVERY <interval> FOR <interval>
BEGIN
  <cq_query>
END

EVERY是设置运行间隔的,如果EVERY间隔是两个小时,InfluxDB将在每两小时开始执行一次CQ
FOR是设置覆盖时间范围的,当CQ执行时,它运行一个单一的查询,在now()和now()减去RESAMPLE子句中的FOR间隔之间的时间范围。如果FOR间隔为两个小时,当前时间为21:00,查询的时间间隔为19:00至20:59999999999。

例1.配置执行间隔

CREATE CONTINUOUS QUERY <cq_name> ON <database_name> 
RESAMPLE EVERY 1h
BEGIN
  SELECT mean(<filed_name>) AS <new_filed_name>
  INTO <cq_name>.<new_table_name>
  FROM <table_name>
  GROUP BY time(1h),*
END

EVERY 时间间隔与GROUP BY time()间隔一样,就不多说了,说下不一样的情况吧
(a) EVERY 时间间隔小于 GROUP BY time()时间间隔
间隔与EVERY间隔相同,覆盖当前时间段的时间范围,即与now()交叉的一小时时间段
21:00cq_basic_every执行时间范围time> ='20:00’AND time <'21:00’的查询
21:30cq_basic_every执行时间范围time> ='21:00’AND time <'22:00’的查询
22:00cq_basic_every执行时间范围time> ='21:00’AND time <'22:00’的查询。
22:00cq_basic_every会覆盖21:30cq_basic_every
最终只够俩条,就是21:00和22:00执行的俩条
(b)EVERY 时间间隔大于 GROUP BY time()时间间隔
CQ涵盖now()和now()减去EVERY间隔之间的时间范围
还是以ENEVY时间间隔执行
假如 EVERY 1h, GROUP BY time(30)
CQ每1小时执行一次
21:00cq_basic_every执行时间范围time> ='20:00’AND time <'20:30’的查询和time> ='20:30’AND time <‘21:00’
22:00cq_basic_every执行时间范围time> ='21:00’AND time <'21:30’的查询和time> ='21:30’AND time <'22:00’的查询

例2.配置采样时间范围

CREATE CONTINUOUS QUERY <cq_name> ON <database_name> 
RESAMPLE FOR 1h
BEGIN
  SELECT mean(<filed_name>) AS <new_filed_name>
  INTO <cq_name>.<new_table_name>
  FROM <table_name>
  GROUP BY time(30m),*
END

CQ执行间隔与GROUP BY time()间隔相同。每30分钟,CQ运行一个查询,覆盖时间段为now()和now()减去FOR中的间隔,即是now()和now()之前的一个小时之间的时间范围

例3.配置执行间隔和采样时间范围

CREATE CONTINUOUS QUERY <cq_name> ON <database_name> 
RESAMPLE EVERY 1h FOR 2h
BEGIN
  SELECT mean(<filed_name>) AS <new_filed_name>
  INTO <cq_name>.<new_table_name>
  FROM <table_name>
  GROUP BY time(30),*
END

CQ以1小时的间隔执行,覆盖时间段为now()和now()减去FOR中的间隔,即是now()和now()之前的2小时之间的时间范围

例4.配置执行间隔和采样时间范围并填充空值

CREATE CONTINUOUS QUERY <cq_name> ON <database_name> 
RESAMPLE EVERY 1h FOR 2h
BEGIN
  SELECT mean(<filed_name>) AS <new_filed_name>
  INTO <cq_name>.<new_table_name>
  FROM <table_name>
  GROUP BY time(30),* fill(1000)
END

fill()是用来更改不含数据的时间间隔值

注意:(1)EVERY的间隔和GROUP BY time()间隔,CQ以EVERY的间隔执行
(2)FOR间隔不能比GROUP BY time()或者EVERY的间隔少

(3)删除连续查询

DROP CONTINUOUS QUERY <cq_name> ON <database_name>

注意:CQ一旦创建就不能修改了,你必须DROP再CREATE才行

以上,就是对InfluxDB的保留策略和连续查询的一个认识和使用
感谢您的阅读~

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值