private int[] getDimValSelectorForTopNMetric(TopNParams params, TopNResultBuilder resultBuilder) { if (params.getCardinality() < 0) { throw new UnsupportedOperationException("Cannot operate on a dimension with unknown cardinality"); } int[] dimValSelector = new int[params.getCardinality()]; Arrays.fill(dimValSelector, SKIP_POSITION_VALUE); Iterator<DimValHolder> dimValIter = resultBuilder.getTopNIterator(); while (dimValIter.hasNext()) { int dimValIndex = (Integer) dimValIter.next().getDimValIndex(); dimValSelector[dimValIndex] = INIT_POSITION_VALUE; } return dimValSelector; } }
@Override public void run( Parameters params, TopNResultBuilder resultBuilder, DimValSelector dimValSelector, @Nullable TopNQueryMetrics queryMetrics ) { if (params.getCardinality() != TopNColumnSelectorStrategy.CARDINALITY_UNKNOWN) { runWithCardinalityKnown(params, resultBuilder, dimValSelector, queryMetrics); } else { runWithCardinalityUnknown(params, resultBuilder, queryMetrics); } }
@Override protected Aggregator[][] makeDimValSelector(TopNParams params, int numProcessed, int numToProcess) { if (params.getCardinality() < 0) { throw new UnsupportedOperationException("Cannot operate on a dimension with unknown cardinality"); } ColumnSelectorPlus<TopNColumnSelectorStrategy> selectorPlus = params.getSelectorPlus(); return selectorPlus.getColumnSelectorStrategy().getDimExtractionRowSelector(query, params, storageAdapter); }
@Override public Aggregator[][] getDimExtractionRowSelector(TopNQuery query, TopNParams params, StorageAdapter storageAdapter) { if (params.getCardinality() < 0) { throw new UnsupportedOperationException("Cannot operate on a dimension with unknown cardinality"); } // This method is used for the DimExtractionTopNAlgorithm only. // Unlike regular topN we cannot rely on ordering to optimize. // Optimization possibly requires a reverse lookup from value to ID, which is // not possible when applying an extraction function final BaseTopNAlgorithm.AggregatorArrayProvider provider = new BaseTopNAlgorithm.AggregatorArrayProvider( (DimensionSelector) params.getSelectorPlus().getSelector(), query, params.getCardinality(), storageAdapter ); return provider.build(); }
@Override protected long scanAndAggregate(TopNParams params, int[] dimValSelector, Map<String, Aggregator[]> aggregatesStore) { if (params.getCardinality() < 0) { throw new UnsupportedOperationException("Cannot operate on a dimension with unknown cardinality"); } final Cursor cursor = params.getCursor(); final DimensionSelector dimSelector = params.getDimSelector(); long processedRows = 0; while (!cursor.isDone()) { final String key = dimSelector.lookupName(dimSelector.getRow().get(0)); Aggregator[] theAggregators = aggregatesStore.get(key); if (theAggregators == null) { theAggregators = makeAggregators(cursor, query.getAggregatorSpecs()); aggregatesStore.put(key, theAggregators); } for (Aggregator aggregator : theAggregators) { aggregator.aggregate(); } cursor.advance(); processedRows++; } return processedRows; }
int cardinality = params.getCardinality(); int numProcessed = 0; long processedRows = 0;
private int[] getDimValSelectorForTopNMetric(TopNParams params, TopNResultBuilder resultBuilder) { if (params.getCardinality() < 0) { throw new UnsupportedOperationException("Cannot operate on a dimension with unknown cardinality"); } int[] dimValSelector = new int[params.getCardinality()]; Arrays.fill(dimValSelector, SKIP_POSITION_VALUE); Iterator<DimValHolder> dimValIter = resultBuilder.getTopNIterator(); while (dimValIter.hasNext()) { int dimValIndex = (Integer) dimValIter.next().getDimValIndex(); dimValSelector[dimValIndex] = INIT_POSITION_VALUE; } return dimValSelector; } }
@Override public void run( Parameters params, TopNResultBuilder resultBuilder, DimValSelector dimValSelector, @Nullable TopNQueryMetrics queryMetrics ) { if (params.getCardinality() != TopNColumnSelectorStrategy.CARDINALITY_UNKNOWN) { runWithCardinalityKnown(params, resultBuilder, dimValSelector, queryMetrics); } else { runWithCardinalityUnknown(params, resultBuilder, queryMetrics); } }
@Override protected Aggregator[][] makeDimValSelector(TopNParams params, int numProcessed, int numToProcess) { if (params.getCardinality() < 0) { throw new UnsupportedOperationException("Cannot operate on a dimension with unknown cardinality"); } ColumnSelectorPlus<TopNColumnSelectorStrategy> selectorPlus = params.getSelectorPlus(); return selectorPlus.getColumnSelectorStrategy().getDimExtractionRowSelector(query, params, storageAdapter); }
@Override public Aggregator[][] getDimExtractionRowSelector(TopNQuery query, TopNParams params, StorageAdapter storageAdapter) { if (params.getCardinality() < 0) { throw new UnsupportedOperationException("Cannot operate on a dimension with unknown cardinality"); } // This method is used for the DimExtractionTopNAlgorithm only. // Unlike regular topN we cannot rely on ordering to optimize. // Optimization possibly requires a reverse lookup from value to ID, which is // not possible when applying an extraction function final BaseTopNAlgorithm.AggregatorArrayProvider provider = new BaseTopNAlgorithm.AggregatorArrayProvider( (DimensionSelector) params.getSelectorPlus().getSelector(), query, params.getCardinality(), storageAdapter ); return provider.build(); }
@Override protected long scanAndAggregate( TopNParams params, int[] dimValSelector, Map<String, Aggregator[]> aggregatesStore ) { if (params.getCardinality() < 0) { throw new UnsupportedOperationException("Cannot operate on a dimension with unknown cardinality"); } final Cursor cursor = params.getCursor(); final DimensionSelector dimSelector = params.getDimSelector(); long processedRows = 0; while (!cursor.isDone()) { final String key = dimSelector.lookupName(dimSelector.getRow().get(0)); Aggregator[] theAggregators = aggregatesStore.get(key); if (theAggregators == null) { theAggregators = makeAggregators(cursor, query.getAggregatorSpecs()); aggregatesStore.put(key, theAggregators); } for (Aggregator aggregator : theAggregators) { aggregator.aggregate(); } cursor.advance(); processedRows++; } return processedRows; }
int cardinality = params.getCardinality(); int numProcessed = 0; long processedRows = 0;