Merge pull request #1632 from Hailei/fix-subquery-innerquery-demension

Inner Query  should build on sub query
This commit is contained in:
Charles Allen 2015-08-27 10:25:38 -07:00
commit c1388a1685
2 changed files with 60 additions and 3 deletions

View File

@ -164,7 +164,7 @@ public class GroupByQueryQueryToolChest extends QueryToolChest<Row, GroupByQuery
} }
// We need the inner incremental index to have all the columns required by the outer query // We need the inner incremental index to have all the columns required by the outer query
final GroupByQuery innerQuery = new GroupByQuery.Builder(query) final GroupByQuery innerQuery = new GroupByQuery.Builder(subquery)
.setAggregatorSpecs(aggs) .setAggregatorSpecs(aggs)
.setInterval(subquery.getIntervals()) .setInterval(subquery.getIntervals())
.setPostAggregatorSpecs(Lists.<PostAggregator>newArrayList()) .setPostAggregatorSpecs(Lists.<PostAggregator>newArrayList())

View File

@ -91,6 +91,7 @@ import org.junit.runners.Parameterized;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.io.IOException; import java.io.IOException;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Comparator; import java.util.Comparator;
@ -319,7 +320,6 @@ public class GroupByQueryRunnerTest
} }
@Test @Test
public void testGroupByWithSimpleRenameRetainMissingNonInjective() public void testGroupByWithSimpleRenameRetainMissingNonInjective()
{ {
@ -492,7 +492,10 @@ public class GroupByQueryRunnerTest
.setDimensions( .setDimensions(
Lists.<DimensionSpec>newArrayList( Lists.<DimensionSpec>newArrayList(
new ExtractionDimensionSpec( new ExtractionDimensionSpec(
"quality", "alias", new LookupExtractionFn(new MapLookupExtractor(map), false, "MISSING", true), null "quality",
"alias",
new LookupExtractionFn(new MapLookupExtractor(map), false, "MISSING", true),
null
) )
) )
) )
@ -2430,6 +2433,60 @@ public class GroupByQueryRunnerTest
TestHelper.assertExpectedObjects(expectedResults, results, ""); TestHelper.assertExpectedObjects(expectedResults, results, "");
} }
@Test
public void testDifferentGroupingSubqueryWithFilter()
{
GroupByQuery subquery = GroupByQuery
.builder()
.setDataSource(QueryRunnerTestHelper.dataSource)
.setQuerySegmentSpec(QueryRunnerTestHelper.firstToThird)
.setDimensions(Lists.<DimensionSpec>newArrayList(new DefaultDimensionSpec("quality", "quality")))
.setAggregatorSpecs(
Arrays.asList(
QueryRunnerTestHelper.rowsCount,
new LongSumAggregatorFactory("idx", "index")
)
)
.setGranularity(QueryRunnerTestHelper.dayGran)
.build();
GroupByQuery query = GroupByQuery
.builder()
.setDataSource(subquery)
.setQuerySegmentSpec(QueryRunnerTestHelper.firstToThird)
.setAggregatorSpecs(
Arrays.<AggregatorFactory>asList(
new DoubleMaxAggregatorFactory("idx", "idx")
)
)
.setDimFilter(
new OrDimFilter(
Lists.<DimFilter>newArrayList(
new SelectorDimFilter("quality", "automotive"),
new SelectorDimFilter("quality", "premium"),
new SelectorDimFilter("quality", "mezzanine"),
new SelectorDimFilter("quality", "business"),
new SelectorDimFilter("quality", "entertainment"),
new SelectorDimFilter("quality", "health"),
new SelectorDimFilter("quality", "news"),
new SelectorDimFilter("quality", "technology"),
new SelectorDimFilter("quality", "travel")
)
)
)
.setGranularity(QueryRunnerTestHelper.dayGran)
.build();
List<Row> expectedResults = Arrays.asList(
GroupByQueryRunnerTestHelper.createExpectedRow("2011-04-01", "idx", 2900.0),
GroupByQueryRunnerTestHelper.createExpectedRow("2011-04-02", "idx", 2505.0)
);
Iterable<Row> results = GroupByQueryRunnerTestHelper.runQuery(factory, runner, query);
TestHelper.assertExpectedObjects(expectedResults, results, "");
}
@Test @Test
public void testDifferentIntervalSubquery() public void testDifferentIntervalSubquery()
{ {