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.pswp.cn/diannao/42733.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42733.shtml
英文地址,請注明出處:http://en.pswp.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;旨在為用戶…