@Override public List<ExtendedBlocklet> pruneBlocklets(List<ExtendedBlocklet> blocklets) throws IOException { List<ExtendedBlocklet> leftPrune = left.pruneBlocklets(blocklets); List<ExtendedBlocklet> rightPrune = right.pruneBlocklets(blocklets); List<ExtendedBlocklet> andBlocklets = new ArrayList<>(); for (ExtendedBlocklet blocklet : leftPrune) { if (rightPrune.contains(blocklet)) { andBlocklets.add(blocklet); } } return andBlocklets; }
@Override public List<ExtendedBlocklet> pruneBlocklets(List<ExtendedBlocklet> blocklets) throws IOException { List<ExtendedBlocklet> leftPrune = left.pruneBlocklets(blocklets); List<ExtendedBlocklet> rightPrune = right.pruneBlocklets(blocklets); Set<ExtendedBlocklet> andBlocklets = new HashSet<>(); andBlocklets.addAll(leftPrune); andBlocklets.addAll(rightPrune); return new ArrayList<>(andBlocklets); }
/** * this method gets the datamapJob and call execute of that job, this will be launched for * distributed CG or FG * @return list of Extended blocklets after pruning */ public static List<ExtendedBlocklet> executeDataMapJob(CarbonTable carbonTable, FilterResolverIntf resolver, List<Segment> validSegments, DataMapExprWrapper dataMapExprWrapper, DataMapJob dataMapJob, List<PartitionSpec> partitionsToPrune) throws IOException { String className = "org.apache.carbondata.core.datamap.DistributableDataMapFormat"; SegmentStatusManager.ValidAndInvalidSegmentsInfo validAndInvalidSegmentsInfo = getValidAndInvalidSegments(carbonTable, validSegments.get(0).getConfiguration()); List<Segment> invalidSegments = validAndInvalidSegmentsInfo.getInvalidSegments(); DistributableDataMapFormat dataMapFormat = createDataMapJob(carbonTable, dataMapExprWrapper, validSegments, invalidSegments, partitionsToPrune, className, false); List<ExtendedBlocklet> prunedBlocklets = dataMapJob.execute(dataMapFormat, resolver); // Apply expression on the blocklets. prunedBlocklets = dataMapExprWrapper.pruneBlocklets(prunedBlocklets); return prunedBlocklets; }