public SequentialCubeTupleIterator(List<CubeSegmentScanner> scanners, Cuboid cuboid, Set<TblColRef> selectedDimensions, List<TblColRef> rtGroups, Set<TblColRef> groups, // Set<FunctionDesc> selectedMetrics, TupleInfo returnTupleInfo, StorageContext context, SQLDigest sqlDigest) { this.context = context; this.scanners = scanners; Set<TblColRef> selectedDims = Sets.newHashSet(selectedDimensions); selectedDims.addAll(rtGroups); segmentCubeTupleIterators = Lists.newArrayList(); for (CubeSegmentScanner scanner : scanners) { segmentCubeTupleIterators.add(new SegmentCubeTupleIterator(scanner, cuboid, selectedDims, selectedMetrics, returnTupleInfo, context)); } if (context.mergeSortPartitionResults() && !sqlDigest.isRawQuery) { //query with limit logger.info("Using SortedIteratorMergerWithLimit to merge segment results"); Iterator<Iterator<ITuple>> transformed = (Iterator<Iterator<ITuple>>) (Iterator<?>) segmentCubeTupleIterators.iterator(); tupleIterator = new SortedIteratorMergerWithLimit<ITuple>(transformed, context.getFinalPushDownLimit(), getTupleDimensionComparator(cuboid, groups, returnTupleInfo)).getIterator(); } else { //normal case logger.info("Using Iterators.concat to merge segment results"); tupleIterator = Iterators.concat(segmentCubeTupleIterators.iterator()); } }
public StorageResponseGTScatter(GTScanRequest scanRequest, IPartitionStreamer partitionStreamer, StorageContext context) { this.info = scanRequest.getInfo(); this.partitionStreamer = partitionStreamer; this.blocks = partitionStreamer.asByteArrayIterator(); this.columns = scanRequest.getColumns(); this.groupByDims = scanRequest.getAggrGroupBy(); this.needSorted = (context.getFinalPushDownLimit() != Integer.MAX_VALUE) || context.isStreamAggregateEnabled(); }
cubeInstance.getName(), cuboid.getId(), groupsD, filterColumnD, context.getFinalPushDownLimit(), context.getStorageLimitLevel(), context.isNeedStorageAggregation());
public GTScanRequest planScanRequest() { GTScanRequest scanRequest; List<GTScanRange> scanRanges = this.planScanRanges(); if (scanRanges != null && !scanRanges.isEmpty()) { scanRequest = new GTScanRequestBuilder().setInfo(gtInfo).setRanges(scanRanges).setDimensions(gtDimensions) .setAggrGroupBy(gtAggrGroups).setAggrMetrics(gtAggrMetrics).setAggrMetricsFuncs(gtAggrFuncs) .setFilterPushDown(gtFilter)// .setRtAggrMetrics(gtRtAggrMetrics).setDynamicColumns(gtDynColumns) .setExprsPushDown(tupleExpressionMap)// .setAllowStorageAggregation(context.isNeedStorageAggregation()) .setAggCacheMemThreshold(cubeSegment.getConfig().getQueryCoprocessorMemGB())// .setStoragePushDownLimit(context.getFinalPushDownLimit()) .setStorageLimitLevel(context.getStorageLimitLevel()).setHavingFilterPushDown(havingFilter) .createGTScanRequest(); } else { scanRequest = null; } return scanRequest; }
public SequentialCubeTupleIterator(List<CubeSegmentScanner> scanners, Cuboid cuboid, Set<TblColRef> selectedDimensions, List<TblColRef> rtGroups, Set<TblColRef> groups, // Set<FunctionDesc> selectedMetrics, TupleInfo returnTupleInfo, StorageContext context, SQLDigest sqlDigest) { this.context = context; this.scanners = scanners; Set<TblColRef> selectedDims = Sets.newHashSet(selectedDimensions); selectedDims.addAll(rtGroups); segmentCubeTupleIterators = Lists.newArrayList(); for (CubeSegmentScanner scanner : scanners) { segmentCubeTupleIterators.add(new SegmentCubeTupleIterator(scanner, cuboid, selectedDims, selectedMetrics, returnTupleInfo, context)); } if (context.mergeSortPartitionResults() && !sqlDigest.isRawQuery) { //query with limit logger.info("Using SortedIteratorMergerWithLimit to merge segment results"); Iterator<Iterator<ITuple>> transformed = (Iterator<Iterator<ITuple>>) (Iterator<?>) segmentCubeTupleIterators.iterator(); tupleIterator = new SortedIteratorMergerWithLimit<ITuple>(transformed, context.getFinalPushDownLimit(), getTupleDimensionComparator(cuboid, groups, returnTupleInfo)).getIterator(); } else { //normal case logger.info("Using Iterators.concat to merge segment results"); tupleIterator = Iterators.concat(segmentCubeTupleIterators.iterator()); } }
public StorageResponseGTScatter(GTScanRequest scanRequest, IPartitionStreamer partitionStreamer, StorageContext context) { this.info = scanRequest.getInfo(); this.partitionStreamer = partitionStreamer; this.blocks = partitionStreamer.asByteArrayIterator(); this.columns = scanRequest.getColumns(); this.groupByDims = scanRequest.getAggrGroupBy(); this.needSorted = (context.getFinalPushDownLimit() != Integer.MAX_VALUE) || context.isStreamAggregateEnabled(); }
cubeInstance.getName(), cuboid.getId(), groupsD, filterColumnD, context.getFinalPushDownLimit(), context.getStorageLimitLevel(), context.isNeedStorageAggregation());
public GTScanRequest planScanRequest() { GTScanRequest scanRequest; List<GTScanRange> scanRanges = this.planScanRanges(); if (scanRanges != null && !scanRanges.isEmpty()) { scanRequest = new GTScanRequestBuilder().setInfo(gtInfo).setRanges(scanRanges).setDimensions(gtDimensions) .setAggrGroupBy(gtAggrGroups).setAggrMetrics(gtAggrMetrics).setAggrMetricsFuncs(gtAggrFuncs) .setFilterPushDown(gtFilter)// .setRtAggrMetrics(gtRtAggrMetrics).setDynamicColumns(gtDynColumns) .setExprsPushDown(tupleExpressionMap)// .setAllowStorageAggregation(context.isNeedStorageAggregation()) .setAggCacheMemThreshold(cubeSegment.getConfig().getQueryCoprocessorMemGB())// .setStoragePushDownLimit(context.getFinalPushDownLimit()) .setStorageLimitLevel(context.getStorageLimitLevel()).setHavingFilterPushDown(havingFilter) .createGTScanRequest(); } else { scanRequest = null; } return scanRequest; }