「influxDB 原理与实践(三)」连续查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「influxDB 原理与实践(三)」连续查询相关的知识,希望对你有一定的参考价值。

参考技术A 通过创建连续查询,用户可以指定InfluxDB执行连续查询的时间间隔、单次查询的时间范围以及查询规则。InfluxDB会根据用户指定的规则,定期的将过去一段时间内的原始时序数据以用户所期望的方式保存至新的结果表中,从而降低存储数据的时间精度,大大减少新表的数据量。同时,将查询结果保存在指定的数据表中,也便于用户直接查询所关心的内容,从而降低查询的运算复杂度,提升查询效率。

解释:每小时定期去查cpu_usage_detail表,按服务器ip聚合,统计过去1小时内每个IP的最大CPU利用率cpu_usage,并将结果保存在表basic_cq_result中。

group by time()指定的时间既决定了连续查询每次执行的时间间隔,也决定了连续查询的查询时间范围。基于本地服务器的时间,在预设的时间节点开始执行这些连续查询。influxDB会在每个小时开始的时候执行连续查询语句,如11:00,12:00,13:00
infulxDB首先通过now()函数获取当前时间,再用当前时间减去group by time()指定的时间间隔。这两个时间点之间的左闭合开区间就是连续查询语句查询时间范围。例如,时间长度是1小时,执行时间点是12:00,那么所查时间范围就是11:00~11:59.9999999。

高级连续查询语法:

用户通过RESAMPLE子句分别指定更具体的时间间隔和时间范围。

如何回填 InfluxDB 中的连续查询?

【中文标题】如何回填 InfluxDB 中的连续查询?【英文标题】:How to backfill a continuous query in InfluxDB? 【发布时间】:2020-08-02 21:59:58 【问题描述】:

我有一个存储多年历史数据的数据库。 我的目标是以1m 间隔重新采样这些数据并保存到不同的数据库。 我的理解是,这很容易通过continous query 实现。

CREATE CONTINUOUS QUERY cq_name ON db_2 
BEGIN 
SELECT last(data_point) AS ldp 
INTO db_2.autogen.data_points 
FROM db.autogen.data_points 
WHERE time > now() - 12w AND time < now() - 10w 
GROUP BY time(1m), * 
END

上面的查询在没有WHERE 子句的情况下工作正常,并从创建点重新采样 - 向前。 我添加了WHERE 子句以回填特定时间段(12 到 10 周前),但是什么也没发生。

从this one 和that one 等帖子中,我了解到可以通过添加INTOWHERE 子句进行回填,但没有任何反应。

为什么会这样,我该如何解决?

【问题讨论】:

【参考方案1】:

CQ 中的日期/时间将被忽略。 CQ 不能用于回填。

但是,您可以从查询中删除 CQ“包装器”并手动运行它;只记得创建窗口。

CREATE CONTINUOUS QUERY cq_name ON db_2 
BEGIN 
SELECT last(data_point) AS ldp 
INTO db_2.autogen.data_points 
FROM db.autogen.data_points 
GROUP BY time(1m), * 
END

变成:

SELECT last(data_point) AS ldp 
INTO db_2.autogen.data_points 
FROM db.autogen.data_points 
WHERE time > now() - 12w AND time < now() - 10w 
GROUP BY time(1m), * 

【讨论】:

以上是关于「influxDB 原理与实践(三)」连续查询的主要内容,如果未能解决你的问题,请参考以下文章

如何回填 InfluxDB 中的连续查询?

使用InfluxDB的连续查询解决聚合性能问题

InfluxDB 监控指标分析

InfluxDB 监控指标分析

InfluxDB 监控指标分析

Using InfluxDB in Grafana,influxDB在grafana中使用