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.mzph.cn/diannao/42733.shtml

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

相关文章

Docker Dockerfile:构建与优化

Docker Dockerfile&#xff1a;构建与优化 简介 Docker 是一种广泛使用的容器化技术&#xff0c;它允许开发人员将应用程序及其依赖环境打包到一个可移植的容器中。Dockerfile 是 Docker 中用于自动化容器镜像构建的脚本文件。本文将详细介绍 Dockerfile 的基本结构、指令使用…

【Python】已解决:(MongoDB安装报错)‘mongo’ 不是内部或外部命令,也不是可运行的程序

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例及解决方案五、注意事项 已解决&#xff1a;&#xff08;MongoDB安装报错&#xff09;‘mongo’ 不是内部或外部命令,也不是可运行的程序 一、分析问题背景 在安装和配置MongoDB时&#xff0c;有…

怎样在 PostgreSQL 中优化对 UUID 数据类型的索引和查询?

文章目录 一、UUID 数据类型概述二、UUID 索引和查询的性能问题三、优化方案&#xff08;一&#xff09;选择合适的索引类型&#xff08;二&#xff09;压缩 UUID&#xff08;三&#xff09;拆分 UUID&#xff08;四&#xff09;使用覆盖索引&#xff08;五&#xff09;优化查询…

一二三应用开发平台应用开发示例(6)——代码生成、权限配置、运行效果查看

生成代码 完成配置工作&#xff0c;接下来就是见证奇迹的时刻~ 返回到实体列表&#xff0c;选中“文件夹”记录&#xff0c;点击“生成代码”按钮&#xff0c;提示成功后&#xff0c;在项目的output目录下输出了平台基于配置模板产生的各层代码&#xff0c;在原有后端的基础上…

Pyserial设置缓冲区大小失败

文章目录 问题描述原因分析解决方案 问题描述 使用set_buffer_size()设置缓冲区大小后&#xff0c;buffer size仍为默认的4096 import time import serial ser serial.Serial(baudrate9600, timeout0.5) ser.port COM1 ser.set_buffer_size(rx_size8192) ser.open() while …

windows上部署python3.11

hello&#xff0c;大家好&#xff0c;我是一名测试开发工程师&#xff0c;至今已在自动化测试领域深耕9个年头&#xff0c;现已将本人实战多年的多终端自动化测试框架【wyTest】开源啦&#xff0c;在接下来的一个月里&#xff0c;我将免费指导大家使用wyTest&#xff0c;请大家…

欧拉函数.

性质1&#xff1a;质数n的欧拉函数为n-1. 性质2&#xff1a;如果p&#xff0c;q都是质数&#xff0c;那么ϕ ( p ∗ q ) ϕ ( p ) ∗ ϕ ( q ) ( p − 1 ) ∗ ( q − 1 ) 证明&#xff1a;p&#xff0c;2p....q*p都不与q*p互质&#xff0c;q同理&#xff0c;所以总的不互质个…

JavaEE初阶-网络编程

文章目录 前言一、UDP与TCP1.1 有连接与无连接1.2 全双工1.3 可靠传输与不可靠传输1.4 面向子节流与面向数据报 二、UDP回显服务器及客户端编写三、UDP字典服务器四、TCP回显服务器及客户端编写五、数据序列化的方式5.1 基于行文本的方式传输5.2 基于XML的格式5.3 基于json5.4 …

STM32芯片系列与产品后缀解读

一. 产品系列 STM32单片机是一系列基于ARM Cortex-M内核的32位微控制器&#xff0c;广泛应用于嵌入式系统中。 STM32系列由STMicroelectronics&#xff08;意法半导体&#xff09;开发和生产&#xff0c;并凭借其灵活的设计、丰富的外设和强大的生态系统&#xff0c;成为嵌入式…

咬文嚼字:词元是当今生成式人工智能失败的一个重要原因

生成式人工智能模型处理文本的方式与人类不同。了解它们基于"标记"的内部环境可能有助于解释它们的一些奇怪行为和顽固的局限性。从 Gemma 这样的小型设备上模型到 OpenAI 业界领先的 GPT-4o 模型&#xff0c;大多数模型都建立在一种称为转换器的架构上。由于转换器在…

Ubuntu24.04清理常见跟踪软件tracker

尽量一天一更&#xff0c;不刷视频&#xff0c;好好生活 打开系统监视器&#xff0c;发现开机有个tracker-miner-fs-fs3的跟踪程序&#xff0c;而且上传了10kb的数据。 搜索知&#xff0c;该程序会搜集应用和文件的信息。 删除tracker 显示带tracker的apt程序 sudo apt lis…

ThreadLocal的内存泄漏

什么是内存泄漏 程序在申请内存后&#xff0c;无法释放已申请的内存空间在定义变量时&#xff0c;需要一段内存空间来存储数据信息&#xff0c;而这段内存如果一直不被释放&#xff0c;那么就会导致内存被占用光&#xff0c;而被占用的这个对象&#xff0c;一直不能被回收掉&am…

书生·浦语2.5开源,推理能力再创新标杆

导读 2024 年 7 月 3 日&#xff0c;上海人工智能实验室与商汤科技联合香港中文大学和复旦大学正式发布新一代大语言模型书⽣浦语2.5&#xff08;InternLM2.5&#xff09;。相比上一代模型&#xff0c;InternLM2.5 有三项突出亮点&#xff1a; 推理能力大幅提升&#xff0c;在…

VUE与React的生命周期对比

前言 在前端开发中&#xff0c;Vue和React是两个非常流行的JavaScript框架&#xff0c;它们各自有着独特的生命周期机制。了解并熟练掌握这些生命周期&#xff0c;对于开发高效、可维护的前端应用至关重要。本文将详细对比Vue和React的生命周期&#xff0c;帮助开发者更好地理…

Python | Leetcode Python题解之第222题完全二叉树的节点个数

题目&#xff1a; 题解&#xff1a; # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def countNodes(self,…

好玩的珠玑妙算-加作弊带概率空间+日志存储240705mindMaster

Python代码 import random import time import datetimeNUM_DIGITS 10 #NUM_NON_ZERO_DIGITS 9failFlag 0class Mastermind:def __init__(self, code_length, max_attempts, secret01code, game_id): # def __init__(self, code_length, max_attempts):self.code_length…

【Elasticsearch】Elasticsearch倒排索引详解

文章目录 &#x1f4d1;引言一、倒排索引简介二、倒排索引的基本结构三、Elasticsearch中的倒排索引3.1 索引和文档3.2 创建倒排索引3.3 倒排索引的存储结构3.4 词典和倒排列表的优化 四、倒排索引的查询过程4.1 过程4.2 示例 五、倒排索引的优缺点5.1 优点5.2 缺点 六、倒排索…

【Excel】求和带文字的数据

目录标题 1. 给出样例2. CtrlE3. CtrlH → A替换为 → 全部替换 1. 给出样例 2. CtrlE 3. CtrlH → A替换为 → 全部替换

算法期末函数题

R6-1 可重复选择的组合数问题 【考核知识点】可重复选择的组合计数 【问题描述】 有n个不同元素&#xff08;1<n<20&#xff09;&#xff0c;每个元素可以选多次&#xff0c;一共需要选出k个元素出来&#xff08;1<k<20&#xff09;&#xff0c;问有多少种选取的…

监控易V7.6.6.15升级详解2:设备管理功能

随着企业IT架构的日益复杂&#xff0c;对设备管理的需求也在不断提升。为了满足广大用户对于设备管理的高效、精准需求&#xff0c;我们荣幸地宣布监控易系统已完成了一次重要的版本升级。本次升级不仅优化了原有功能&#xff0c;还新增了一系列实用特性&#xff0c;旨在为用户…