maven依赖
<dependency>
<groupId>in.zapr.druid</groupId>
<artifactId>druidry</artifactId>
<version>2.1</version>
</dependency>
1 组装json

//时间范围:Interval
DateTime start = new DateTime(DateUtils.getToday()+"T00:00:00.000+08:00");
DateTime end = new DateTime();
Interval interval = new Interval(start,end);
// 粒度
Granularity granularity = new SimpleGranularity(PredefinedGranularity.ALL);
// 过滤
DruidFilter todayUvEventFilter = new SelectorFilter("event","3001");
DruidFilter todayUvPageIdFilter = new SelectorFilter("page_id","101");
// and过滤
DruidFilter todayUvFilters = new AndFilter(Arrays.asList(todayUvEventFilter,todayUvPageIdFilter));
// HyperUnique 聚合
DruidAggregator todayUvAggregator = new HyperUniqueAggregator("today_uv","user_id");
// Filteres聚合
DruidAggregator todayUvAggregators = new FilteredAggregator(todayUvFilters,todayUvAggregator); DruidFilter articleUvEventFilter = new SelectorFilter("event","3001");
DruidFilter articleUvPageIdFilter = new SelectorFilter("page_id","102");
DruidFilter articleUvFilters = new AndFilter(Arrays.asList(articleUvEventFilter,articleUvPageIdFilter));
DruidAggregator articleUvAggregator = new HyperUniqueAggregator("article_uv","user_id");
DruidAggregator articleUvAggregators = new FilteredAggregator(articleUvFilters,articleUvAggregator); DruidFilter ypsUvEventFilter = new SelectorFilter("event","3001");
DruidFilter ypsUvPageIdFilter = new SelectorFilter("page_id","201");
DruidFilter ypsUvFilters = new AndFilter(Arrays.asList(ypsUvEventFilter,ypsUvPageIdFilter));
DruidAggregator ypsUvAggregator = new HyperUniqueAggregator("yps_uv","user_id");
DruidAggregator ypsUvAggregators = new FilteredAggregator(ypsUvFilters,ypsUvAggregator); DruidFilter messageUvButtonIdFilter = new SelectorFilter("button_id","10102");
DruidFilter messageUvFilters = new AndFilter(Arrays.asList(messageUvButtonIdFilter));
DruidAggregator messageUvAggregator = new HyperUniqueAggregator("message_uv","user_id");
DruidAggregator messageUvAggregators = new FilteredAggregator(messageUvFilters,messageUvAggregator); // PostAggregator
DruidPostAggregator articleUvArticleField = new HyperUniqueCardinalityPostAggregator("article_uv","article_uv");
DruidPostAggregator todayUvArticleField = new HyperUniqueCardinalityPostAggregator("today_uv","today_uv");
DruidPostAggregator articleRatePostAgg = ArithmeticPostAggregator.builder().name("article_rate").function(ArithmeticFunction.DIVIDE).fields(Arrays.asList(articleUvArticleField,todayUvArticleField)).build(); DruidPostAggregator ypsUvYpsField = new HyperUniqueCardinalityPostAggregator("yps_uv","yps_uv");
DruidPostAggregator todayUvYpsField = new HyperUniqueCardinalityPostAggregator("today_uv","today_uv");
DruidPostAggregator ypsRatePostAgg = ArithmeticPostAggregator.builder().name("yps_rate").function(ArithmeticFunction.DIVIDE).fields(Arrays.asList(ypsUvYpsField,todayUvYpsField)).build(); DruidPostAggregator messageUvMessageField = new HyperUniqueCardinalityPostAggregator("message_uv","message_uv");
DruidPostAggregator todayUvMessageField = new HyperUniqueCardinalityPostAggregator("today_uv","today_uv");
DruidPostAggregator messageRatePostAgg = ArithmeticPostAggregator.builder().name("message_rate").function(ArithmeticFunction.DIVIDE).fields(Arrays.asList(messageUvMessageField,todayUvMessageField)).build(); //组装DruidQuery
DruidTimeSeriesQuery query = DruidTimeSeriesQuery.builder()
.dataSource(druidProperties.getDataSourceOpenPlatform())
.granularity(granularity)
.intervals(Collections.singletonList(interval))
.aggregators(Arrays.asList(todayUvAggregators,articleUvAggregators,ypsUvAggregators,messageUvAggregators))
.postAggregators(Arrays.asList(articleRatePostAgg,ypsRatePostAgg,messageRatePostAgg))
.build();
2 查询
public List<HashMap> queryResult( DruidQuery query) throws ConnectionException, JsonProcessingException, QueryException {
ObjectMapper mapper = new ObjectMapper();
String requiredJson = mapper.writeValueAsString(query);
log.info(requiredJson);
DruidClient client = dataSourceDruidConfig.druidClient();
client.connect();
List<HashMap> responses = client.query(query, HashMap.class);
client.close();
return responses;
}
3 分析并组装结果
try {
List<HashMap> res = queryResult(query);
if(res!=null){
DecimalFormat df = new DecimalFormat("0.00%");
for (HashMap hashMap : res){
Map<String,Object> event = (Map<String,Object>)hashMap.get("result");
        //小数-》百分比
String yps_rate = String.valueOf(event.get("yps_rate"));
entiretUvRateParam.setYps_rate(df.format(Double.parseDouble(yps_rate)));
}
}
} catch (ConnectionException e) {
e.printStackTrace();
return null;
} catch (QueryException e) {
e.printStackTrace();
return null;
} catch (JsonProcessingException e) {
e.printStackTrace();
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
}

Java--druidAPI查询的更多相关文章

  1. java MongoDB查询(二)复杂查询

    前言 在上篇<java MongoDB查询(一)简单查询>中我们简单了解了下查询,但是仅仅有那些查询是不够用的,还需要复杂的查询,这篇就这点进行叙述. 1.数据结构 集合:firstCol ...

  2. Java DNS查询内部实现

    源码分析 在Java中,DNS相关的操作都是通过通过InetAddress提供的API实现的.比如查询域名对应的IP地址: String dottedQuadIpAddress = InetAddre ...

  3. java数据库查询类

    通用查询数据库辅助类,可实现任意查询语句的查询,还可以进行多结果集查询. 类的代码: package com.hongyuan.db; import java.math.BigDecimal; imp ...

  4. JAVA 快递查询接口API调用-快递鸟接口

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ...

  5. Java JPA 查询实体部分字段

    前言 相信大家在用Java JPA作为ORM的时候都会有这种困惑,就是某个表T我仅仅希望取到其中的A.B.C三个字段,可是jpa是通过Entity Class映射的方式组合查询结果的. 那么如何通过使 ...

  6. [Java] JavaMail 查询邮件

    上两篇提到如何发送邮件:JavaMail 发送 html 格式.带附件的邮件, JavaMail 简单案例.本文再演示下,如何读取邮箱上的邮件. 邮件内容的数据格式种类比较多,用户直接阅读邮件比较常见 ...

  7. 使用java API查询java类

    一.java API的下载地址 前面列举了常用的java类,但只是介绍了功能,具体详细的用法(比如要知道该类的属性和方法)要需要调用java的API(Application Program Inter ...

  8. java 异步查询转同步多种实现方式:循环等待,CountDownLatch,Spring EventListener,超时处理和空循环性能优化

    异步转同步 业务需求 有些接口查询反馈结果是异步返回的,无法立刻获取查询结果. 正常处理逻辑 触发异步操作,然后传递一个唯一标识. 等到异步结果返回,根据传入的唯一标识,匹配此次结果. 如何转换为同步 ...

  9. java MongoDB查询(一)简单查询

    前言 MongoDB的java驱动提供了查询的功能,查询条件也是bson对象,这篇就看下怎么进行简单的数据查询 1.数据结构 集合:firstCollection 数据内容: { "_id& ...

  10. java命令查询属性信息

    System.getProperty("user.home")可以查询JAVA系统的user.home属性的值, 除了user.home,还有user.dir, file.sepa ...

随机推荐

  1. 基于JSP servlet mysql 的登陆页面

    数据库中建表: login.jsp <%@ page language="java" contentType="text/html; charset=UTF-8&q ...

  2. drf框架使用之 路飞学城(第一天)

    1. 路飞学城第一天: 知识点 使用的是序列化与反序列化的使用: 1.创建一个公共相应的Json方法: #创建一个公共响应的类: class LuffyResponse(): def __init__ ...

  3. thinkphp5.1 判断是不是post提交

    if(Request::isPost()){ }else{ } 这样就对了

  4. python中TCP协议中的粘包问题

    TCP协议中的粘包问题 1.粘包现象 基于TCP实现一个简易远程cmd功能 #服务端 import socket import subprocess sever = socket.socket() s ...

  5. [Docker] 容器开发环境最佳实践理论

      保持 image 小       选择合适的 base image.       使用 multi-stage 构建. https://docs.docker.com/develop/develo ...

  6. Windows 7升级1月更新汇总后导致SMBv2网络无法正常工作

    在本月的补丁星期二活动日中,微软面向Windows 7.Windows 2008 R2服务器系统推出了KB4480970的月度更新汇总.然而根据部分用户反馈,在安装该更新之后导致系统的网络设置无法正常 ...

  7. git 琐碎

    git symbolic-ref --short HEAD 来获取对应 HEAD 的分支名 ➜ mis-gulf git:(mis-lk) ✗ git symbolic-ref --short HEA ...

  8. mysql导入太慢解决方法

    半调子数据科学家又要折腾数据,拿到数据一看,3.6G的zip文件,解压看看,卧槽12个G的sql文件.好吧,又要折腾sql数据了.第一件事,肯定是搭一个数据库,导入数据咯. 折腾过sql导入的亲们都知 ...

  9. 爬虫之Splash

    Splash 是一个JavaScript渲染服务,是一个带有HTTP API 的轻量级浏览器,同时它对接了Python中Twisted和QT库. 1.功能介绍 1)异步方法处理多个网页渲染过程: 2) ...

  10. python入门(十七)python连接mysql数据库

    mysql 数据库:关系型数据库mysql:互联网公司 sqllite:小型数据库,占用资源少,手机里面使用oracle:银行.保险.以前外企.sybase:银行+通信 互联网公司key:valuem ...