Search in sources :

Example 11 with Pair

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

the class Aggregation method init.

private void init(List<String> groupByColumns) {
    _groupByColumns = groupByColumns;
    _columnFunctionList = new ArrayList<>();
    _addCountStar = false;
    for (AggregationInfo aggregationInfo : _aggregationsInfo) {
        Map<String, String> aggregationParams = aggregationInfo.getAggregationParams();
        for (Map.Entry<String, String> entry : aggregationParams.entrySet()) {
            String column = entry.getValue();
            // Apparently in case of multiple group by's '*' is replaced by empty/null in brokerRequest.
            if (column == null || column.isEmpty() || column.equals("*")) {
                _addCountStar = true;
                continue;
            }
            _columnFunctionList.add(new Pair(column, aggregationInfo.getAggregationType().toLowerCase()));
        }
    }
    // Count star appended at the end in the result table.
    if (_addCountStar) {
        _columnFunctionList.add(new Pair("*", "count"));
    }
    _projectionColumns = new ArrayList<>();
    _allColumns = new ArrayList<>();
    if (_groupByColumns != null) {
        for (String column : _groupByColumns) {
            _projectionColumns.add(new Pair(column, null));
            _allColumns.add(new Pair(column, null));
        }
    }
    for (Pair pair : _columnFunctionList) {
        String column = (String) pair.getFirst();
        if (!column.equals("*")) {
            _projectionColumns.add(pair);
            _allColumns.add(pair);
        }
    }
    // This is always the last columns.
    if (_addCountStar) {
        _allColumns.add(new Pair("*", "count"));
    }
}
Also used : AggregationInfo(com.linkedin.pinot.common.request.AggregationInfo) Map(java.util.Map) HashMap(java.util.HashMap) Pair(com.linkedin.pinot.core.query.utils.Pair)

Example 12 with Pair

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

the class Projection method run.

public ResultTable run() {
    ResultTable resultTable = new ResultTable(_columnList, _filteredDocIds.size());
    resultTable.setResultType(ResultTable.ResultType.Selection);
    for (Pair pair : _columnList) {
        String column = (String) pair.getFirst();
        if (!_mvColumns.contains(column)) {
            BlockSingleValIterator bvIter = (BlockSingleValIterator) _indexSegment.getDataSource(column).getNextBlock().getBlockValueSet().iterator();
            int rowId = 0;
            for (Integer docId : _filteredDocIds) {
                bvIter.skipTo(docId);
                resultTable.add(rowId++, bvIter.nextIntVal());
            }
        } else {
            BlockMultiValIterator bvIter = (BlockMultiValIterator) _indexSegment.getDataSource(column).getNextBlock().getBlockValueSet().iterator();
            int rowId = 0;
            for (Integer docId : _filteredDocIds) {
                bvIter.skipTo(docId);
                int[] dictIds = _mvColumnArrayMap.get(column);
                int numMVValues = bvIter.nextIntVal(dictIds);
                dictIds = Arrays.copyOf(dictIds, numMVValues);
                resultTable.add(rowId++, ArrayUtils.toObject(dictIds));
            }
        }
    }
    return transformFromIdToValues(resultTable, _dictionaryMap, _addCountStar);
}
Also used : BlockMultiValIterator(com.linkedin.pinot.core.common.BlockMultiValIterator) BlockSingleValIterator(com.linkedin.pinot.core.common.BlockSingleValIterator) 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