在influxdb中,字段必须存在。因为字段是没有索引的。
如果使用字段作为查询条件,会扫描符合查询条件的所有字段值,性能不及tag。类比一下,fields相当于SQL的没有索引的列。
tags是可选的,但是强烈建议你用上它,因为tag是有索引的,tags相当于SQL中的有索引的列。
tag value只能是string类型。
2.启动influx
C:\Users\techsun>d:
D:>cd D:\software\influxdb-1.7.4_windows_amd64\influxdb-1.7.4-1
D:\software\influxdb-1.7.4_windows_amd64\influxdb-1.7.4-1>influx.exe
启动influxd.exe
C:\Users\techsun>d:
D:>cd D:\software\influxdb-1.7.4_windows_amd64\influxdb-1.7.4-1
D:\software\influxdb-1.7.4_windows_amd64\influxdb-1.7.4-1>influxd.exe -config influxdb.conf
也可以写成bat文件
或者注册表中添加,设为启动项。
-- 查看所有的数据库
show databases;
-- 使用特定的数据库
use database_name;
-- 查看所有的measurement
show measurements;
-- 查询10条数据
select * from measurement_name limit 10;
-- 数据中的时间字段默认显示的是一个纳秒时间戳,改成可读格式
precision rfc3339; -- 之后再查询,时间就是rfc3339标准格式
-- 或可以在连接数据库的时候,直接带该参数
influx -precision rfc3339
-- 查看一个measurement中所有的tag key
show tag keys
-- 查看一个measurement中所有的field key
show field keys
-- 查看一个measurement中所有的保存策略(可以有多个,一个标识为default)
show retention policies;
b.新增用户
--普通用户
create user "user" with password 'user'
--管理员用户
create user "admin" with password 'admin' with all privileges
monitor 控制InfluxDB自有的监控系统。 默认情况下,InfluxDB把这些数据写入_internal 数据库,如果这个库不存在则自动创建。 _internal 库默认的retention策略是7天,如果你想使用一个自己的retention策略,需要自己创建。
设置保留策略为30天
create retention policy “test_retention” on “test” duration 30d replication 1 default
保留策略设置
设置保留策略语法参考
4.参考资料
influxQL语法文档
用c#写入数据到influxDB中
influxDB-c#开发包
实际测试中,一次传入17634个点到写入方法例如:influxDb.Client.WriteAsync(dataLst, dbName);
在本机运行时,只成功写入5717条。
查看influxdb 官方文档:
说明:如果你的数据文件的数据点大于5000时,你必须把他们拆分到多个文件再写入InfluxDB。
因为默认的HTTP的timeout的值为5秒,虽然5秒之后,InfluxDB仍然会试图把这批数据写进去,但是会有数据丢失的风险。
写入数据到influxDB时间戳只能使用Utc格式
DateTime转Utc格式:
DateTimeFormatInfo dtFormat = new DateTimeFormatInfo();
dtFormat.ShortDatePattern = "yyyy/MM/dd HH:mm:ss.fff";//
DateTime date = Convert.ToDateTime(SubmitTime, dtFormat);
return TimeZoneInfo.ConvertTimeToUtc(date, TimeZoneInfo.Local);
注意:InfluxDB在执行连续查询语句时,会根据time(interval) 的值自动生成查询时间范围。
因此,用户在创建连续查询语句时,不需要在WHERE子句的查询条件中指定时间范围,
且在WHERE条件中指定的时间范围都会被忽略掉
删除cq_query
SHOW CONTINUOUS QUERIES---查看cq_query
DROP CONTINUOUS QUERY <cq_name> ON <database_name>--删除cq_query
> SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica'
AND time >= '2015-08-18T00:00:00.000000000Z' AND time <= '2015-08-18T00:12:00Z'
name: h2o_feet
time water_level
---- -----------
2015-08-18T00:00:00Z 2.064
2015-08-18T00:06:00Z 2.116
2015-08-18T00:12:00Z 2.028
或者如下
> SELECT "water_level" FROM "h2o_feet" WHERE "location" = 'santa_monica'
AND time >= '2015-08-18' AND time <= '2015-08-18 00:12:00'
name: h2o_feet
time water_level
---- -----------
2015-08-18T00:00:00Z 2.064
2015-08-18T00:06:00Z 2.116
2015-08-18T00:12:00Z 2.028
注意: 使用‘+’ 运算时间,‘+’ 与6m 中的空格不能省略
> SELECT "water_level" FROM "h2o_feet" WHERE time > '2015-09-18T21:24:00Z' + 6m
name: h2o_feet
time water_level
---- -----------
2015-09-18T21:36:00Z 5.066
2015-09-18T21:42:00Z 4.938
> select count(*) from Scann9 where time>'2022-09-16T10:10:00Z'+ 10m
name: Scann9
time count_Freq
---- ----------
2022-09-16T10:20:00.000000001Z 9669
相对时间设置
SELECT MEAN("water_level") FROM "h2o_feet" WHERE "location"='santa_monica'
AND time >= '2015-09-18T21:30:00Z' AND time <= now() + 180w
GROUP BY time(12m) fill(none)
name: h2o_feet
time mean
---- ----
2015-09-18T21:24:00Z 5.01
2015-09-18T21:36:00Z 5.002
2020-04-16T22:00:00Z 3.1
其他参考influxdb
INTO 子句使用方法
into 子句使用时,tags 自动转为field