學習 InfluxDB 的命令行操作至關重要,它不僅是與數據庫直接交互的工具,也是理解 InfluxDB 核心概念的關鍵途徑。通過命令行,用戶可以高效地執行數據庫管理、數據查詢和插入等任務,深入掌握 InfluxQL 的語法及功能。這對于調試、快速驗證想法以及日常運維來說不可或缺。此外,熟練使用命令行有助于提升對 InfluxDB 工作原理的理解,為更復雜的應用開發和系統優化打下堅實基礎。
目錄
數據庫操作
數據庫表操作
新建表
顯示所有表
刪除表?
數據保存策略
查看保存策略
創建保存策略
修改保存策略
刪除保存策略
數據查詢操作
普通數據查詢
聚合函數查詢
分頁查詢
數據庫操作
連接InfluxDB
進入InfluxDB的命令行終端,再連接InfluxDB
# 進入InfluxDB的命令行終端
docker exec -it influxdb /bin/bash# 連接InfluxDB
influx
對于數據庫的操作:
# 顯示數據庫
show databases# 創建數據庫
create database MyBase# 刪除數據庫
drop database MyBase# 使用數據庫
use MyBase
操作效果如下:
數據庫表操作
在InfluxDB當中,并沒有表(table)這個概念,取而代之的是MEASUREMENTS,MEASUREMENTS的功能與傳統數據庫中的表一致,因此我們也可以將MEASUREMENTS稱為InfluxDB中的表。
# 顯示所有的 measurement
show measurements
新建表
InfluxDB中沒有顯式的新建表的語句,只能通過insert數據的方式來建立新表。語法如下:
insert measurement+","+tag1=value1,tag2=value2 + 空格 + field1=value1,field2=values2-- 例如:對measurement為tb_user的插入數據;有一個tag索引名為region,值為北京;有三個field分別是age,high,weight 對應的值分別為25、175、130
insert tb_user,region=北京 name="蕭炎",age=25,high=175,weight=130
注意:
measurement與 tag 之間使用逗號分隔
如果有多個tag,那么tag之間使用逗號分隔
tag 與 field 之間使用空格分隔
tag的值都是string類型,value不需要引號包裹
field如果是string類型的值,需要使用引號包裹
顯示所有表
# 顯示所有的 measurement
show measurements
刪除表?
-- 刪除語法
drop measurement 表名-- 例如:刪除名為 tb_user 的measurement
drop measurement tb_user
數據庫表操作效果如下:
數據保存策略
InfluxDB是一般不建議直接刪除數據記錄的;其提供數據保存策略,主要用于指定數據保留時間,超過指定時間,就刪除這部分數據。
查看保存策略
show retention policies on 數據庫名稱-- 例如:查看 MyBase 數據庫的保存策略
show retention policies on MyBase
-
name:這是保留策略的名稱。每個數據庫可以有多個保留策略,
autogen
是默認的保留策略名稱,如果你沒有為特定的數據點指定保留策略,它將自動使用autogen
。用戶也可以自定義其他名稱的保留策略。 -
duration:表示數據保留的時間長度。這個值決定了數據在數據庫中最多能保存多久。時間單位通常是小時(h)、分鐘(m)、秒(s),如
72h
表示數據將被保留72小時。如果設置為0s
,則表示數據保留期無限制。 -
shardGroupDuration:分片組的持續時間。InfluxDB使用分片組來組織和存儲數據,每個分片組覆蓋一個特定的時間范圍,這個值定義了每個分片組的時間跨度。查詢效率和資源管理在很大程度上取決于這個參數的設定,因為它影響著數據如何被索引和分布(不影響數據的刪除與否)。時間單位同樣使用小時、分鐘、秒。168h 表示 168小時也就是一周
-
replicaN:副本數量。這表示數據在集群中的復制份數。例如,如果設置為
1
,則每份數據只有一份副本(數據只存在一份,沒有其它);如果是2
,則每份數據會有兩個副本,以此類推。增加副本數量可以提高數據的持久性和可用性,但也會增加存儲需求。 -
default:標記此保留策略是否為數據庫的默認策略。如果此列為
true
,則表示當寫入數據時未明確指定保留策略,則會使用這個作為默認策略。如果為false
,則表明這是一個非默認策略,需要在寫入數據時顯式指定才會應用。
???????創建保存策略
-- 語法
create retention policy 策略名 on 數據庫名 duration 保留時長 replication 副本個數 [default]-- 示例:創建MyBase數據庫的默認保存策略名字為 my_retention ,保留時長為24小時,副本數1個
create retention policy my_retention on MyBase duration 24h replication 1 default-- 示例:同樣的,但是保存時長設置為3天,但是不設置為默認的保存策略的話就不加default
create retention policy my_retention2 on MyBase duration 3d replication 1
修改保存策略
-- 語法
alter retention policy 策略名 on 數據庫名 duration 時長 default(可選)-- 例如:修改MyBase數據庫中的my_retention策略,保留時長為2天,并設置為默認
alter retention policy my_retention on MyBase duration 2d default
刪除保存策略
drop retention policy 策略名 on 數據庫名-- 例如:刪除MyBase數據庫中策略名為 my_retention 的策略
drop retention policy my_retention on MyBase--- 刪除保存策略如果是默認的;則不會自動的指定一個策略為默認;不過可以修改
alter retention policy autogen on MyBase default
數據查詢操作
普通數據查詢
InfluxDB基本查詢操作和MySQL的基本查詢是類似,綜合使用如下所示:
#----綜合使用
書寫順序
select distinct * from '表名' where '限制條件' group by '分組依據' having '過濾條件' order by limit '展示條數'
執行順序
from -- 查詢(來源)
where -- 限制條件 使用單引號,否則無數據返回或報錯
group by -- 分組 只能對tags和time進行分組
having -- 過濾條件--》對分組內的數據
select -- 查詢的結果
distinct -- 去重
order by -- 排序 只能對time進行排序
limit -- 展示條數
數據查詢演示效果如下:
聚合函數查詢
其實和MYSQL差不多,使用一些函數進行查詢,修改查詢范圍與結果。
count()函數:返回一個(field)字段中的非空值的數量。
mean() 函數:返回一個字段(field)中的值的算術平均值(平均值)。字段類型必須是長整型或float64。
median()函數:從單個字段(field)中的排序值返回中間值(中位數)。用于計算一組數值的中位數。中位數是將一組數值按大小順序排列后處于中間位置的數。如果數值集合中有奇數個數,中位數就是正中間的那個數;如果有偶數個數,則中位數是中間兩個數的平均值。
spread()函數:返回字段的最小值和最大值之間的差值。數據的類型必須是長整型或float64。
sum()函數:返回一個字段中的所有值的和。字段的類型必須是長整型或float64。
分頁查詢
在InfluxDB中,要實現分頁效果,通常你會使用 LIMIT
和 OFFSET
這兩個關鍵字結合使用。LIMIT
用于限制返回的結果數量,而 OFFSET
用于指定從結果集中的哪一個位置開始返回結果。這種方式類似于在其他數據庫系統中使用 LIMIT m, n
來實現分頁,其中 m
是偏移量,n
是每頁的數量。
-- 語法
SELECT * FROM measurement_name WHERE condition GROUP BY ... LIMIT n OFFSET m
measurement_name
:你想要查詢的measurement名稱。
condition
(可選):用于過濾數據的條件表達式。
GROUP BY ...
(可選):根據需要對結果進行分組。
LIMIT n
:每頁顯示的記錄數。
OFFSET m
:從結果集中的第m
條記錄開始返回,用于實現分頁。