influxdb 连续查询使用总结

转载请注明出处:

1.定义:

InfluxDB 连续查询(Continuous Query)是一种自动化查询类型,该查询会根据定义的时间间隔定期运行,并将结果存储在新的目标测量中。这样的查询通常用于处理大量时间序列数据。

2.基本语法

使用语法格式:

复制代码
CREATE CONTINUOUS QUERY <cq_name> ON <db_name>
BEGIN
  SELECT <function>(<column>) INTO <target_measurement> FROM <source_measurement>
  WHERE <time_clause> GROUP BY <tag_key>
END

其中:

  • <cq_name>:为连续查询指定一个名称
  • <db_name>:为数据库指定一个名称
  • <function>:函数必须是 mean、sum、min、max 或 count 的其中之一
  • <column>:要执行聚合操作的列名
  • <target_measurement>:新创建的目标测量名称
  • <source_measurement>:源测量名称
  • <time_clause>:指定时间范围的语句,可以包含 WHERE time > now() - <duration>
  • <tag_key>:可选参数,按照此 tag 进行分组操作

3.使用

在 InfluxDB 中创建连续查询可以通过以下两个步骤完成:

  1. 创建目标测量的查询。
  2. 将第一步得到的查询作为连续查询的输入。

4.使用场景

采样和数据保留

使用CQ与InfluxDB的保留策略(RP)来减轻存储问题。结合CQ和RP自动将高精度数据降低到较低的精度,并从数据库中移除可分配的高精度数据。常见用例的详细演示指南,请参阅下采样和数据保留

预先计算昂贵的查询

通过使用CQ预先计算昂贵的查询来缩短查询运行时间。使用CQ自动将普通查询的高精度数据下采样到较低的精度。较低精度数据的查询需要更少的资源并且返回更快。

替换HAVING子句

InfluxQL不支持HAVING子句。通过创建CQ来聚合数据并查询CQ结果以达到应用HAVING子句相同的功能。

5.查看和删除sql

查看连续查询

复制代码
SHOW CONTINUOUS QUERIES

删除连续查询:

从一个指定的database删除CQ:

复制代码
DROP CONTINUOUS QUERY <cq_name> ON <database_name>

DROP CONTINUOUS QUERY返回一个空的结果。

修改连续查询:

根据官网的介绍,创建CQ之后,无法进行更改,如果需要更改需要drop掉之后重新create。

6.运行时间点以及覆盖的时间范围

CQ对实时数据进行操作。他们使用本地服务器的时间戳,GROUP BY time()间隔和InfluxDB的预设时间边界来确定何时执行以及查询中涵盖的时间范围。

CQs以与cq_queryGROUP BY time()间隔相同的间隔执行,并且它们在InfluxDB的预设时间边界开始时运行。如果GROUP BY time()间隔为1小时,则CQ每小时开始执行一次。

当CQ执行时,它对于now()now()减去GROUP BY time()间隔的时间范围运行单个查询。 如果GROUP BY time()间隔为1小时,当前时间为17:00,查询的时间范围为16:00至16:59999999999。

自动采样数据

使用简单的CQ自动从单个字段中下采样数据,并将结果写入同一数据库中的另一个measurement。

复制代码
CREATE CONTINUOUS QUERY "cq_basic" ON "transportation"
BEGIN
  SELECT mean("passengers") INTO "average_passengers" FROM "bus_data" GROUP BY time(1h)
END

以上示例使用数据库transportation中的示例数据。measurementbus_data数据存储有关公共汽车乘客数量和投诉数量的15分钟数据:

  cq_basicbus_data中计算乘客的平均小时数,并将结果存储在数据库transportation中的average_passengers中。

  cq_basic以一小时的间隔执行,与GROUP BY time()间隔相同的间隔。 每个小时,cq_basic运行一个单一的查询,覆盖了now()now()减去GROUP BY time()间隔之间的时间范围,即now()now()之前的一个小时之间的时间范围。

7.使用示例:

假设我们有一个名为 cpu_usage 的测量,其中包含了多个 tag 和 field,我们需要将其聚合并写入一个新的测量 cpu_usage_per_hour 中。

复制代码
CREATE CONTINUOUS QUERY "cq_cpu_usage" ON "mydb"
BEGIN
  SELECT MEAN("value") INTO "cpu_usage_per_hour" FROM "cpu_usage"
  WHERE time > now() - 1h GROUP BY time(1h), "host"
END

该连续查询会计算最近一小时内 cpu_usage 测量的平均值,并按照每小时以及 host 进行分组,结果存储在 cpu_usage_per_hour 测量中。

可以使用以下命令查看已创建的连续查询列表:

复制代码
SHOW CONTINUOUS QUERIES

8.官网链接

https://docs.influxdata.com/influxdb/v1/query_language/continuous_queries/

相关推荐
疯狂学习GIS1 个月前
InfluxDB数据库在Windows中的部署与运行
数据库·windows·influxdb·开发环境·时间序列数据·数据库服务·服务部署
一瓢一瓢的饮 alanchan2 个月前
【运维监控】influxdb 2.0 + grafana 11 监控jmeter 5.6.3 性能指标(2)
运维·jmeter·grafana·监控·influxdb·运维监控
一瓢一瓢的饮 alanchan2 个月前
【运维监控】系列文章汇总索引
java·运维·kafka·grafana·prometheus·influxdb·运维监控
香吧香4 个月前
influxdb得导出与导入
influxdb
Lingoesforstudy4 个月前
InfluxDB v2.x中的Flux基本概念
数据库·influxdb
Lingoesforstudy4 个月前
Influxdb v1.8x的基本概念
数据库·influxdb
假装我不帅5 个月前
grafana连接influxdb2.x做数据大盘
grafana·influxdb
狒狒狗6 个月前
【七】jmeter5.5+influxdb2.0+prometheus+grafana
jmeter·grafana·prometheus·influxdb
Re_Virtual7 个月前
telegraph + influxdb + grafana 实现交换机流量展示
grafana·influxdb·snmp·telegraph
观望过往8 个月前
EMQX+InfluxDB+Grafana 构建物联网可视化平台
grafana·influxdb·emqx