influxQL基本语法及常用的聚合函数

        InfluxQL(Influx Query Language)是与InfluxDB紧密集成的一种SQL风格的语言,专为处理时间序列数据而设计。其基本语法结构清晰,方便开发者理解和实现。以下是对InfluxQL基本语法及常用聚合函数的简单介绍:

目录

一、基本语法

1. 基本概念

2. 数据类型

3. 基本操作

3.1 数据库操作

3.2 数据写入

3.2.1. 通过HTTP API写入数据

3.2.2. 通过InfluxDB CLI写入数据

3.3 数据查询

4. 示例查询

示例1:查询指定Measurement中的所有数据

示例2:查询指定Tag的数据并计算平均温度

5. 注意事项

二 、聚合函数       

1. COUNT()

2. MEAN()

3. MEDIAN()

4. MODE()

5. SUM()

6. STDDEV()

7. SPREAD()


一、基本语法

1. 基本概念

  • Measurement(测量):在InfluxDB中,Measurement类似于传统关系型数据库中的表(Table),是数据的主要容器。
  • Tag(标签):用于索引的元数据,以键值对(key-value)的形式存在,其中key和value都是字符串类型。
  • Field(字段):存储实际的数据值,也以键值对的形式存在,但value可以是多种数据类型(如float、integer、string、boolean)。
  • Point(点):由时间戳(Time)、一组Fields和一组Tags组成,是InfluxDB中存储数据的基本单位。

2. 数据类型

InfluxQL支持的基本数据类型包括:

  • float:浮点型,默认的数据类型。
  • integer:整型,在插入数据时需要在数值后加i来指定。
  • string:字符串,需要用双引号将值括起来。
  • boolean:布尔型,可以用tTtrueTrueTRUE表示真,用fFfalseFalseFALSE表示假。

3. 基本操作

3.1 数据库操作
  • 显示所有数据库SHOW DATABASES
  • 使用数据库USE <database_name>
  • 创建数据库CREATE DATABASE <database_name>
  • 删除数据库DROP DATABASE <database_name>
3.2 数据写入

数据通过HTTP API或InfluxDB的命令行界面(CLI)写入。写入数据时,需要指定Measurement、Tags和Fields。

3.2.1. 通过HTTP API写入数据

在使用HTTP API写入数据时,你通常会发送一个POST请求到InfluxDB的/write端点(注意:在新版本的InfluxDB中,如InfluxDB 2.x,API和写入方式可能有所不同,但这里以InfluxDB 1.x为例)。请求体中包含了你要写入的数据,这些数据按照特定的格式组织,包括Measurement、Tags和Fields。

示例

假设我们有一个名为weather的Measurement,我们想要记录某个城市(如location=us-midwest)的温度(temperature)和湿度(humidity)。

curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'weather,location=us-midwest temperature=82.3,humidity=54.1'

在这个例子中:

  • curl是发送HTTP请求的工具。
  • -i选项表示包含HTTP响应头。
  • -XPOST指定了请求类型为POST。
  • 'http://localhost:8086/write?db=mydb'是InfluxDB的写入URL,其中db=mydb参数指定了数据将被写入哪个数据库(在这个例子中是mydb)。
  • --data-binary后面的字符串是你要写入的数据,它遵循Measurement,TagSet FieldSet的格式。在这个例子中,weather是Measurement,location=us-midwest是TagSet(只有一个Tag),而temperature=82.3,humidity=54.1是FieldSet(包含两个Field)。
3.2.2. 通过InfluxDB CLI写入数据

使用InfluxDB的命令行界面(CLI)写入数据也很直接。首先,你需要登录到CLI,然后使用INSERT语句(注意:在InfluxDB 1.x中,实际上并没有INSERT这个关键词,而是直接写数据点,但在概念上可以理解为插入操作)。

示例

# 假设你已经登录到InfluxDB CLI,并且选择了正确的数据库  
> weather,location=us-midwest temperature=78.9,humidity=67.2 1622547201000000000

在这个例子中:

  • >是CLI的提示符。
  • weather,location=us-midwest temperature=78.9,humidity=67.2部分与HTTP API示例中的类似,指定了Measurement、Tags和Fields。
  • 1622547201000000000是一个时间戳(以纳秒为单位,这是InfluxDB内部使用的时间精度),它指定了数据点的时间。如果你不提供时间戳,InfluxDB将使用服务器当前的时间。

注意:

        CLI和HTTP API在格式和细节上可能有所不同,但基本概念是相似的:我们都需要指定Measurement、Tags和Fields来写入数据。在InfluxDB 2.x中,写入数据的API和语法有所变化,但核心思想仍然相同。

3.3 数据查询
  • 基本查询:使用SELECT语句从Measurement中选择数据,可以指定Tags和Fields进行筛选。
  • 时间范围查询:通过WHERE子句中的时间条件来限制查询的时间范围。
  • 分组和聚合:使用GROUP BY子句对数据进行分组,并使用聚合函数(如COUNT()MEAN()SUM()等)计算每个分组的统计量。
  • 排序和限制:通过ORDER BY子句对查询结果进行排序,使用LIMITOFFSET子句限制返回的数据点数量或进行分页。

4. 示例查询

示例1:查询指定Measurement中的所有数据
SELECT * FROM "air_quality"
示例2:查询指定Tag的数据并计算平均温度
SELECT MEAN("temperature") AS "avg_temperature"  
FROM "air_quality"  
WHERE "location" = 'city_a' AND time > now() - 1h  
GROUP BY time(1m)

这个查询会返回air_quality Measurement中,locationcity_a且时间戳在过去一小时内的每分钟平均温度。

5. 注意事项

  • 在InfluxQL中,时间戳是默认的索引列,且会自动生成,无需用户指定。
  • InfluxDB中的Measurement、Tags和Fields不需要事先创建,可以直接写入数据。
  • InfluxDB不存储null值,如果某个数据点缺失某个字段的值,则该字段在该数据点中不会出现。

二 、聚合函数       

        InfluxQL 提供了多种聚合函数,用于对时间序列数据进行聚合计算。

        这些聚合函数允许我们根据时间间隔(如每分钟、每小时等)对数据进行分组,并计算每个时间间隔内的统计量。以下是一些常用的 InfluxQL 聚合函数及其使用示例:

1. COUNT()

计算指定时间间隔内的数据点数量。

示例:计算 air_quality measurement 中 location 为 city_a 的最近一小时内的数据点数量。

SELECT COUNT("temperature") AS "count"  
FROM "air_quality"  
WHERE "location" = 'city_a' AND time > now() - 1h  
GROUP BY time(1m)

注意:如果不需要按时间分组,可以去掉 GROUP BY time(1m)

2. MEAN()

计算指定时间间隔内数值的平均值。

示例:计算 air_quality measurement 中 location 为 city_a 的最近一小时内的平均温度。

SELECT MEAN("temperature") AS "avg_temperature"  
FROM "air_quality"  
WHERE "location" = 'city_a' AND time > now() - 1h

3. MEDIAN()

计算指定时间间隔内数值的中位数。

示例:计算 air_quality measurement 中 location 为 city_a 的最近一小时内的温度中位数。

SELECT MEDIAN("temperature") AS "median_temperature"  
FROM "air_quality"  
WHERE "location" = 'city_a' AND time > now() - 1h  
GROUP BY time(1h)  -- 按小时分组,或根据需要调整

4. MODE()

计算指定时间间隔内数值的众数(InfluxDB 1.x 版本中可能不直接支持,这里假设为一个通用的SQL聚合函数概念)。

注意:InfluxDB 的官方文档中可能不直接提供 MODE() 函数,因为时间序列数据的众数计算可能不如其他统计量常见。如果需要计算众数,可能需要通过其他方式(如应用层逻辑)来实现。

5. SUM()

计算指定时间间隔内数值的总和。

示例:计算 air_quality measurement 中 location 为 city_a 的最近一小时内的温度总和。

SELECT SUM("temperature") AS "total_temperature"  
FROM "air_quality"  
WHERE "location" = 'city_a' AND time > now() - 1h  
GROUP BY time(1h)  -- 按小时分组,或根据需要调整

6. STDDEV()

计算指定时间间隔内数值的标准差。

示例:计算 air_quality measurement 中 location 为 city_a 的最近一小时内的温度标准差。

SELECT STDDEV("temperature") AS "stddev_temperature"  
FROM "air_quality"  
WHERE "location" = 'city_a' AND time > now() - 1h  
GROUP BY time(1h)  -- 按小时分组,或根据需要调整

7. SPREAD()

计算指定时间间隔内数值的最大值和最小值之间的差值

注意:不是所有版本的InfluxDB都直接支持SPREAD(),这里作为概念说明。

示例(假设使用类似 SPREAD() 的逻辑,实际上可能需要手动计算):

SELECT MAX("temperature") - MIN("temperature") AS "spread_temperature"  
FROM "air_quality"  
WHERE "location" = 'city_a' AND time > now() - 1h  
GROUP BY time(1h)

请注意,InfluxDB 的具体功能和支持的聚合函数可能会随着版本的更新而发生变化。

因此,建议查阅我们所使用的 InfluxDB 版本的官方文档以获取最准确的信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/781738.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux muduo 网络库

主要记录示意图和知识点框架&#xff1a; 1、阻塞、非阻塞、同步、异步 在处理IO的时候&#xff0c;阻塞和非阻塞都是同步IO&#xff0c;只有使用了特殊的API才是异步IO。 2、五种IO模型&#xff1a; 阻塞、非阻塞、IO复用、信号驱动、异步IO 3、muduo网络库 muduo网络库给用…

【python】python当当数据分析可视化聚类支持向量机预测(源码+数据集+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

windows 服务器安装svn服务端、迁移svn

svn服务器版本 因为要把旧svn迁移到新的svn&#xff0c;为了保证迁移后的稳定性&#xff0c;安装包使用的旧服务器的svn服务器版本 VisualSVN-Server-3.6.1-x64.msi 安装 配置仓库路径等 其他没截图的就默认配置下一步即可。安装完成先不要启动 迁移 旧的svn服务器直接把…

Windows远程桌面实现之十五:投射浏览器摄像头到xdisp_virt以及再次模拟摄像头(一)

by fanxiushu 2024-07-01 转载或引用请注明原始作者。 本文还是围绕xdisp_virt这个软件展开&#xff0c; 再次模拟成摄像头这个比较好理解&#xff0c;早在很久前&#xff0c;其实xdisp_virt项目中就有摄像头功能&#xff0c; 只是当时是分开的&#xff0c;使用起来…

【SpringBoot】IDEA查看spring bean的依赖关系

前因&#xff1a;在研究springcloud config组件时&#xff0c;我发现config-server包下的EnvironmentController不在扫描的包路径下却可以响应客户端的请求&#xff0c;这吸引了我的注意&#xff0c;我的问题是&#xff1a;EnvironmentController是怎么被添加进bean工厂的。本章…

Golang | Leetcode Golang题解之第218题天际线问题

题目&#xff1a; 题解&#xff1a; type pair struct{ right, height int } type hp []pairfunc (h hp) Len() int { return len(h) } func (h hp) Less(i, j int) bool { return h[i].height > h[j].height } func (h hp) Swap(i, j int) { h[i], h[j]…

26_嵌入式系统网络接口

以太网接口基本原理 IEEE802标准 局域网标准协议工作在物理层和数据链路层&#xff0c;其将数据链路层又划分为两层&#xff0c;从下到上分别为介质访问控制子层(不同的MAC子层&#xff0c;与具体接入的传输介质相关),逻辑链路控制子层(统一的LLC子层&#xff0c;为上层提供统…

CosyVoice多语言、音色和情感控制模型,one-shot零样本语音克隆模型本地部署(Win/Mac),通义实验室开源

近日&#xff0c;阿里通义实验室开源了CosyVoice语音模型&#xff0c;它支持自然语音生成&#xff0c;支持多语言、音色和情感控制&#xff0c;在多语言语音生成、零样本语音生成、跨语言声音合成和指令执行能力方面表现卓越。 CosyVoice采用了总共超15万小时的数据训练&#…

GuitarPro2024音乐软件#创作神器#音乐梦想

嘿&#xff0c;亲爱的朋友们&#xff01;&#x1f44b;&#x1f44b;&#x1f44b;今天我要给你们安利一款超赞的软件——Guitar Pro。这款软件简直是吉他手的福音啊&#xff01;&#x1f389;&#x1f389;&#x1f389; Guitar Pro免费绿色永久安装包下载&#xff1a;&#…

如何快速申请免费SSL证书,实现网站HTTPS安全传输

随着互联网技术的飞速发展&#xff0c;网络安全已成为不可忽视的重要议题。HTTPS协议&#xff0c;作为HTTP协议的安全版本&#xff0c;通过SSL协议加密客户端与服务器之间的数据传输&#xff0c;从而保障信息在传输过程中的安全性。对于网站运营者而言&#xff0c;为网站部署SS…

SpringBoot测试类注入Bean失败的原因

针对SpringBoot的测试类&#xff0c;2.2版本之前和之后是不一样的。 2.2版本之后 导包pom.xml 添加test依赖 <!-- starter-test&#xff1a;junit spring-test mockito --> <dependency><groupId>org.springframework.boot</groupId><artifac…

论文解析——FTRANS: Energy-Efficient Acceleration of Transformers using FPGA

作者及发刊详情 Li B , Pandey S , Fang H ,et al.FTRANS: energy-efficient acceleration of transformers using FPGA[J].ACM, 2020.DOI:10.1145/3370748.3406567. 摘要 正文 主要工作贡献 与CPU和GPU在执行Transformer和RoBERTa相比&#xff0c;提出的FTRANS框架获得了…

ansible常见问题配置好了密码还是报错

| FAILED! > { “msg”: “Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host’s fingerprint to your known_hosts file to manage this host.” } 怎么解决&#xf…

[终端安全]-3 移动终端之硬件安全(TEE)

&#xff08;参考资料&#xff1a;TrustZone for V8-A. pdf&#xff0c;来源ARM DEVELOPER官网&#xff09; TEE&#xff08;Trusted Execution Environment&#xff0c;可信执行环境&#xff09;是用于执行敏感代码和处理敏感数据的独立安全区域&#xff1b;以ARM TrustZone为…

分布式技术栈、微服务架构 区分

1.分布式技术栈 这些技术栈都是为了更好的开发分布式架构的项目。 &#xff08;大营销平台的系统框架如下图&#xff0c;扩展的分布式技术栈&#xff09; &#xff08;1&#xff09;Dubbo——分布式技术栈 DubboNacos注册中心是应用可以分布式部署&#xff0c;并且提供RPC接…

HTML5使用<pre>标签:保留原始排版方式

在网页创作中&#xff0c;一般是通过各种标记对文字进行排版的。但是在实际应用中&#xff0c;往往需要一些特殊的排版效果&#xff0c;这样使用标记控制起来会比较麻烦。解决的方法就是保留文本格式的排版效果&#xff0c;如空格、制表符等。 如果要保留原始的文本排版效果&a…

redis并发、穿透、雪崩

Redis如何实现高并发 首先是单线程模型&#xff1a;redis采用单线程可以避免多线程下切换和竞争的开销&#xff0c;提高cpu的利用率&#xff0c;如果是多核cpu&#xff0c;可以部署多个redis实例。基于内存的数据存储&#xff1a;redis将数据存储在内存中&#xff0c;相比于硬…

回溯算法-以景点门票销售管理系统为例

1.回溯算法介绍 1.来源 回溯算法也叫试探法&#xff0c;它是一种系统地搜索问题的解的方法。 用回溯算法解决问题的一般步骤&#xff1a; 1、 针对所给问题&#xff0c;定义问题的解空间&#xff0c;它至少包含问题的一个&#xff08;最优&#xff09;解。 2 、确定易于搜…

唤醒知识循环,共筑绿色阅读梦——探索旧书回收小程序的无限可能

在这个信息爆炸的时代&#xff0c;书籍作为知识与智慧的载体&#xff0c;其重要性不言而喻。然而&#xff0c;随着电子阅读的兴起和书籍更新换代的加速&#xff0c;大量旧书被束之高阁&#xff0c;甚至面临被遗弃的命运。这不仅是对宝贵文化资源的浪费&#xff0c;也是对环境保…

12 电商高并发缓存实战

序章 项目代码缓存的数据一致性 延时双删 淘汰缓存写数据库休眠1s,再次淘汰缓存缺点:如果mysql是主从复制,去从库中拿去数据,此时同步数据还未完成,拿到的数据是旧数据。 先更新 DB,后删除缓存 采用异步延时删除策略. ①利用消息队列进行删除的补偿。②Mysql 数据库更新操…