相关文章推荐
温暖的桔子  ·  PyQGIS开发 -- ...·  1 年前    · 

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语句就清楚了。

四、需谨慎
还是多核对几遍,或者找个地方测试一下,比较好。

欢迎指正!

首先我们向一个表中插入数据,具体格式如下, insert <measurement>[,<tag-key>=<tag-value>...] <field-key>=<field-value>[,<field2-key>=<field2-value>...] [unix-nano-timestamp] 顺序... InfluxDB基本概念 1、数据格式 在 InfluxDB 中,我们可以粗略的将要存入的一条数据看作一个虚拟的 key 和其对应的 value(field value)。格式如下: cpu_usage,host=server01,region=us-west value=0.64 1434055562000000000 虚拟的 key 包括以下几个部分: database, retentio...    ~~~   在上一章节influxDB概念详解1,解释了influxDB的一些基本概念,主要是tag,measurement,series等一些基本的概念。有些概念和我们常用的DBMS有点像。上一节介绍的概念大多数都是时序领域一些常用的概念,或者说大家公认的。在influxDB里面,还有很多自己特有的概念,大多数都是和influxDB存储和查询模型相关的。这一节主要是介绍这些概念。 InfluxDB相关概念 在influxDB中,有很多概念,例如DataBase,Measurement,point,Field等等。这些概念都是什么含义,本篇文章将会对常用的基本概念和操作做一个总结。 Database和Measurement DataBase和Measurement都是对数据的一个归类,只不过粒度不同。这个举个例子就明白了,文件和文件夹的概念,DataBase是一个文件夹,里面存放放了很多文件,每个文件就可以理解为一个Measuremen。关于这个概念,如果了解其他关系型数据库例如MyS influx查询包含了水平拆分、垂直拆分. 查询结果的每一条记录record,只对应一个field 写入一个point时包含多个field, 查询时如何将这几个field一起查出来呢? point := influxdb2.NewPoint("history", map[string]string{ "Version": DedefaultVersion, "Name": sh.Name, "Active": fmt.Sprin 网上关于influxdb数据库tagfield迁移的文章比较少,虽然有,但是大部分都是有问题的,比如下面两种方式 1、select tag1,tag2,field1,field2,field3 into target from origin 2、select * into target from origin 这两种sql并没有将tagfield 区分开,而是将tag作为filed导入进target表(measurement)中。 根据官方文档显示: Relocate data 一、时序数据库介绍:时序数据 时序数据与关系型数据差异二、安装influxdb以及基本操作、命令 三、influxdb studio可视化界面 四、influxdb常见问题 五、InfluxDb中的数学运算 数学运算符 InfluxDb中的函数 六、influxdb中的crud 七 springboot连接influxdb