2018年08月01日 22:26:46 jyj019 阅读数:462
版权声明:虽然坑有点多,不过转载请声明原作者 https://blog.youkuaiyun.com/jyj1100/article/details/81347817
写在前面,这里是补充下java代码的一些实现,感谢同事w给我提供的帮助。参考文献和其他文章列表放在末尾。
这篇文章讲的OpenTSDB如何数据的java实现,实现步骤写出来就比较简单,也有其他一些方法,不过post应该是最普遍的:
这里主要讲解了一些查询格式数据的拼装,讲了历史数据点查询,历史数据段时间查询,实时数据查询共3种方式。对查询数据的插值和聚合方式的设置采用了最简单的一种,这个准备之后开新坑来讲。
这里面实时查询的设置还有待研究,待补全。
历史数据点查询:
根据查询时间点,metric和tags对数据进行查询,比较重要的地方是对数据时间点那个时间戳进行处理,能达到一个比较好的查询效果。
-
public String historyQuerySinglePoint(List<String> Codes, String foo1, long timestamp) throws Exception { -
//查询范围加大用于插值 -
long startTime = timestamp - 1; -
long endTime = timestamp + 1; -
tag.put(Foo1, foo1); -
//查询标签 -
List<Map<String, Object>> qualityQueriesList = new ArrayList<>(); -
for (String Codes : code) { -
//标签 -
Map<String, Object> qualityQuery = new HashMap<>(); -
qualityQuery.put("metric", code); -
qualityQuery.put("tags", tag); -
qualityQuery.put("aggregator", "none"); -
qualityQueriesList.add(qualityQuery); -
} -
//剩余查询条件!!!!! -
Map<String, Object> query = new HashMap<>(); -
query.put("queries", qualityQueriesList); -
query.put("start", startTime); -
query.put("end", endTime); -
//查询条件转为json字符串 -
String queriesJson = JSON.toJSONString(query, SerializerFeature.DisableCircularReferenceDetect); -
//标签查询请求 -
String wesult = HttpClientPost.post(URL, queriesJson); -
//如果标签查询结果不为空准备进行结果数据组装 -
JSONArray resultsArr = null; -
if (StringUtils.isNotEmpty(result)) { -
resultsArr = JSON.parseArray(result); -
} -
//数据的组装返回 -
}
历史时间段数据查询:
基本和上面代码一样,就是修改起始,终止时间为对应时间戳。
但是需要增加对起止时间长度的验证,避免数据过长导致返回时间过长甚至失败。
同时可以对采样进行一些基础的设置。
-
public String historyQueryInterval(List<String> Codes, String foo1, String foo2, long startTime, long endTime, int sampleInterval, SampleFunc func) throws Exception { -
tag.put(Foo1, foo1); -
//查询标签 -
List<Map<String, Object>> qualityQueriesList = new ArrayList<>(); -
for (String Codes : code) { -
//标签 -
Map<String, Object> qualityQuery = new HashMap<>(); -
qualityQuery.put("metric", code); -
qualityQuery.put("tags", tag); -
//下采样的函数设置,省略具体内容 -
query.put("downsample", sampleInterval + func.getFunc() ); -
qualityQuery.put("aggregator", "none"); -
qualityQueriesList.add(qualityQuery); -
} -
//剩余查询条件!!!!! -
Map<String, Object> query = new HashMap<>(); -
query.put("queries", qualityQueriesList); -
query.put("start", startTime); -
query.put("end", endTime); -
//查询条件转为json字符串 -
String queriesJson = JSON.toJSONString(query, SerializerFeature.DisableCircularReferenceDetect); -
//标签查询请求 -
String wesult = HttpClientPost.post(URL, queriesJson); -
//如果标签查询结果不为空准备进行结果数据组装 -
JSONArray resultsArr = null; -
if (StringUtils.isNotEmpty(result)) { -
resultsArr = JSON.parseArray(result); -
} -
//数据的组装返回 -
}
实时数据查询:
实时查询没有采用时间戳,而是采用 resolveNames和backScan来实现,这和官方文档的必须有些冲突,具体信息待研究。
-
public String realTimeQuery(List<String> Codes, String foo1) throws Exception { -
//查询范围加大用于插值 -
long startTime = timestamp - 1; -
long endTime = timestamp + 1; -
tag.put(Foo1, foo1); -
//查询标签 -
List<Map<String, Object>> qualityQueriesList = new ArrayList<>(); -
for (String Codes : code) { -
//标签 -
Map<String, Object> qualityQuery = new HashMap<>(); -
qualityQuery.put("metric", code); -
qualityQuery.put("tags", tag); -
qualityQuery.put("aggregator", "none"); -
qualityQueriesList.add(qualityQuery); -
} -
//剩余查询条件!!!! -
Map<String, Object> query = new HashMap<>(); -
query.put("queries", valueQueriesList); -
query.put("resolveNames", true); -
/** -
* 时序数据库BackScan时间范围,这里BACK_SCAN=24 -
*/ -
query.put("backScan", BACK_SCAN); -
//查询条件转为json字符串 -
String queriesJson = JSON.toJSONString(query, SerializerFeature.DisableCircularReferenceDetect); -
//标签查询请求 -
String wesult = HttpClientPost.post(URL, queriesJson); -
//如果标签查询结果不为空准备进行结果数据组装 -
JSONArray resultsArr = null; -
if (StringUtils.isNotEmpty(result)) { -
resultsArr = JSON.parseArray(result); -
} -
//数据的组装返回 -
}
OpenTSDB系列
OpenTSDB的/ API / PUT(opentsdb的输入的api)简介https://blog.youkuaiyun.com/jyj1100/article/details/81323705
OpenTSDB使用/ API / PUT进行数据存储的java实现https://blog.youkuaiyun.com/jyj1100/article/details/81330623
(转)opentsdb查询的简介——基础知识和UI操作https://blog.youkuaiyun.com/jyj1100/article/details/81324017
OpenTSDB的/ API / query(opentsdb的查询的api)简介(一)https://blog.youkuaiyun.com/jyj1100/article/details/81326660
OpenTSDB的/ API / query(opentsdb的查询的api)简介(二)https://blog.youkuaiyun.com/jyj1100/article/details/81329290
OpenTSDB使用/ API / query进行数据查询的java实现https://blog.youkuaiyun.com/jyj1100/article/details/81347817
其他OpenTSDB系列文章见
OpenTSDB系列目录https://blog.youkuaiyun.com/jyj1100/article/details/83450282

本文详细介绍了使用Java实现OpenTSDB数据查询的方法,包括历史数据点查询、历史时间段数据查询及实时数据查询。通过代码示例展示了如何构建查询参数、处理时间戳以及设置聚合和采样函数。
1万+

被折叠的 条评论
为什么被折叠?



