zoukankan      html  css  js  c++  java
  • Java--druidAPI查询

    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;
    }
  • 相关阅读:
    ceil函数 floor函数 floor函数 round函数 取整函数
    Havel–Hakimi algorithm(判断度数序列是否可图)
    最小费用最大流
    数论 (大数,小费马定理,欧拉定理,威尔逊定理,快速数论变换(NNT)模版)
    Give Candies(费马小定理)
    Yet Another Crosses Problem
    并查集
    杭电多校第一场-M-Code
    2018ICPC赛后总结
    营业额统计
  • 原文地址:https://www.cnblogs.com/serena25/p/10488791.html
Copyright © 2011-2022 走看看