2020-05-12 15:16:25
265
0
开放平台目前的日志开发功能中着重使用了influxdb数据库。
需要一定程度的更新数据字段。
发现可以重复插入tag,time唯一标识的一个point数据来达到更新的目的。
试验了几下,记录。
如下:
其实也挺简单的。
这里发现了一个问题,就是influxdb的时间。
一直都是通过webUI及influxdb stuido来查询,显示出来的时间都是 2020-05-12T05:27:19.458734886Z 这种格式。
而要实现相同时间tag数据的更新,插入时时间格式 是 1589261239458734886 这种。
其实从一开始就陷入一个时区转换的误区中没走出来。
想的都是怎么通过如下这种方式直接转换完成。
这两天刚好也不太在状态。
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
format.setTimeZone(TimeZone.getTimeZone("GMT"));
妥妥的不可能直接转换。
仔细观察这两个时间的差别,分开就很明显了。
其实就是秒+纳秒, UTC时间而已,没啥特殊的
//"2020-05-12T05:27:19. 458734886Z";
//1589261239 458734886
(¬_¬)ノ
String timesecond = time.substring(0, time.lastIndexOf("."));
String namosecond = time.substring(time.lastIndexOf(".") + 1).replace("Z", "");
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
format.setTimeZone(TimeZone.getTimeZone("GMT"));
Date callbackTimeStart;
callbackTimeStart = format.parse(timesecond);
String natime = callbackTimeStart.getTime() / 1000 + "" + namosecond;
附带influxdb直接更新数据的查询方法
/**
* 通过原始记录中的时间及tag来,更新特定属性,重复插入数据更新
* @param queryStr 查询条件 查询特定数据,最好唯一
* @param influxDbUtils
* @param measurement
* @param tags 原始tag
* @param fields 需要更新的字段
* @author zj
* @date 2020年5月12日
*/
public void update(String queryStr, String measurement,
Map<String, String> tags, Map<String, Object> fields) {
//查询数据
QueryResult rst = query(queryStr);//"select * from mqtt_log3 where tag_2='aab' ");
Series s = rst.getResults().get(0).getSeries().get(0);
Map<String, Object> oridata = new HashMap<>();
for (List<Object> objs : s.getValues()) {
for (int i = 0; i < objs.size(); i++) {
oridata.put(s.getColumns().get(i), objs.get(i));
}
}
//"2020-05-12T05:27:19.458734886Z";
//1589261239458734886
String time = String.valueOf(oridata.get("time"));
//处理tag,field灯
for (String tagkey : fields.keySet()) {
oridata.put(tagkey, fields.get(tagkey));
}
for (String tagkey : tags.keySet()) {
oridata.remove(tagkey);
}
List<String> delfds = new ArrayList<>();
for (String fd : oridata.keySet()) {
if (fd.startsWith("tag_"))
delfds.add(fd);
}
for (String fd : delfds) {
oridata.remove(fd);
}
//剔除filed time字段
oridata.remove("time");
String timesecond = time.substring(0, time.lastIndexOf("."));
String namosecond = time.substring(time.lastIndexOf(".") + 1).replace("Z", "");
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
format.setTimeZone(TimeZone.getTimeZone("GMT"));
Date callbackTimeStart;
try {
callbackTimeStart = format.parse(timesecond);
String natime = callbackTimeStart.getTime() / 1000 + "" + namosecond;
Builder builder = Point.measurement(measurement);
builder.tag(tags);
builder.fields(oridata);
builder.time(Long.parseLong(natime), TimeUnit.NANOSECONDS);
influxDB.write(builder.build());
} catch (Exception e) {
// TODO: handle exception
}
}
2020-05-12 15:51:50
0
赞
赏
本文基于CC BY-NC-ND 4.0 许可协议发布,作者:野生的喵喵。 固定链接: 【influxdb日期处理更新数据】 转载请注明
相关文章:
发表新的评论
文章分类
文章归档
标签
deb ,
,
蓝屏 ,
select ,
html5 ,
tomcat ,
gcc ,
ajax ,
apt-get update ,
选择 ,
js加密 ,
java ,
工作 ,
ocr ,
AngularJs ,
感慨 ,
work ,
click ,
javascript ,
反向代理 ,
ip查询 ,
空间查询 ,
word ,
ECS服务器 ,
centos ,
杂 ,
StartupWMClass ,
前端 ,
js ,
vmdk ,
感概 ,
select2 ,
virtualbox ,
gg代理 ,
share ,
seo ,
风筝 ,
email ,
ASR ,
转换 ,
cool ,
activiti-ui ,
喵小凡 ,
@PropertySource ,
ckeiditor ,
网站攻击 ,
SRILM ,
风景 ,
plugin ,
vdi ,
扩容 ,
chorme ,
阿里云 ,
KALDI ,
num ,
packer2 ,
pic ,
gg镜像 ,
win8.1 ,
ecs ,
mysql ,
Ubuntu ,
快递查询 ,
nginx ,
ubuntu ,
swap ,
maven ,
entropy_avail ,
tencent ,
语音识别 ,
prerender ,
xfce4 ,
进度条 ,
存储过程 ,
activiti ,
熵 ,
日出 ,
练笔 ,
虞美人 ,
nodejs ,
词 ,
demo ,
jquery ,
random ,
linux ,
cat ,
bootstrapValidator ,
angularJs ,
live ,
on ,
gg ,
雪 ,
婚姻 ,
景色 ,
@Autowired ,
pdf ,
emqttd ,
优化 ,
thchs30 ,
opencv ,