2016-11-14 6 views
0

Je travaille à la mise à jour des enregistrements existants dans druid en récupérant des enregistrements existants, en les mettant à jour puis en les réintégrant avec des enregistrements mis à jour. Donc, j'ai besoin de récupérer la granularité de la source de données existante qui sera utilisée lors de l'intégration des enregistrements mis à jour.comment obtenir la granularité d'une source de données druide existante

Répondre

0

Comme aucun de queryType ne renvoie la granularité. Je récupéré les détails de source de données à l'aide http://localhost:8081/druid/coordinator/v1/metadata/datasources/wikiticker

puis aller chercher la dernière ou l'intervalle de tout segment

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

puis calculer la différence entre l'intervalle de date en utilisant une api par exemple: 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

Pour votre information, une source de données peut avoir plusieurs granularités de segment, c'est pourquoi il n'y a pas de requête qui fera cela pour vous. Bien que le code ci-dessus renvoie la granularité du dernier segment qui est différente de la question d'origine que vous avez demandée.