You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lens.apache.org by am...@apache.org on 2014/12/24 02:20:49 UTC
incubator-lens git commit: LENS-143 : Fix running dimension lookup
queries from cube (Jaideep Dhok via amareshwari)
Repository: incubator-lens
Updated Branches:
refs/heads/master 803c444b4 -> 15f66c36d
LENS-143 : Fix running dimension lookup queries from cube (Jaideep Dhok via amareshwari)
Project: http://git-wip-us.apache.org/repos/asf/incubator-lens/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-lens/commit/15f66c36
Tree: http://git-wip-us.apache.org/repos/asf/incubator-lens/tree/15f66c36
Diff: http://git-wip-us.apache.org/repos/asf/incubator-lens/diff/15f66c36
Branch: refs/heads/master
Commit: 15f66c36dbaa1f68d75fc1958a9eb2e882a8e40f
Parents: 803c444
Author: Amareshwari Sriramdasu <am...@inmobi.com>
Authored: Wed Dec 24 06:50:37 2014 +0530
Committer: Amareshwari Sriramdasu <am...@inmobi.com>
Committed: Wed Dec 24 06:50:37 2014 +0530
----------------------------------------------------------------------
.../apache/lens/cube/parse/AliasReplacer.java | 14 +++++----
.../lens/cube/parse/TimerangeResolver.java | 6 ++++
.../lens/cube/parse/TestCubeRewriter.java | 31 +++++++++++++++-----
3 files changed, 38 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/15f66c36/lens-cube/src/main/java/org/apache/lens/cube/parse/AliasReplacer.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/AliasReplacer.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/AliasReplacer.java
index b2059a9..e4987f3 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/parse/AliasReplacer.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/AliasReplacer.java
@@ -115,11 +115,13 @@ class AliasReplacer implements ContextRewriter {
Set<String> cubeColsQueried = cubeql.getColumnsQueried(cube.getName());
Set<String> queriedDimAttrs = new HashSet<String>();
Set<String> queriedMsrs = new HashSet<String>();
- for (String col : cubeColsQueried) {
- if (cube.getMeasureNames().contains(col)) {
- queriedMsrs.add(col);
- } else if (cube.getDimAttributeNames().contains(col)) {
- queriedDimAttrs.add(col);
+ if (cubeColsQueried != null && !cubeColsQueried.isEmpty()) {
+ for (String col : cubeColsQueried) {
+ if (cube.getMeasureNames().contains(col)) {
+ queriedMsrs.add(col);
+ } else if (cube.getDimAttributeNames().contains(col)) {
+ queriedDimAttrs.add(col);
+ }
}
}
cubeql.addQueriedDimAttrs(queriedDimAttrs);
@@ -152,7 +154,7 @@ class AliasReplacer implements ContextRewriter {
derivedCubeFound = true;
}
}
- if (!derivedCubeFound) {
+ if (!derivedCubeFound && !queriedDimAttrs.isEmpty()) {
throw new SemanticException(ErrorMsg.FIELDS_NOT_QUERYABLE, queriedDimAttrs.toString());
}
if (!queriedMsrs.isEmpty()) {
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/15f66c36/lens-cube/src/main/java/org/apache/lens/cube/parse/TimerangeResolver.java
----------------------------------------------------------------------
diff --git a/lens-cube/src/main/java/org/apache/lens/cube/parse/TimerangeResolver.java b/lens-cube/src/main/java/org/apache/lens/cube/parse/TimerangeResolver.java
index 5b00ff3..f8a4696 100644
--- a/lens-cube/src/main/java/org/apache/lens/cube/parse/TimerangeResolver.java
+++ b/lens-cube/src/main/java/org/apache/lens/cube/parse/TimerangeResolver.java
@@ -146,6 +146,12 @@ class TimerangeResolver implements ContextRewriter {
}
private void doColLifeValidation(CubeQueryContext cubeql) throws SemanticException {
+ Set<String> cubeColumns = cubeql.getColumnsQueried(cubeql.getCube().getName());
+ if (cubeColumns == null || cubeColumns.isEmpty()) {
+ // Query doesn't have any columns from cube
+ return;
+ }
+
for (String col : cubeql.getColumnsQueried(cubeql.getCube().getName())) {
CubeColumn column = cubeql.getCube().getColumnByName(col);
for (TimeRange range : cubeql.getTimeRanges()) {
http://git-wip-us.apache.org/repos/asf/incubator-lens/blob/15f66c36/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 02ce7a9..ad4abcf 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
@@ -94,7 +94,7 @@ public class TestCubeRewriter extends TestQueryRewrite {
rewriteCtx("cube select" + " SUM(msr2) from testCube where " + twoDaysRange, getConf());
String expected =
getExpectedQuery(cubeName, "select sum(testcube.msr2) FROM ", null, null,
- getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
+ getWhereForDailyAndHourly2days(cubeName, "C2_testfact"));
compareQueries(expected, rewrittenQuery.toHQL());
System.out.println("Non existing parts:" + rewrittenQuery.getNonExistingParts());
Assert.assertNotNull(rewrittenQuery.getNonExistingParts());
@@ -171,7 +171,7 @@ public class TestCubeRewriter extends TestQueryRewrite {
getExpectedQuery(CubeTestSetup.DERIVED_CUBE_NAME, "select testdim2.name, sum(derivedCube.msr2) FROM ", " JOIN "
+ getDbName() + "c1_testdim2tbl testdim2 ON derivedCube.dim2 = "
+ " testdim2.id and (testdim2.dt = 'latest') ", null, "group by (testdim2.name)", null,
- getWhereForDailyAndHourly2days(CubeTestSetup.DERIVED_CUBE_NAME, "c1_summary2"));
+ getWhereForDailyAndHourly2days(CubeTestSetup.DERIVED_CUBE_NAME, "c1_summary2"));
compareQueries(expected, hqlQuery);
// Test that explicit join query passes with join resolver disabled
@@ -463,8 +463,8 @@ public class TestCubeRewriter extends TestQueryRewrite {
// q2
hqlQuery =
rewrite("select statedim.name, SUM(msr2) from" + " testCube" + " join citydim on testCube.cityid = citydim.id"
- + " left outer join statedim on statedim.id = citydim.stateid"
- + " right outer join zipdim on citydim.zipcode = zipdim.code" + " where " + twoDaysRange, getConf());
+ + " left outer join statedim on statedim.id = citydim.stateid"
+ + " right outer join zipdim on citydim.zipcode = zipdim.code" + " where " + twoDaysRange, getConf());
joinWhereConds = new ArrayList<String>();
joinWhereConds.add(StorageUtil.getWherePartClause("dt", "citydim", StorageConstants.getPartitionsForLatest()));
joinWhereConds.add(StorageUtil.getWherePartClause("dt", "zipdim", StorageConstants.getPartitionsForLatest()));
@@ -490,7 +490,7 @@ public class TestCubeRewriter extends TestQueryRewrite {
+ "c1_citytable ct ON" + " tc.cityid = ct.id LEFT OUTER JOIN " + getDbName() + "c1_statetable st"
+ " ON st.id = ct.stateid and (st.dt = 'latest') " + "RIGHT OUTER JOIN " + getDbName() + "c1_ziptable"
+ " zt ON ct.zipcode = zt.code", null, " group by" + " st.name ", joinWhereConds,
- getWhereForDailyAndHourly2days("tc", "C2_testfact"));
+ getWhereForDailyAndHourly2days("tc", "C2_testfact"));
compareQueries(expected, hqlQuery);
// q4
@@ -1174,7 +1174,7 @@ public class TestCubeRewriter extends TestQueryRewrite {
compareQueries(expected, hqlQuery);
hqlQuery =
rewrite("select dim1, max(msr3)," + " msr2 from testCube" + " where " + twoDaysRange + " OR "
- + CubeTestSetup.twoDaysRangeBefore4days, getConf());
+ + CubeTestSetup.twoDaysRangeBefore4days, getConf());
expected =
getExpectedQuery(cubeName, "select testcube.dim1, max(testcube.msr3), sum(testcube.msr2) FROM ", null,
" group by testcube.dim1", expectedRangeWhere, "C1_summary1");
@@ -1202,7 +1202,7 @@ public class TestCubeRewriter extends TestQueryRewrite {
String hqlQuery = rewrite("select DISTINCT name, stateid" + " from citydim", getConf());
String expected =
getExpectedQuery("citydim", "select DISTINCT" + " citydim.name, citydim.stateid from ", null, "c1_citytable",
- true);
+ true);
compareQueries(expected, hqlQuery);
hqlQuery = rewrite("select id, sum(distinct id) from" + " citydim group by id", getConf());
@@ -1362,4 +1362,21 @@ public class TestCubeRewriter extends TestQueryRewrite {
System.out.println("##testDimAttributeQueryWithFact " + rewrittenQuery);
Assert.assertTrue(rewrittenQuery.contains("summary1"));
}
+
+ @Test
+ public void testSelectDimonlyJoinOnCube() throws Exception {
+ String query = "SELECT count (distinct citydim.name) from testCube where " + twoDaysRange;
+ HiveConf conf = new HiveConf(getConf(), TestCubeRewriter.class);
+ conf.setBoolean(CubeQueryConfUtil.DISABLE_AUTO_JOINS, false);
+ try {
+ CubeQueryRewriter rewriter = new CubeQueryRewriter(conf);
+ CubeQueryContext context = rewriter.rewrite(query);
+ String hql = context.toHQL();
+ System.out.println("@@ HQL = " + hql);
+ Assert.assertNotNull(hql);
+ } catch (Exception exc) {
+ exc.printStackTrace();
+ Assert.fail("Query should be rewritten successfully.");
+ }
+ }
}