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. 利用EventHandler系统委托,触发Event

                   最近一直在研究委托与事件,下面是我的个人理解 NOTE:参考了张子阳的思想,各位大佬可以看看http://www.cnblogs.com/JimmyZhang/archi ...

  2. C++builder Tokyo 调用com 不正确的变量类型

    C++builder Tokyo 调用com 不正确的变量类型 tt.OleFunction("interface_call","MS01",&erro ...

  3. centos7 设置nginx和php开机自启动

    nginx开机自启动 首先我是源码安装的,需要手动建立nginx.service服务文件 cd /lib/systemd/system touch nginx.service nginx.servic ...

  4. js 字符串截取函数substr,substring,slice之间的差异

    js 字符串的截取,主要有三个函数,一般使用三个函数:substr,substring,slice. 而这三个函数是不完全一样的,平时很难记住,在这里做下笔记,下次遇到的时候,直接从这里参考,调用合适 ...

  5. 使用==操作符比较命令行参数args[0]和字符串返回“Invalid type"

    运行程序接收一个来自命令行的字符串参数(取值1,2,3,4),根据参数执行对应语句块. 由于未能判断字符串内容是否相同导致代码if语句块代码失效,怎么也看不到schedule方法的效果, 以下是错误代 ...

  6. register关键字

    register关键字从c++11开始已经弃用了,但是在看SuRF代码(https://www.cnblogs.com/YuNanlong/p/10235793.html) 的时候,还是看到了这个关键 ...

  7. 模型压缩,模型减枝,tf.nn.zero_fraction,统计0的比例,等。

    我们刚接到一个项目时,一开始并不是如何设计模型,而是去先跑一个现有的模型,看在项目需求在现有模型下面效果怎么样.当现有模型效果不错需要深入挖掘时,仅仅时跑现有模型是不够的,比如,如果你要在嵌入式里面去 ...

  8. Mybatis useGeneratedKeys 填充自增主键值(使用Mysql)的原理分析

    一.Mybatis配置 <insert id="insert" parameterType="com.test.TestDO" keyProperty=& ...

  9. SocketIO Server

    package com.fd.socketio; import org.json.JSONObject; import com.corundumstudio.socketio.AckRequest; ...

  10. BackgroundWorker 组件

    代码: static void Main(string[] args) { BackgroundWorker bw = new BackgroundWorker(); bw.WorkerReports ...