Search in sources :

Example 6 with Pair

use of com.linkedin.pinot.core.query.utils.Pair in project pinot by linkedin.

the class Selection method run.

public ResultTable run() {
    boolean addCountStar = false;
    Map<String, Dictionary> dictionaryMap = new HashMap<>();
    for (Pair pair : _selectionColumns) {
        String column = (String) pair.getFirst();
        if (column.equals("*")) {
            addCountStar = true;
        }
        dictionaryMap.put(column, _indexSegment.getDictionaryFor(column));
    }
    Projection projection = new Projection(_indexSegment, _metadata, _filteredDocIds, _selectionColumns, dictionaryMap, addCountStar);
    return projection.run();
}
Also used : Dictionary(com.linkedin.pinot.core.segment.index.readers.Dictionary) HashMap(java.util.HashMap) Pair(com.linkedin.pinot.core.query.utils.Pair)

Example 7 with Pair

use of com.linkedin.pinot.core.query.utils.Pair in project pinot by linkedin.

the class ResultTable method getFunction.

public String getFunction(int columnId) {
    Pair pair = _columnList.get(columnId);
    String column = (String) pair.getFirst();
    String function = (String) pair.getSecond();
    return function + "_" + column;
}
Also used : Pair(com.linkedin.pinot.core.query.utils.Pair)

Example 8 with Pair

use of com.linkedin.pinot.core.query.utils.Pair in project pinot by linkedin.

the class ResultTable method addCountStarColumn.

void addCountStarColumn() {
    _columnMap.put("*_count", _columnList.size());
    _columnList.add(new Pair("*", "count"));
}
Also used : Pair(com.linkedin.pinot.core.query.utils.Pair)

Example 9 with Pair

use of com.linkedin.pinot.core.query.utils.Pair in project pinot by linkedin.

the class SegmentQueryProcessor method process.

public ResultTable process(BrokerRequest brokerRequest) throws Exception {
    if (pruneSegment(brokerRequest)) {
        return null;
    }
    LOGGER.debug("Processing segment: {}", _segmentName);
    FilterQueryTree filterQueryTree = RequestUtils.generateFilterQueryTree(brokerRequest);
    List<Integer> filteredDocIds = filterDocIds(filterQueryTree, null);
    ResultTable result = null;
    if (brokerRequest.isSetAggregationsInfo()) {
        // Aggregation only
        if (!brokerRequest.isSetGroupBy()) {
            Aggregation aggregation = new Aggregation(_indexSegment, _metadata, filteredDocIds, brokerRequest.getAggregationsInfo(), null, 10);
            result = aggregation.run();
        } else {
            // Aggregation GroupBy
            GroupBy groupBy = brokerRequest.getGroupBy();
            Aggregation aggregation = new Aggregation(_indexSegment, _metadata, filteredDocIds, brokerRequest.getAggregationsInfo(), groupBy.getColumns(), groupBy.getTopN());
            result = aggregation.run();
        }
    } else {
        // Only Selection
        if (brokerRequest.isSetSelections()) {
            List<String> columns = brokerRequest.getSelections().getSelectionColumns();
            if (columns.contains("*")) {
                columns = Arrays.asList(_indexSegment.getColumnNames());
            }
            List<Pair> selectionColumns = new ArrayList<>();
            Set<String> columSet = new HashSet<>();
            // Collect a unique list of columns, in case input has duplicates.
            for (String column : columns) {
                if (!columSet.contains(column)) {
                    selectionColumns.add(new Pair(column, null));
                    columSet.add(column);
                }
            }
            Selection selection = new Selection(_indexSegment, _metadata, filteredDocIds, selectionColumns);
            result = selection.run();
        }
    }
    result.setNumDocsScanned(filteredDocIds.size());
    result.setTotalDocs(_totalDocs);
    return result;
}
Also used : GroupBy(com.linkedin.pinot.common.request.GroupBy) FilterQueryTree(com.linkedin.pinot.common.utils.request.FilterQueryTree) ArrayList(java.util.ArrayList) Pair(com.linkedin.pinot.core.query.utils.Pair) HashSet(java.util.HashSet)

Example 10 with Pair

use of com.linkedin.pinot.core.query.utils.Pair in project pinot by linkedin.

the class Aggregation method aggregateOne.

private ResultTable aggregateOne(ResultTable input) {
    ResultTable results = new ResultTable(_allColumns, 1);
    results.setResultType(ResultTable.ResultType.Aggregation);
    if (input.isEmpty()) {
        return new ResultTable(_allColumns, 0);
    }
    for (Pair pair : _columnFunctionList) {
        String column = (String) pair.getFirst();
        String function = (String) pair.getSecond();
        AggregationFunc aggregationFunc = AggregationFuncFactory.getAggregationFunc(input, column, function);
        ResultTable aggregationResult = aggregationFunc.run();
        results.add(0, aggregationResult.get(0, 0));
    }
    return results;
}
Also used : Pair(com.linkedin.pinot.core.query.utils.Pair)

Aggregations

Pair (com.linkedin.pinot.core.query.utils.Pair)12 ArrayList (java.util.ArrayList)5 HashMap (java.util.HashMap)3 Dictionary (com.linkedin.pinot.core.segment.index.readers.Dictionary)2 HashSet (java.util.HashSet)2 AbstractTableConfig (com.linkedin.pinot.common.config.AbstractTableConfig)1 InstanceZKMetadata (com.linkedin.pinot.common.metadata.instance.InstanceZKMetadata)1 RealtimeSegmentZKMetadata (com.linkedin.pinot.common.metadata.segment.RealtimeSegmentZKMetadata)1 KafkaStreamMetadata (com.linkedin.pinot.common.metadata.stream.KafkaStreamMetadata)1 AggregationInfo (com.linkedin.pinot.common.request.AggregationInfo)1 GroupBy (com.linkedin.pinot.common.request.GroupBy)1 HLCSegmentName (com.linkedin.pinot.common.utils.HLCSegmentName)1 FilterQueryTree (com.linkedin.pinot.common.utils.request.FilterQueryTree)1 BlockMultiValIterator (com.linkedin.pinot.core.common.BlockMultiValIterator)1 BlockSingleValIterator (com.linkedin.pinot.core.common.BlockSingleValIterator)1 IOException (java.io.IOException)1 List (java.util.List)1 Map (java.util.Map)1 Set (java.util.Set)1 IdealState (org.apache.helix.model.IdealState)1