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