influxdb日期处理更新数据
 2020-05-12 15:16:25   178   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日期处理更新数据】 转载请注明



发表新的评论
{{s_uid}}   , 欢迎回来.
您的称呼(*必填):
您的邮箱地址(*必填,您的邮箱地址不会公开,仅作为有回复后的消息通知手段):
您的站点地址(选填):
留言:

∑( ° △ °|||)︴

(๑•̀ㅂ•́)و✧
<( ̄) ̄)>
[]~( ̄▽ ̄)~*
( ̄ˇ ̄)
[]~( ̄▽ ̄)~*
( ̄ˇ ̄)
╮( ̄▽ ̄)╭
( ̄ε(# ̄)
(⊙ˍ⊙)
( ̄▽ ̄)~*
∑( ° △ °|||)︴

文章分类

可能喜欢 

KxのBook@Copyright 2017- All Rights Reserved
Designed and themed by 野生的喵喵   1343750   38280