1

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

4

2 回答 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 回答