Repository: lens Updated Branches: refs/heads/master 1f12ce55a -> f3e6bc542
LENS-1028 : Convert dimension filter to fact filters for perfomace improvement on outer join queries Project: http://git-wip-us.apache.org/repos/asf/lens/repo Commit: http://git-wip-us.apache.org/repos/asf/lens/commit/f3e6bc54 Tree: http://git-wip-us.apache.org/repos/asf/lens/tree/f3e6bc54 Diff: http://git-wip-us.apache.org/repos/asf/lens/diff/f3e6bc54 Branch: refs/heads/master Commit: f3e6bc54263c3d5612449bb9b957b110524a9e50 Parents: 1f12ce5 Author: Sushil Mohanty <[email protected]> Authored: Wed May 18 10:56:14 2016 +0530 Committer: Amareshwari Sriramadasu <[email protected]> Committed: Wed May 18 10:56:14 2016 +0530 ---------------------------------------------------------------------- .../lens/cube/parse/CubeQueryContext.java | 4 ++++ .../lens/cube/parse/TestCubeRewriter.java | 23 +++++++++++++++----- 2 files changed, 21 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lens/blob/f3e6bc54/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryContext.java ---------------------------------------------------------------------- diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryContext.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryContext.java index 0fc8549..cf32746 100644 --- a/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryContext.java +++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/CubeQueryContext.java @@ -1342,6 +1342,10 @@ public class CubeQueryContext implements TrackQueriedColumns, QueryAST { allFilters.add(getFilter(table, cubeAlias, node, joinClause, i, dimToQuery)); } } + } else if (node.getParent() == null + && node.getToken().getType() != HiveParser.KW_AND) { + // if node is the only child + allFilters.add(HQLParser.getString((ASTNode) node)); } for (int i = 0; i < node.getChildCount(); i++) { ASTNode child = (ASTNode) node.getChild(i); http://git-wip-us.apache.org/repos/asf/lens/blob/f3e6bc54/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeRewriter.java ---------------------------------------------------------------------- diff --git a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeRewriter.java b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeRewriter.java index 87799eb..fff6f24 100644 --- a/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeRewriter.java +++ b/lens-cube/src/test/java/org/apache/lens/cube/parse/TestCubeRewriter.java @@ -515,7 +515,7 @@ public class TestCubeRewriter extends TestQueryRewrite { + TWO_DAYS_RANGE, conf); String filterSubquery = "testcube.countryid in ( select id from TestQueryRewrite.c3_countrytable_partitioned " + "cubecountry where ((cubecountry.region) = 'asia') and (cubecountry.dt = 'latest') )"; - //assertTrue(hql.contains(filterSubquery)); + assertTrue(hql.contains(filterSubquery)); // filter with or hql = rewrite( @@ -524,7 +524,7 @@ public class TestCubeRewriter extends TestQueryRewrite { filterSubquery = "testcube.countryid in ( select id from TestQueryRewrite.c3_countrytable_partitioned " + "cubecountry where (((cubecountry.region) = 'asia') or ((cubecountry.region) = 'europe')) " + "and (cubecountry.dt = 'latest') )"; - //assertTrue(hql.contains(filterSubquery)); + assertTrue(hql.contains(filterSubquery)); //filter with in hql = rewrite( @@ -532,7 +532,7 @@ public class TestCubeRewriter extends TestQueryRewrite { + "and " + TWO_DAYS_RANGE , conf); filterSubquery = "testcube.countryid in ( select id from TestQueryRewrite.c3_countrytable_partitioned " + "cubecountry where (cubecountry.region) in ('asia' , 'europe') and (cubecountry.dt = 'latest') )"; - //assertTrue(hql.contains(filterSubquery)); + assertTrue(hql.contains(filterSubquery)); //filter with not in hql = rewrite( @@ -540,7 +540,7 @@ public class TestCubeRewriter extends TestQueryRewrite { + "and " + TWO_DAYS_RANGE , conf); filterSubquery = "testcube.countryid in ( select id from TestQueryRewrite.c3_countrytable_partitioned " + "cubecountry where (cubecountry.region) not in ('asia' , 'europe') and (cubecountry.dt = 'latest') )"; - //assertTrue(hql.contains(filterSubquery)); + assertTrue(hql.contains(filterSubquery)); //filter with != hql = rewrite( @@ -548,7 +548,7 @@ public class TestCubeRewriter extends TestQueryRewrite { + "and " + TWO_DAYS_RANGE , conf); filterSubquery = "testcube.countryid in ( select id from TestQueryRewrite.c3_countrytable_partitioned " + "cubecountry where ((cubecountry.region) != 'asia') and (cubecountry.dt = 'latest') )"; - //assertTrue(hql.contains(filterSubquery)); + assertTrue(hql.contains(filterSubquery)); //filter with cube alias hql = rewrite( @@ -556,7 +556,18 @@ public class TestCubeRewriter extends TestQueryRewrite { + "and zipcode = 'x' and " + TWO_DAYS_RANGE , conf); filterSubquery = "t.countryid in ( select id from TestQueryRewrite.c3_countrytable_partitioned " + "cubecountry where ((cubecountry.region) = 'asia') and (cubecountry.dt = 'latest') )"; - //assertTrue(hql.contains(filterSubquery)); + assertTrue(hql.contains(filterSubquery)); + + //filter with AbridgedTimeRangeWriter + conf.setClass(CubeQueryConfUtil.TIME_RANGE_WRITER_CLASS, AbridgedTimeRangeWriter.class, TimeRangeWriter.class); + hql = rewrite( + "select cubecountry.name, msr2 from" + " testCube" + " where cubecountry.region = 'asia' and " + + TWO_DAYS_RANGE, conf); + filterSubquery = "testcube.countryid in ( select id from TestQueryRewrite.c3_countrytable_partitioned " + + "cubecountry where ((cubecountry.region) = 'asia') and (cubecountry.dt = 'latest') )"; + String timeKeyIn = "(testcube.dt) in"; + assertTrue(hql.contains(timeKeyIn)); + assertTrue(hql.contains(filterSubquery)); } @Test
