首页 文章

如何获得现有德鲁伊数据源的粒度

提问于
浏览
0

我正在努力通过检索现有记录,更新然后用更新的记录摄取来更新德鲁伊的现有记录 . 因此,我需要获取现有数据源的粒度,这将在摄取更新的记录时使用 .

2 回答

  • 0

    由于没有queryType返回粒度 . 我使用http://localhost:8081/druid/coordinator/v1/metadata/datasources/wikiticker检索了数据源详细信息

    然后获取最后一段或任何段的间隔

    JSONArray segmentArray = (JSONArray) dataSourceObj.get("segments");
          JSONObject lastSegmentObject = new JSONObject(segmentArray.get(segmentArray.length()-1).toString());
          String granularityInterval = lastSegmentObject.get("interval").toString();
    

    然后使用任何api例如:joda计算日期间隔之间的差异

    SimpleDateFormat format = new SimpleDateFormat(Constants.DATE_FORMAT);
                Date intervalStart = format.parse(interval.split("/")[0]);
                Date intervalEnd = format.parse(interval.split("/")[1]); 
                DateTime startTime = new DateTime(intervalStart) ; 
                DateTime endTime = new DateTime(intervalEnd) ; 
    
            Period jodaPeriod = new Period(startTime, endTime);
    
            if(jodaPeriod.getYears() == 1){
                return DesignerConstants.DRUID_GRANULARITY_YEAR;
            }else if(jodaPeriod.getMonths() == 1){
                return DesignerConstants.DRUID_GRANULARITY_MONTH;
            }else if(jodaPeriod.getWeeks() == 1){
                return DesignerConstants.DRUID_GRANULARITY_WEEK;
            }else if(jodaPeriod.getDays() == 1){
                return DesignerConstants.DRUID_GRANULARITY_DAY;
            }else if(jodaPeriod.getHours() == 1){
                return DesignerConstants.DRUID_GRANULARITY_HOUR;
            }
    
            return "none";
        }
    </pre>
    
  • 0

    仅供参考,数据源可以具有多个段粒度,这就是为什么没有查询可以为您执行此操作 . 虽然上面的代码将返回最后一个段的粒度,这与您提出的原始问题不同 .

相关问题