InfluxDB 插入数据时修改了表结构
一、最开始是想往InfluxDB数据库里批量添加一些数据。
表结构为:
name
是名字,unit
是类型,value
是值。
其中name
和unit
是tag
,value
是field
。
使用代码批量添加的数据,代码如下:
我这里是读取了一个本地csv文件,文件里有20多条数据。
二、代码错误 批量插入的后果
通过代码可以看出unit字段应该是写成tag的,由于代码错误,插入数据库后,数据库内容变成了:
多出来了一列unit_1
。
查看数据库结构:
tagKey
:
fieldKey
:
悲惨的发现数据库结构发生了变化,现在查询出来的结果中unit
是field
列,unit_1
是tag
列。
在使用查询语句的时候,也会受到一些影响。有兴趣的可以试一下。
那我现在想要查询出unit_1
为搜索条件的结果时,使用的SQL语句为:
SELECT * FROM "tablename" WHERE "unit"::tag='type' and time >= '2021-09-01 00:00:00' tz('Asia/Shanghai')
在unit
后面加上::tag
。
三、后续问题
我这边试了很多方法,想要表结构恢复原状的,但是都没有成功。
有办法的小伙伴可以提供一下的话会非常感谢的。
最坏的打算是备份数据库数据,删除表,然后修改数据列的名字,最后再批量导入数据库。其中表要删干净,包括表结构也要删掉,否则还是会和之前一样,出现两列名字。https://segmentfault.com/q/1010000022621898
我这边做不了最坏的打算,数据库数据大概2800多万,实在是耗时巨大,只能修改查询语句的代码,在unit
后面加上::tag
,使用代码查询出来的结果就正确了。
例如1:
例如2:
代码里如果不这样修改,查询也不会报错,但是查询结果会为空,这个就是有兴趣的小伙伴试一试查询sql语句就清楚了。
四、需谨慎
还是多核对几遍,或者找个地方测试一下,比较好。
欢迎指正!