当前位置: 首页 > news >正文

InfluxDB2的数据查询示例

有用influxdb2 不支持sql,并且实质是个列存储数据库,这里基于

influxdb-client-java 和 beanutils反射,写了个数据查询,把结果以行对象的形式返回的工具类。
package com.joy.malltools.influxdb2;import com.influxdb.client.QueryApi;
import com.influxdb.query.FluxRecord;
import com.influxdb.query.FluxTable;
import org.apache.commons.beanutils.PropertyUtils;import java.util.List;
import java.util.Map;/*** 对应influxDB2的查询结果的处理*/
public class InfluxDB2Util2 {/**** @param clz 类型* @param queryApi 待转换的查询集合* @param sql influxdb2的查询语句* @param extStrColumns 额外的String类型的字段名,一般为tag* @return clz类型的对象数组* @param <T>*/public static <T> T[] testStatSql(Class<T> clz, QueryApi queryApi, String sql, String[] extStrColumns) {System.out.println(sql);List<FluxTable> query = queryApi.query(sql);int count = query.get(0).getRecords().size();System.out.println("记录条数.size " + count);T[] vos = (T[]) java.lang.reflect.Array.newInstance(clz, count);for (int k = 0; k < count; k++) {try {vos[k] = clz.newInstance();} catch (Exception e) {e.printStackTrace();}}for (int i=0;i<query.size();i++) {FluxTable fluxTable = query.get(i);System.out.println("records.size " + fluxTable.getRecords().size());List<FluxRecord> recordList = fluxTable.getRecords();for (int j=0;j<recordList.size();j++) {FluxRecord fr = recordList.get(j);System.out.println("时间  " + fr.getTime() + "  求记录数 " + fr.getValue());System.out.println("时间  " + fr.getTime() + "  字段名 " + fr.getField() +  " measurement " + fr.getMeasurement());Map<String, Object> valueMap = fr.getValues();System.out.print("key : " + valueMap.get("_field") + " ; value " + valueMap.get("_value") + "|");try {PropertyUtils.setProperty(vos[j], valueMap.get("_field")+"", valueMap.get("_value"));} catch (Exception e) {e.printStackTrace();}if (extStrColumns != null && extStrColumns.length > 0)for (String colStr : extStrColumns) {setProperty(vos[j], colStr, fr.getValueByKey(colStr)+"");}
//                setProperty(vos[j], "location", fr.getValueByKey("location")+"");
//                setProperty(vos[j], "description", fr.getValueByKey("description")+"");}System.out.println("");}System.out.println("数据集合 --> ");for (Object vo: vos) {System.out.println("vo --> " + vo);}return vos;}private static void setProperty(Object obj, String fieldName, String value) {try {PropertyUtils.setProperty(obj, fieldName, value);} catch (Exception e) {e.printStackTrace();}}}

主要依赖的jar

 <dependency><groupId>com.influxdb</groupId><artifactId>influxdb-client-java</artifactId><version>6.5.0</version></dependency><dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>1.9.4</version></dependency>

调用示例

String sql = "from(bucket: \"test\")\n" +"  |> range(start: -3d)\n" +"  |> filter(fn: (r) => r[\"_measurement\"] == \"h2o_feet\" )\n" +"  |> yield(name: \"mean\")";InfluxDBClient influxDBClient = InfluxDBClientFactory.create(url,token.toCharArray(),org,bucket);QueryApi queryApi = influxDBClient.getQueryApi();String[] strColAry = new String[]{"location", "description"};WaterVO[] objs = InfluxDB2Util2.testStatSql(WaterVO.class, queryApi, sql, strColAry);System.out.println("<-- ---------------- vo ----------------  --> ");for (WaterVO vo: objs) {System.out.println("vo --> "+vo);}

http://www.lryc.cn/news/330705.html

相关文章:

  • CSS基础语法-黑马跟课笔记-供记录与查询
  • 「PHP系列」PHP数组排序及运用场景
  • VScode debug python(服务器)
  • 5.11 Vue配置Element UI框架
  • DolphinScheduler on k8s 云原生部署实践
  • JVM将虚拟机分成了哪几块区域?
  • 【热门话题】WebKit架构简介
  • 顶顶通呼叫中心中间件-话术编辑器机器人转人工坐席配置(mod_cti基于FreeSWITCH)
  • 【嵌入式开发 Linux 常用命令系列 8 -- shell 命令 basename 介绍】
  • 使用docker部署MongoDB数据库
  • 3. WiFi基本原理
  • 详解人工智能(概念、发展、机遇与挑战)
  • flyway的使用
  • web渗透测试漏洞复现:ZooKeeper未授权漏洞复现
  • 算法错题本
  • 绝地求生:爷青回!老版艾伦格回归?雨天雾天的艾伦格你还记得吗?
  • 10秒钟用python接入讯飞星火API(保姆级)
  • 认识什么是Webpack
  • vulhub打靶记录——healthcare
  • css实现更改checkbox的样式;更改checkbox选中后的背景色;更改checkbox选中后的icon
  • 绿联 安装Mysql数据库
  • PyQt ui2py 使用PowerShell将ui文件转为py文件并且将导入模块PyQt或PySide转换为qtpy模块开箱即用
  • javascript中的浅拷贝和深拷贝
  • vue 实现自定义分页打印 window.print
  • 基于 Erlang 的随机账户分配机制
  • 数码论坛系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)电子科技数码爱好者交流信息新闻畅聊讨论评价
  • 时序预测 | Matlab实现CPO-LSTM【24年新算法】冠豪猪优化长短期记忆神经网络时间序列预测
  • 探索设计模式的魅力:AI大模型如何赋能C/S模式,开创服务新纪元
  • 2024年NAND价格市场继续上涨
  • 分布式算法 - ZAB算法