influxdb它优先考虑的是增加和读取数据而不是更新和删除数据的性能,而且它阻止了某些更新和删除行为使得创建和读取数据更加高效。
语句不需要结束符号;也可以运行。
1:查看数据库             
  show databases
2:创建数据库             
  create database analysedata
创建用户和设置密码     
  CREATE USER testuser WITH PASSWORD 'testpwd' ## 创建用户和设置密码
授权数据库给指定用户   
 GRANT ALL PRIVILEGES ON  analysedata TO testuser   ## 授权数据库给指定用户
3:使用数据库            
   use analysedata
4:查看数据库下所有表 
 show measurements 
5:插入一条数据        
 insert 20210322092260,equmvent=NO01001 Iu=1,Iv=2,Iw=3

其中,20210322092260是表名,equmvent是tag key,后面的Iu,Iv这些都是field key,如果要插入具体时间, 可以在后面添加,1616376284277008000
此处时间为linux时间,C#时间转换公式为:(datetime.ToUniversalTime().Ticks - 621355968000000000)*100

6:查看表                   
  select * from "20210322092260"      
  select * from workday where time >='2021-08-23T23:48:00Z'

7:查看该表的tag keys  
 show tag keys from "20210322092260"
 
在查看部分列不查看所有列的数据时,必须附带tag keys 
 如:SELECT select_name,tag_keys_name FROM data
 
8:查看该表的field keys  
 show field keys from "20210322092260"
 
7:查看数据保留策略       
 show retention policies on "db_name" 
 influxDB是没有提供直接删除数据记录的方法,但是提供数据保存策略,主要用于指定数据保留时间,超过指定时间,就删除这部分数据。

8:创建新的数据保留策略  
create retention policy "rp_name" on "db_name" duration 3w replication 1 default

11:series是共享同一个retention policy,measurement以及tag set的数据集合。注意是 tag set

12:select mean(age) from testtable group by time(1s)  limit 5 Slimit 1   
GROUP BY time  表示仅每1S钟1组,limit表示显示的条数,Slimit表示限制返回的Series为1个。mean函数为求平均值的函数

13: select integral(age) from testtable
计算数值字段值覆盖的曲面的面积值并得到面积之和
使用INTERGRAL计算面积。注意,这个面积就是这些点连接起来后与时间围成的不规则图形的面积,注意unit默认是以1秒计算,所以下面语句计算结果为3732.66=2.028*1800+分割出来的梯形和三角形面积。如果unit改为1分,则结果为3732.66/60 = 62.211。unit为2分,则结果为3732.66/120 = 31.1055。

14:select spread(age) from testtable
计算数值字段的最大值和最小值的差值。

15:select stddev(age) from testtable
计算字段的标准差。先求出平均值mean=(v1+v2+...+vn)/n;   计算标准差 stddev = math.sqrt(((v1-mean)2 + (v2-mean)2 + ...+(vn-mean)2)/(n-1));

16:select PERCENTILE(age,20) from testtable
选取某个字段中大于N%的这个字段值。如果一共有4条记录,N为10,则10%*4=0.4,四舍五入为0,则查询结果为空。N为20,则 20% * 4 = 0.8,四舍五入为1,选取的是4个数中最小的数。如果N为40,40% * 4 = 1.6,四舍五入为2,则选取的是4个数中第二小的数。  

17:select sample(age,2) from testtable
随机返回field key的N个值

18:select cumulative_sum(age) from testtable
计算字段值的递增和

19:select derivative(age) from testtable
计算字段值的变化比 。unit默认为1s,即计算的是1秒内的变化比。

————————————————————————————
连续查询
————————————————————————————

1:查看连续查询             show continuous queries
当数据超过保存策略里指定的时间之后就会被删除,但是这时候可能并不想数据被完全删掉,怎么办?
influxdb提供了联系查询,可以做数据统计采样。

2:创建新的连续查询     
语法
CREATE CONTINUOUS QUERY <cq_name> ON <database_name>
BEGIN
  <cq_query>
END

cq_query格式:
SELECT <function[s]> INTO <destination_measurement> FROM <measurement> [WHERE <stuff>] GROUP BY time(<interval>)[,<tag_key[s]>]

示例:
CREATE CONTINUOUS QUERY "cq_basic" ON "transportation"
BEGIN
  SELECT mean("passengers") INTO "average_passengers" FROM "bus_data" GROUP BY time(1h)
END


> SELECT * FROM "average_passengers"
name: average_passengers
------------------------
time                   mean
2016-08-28T07:00:00Z   7
2016-08-28T08:00:00Z   13.75

//数据查询并保存到新的保留策略中
REATE CONTINUOUS QUERY "cq_basic_rp" ON "transportation"
BEGIN
  SELECT mean("passengers") INTO "transportation"."three_weeks"."average_passengers" FROM "bus_data" GROUP BY time(1h)
END
three_weeks(创建保留策略语法 CREATE RETENTION POLICY "three_weeks" ON "transportation" DURATION 3w REPLICATION 1

GROUP BY time(1h, 15m)指定了一个时间偏移,也就是说 cq_basic_offset执行的时间不再是整点,而是往后偏移15分钟。


CREATE CONTINUOUS QUERY "cq_basic_offset" ON "transportation"
BEGIN
  SELECT mean("passengers") INTO "average_passengers" FROM "bus_data" GROUP BY time(1h,15m)
END

高级语法

1:设置自动查询时间间隔
语法:
CREATE CONTINUOUS QUERY <cq_name> ON <database_name>
RESAMPLE EVERY <interval> FOR <interval>
BEGIN
  <cq_query>
END

①只配置执行时间间隔
CREATE CONTINUOUS QUERY "cq_advanced_every" ON "transportation"
RESAMPLE EVERY 30m
BEGIN
  SELECT mean("passengers") INTO "average_passengers" FROM "bus_data" GROUP BY time(1h)
END
这里每30分钟执行一次。
8点时,查询7点到8点。
8点半时,查询8点到9点。
9点时,查询8点到9点数据。并且覆盖8点半的数据。

②只配置查询时间范围
CREATE CONTINUOUS QUERY "cq_advanced_for" ON "transportation"
RESAMPLE FOR 1h
BEGIN
  SELECT mean("passengers") INTO "average_passengers" FROM "bus_data" GROUP BY time(30m)
END
执行的时间间隔与GROUP BY time(30m)一样为30分钟,而查询的时间范围为1小时。由于是按30分钟分组,所以每次会写入两条记录。
8点时,查询7点到8点的数据。7点到7点30一条数据,7点30到8点一条数据。
8点30时,查询7点30到8点30的数据。7点30到8点一条数据,8点到8点30一条数据。
9点时,查询8点到九点的数据。8点到8点30一条数据,8点30到9点一条数据。
每次写入了两条记录,重复的记录会被覆盖。

③同时配置执行时间间隔和查询时间范围
CREATE CONTINUOUS QUERY "cq_advanced_every_for" ON "transportation"
RESAMPLE EVERY 1h FOR 90m
BEGIN
  SELECT mean("passengers") INTO "average_passengers" FROM "bus_data" GROUP BY time(30m)
END
执行间隔为1小时,而查询范围90分钟,最后分组是30分钟,每次插入了三条记录

④配置查询时间范围和FILL填充
CREATE CONTINUOUS QUERY "cq_advanced_for_fill" ON "transportation"
RESAMPLE FOR 2h
BEGIN
  SELECT mean("passengers") INTO "average_passengers" FROM "bus_data" GROUP BY time(1h) fill(1000)
END
示例:
At 6:00, cq_advanced_for_fill 查询时间范围:time >= '4:00' AND time < '6:00',没有数据,不填充。

At 7:00, cq_advanced_for_fill 查询时间范围:time >= '5:00' AND time < '7:00'. 写入两条记录,没有数据的时间点填充1000。
------------------------
time                   mean
2016-08-28T05:00:00Z   1000          <------ fill(1000)
2016-08-28T06:00:00Z   3             <------ average of 2 and 4

[…] At 11:00, cq_advanced_for_fill 查询时间范围:time >= '9:00' AND time < '11:00'.写入两条记录,没有数据的点填充1000。
name: average_passengers
------------------------
2016-08-28T09:00:00Z   20            <------ average of 20
2016-08-28T10:00:00Z   1000          <------ fill(1000)     

At 12:00, cq_advanced_for_fill 查询时间范围:time >= '10:00' AND time < '12:00'。没有数据,不填充。