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.");
+    }
+  }
 }