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"));
}
}
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);
}
Aggregations