首页 > 其他分享 >QueryBuilder写influxdb查询语句

QueryBuilder写influxdb查询语句

时间:2023-11-25 11:15:18浏览次数:39  
标签:语句 map 00 09 List QueryBuilder influxdb 2021 00Z

1.demo

//按小时和指定字段获取每小时中的最大值
SelectQueryImpl selectQuery = select()
                .max("horiValue").as("horiValue")
                .max("vertValue").as("vertValue")
                .from("jsnl","static_deflection")
                .where(gte("time",startTimeStr)).and(lt("time",endTimeStr)).
                and(eq("bridgeName",bridgeName))
                .groupBy(time(1L,HOUR),"pointGroup","stationName").fill(0)
                .tz("Asia/Shanghai").orderBy(asc());

max()

聚合函数求最大值

as

取别名

from()

from("数据库名","表名")

where()

加查询条件,gte大于等于,lt小于等于

groupby

例子中将时间按1小时进行分组,多个分组条件用,隔开

fill()

fill()用于填充没有数据的时序序列的值,如缺失01点的数据,则将01这个时间点的数据填充为0
例如

time                 mean
----                 ----
2021-09-17T00:00:00Z 2.2341273798866914
2021-09-17T01:00:00Z 0
2021-09-17T02:00:00Z 2.7063496857597222
2021-09-17T03:00:00Z 2.837302089909386
2021-09-17T04:00:00Z 2.1944448331746718
2021-09-17T05:00:00Z 2.400794076077173
2021-09-17T06:00:00Z 1.3485784579888
2021-09-17T07:00:00Z 2.063492429025008
2021-09-17T08:00:00Z 2.198413087845874
2021-09-17T09:00:00Z 2.269841671927509
2021-09-17T10:00:00Z 2.472222660158808
2021-09-17T11:00:00Z 1.9841273356009694

其选项为:

  • null: 默认,显示时间戳但value=null的序列;
  • none:在结果中不显示该时间戳的序列;
  • 数值:fill(0),填充0;
  • linear: 线性插入数值;
  • previous: 填充前一个序列的值;

orderBy()

默认为时间升序排序,按时间降序为orderBy(desc()),这里只能按时间排序,若要按其他字段排序,则需要将结果集进行单独按指定字段排序

tz()

通过tz()子句将时序数据的时间戳从UTC时间转换为Asia/Shanghai时区的本地时间
转之前:

time                 host     value
----                 ----     -----
2019-11-03T16:08:00Z server01 0.67

转之后:

time                      host     value
----                      ----     -----
2019-11-04T00:08:00+08:00 server01 0.67

2.将sql语句进行执行获取结果集

QueryResult query1 = influxDB.query(selectQuery1);
//这里自己写了一个方法去获取数据表中的每一个字段
List<Map<String,Object>> data = InfluxDBUtils.queryResultProcess1(query1);

InfluxDBUtils类

import org.influxdb.dto.QueryResult;

import java.util.*;

public class InfluxDBUtils {
	/**
	*获取查询结果条数(方便分页)
	*/
    public static long countResultProcess(QueryResult queryResult,String column) {
        long count = 0;
        List<Map<String, Object>> list = queryResultProcess(queryResult);
        if (list != null && list.size() != 0) {
            Map<String, Object> map = list.get(0);
            double num = (Double) map.get(column);
            count = new Double(num).longValue();
        }
        return count;
    }

    /**
     * @param queryResult
     * @desc 查询结果处理(仅获取想要查询的字段)
     * @date 2021/5/12
     */
    public static List<Map<String, Object>> queryResultProcess(QueryResult queryResult) {
        List<Map<String, Object>> mapList = new ArrayList<>();
        List<QueryResult.Result> resultList = queryResult.getResults();
        //把查询出的结果集转换成对应的实体对象,聚合成list
        for (QueryResult.Result query : resultList) {
            List<QueryResult.Series> seriesList = query.getSeries();
            if (seriesList != null && seriesList.size() != 0) {
                for (QueryResult.Series series : seriesList) {
                    List<String> columns = series.getColumns();
                    String[] keys = columns.toArray(new String[columns.size()]);
                    List<List<Object>> values = series.getValues();
                    if (values != null && values.size() != 0) {
                        for (List<Object> value : values) {
                            Map<String, Object> map = new HashMap(keys.length);
                            for (int i = 0; i < keys.length; i++) {
                                map.put(keys[i], value.get(i));
                            }
                            mapList.add(map);
                        }
                    }
                }
            }
        }
        return mapList;
    }
    /**
     * @param queryResult
     * @desc 查询结果处理(获取表中所有的字段)
     * @date 2021/5/12
     */
    public static List<Map<String, Object>> queryResultProcess1(QueryResult queryResult) {
        List<Map<String, Object>> mapList = new ArrayList<>();
        List<QueryResult.Result> resultList = queryResult.getResults();
        //把查询出的结果集转换成对应的实体对象,聚合成list
        for (QueryResult.Result query : resultList) {
            List<QueryResult.Series> seriesList = query.getSeries();
            if (seriesList != null && seriesList.size() != 0) {
                for (QueryResult.Series series : seriesList) {
                    Map<String, Object> map;
                    List<String> columns = series.getColumns();
                    Map<String, String> tags = series.getTags();
                    String[] keys = columns.toArray(new String[columns.size()]);
                    List<List<Object>> values = series.getValues();
                    if (values != null && values.size() != 0) {
                        for (List<Object> value : values) {
                             map = new HashMap(keys.length);
                            Set<Map.Entry<String, String>> entries = tags.entrySet();
                            for (Map.Entry<String, String> entry : entries) {
                                map.put(entry.getKey(), entry.getValue());
                            }
                            for (int i = 0; i < keys.length; i++) {
                                map.put(keys[i], value.get(i));
                            }
                            mapList.add(map);
                        }
                    }


                }

            }
        }

        return mapList;
    }
}

标签:语句,map,00,09,List,QueryBuilder,influxdb,2021,00Z
From: https://www.cnblogs.com/lal520/p/17855297.html

相关文章

  • 无涯教程-Tcl - continue语句函数
    Tcl语言中的continue语句的工作原理与break语句类似。但是,continue不是强制终止,而是强制循环的下一次迭代发生,从而跳过两者之间的任何代码。continuestatement-语法Tcl中continue语句的语法如下-continue;continuestatement-流程图continuestatement-示例......
  • Excel导入sql语句模板,解决转换时间戳问题
    EXCEL导入MySQL生成sql语句解决时间戳问题生成普通sql语句解决时间戳问题这里使用’"&TEXT(E1,“yyyy-mm-ddhh:mm:ss”)&"’解决excel表中时间戳问题的生成使用str_to_date(’"&TEXT(E1,“yyyy-mm-ddhh:mm:ss”)&"’,’%Y-%m-%d%T’))解决插入mysql中的问题="insertintoxx......
  • SWITCH/Java switch case 语句
    SWITCHcaseswitch语句中的变量类型可以是:byte、short、int或者char。从JavaSE7开始,switch支持字符串String类型了,同时case标签必须为字符串常量或字面量。当变量的值与case语句的值相等时,那么case语句之后的语句开始执行,直到break语句出现才会跳出swit......
  • 性能监控平台之influxdb搭建
    今天开始,我会把自己搭建性能监控平台的亲身经历记录成博客,其实通过百度搜索,网上相关的操作指引一抓一大把,但还真是应了那句话,纸上得来终觉浅,自己踩过的坑永远印象最深刻。其实,我也是靠着百度大神的指引一步步摸索实践,但很多时候初学者和大神对于系统的理解并不在同一起跑线上,很多......
  • postgresql中执行select查询语句卡住问题的处理
     1、问题描述 研发环境搭建的分布式的数据库Tbase。Tbase本质上是基于postgresql-xl创建的分布式数据库。昨天,研发的同事反馈,这个数据库中,对某个表执行select查询的时候,都是卡住的。客户端一直没有影响。 2、问题分析 我这边通过pg的客户端进行连接,发现除了这个......
  • shell 编程之循环语句与函数 一
    shell循环:一定要跳出循环的条件1、已知循环的次数(来10个新人新建10个账号)2、未知的循环的次数,但是有一个跳出条件(女朋友生气,道歉到原谅)循环语句for(已知次数)while(限定条件,条件如果成功执行,不成功则不执行)until(限定条件,条件成功不执行,不成功则执行) forfor......
  • MySQL语句语法练习记录
    导言:MySQL是一种广泛使用的关系型数据库管理系统,掌握MySQL语句的语法对于数据库开发和管理至关重要。本篇博客将记录一些常见的MySQL语句语法练习,并提供相关的演示示例,帮助读者更好地理解和应用MySQL语句。1.创建数据库和表创建数据库和表是开始使用MySQL的第一步。下面是一个创......
  • SQL DCL语句
    DataControlLanguage数据控制语言。用于控制对数据的访问,主要的DCL操作包括GRANT(授予用户访问和操作数据库的权限)和REVOKE(撤销用户的数据库权限)。几乎所有的数据库管理系统(DBMS)都支持GRANT和REVOKE命令,这些命令用于控制数据库的访问权限。GRANT用于授予权限,而REVOKE......
  • java类转mysql表创建语句
    packagecn.eangaie.cloud.wx3562;importcn.hutool.core.io.FileUtil;importcn.hutool.core.lang.Console;importcom.baomidou.mybatisplus.annotation.TableId;importcom.baomidou.mybatisplus.annotation.TableName;importio.swagger.annotations.ApiModelProper......
  • SQL DELETE 语句:删除表中记录的语法和示例,以及 SQL SELECT TOP、LIMIT、FETCH FIRST
    SQLDELETE语句SQLDELETE语句用于删除表中的现有记录。DELETE语法DELETEFROM表名WHERE条件;注意:在删除表中的记录时要小心!请注意DELETE语句中的WHERE子句。WHERE子句指定应删除哪些记录。如果省略WHERE子句,将会删除表中的所有记录!演示数据库以下是示例中使用的Cus......