influxdb2.0插入数据字段类型出现冲突问题解决
一、问题出现
一个学校换热站自控系统,会定时从换热站获取测点数据,并插入到influxdb数据库中。influxdb插入数据时,报错提示:
com.influxdb.exceptions.UnprocessableEntityException: failure writing points to database: partial write: field type conflict: input field "HuiYuanZhan.1500.Level_1_H" on measurement "HeatStationData" is type float, already exists as type string dropped=1
问题发生在名为 "HeatStationData" 的测量(measurement)上,其中字段 "HuiYuanZhan.1500.Level_1_H" 的数据类型存在冲突。这个字段在尝试写入时被识别为 float 类型,但它在数据库中已经存在,并且被定义为 string 类型。
InfluxDB 是一个时间序列数据库,它对每个测量中的字段类型有严格的要求。一旦一个字段被定义为某种类型(例如 string),后续写入的数据必须与该类型匹配。如果尝试将不同类型的数据写入同一个字段,InfluxDB 将拒绝写入并抛出错误。
二、查找原因
系统设计时,如果发生读取不到或者异常时,读取的空数据,也给了一个字符串的默认值"0.00",保证了哪怕时空数据也有个默认值,但是这与原来字段的数据类型float、integer、boolean等是不一致的。这个字符串的默认空值不知道为啥可以插入进去,有一段时间正好学校现场网络出现问题,导致系统无法读取到换热站的测点数据,数据库里存储了"0.00"的默认值。最近网络问题解决了,系统存取正常值时,报错无法插入了。

三、解决过程思路
1、把出现"0.00"默认值的,这一段时间的数据全部删除掉
influxdb并没有提供直接删除的flux语句,需要使用其他方法
- bucket设置数据过期时间,操作范围是整个数据库的数据

- 命令行界面CLI,使用delete命令删除(我使用的是这种方式)
通过命令操作influxdb时,先要验证权限,这里直接验证token
//权限 设置token:export INFLUX_TOKEN='iCmM46X2GKl2G3rPTtlKHFHljH8tDkWi-e1wpWh_76wlKQ2JDvAqhbhJZz5jdQN4a-iEHT08vSVL4z5S8yUPgw=='
influx delete --bucket autodata \--org auto \--start 2023-06-06T00:00:00Z \--stop 2024-03-07T15:16:01Z \--predicate '_measurement = "HeatStationData" and "tag" = "40" '
- 访问api接口删除
http://127.0.0.1:8088/api/v2/delete?org=gg&bucket=autocontroldata&precision=s
2、分析代码,找到赋值默认值的代码段,删除掉,改为读取不到数据时,不存储数据库,保证字段的数据类型一致。
问题代码:
for(int i=0;i<dataList.size();i++){Object value = dataList.get(i).getStatusCode().isBad() ? null : dataList.get(i).getValue().getValue();if(!(value instanceof Float)&&!(value instanceof Boolean)){if(value==null||value.equals(0)){value = "0.00";//System.out.println("float:" + value);}else{value = value+".00";//System.out.println("Integer-----------:" + value);}}
}
优化代码:opc读取的数据,除了常规数据类型,还有一种UShort数据类型,但在influxdb中是没有的,所以在获取到数据后,需要对这一类型先转化成integer类型。
if(dataList.size()==nodeIdList.size()){for(int i=0;i<dataList.size();i++){/* Variant v = dataList.get(i).getValue();Optional<NodeId> dataType = v.getDataType();*/Object value = dataList.get(i).getStatusCode().isBad() ? null : dataList.get(i).getValue().getValue();if(value==null) {continue;}if(!(value instanceof Float)&&!(value instanceof Boolean)){if(value instanceof UShort){//UShort 转化成Integervalue = ((UShort) value).intValue();}}resultMap.put(nodeIdList.get(i),value);//System.out.println(resultMap.get("get"+nodeIdList.get(i)));}}
因为有的时候测点的值可能是0/1/2这样的整型,也可能是1.2/2.5之类的浮点型,这可能是同一个字段的值,但是系统读取到的值会判断为整型和浮点型,这也会导致同一字段存储两种不同类型的值,所以需要再把整型先转化成浮点型,统一全部浮点型存储,避免出现类型不一致情况
//转换数据类型 数值类型都为float---避免数据出现Integer和float的变化(一个字段只能有一种数据类型)Set set = map.keySet();for (Object o : set) {if(map.get(o) instanceof Integer){map.put((String)o,(int)map.get(o)* 1.0f);}}
插入数据
try (WriteApi writeApi = influxDBClient.getWriteApi(writeOptions)) {//完整数据组装,包含数据库名称,索引,数据值集合,时间Point point = Point.measurement("HeatStationData").addTag("tag", savetag).addFields(map).time(Instant.now(), WritePrecision.S);//单条记录保存writeApi.writePoint(bucket, org,point);}catch (Exception e){e.printStackTrace();System.out.println("=============插入数据异常============="+new Date()+":"+e.getMessage());}
3、删除异常数据类型的数据后,并没有用,插入还是失败,字段的数据类型已经被更改,最后选择迁移数据库,重新穿件新数据库,重新插入数据,将原有旧数据,想办法进行重新迁移
创建新的bucket:

项目配置文件更改要访问的bucket:

最终数据可以重新插入了

from(bucket: "autocontroldata") |> range(start:2024-02-10T05:40:09.000Z, stop:2024-04-12T05:40:57.000Z) |> filter(fn: (r) => r._measurement == "HeatStationData") |> filter(fn: (r) => r["tag"] == "39" or r["tag"] == "40" or r["tag"] == "41" or r["tag"] == "43" or r["tag"] == "47" )|> sort(columns:[ "_time"], desc: true) |> limit(n:10, offset: 1)
四、总结
一定要避免同一字段中插入不同的数据类型,无论是读取不到数据时,给默认值还是整型和浮点型的类型统一。一定要在代码中做好此类问题的规避,避免再出现这种情况,导致数据无法插入,这种问题会对数据造成巨大损失。
相关文章:
influxdb2.0插入数据字段类型出现冲突问题解决
一、问题出现 一个学校换热站自控系统,会定时从换热站获取测点数据,并插入到influxdb数据库中。influxdb插入数据时,报错提示: com.influxdb.exceptions.UnprocessableEntityException: failure writing points to database: par…...
[C++]类和对象,explicit,static,友元,构造函数——喵喵要吃C嘎嘎4
希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,大大会看到更多有趣的博客哦!!! 喵喵喵,你对我真的…...
物联网的商业模式洞察
大约在十年前(2014年11月),全球知名管理思想家、哈佛商学院教授迈克尔波特与PTC前首席执行官吉姆赫普尔曼,在《哈佛商业评论》上联合撰写了一篇备受赞誉的文章,题为《智能互联产品如何改变竞争》。在这篇文章中&#x…...
智能指针基础知识【C++】【RAII思想 || unique_ptr || shared_ptrweak_ptr || 循环引用问题】
目录 一,为什么需要智能指针 二,内存泄露的基本认识 1. 内存泄露分类 2. 常见的内存检测工具 3,如何避免内存泄露 三,智能指针的使用与原理 1. RAII思想 2. 智能指针 (1. unique_ptr (2. shared_…...
leetcode:反转链表II 和k个一组反转链表的C++实现
反转链表II 问题描述 给你单链表的头指针 head 和两个整数 left 和 right ,其中 left < right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。 ListNode* reverseBetween(ListNode* head, int left, int right) {ListNode *…...
ERD Online 快速启动指南:代码下载到首次运行的全流程攻略 ️
🚀 一、代码下载 ERD online前端代码正常拉取即可👌 后端代码含有子模块,拉取命令如下: git clone --recurse-submodules https://github.com/www-zerocode-net-cn/martin-framework.git 🛠️ 二、代码构建 dz…...
c++ 11 新特性 不同数据类型之间转换函数之const_cast
一.不同数据类型之间转换函数const_cast介绍 const_cast是C11中引入的一种类型转换操作符,用于修改类型的const或volatile属性。const_cast的主要用途是移除对象的常量性,它是唯一具有此能力的C风格的转型操作符。在C11中,const_cast可以完成…...
C++从零开始的打怪升级之路(day45)
这是关于一个普通双非本科大一学生的C的学习记录贴 在此前,我学了一点点C语言还有简单的数据结构,如果有小伙伴想和我一起学习的,可以私信我交流分享学习资料 那么开启正题 今天分享的是关于二叉树的题目 1.根据二叉树创建字符串 606. 根…...
小鹅通前端实习一面
总时长35分钟,自我介绍开始 1.js和c特点上的差异; 2.js数组去重 3.js的数据类型 4.js的引用类型和值类型的差别 5.讲一下js的网络请求 6.对前端三件套和框架的理解 7.一个html文档的结构是怎样的 8.head和body的区别 9.一个页面的加载顺序(ht…...
ArrayList常用API
常见方法 add 增remove 删set 改get 查clear 清空元素size 长度isEmpty 为空判断 用法 // String就是泛型 这种使用方法对于限制类型很有用 ArrayList<String> arrayList new ArrayList<>();// add 添加元素 返回的是boolean 代表是否添加成功 arrayList.add(&qu…...
Chrome安装Axure插件
打开原型目录/resources/chrome,重命名axure-chrome-extension.crx,修改后缀为rar,axure-chrome-extension.rar 解压到axure-chrome-extension目录打开Chrome,更多工具->扩展程序,打开开发者模式,选择加…...
【AI+应用】模仿爆款视频二次创作短视频操作步骤
本来不想水这篇的, 剪辑软件估计很多人用的比我还6。 今天自己遇到1个需求,我看到一篇公众号文章的视频觉得有意思,但视频有点长,我没带耳机看视频的习惯,就想着能不能下载下来, 提取视频的音频转为文字&am…...
HTML使用
文章目录 一、简介二、HTML快速入门三、基础标签四、图片、音频、视频标签五、超链接标签六、列表标签七、表格标签八、布局标签九、表单标签十、表单向标签 一、简介 二、HTML快速入门 <html><head><title>你好</title></head><body>再…...
通过联合部署DDoS高防和WAF提升网站防护能力
如果您的网站遭受的攻击既有流量型攻击,又混杂精巧的Web应用层攻击时(例如SQL注入、跨站脚本攻击、命令注入等)时,推荐您组合使用阿里云DDoS高防和Web 应用防火墙 WAF(Web Application Firewall)࿰…...
具体挫折现象的发生以及解法思考:您如果继续不问的话,严重重责就容易来
一 积极想方设法的寻找扭转劣势的方式方法; 目前对于第一条的践行,主要还是依靠打工做事赚取收入。至于个人业务,只能往后推,往后延迟。因为不管您目前居住的环境,还是个人条件都不行,所以无法实行个人业…...
Type-C接口PD协议统一:引领电子科技新纪元的优势解析
在电子科技日新月异的今天,充电接口的统一化已经成为了业界的一大趋势。其中,Type-C接口凭借其传输速度快、使用便捷等优点,迅速成为了市场上的主流选择。而PD(Power Delivery)协议的统一,更是为Type-C接口…...
探讨2024年AI辅助研发的趋势
一、引言 随着科技的飞速发展,人工智能(AI)已经成为当今时代最具变革性的技术之一。AI的广泛应用正在重塑各行各业,其中,AI辅助研发作为科技和工业领域的一大创新热点,正引领着研发模式的深刻变革。从医药…...
Java对接海康威视摄像头实现抓图
目录 一、下载SDK 二、拷贝示例代码 三、拷贝库文件 四、运行Demo 五、抓图业务 六、调参 七、发布Linux正式环境 一、下载SDK 海康开放平台 二、拷贝示例代码 三、拷贝库文件 这时候直接运行ClientDemo会报错,因为缺失库文件! 四、运行Demo …...
浏览器一键重新发起请求
一、需求场景 在前端开发过程中,经常会需要重新请求后台进行代码调试,之前的常规方法是刷新浏览器页面或者点击页面进行交互,这样对多个请求的场景就很方便,但是往往很多时候我们只是单纯的想重新发起一个请求(多个请求…...
一起来读李清照
当然先祝各位女生节日快乐🎁🎁啦。 但是呢,今天,我们不聊技术,来聊点其他的。 大家都知道今天是三八妇女节,三八妇女节的是中国人的叫法,也叫国际妇女节。是为了纪念妇女权利的运动&#…...
数据关联性与趋势发现(使用千问)
数据关联性与趋势是数据洞察的核心,但人工分析需手动计算、绘制图表,且易受主观因素影响。千问可通过“数据建模模式识别”,自动挖掘数据间的隐藏关联,识别趋势类型与变化节点。实操框架与步骤如下:(1&…...
微积分基本定理实战:5个常见积分上限函数求导案例解析
微积分基本定理实战:5个常见积分上限函数求导案例解析 在工程建模和物理问题分析中,积分上限函数的求导运算堪称"数学瑞士军刀"。想象一下,当你需要分析随时间变化的流量、计算变力做功或优化控制系统参数时,这个工具能…...
从鸟群到推荐系统:粒子群算法(PSO)在机器学习调参中的保姆级教程
从鸟群到推荐系统:粒子群算法(PSO)在机器学习调参中的保姆级教程 当你在训练XGBoost模型时,是否曾被那一长串超参数搞得头晕眼花?learning_rate该设0.1还是0.01?max_depth取6还是8更合适?传统网格搜索不仅耗时…...
集成学习方法解析:Bagging与Boosting原理与实践
1. 集成学习方法概述:为什么需要模型组合?在机器学习实践中,我们常常面临一个关键矛盾:单一模型往往难以同时满足高准确性和强泛化能力的需求。这就好比医疗诊断中,单个专家的意见可能受限于其专业背景,而多…...
CSS 背景图片无法加载的常见原因与正确写法详解
本文系统讲解 html 中 css 背景图片(如 background-image: url(...))不显示的典型原因,包括路径错误、语法混用、属性书写不规范等问题,并提供可直接复用的标准写法与调试建议。 本文系统讲解 html 中 css 背景图片ÿ…...
浙江大学毕业论文LaTeX模板:学术写作的终极效率工具
浙江大学毕业论文LaTeX模板:学术写作的终极效率工具 【免费下载链接】zjuthesis Zhejiang University Graduation Thesis LaTeX Template 项目地址: https://gitcode.com/gh_mirrors/zj/zjuthesis 在浙江大学学术写作的旅途中,你是否曾为论文格式…...
python bcrypt
# 聊聊Python里的加密库:PyCryptodome 今天想和大家分享一个在Python加密领域里经常被用到的库,叫PyCryptodome。如果你在项目里处理过密码、加密文件或者设计过安全通信,很可能已经和它打过交道了。这个库表面上看起来只是一个工具集&#x…...
台达伺服PR模式调试避坑指南:从参数配置到故障排查(AL.013/AL.30报警解决)
台达伺服PR模式实战调试手册:参数配置与故障排查全解析 在工业自动化现场调试中,台达B3系列伺服驱动器的PR模式因其灵活的定位控制特性,成为许多设备制造商的首选方案。但实际应用中,工程师们常被电子齿轮比设置、软极限配置、报警…...
深入PyTorch源码:图解LayerNorm两种实现,弄懂weight/bias到底怎么来的
深入PyTorch源码:图解LayerNorm两种实现,弄懂weight/bias到底怎么来的 在深度学习模型的训练过程中,归一化技术扮演着至关重要的角色。不同于BatchNorm对批处理数据的标准化处理,LayerNorm(层归一化)因其在…...
短视频智能获客系统完整版:支持抖音/快手/视频号,含管理后台+手机端
温馨提示:文末有资源获取方式短视频赛道越来越卷,光靠人工剪辑发布已经跟不上节奏了。最近把一套能同时管理多个平台账号的系统跑通了,整理一下核心功能,给有需要的朋友参考。一、多平台统一管理支持抖音、快手、视频号、小红书、…...
