private Map<Dimension, CandidateDim> pickCandidateDimsToQuery(Set<Dimension> dimensions) throws LensException { Map<Dimension, CandidateDim> dimsToQuery = new HashMap<Dimension, CandidateDim>(); if (!dimensions.isEmpty()) { for (Dimension dim : dimensions) { if (candidateDims.get(dim) != null && candidateDims.get(dim).size() > 0) { CandidateDim cdim = candidateDims.get(dim).iterator().next(); log.info( "Available candidate dims are:{}, picking up {} for querying.", candidateDims.get(dim), cdim.dimtable); dimsToQuery.put(dim, cdim); } else { String reason = ""; if (dimPruningMsgs.get(dim) != null && !dimPruningMsgs.get(dim).isEmpty()) { ByteArrayOutputStream out = null; try { ObjectMapper mapper = new ObjectMapper(); out = new ByteArrayOutputStream(); mapper.writeValue(out, dimPruningMsgs.get(dim).getJsonObject()); reason = out.toString("UTF-8"); } catch (Exception e) { throw new LensException("Error writing dim pruning messages", e); } finally { if (out != null) { try { out.close(); } catch (IOException e) { throw new LensException(e); } } } } log.error( "Query rewrite failed due to NO_CANDIDATE_DIM_AVAILABLE, Cause {}", dimPruningMsgs.get(dim).toJsonObject()); throw new NoCandidateDimAvailableException(dimPruningMsgs.get(dim)); } } } return dimsToQuery; }
public boolean hasDimensionInQuery() { return dimensions != null && !dimensions.isEmpty(); }
public boolean hasAggregates() { return !aggregateExprs.isEmpty() || getExprCtx().hasAggregates(); }