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

news2024/10/6 6:58:35

        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.coloradmin.cn/o/1905150.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux下fcitx框架输入法输入中文标点时为半角(英文)标点符号的解决

目录 引入解决1.打开fcitx设置2.打开全局配置3. 随便找个可以输入地方敲下快捷键 总结 本文由Jzwalliser原创&#xff0c;发布在CSDN平台上&#xff0c;遵循CC 4.0 BY-SA协议。 因此&#xff0c;若需转载/引用本文&#xff0c;请注明作者并附原文链接&#xff0c;且禁止删除/修…

RNN 交叉熵

RNN善于处理时序 序列数据 简单RNN 展开就是 LSTM 遗忘门f_t决定上期记忆保留多少 隐藏层 在神经网络中&#xff0c;隐藏层指的是除了输入层和输出层之外的层&#xff0c;它们的输出不会直接用于网络的最终输出&#xff0c;而是作为中间步骤用于提取和转换数据。因此&#x…

构件软件开发-系统架构师(二十五)

1、一路和二路公交车都将在10分钟随机到达同一车站&#xff0c;他们相隔四分钟的概率是&#xff08;&#xff09;。 A0.36 B0.48 C0.64 D0.76 解析&#xff1a; 如果把x为1路&#xff0c;y为2路&#xff0c;则x-y4&#xff0c;y-x4 所以可以得到坐标 (4,0)(10,6)(0,4)(6,1…

(ECCV,2022)Mask-CLIP:从CLIP中提取自由密集标签

文章目录 Extract Free Dense Labels from CLIP相关资料摘要引言方法Mask-CLIPMask-CLIP 实验 Extract Free Dense Labels from CLIP 相关资料 代码&#xff1a;https://github.com/chongzhou96/MaskCLIP 论文&#xff1a;https://arxiv.org/abs/2112.01071 摘要 对比语言-…

PyVideoTrans:一款功能全面的视频翻译配音工具!【送源码】

PyVideoTrans是一款功能全面的视频翻译配音工具&#xff0c;专为视频内容创作者设计。它能够将视频中的语言翻译成另一种语言&#xff0c;并自动生成与之匹配的字幕和配音。支持多种语言&#xff0c;包括但不限于中文&#xff08;简繁体&#xff09;、英语、韩语、日语、俄语、…

算法010:无重复字符的最长子串

无重复字符的最长子串. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/longest-substring-without-repeating-characters/ 使用的算法&#xff1a;滑动窗口 在这个…

apk反编译修改教程系列-----修改apk 解除软件限制功能 实例操作步骤解析_3【二十二】

在前面的几期博文中有过解析去除apk中功能权限的反编译步骤。另外在以往博文中也列举了修改apk中选项功能权限的操作方法。今天以另外一款apk作为演示修改反编译去除软件功能限制的步骤。兴趣的友友可以参考其中的修改过程。 课程的目的是了解apk中各个文件的具体作用以及简单…

C-11 三角剖分的调研

C-11 三角剖分算法 三角剖分就是将输入的多边形&#xff0c;分割成一系列互不重叠的三角形&#xff0c;其重要性就在这不多赘述。这个是一个别人总结的链接&#xff1a;http://vterrain.org/Implementation/Libs/triangulate.html 图片链接&#xff1a;http://www-cgrl.cs.m…

STM32点灯闪烁

stm32c8t6引脚图 开发板引脚图 GPIO端口的每个位可以由软件分别配置成 多种模式。 ─ 输入浮空 ─ 输入上拉 ─ 输入下拉 ─ 模拟输入 ─ 开漏输出 ─ 推挽式输出 ─ 推挽式复用功能 ─ 开漏复用功能 配置GPIO端口步骤&#xff1a;开启时钟->使用结构体设置输出模式…

Android项目中,查看项目依赖树的多种方式

1.使用预设的Task来进行查看 1.1 命令行 查看某个模块的所有依赖树&#xff1a; gradlew [模块名称]:dependencies 例如&#xff1a;gradlew app:dependencies查看某个模块的某功能的依赖树&#xff1a; gradlew [模块名称]:dependencies --configuration [功能名称] 例如&…

国内采用docker部署open-metadata

背景 最近看看开源的元数据管理项目&#xff0c;比较出名点的有open-metadata、datahub、OpenLineage、atlas。 open-metadata有1千多的贡献者&#xff0c;4.8K的stars&#xff0c;社区现在也比较活跃&#xff0c;支持的数据库类型还蛮多&#xff0c;基本市面上常见的都有支持…

C++ 函数高级——函数的占位参数

C中函数的形参列表里可以有占位参数&#xff0c;用来做占位&#xff0c;调用函数时必须填补改位置 语法&#xff1a; 返回值类型 函数名&#xff08;数据类型&#xff09;{ } 在现阶段函数的占位参数存在意义不大&#xff0c;但是后面的课程中会用到该技术 示例&#xff1a;…

离线开发(VSCode、Chrome、Element)

一、VSCode 扩展 使用能联网的电脑 A&#xff0c;在VSCode官网下载安装包 使用能联网的电脑 A&#xff0c;从扩展下载vsix扩展文件 将VSCode安装包和vsix扩展文件通过手段&#xff08;u盘&#xff0c;刻盘 等&#xff09;导入到不能联网的离线电脑 B 中 在离线电脑 B 中安装…

Gitlab Fork Workflow(协作工作流)

Gitlab Fork WorkFlow&#xff08;协作工作流&#xff09; Fork WorkFlow用于团队间的协作开发。在开发过程中&#xff0c;我们都需要将最新修改的代码合并到代码库上&#xff0c;在代码合并之前&#xff0c;为了保证代码符合上传要求&#xff08;符合需求、代码规范等&#xf…

PageHelper分页查询遇到的小问题

如果我们是这样子直接查询 pagehelper会拼接导我们的sql语句之后 这样子我们搜索出来的list&#xff0c;就是里面参杂了PageHelper的东西 所以我们可以直接转成我们的Page类型 但是如果我们搜索出来的是List<Blog>&#xff0c;我有些信息不想返回给前端&#xff0c;所以…

运维系列.Nginx中使用HTTP压缩功能

运维专题 Nginx中使用HTTP压缩功能 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550…

系统级别的原生弹窗窗口

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>原生的弹出窗口dialog</title><style>…

【密码学】信息安全五大属性

信息安全的五大属性&#xff0c;通常被称为CIA三元组加上两个额外的属性&#xff0c;他们是确保信息在存储、处理和传输过程中保持安全、完整和可用的关键要素。这些属性共同构成了信息安全的基础框架。 一、信息安全五大属性 我先给出一个直观的列表&#xff0c;方面大家后续…

C++面向对象的常见面试题目(一)

1. 面向对象的三大特征 &#xff08;1&#xff09;封装&#xff1a;隐藏对象的内部状态&#xff0c;只暴露必要的接口。 #include <iostream> #include <string>// 定义一个简单的类 Person class Person { private: // 私有成员&#xff0c;外部不可直接访问std…

【LeetCode】十三、分治法:多数元素 + 最大子序列和

文章目录 1、分治法2、leetcode169&#xff1a;多数元素3、leetcode53&#xff1a;最大子序和 1、分治法 分治一般都搭配递归使用&#xff1a; 用分治法的一个应用——归并排序&#xff1a;将一组数不停的一分为二&#xff0c;直到分到每组只有一个数的时候 分到每组只有一个数…