我正在努力通过检索现有记录,更新然后用更新的记录摄取来更新德鲁伊的现有记录。 因此,我需要获取现有数据源的粒度,这将在摄取更新的记录时使用。
答案 0 :(得分: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>
答案 1 :(得分:0)
仅供参考,数据源可以具有多个细分市场粒度,这就是为什么没有可以为您执行此操作的查询的原因。虽然上面的代码将返回最后一个段的粒度,这与您提出的原始问题不同。