我正在努力通过检索现有记录、更新然后用更新的记录取回来更新德鲁伊中的现有记录。因此,我需要获取现有数据源的粒度,这些数据源将在提取更新记录时使用。
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());
字符串粒度Interval = lastSegmentObject.get("interval").toString();
然后使用任何 api 计算日期间隔之间的差异,例如:joda
SimpleDateFormat 格式 = new SimpleDateFormat(Constants.DATE_FORMAT);
日期间隔开始 = format.parse(interval.split("/")[0]);
日期间隔结束 = 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>
于 2016-11-14T11:46:34.297 回答
0
仅供参考,数据源可以具有多个细分粒度,这就是为什么没有查询可以为您做到这一点。尽管上面的代码将返回与您提出的原始问题不同的最后一段的粒度。
于 2016-11-14T16:02:48.920 回答