blob: 354732a376ecd58ba70dd4e7fd483cdb64982383 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.pinot.queries;
import org.apache.pinot.core.operator.blocks.results.AggregationResultsBlock;
import org.apache.pinot.core.operator.blocks.results.GroupByResultsBlock;
import org.apache.pinot.core.operator.query.AggregationOperator;
import org.apache.pinot.core.operator.query.GroupByOperator;
import org.testng.annotations.Test;
public class InnerSegmentAggregationMultiValueQueriesTest extends BaseMultiValueQueriesTest {
private static final String AGGREGATION_QUERY =
"SELECT COUNT(*), SUM(column1), MAX(column2), MIN(column8), AVG(column9) FROM testTable";
private static final String MULTI_VALUE_AGGREGATION_QUERY =
"SELECT COUNTMV(column6), SUMMV(column7), MAXMV(column6), MINMV(column7), AVGMV(column6) FROM testTable";
// ARRAY_BASED
private static final String SMALL_GROUP_BY = " GROUP BY column7";
// INT_MAP_BASED
private static final String MEDIUM_GROUP_BY = " GROUP BY column3, column6, column7";
// LONG_MAP_BASED
private static final String LARGE_GROUP_BY = " GROUP BY column1, column3, column6, column7";
// ARRAY_MAP_BASED
private static final String VERY_LARGE_GROUP_BY =
" GROUP BY column1, column2, column6, column7, column8, column9, column10";
@Test
public void testAggregationOnly() {
// Test query without filter.
AggregationOperator aggregationOperator = getOperator(AGGREGATION_QUERY);
AggregationResultsBlock resultsBlock = aggregationOperator.nextBlock();
QueriesTestUtils.testInnerSegmentExecutionStatistics(aggregationOperator.getExecutionStatistics(), 100000L, 0L,
400000L, 100000L);
QueriesTestUtils.testInnerSegmentAggregationResult(resultsBlock.getResults(), 100000L, 100991525475000L, 2147434110,
1182655, 83439903673981L, 100000L);
// Test query with filter.
aggregationOperator = getOperator(AGGREGATION_QUERY + FILTER);
resultsBlock = aggregationOperator.nextBlock();
QueriesTestUtils.testInnerSegmentExecutionStatistics(aggregationOperator.getExecutionStatistics(), 15620L, 113888,
62480L, 100000L);
QueriesTestUtils.testInnerSegmentAggregationResult(resultsBlock.getResults(), 15620L, 17287754700747L, 999943053,
1182655, 11017594448983L, 15620L);
}
@Test
public void testMultiValueAggregationOnly() {
// Test query without filter.
AggregationOperator aggregationOperator = getOperator(MULTI_VALUE_AGGREGATION_QUERY);
AggregationResultsBlock resultsBlock = aggregationOperator.nextBlock();
QueriesTestUtils.testInnerSegmentExecutionStatistics(aggregationOperator.getExecutionStatistics(), 100000L, 0L,
200000L, 100000L);
QueriesTestUtils.testInnerSegmentAggregationResult(resultsBlock.getResults(), 106688L, 107243218420671L, 2147483647,
201, 121081150452570L, 106688L);
// Test query with filter.
aggregationOperator = getOperator(MULTI_VALUE_AGGREGATION_QUERY + FILTER);
resultsBlock = aggregationOperator.nextBlock();
QueriesTestUtils.testInnerSegmentExecutionStatistics(aggregationOperator.getExecutionStatistics(), 15620L, 113888L,
31240L, 100000L);
QueriesTestUtils.testInnerSegmentAggregationResult(resultsBlock.getResults(), 15620L, 28567975886777L, 2147483647,
203, 28663153397978L, 15620L);
}
@Test
public void testSmallAggregationGroupBy() {
// Test query without filter.
GroupByOperator groupByOperator = getOperator(AGGREGATION_QUERY + SMALL_GROUP_BY);
GroupByResultsBlock resultsBlock = groupByOperator.nextBlock();
QueriesTestUtils.testInnerSegmentExecutionStatistics(groupByOperator.getExecutionStatistics(), 100000L, 0L, 500000L,
100000L);
QueriesTestUtils.testInnerSegmentAggregationGroupByResult(resultsBlock.getAggregationGroupByResult(),
new Object[]{201}, 26L, 32555949195L, 2100941020, 117939666, 23061775005L, 26L);
// Test query with filter.
groupByOperator = getOperator(AGGREGATION_QUERY + FILTER + SMALL_GROUP_BY);
resultsBlock = groupByOperator.nextBlock();
QueriesTestUtils.testInnerSegmentExecutionStatistics(groupByOperator.getExecutionStatistics(), 15620L, 113888L,
78100L, 100000L);
QueriesTestUtils.testInnerSegmentAggregationGroupByResult(resultsBlock.getAggregationGroupByResult(),
new Object[]{203}, 1L, 185436225L, 987549258, 674022574, 674022574L, 1L);
}
@Test
public void testMediumAggregationGroupBy() {
// Test query without filter.
GroupByOperator groupByOperator = getOperator(AGGREGATION_QUERY + MEDIUM_GROUP_BY);
GroupByResultsBlock resultsBlock = groupByOperator.nextBlock();
QueriesTestUtils.testInnerSegmentExecutionStatistics(groupByOperator.getExecutionStatistics(), 100000L, 0L, 700000L,
100000L);
QueriesTestUtils.testInnerSegmentAggregationGroupByResult(resultsBlock.getAggregationGroupByResult(),
new Object[]{"w", 3818, 369}, 1L, 1095214422L, 1547156787, 528554902, 52058876L, 1L);
// Test query with filter.
groupByOperator = getOperator(AGGREGATION_QUERY + FILTER + MEDIUM_GROUP_BY);
resultsBlock = groupByOperator.nextBlock();
QueriesTestUtils.testInnerSegmentExecutionStatistics(groupByOperator.getExecutionStatistics(), 15620L, 113888L,
109340L, 100000L);
QueriesTestUtils.testInnerSegmentAggregationGroupByResult(resultsBlock.getAggregationGroupByResult(),
new Object[]{"L", 306633, 2147483647}, 1L, 131154783L, 952002176, 674022574, 674022574L, 1L);
}
@Test
public void testLargeAggregationGroupBy() {
// Test query without filter.
GroupByOperator groupByOperator = getOperator(AGGREGATION_QUERY + LARGE_GROUP_BY);
GroupByResultsBlock resultsBlock = groupByOperator.nextBlock();
QueriesTestUtils.testInnerSegmentExecutionStatistics(groupByOperator.getExecutionStatistics(), 100000L, 0L, 700000L,
100000L);
QueriesTestUtils.testInnerSegmentAggregationGroupByResult(resultsBlock.getAggregationGroupByResult(),
new Object[]{240129976, "L", 2147483647, 2147483647}, 1L, 240129976L, 1649812746, 2077178039, 1952924139L, 1L);
// Test query with filter.
groupByOperator = getOperator(AGGREGATION_QUERY + FILTER + LARGE_GROUP_BY);
resultsBlock = groupByOperator.nextBlock();
QueriesTestUtils.testInnerSegmentExecutionStatistics(groupByOperator.getExecutionStatistics(), 15620L, 113888L,
109340L, 100000L);
QueriesTestUtils.testInnerSegmentAggregationGroupByResult(resultsBlock.getAggregationGroupByResult(),
new Object[]{903461357, "L", 2147483647, 388}, 2L, 1806922714L, 652024397, 674022574, 870535054L, 2L);
}
@Test
public void testVeryLargeAggregationGroupBy() {
// Test query without filter.
GroupByOperator groupByOperator = getOperator(AGGREGATION_QUERY + VERY_LARGE_GROUP_BY);
GroupByResultsBlock resultsBlock = groupByOperator.nextBlock();
QueriesTestUtils.testInnerSegmentExecutionStatistics(groupByOperator.getExecutionStatistics(), 100000L, 0L, 700000L,
100000L);
QueriesTestUtils.testInnerSegmentAggregationGroupByResult(resultsBlock.getAggregationGroupByResult(),
new Object[]{1118965780, 1848116124, 8599, 504, 1597666851, 675163196, 607034543}, 1L, 1118965780L, 1848116124,
1597666851, 675163196L, 1L);
// Test query with filter.
groupByOperator = getOperator(AGGREGATION_QUERY + FILTER + VERY_LARGE_GROUP_BY);
resultsBlock = groupByOperator.nextBlock();
QueriesTestUtils.testInnerSegmentExecutionStatistics(groupByOperator.getExecutionStatistics(), 15620L, 113888L,
109340L, 100000L);
QueriesTestUtils.testInnerSegmentAggregationGroupByResult(resultsBlock.getAggregationGroupByResult(),
new Object[]{949960647, 238753654, 2147483647, 2147483647, 674022574, 674022574, 674022574}, 2L, 1899921294L,
238753654, 674022574, 1348045148L, 2L);
}
}