You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by am...@apache.org on 2013/06/07 14:31:44 UTC
svn commit: r1490611 - in /hive/branches/HIVE-4115/ql/src:
java/org/apache/hadoop/hive/ql/cube/parse/CubeQueryContext.java
test/org/apache/hadoop/hive/ql/cube/processors/TestCubeDriver.java
Author: amareshwari
Date: Fri Jun 7 12:31:44 2013
New Revision: 1490611
URL: http://svn.apache.org/r1490611
Log:
Make union query as subquery
Modified:
hive/branches/HIVE-4115/ql/src/java/org/apache/hadoop/hive/ql/cube/parse/CubeQueryContext.java
hive/branches/HIVE-4115/ql/src/test/org/apache/hadoop/hive/ql/cube/processors/TestCubeDriver.java
Modified: hive/branches/HIVE-4115/ql/src/java/org/apache/hadoop/hive/ql/cube/parse/CubeQueryContext.java
URL: http://svn.apache.org/viewvc/hive/branches/HIVE-4115/ql/src/java/org/apache/hadoop/hive/ql/cube/parse/CubeQueryContext.java?rev=1490611&r1=1490610&r2=1490611&view=diff
==============================================================================
--- hive/branches/HIVE-4115/ql/src/java/org/apache/hadoop/hive/ql/cube/parse/CubeQueryContext.java (original)
+++ hive/branches/HIVE-4115/ql/src/java/org/apache/hadoop/hive/ql/cube/parse/CubeQueryContext.java Fri Jun 7 12:31:44 2013
@@ -726,6 +726,25 @@ public class CubeQueryContext {
return queryFormat.toString();
}
+ private final String unionQueryFormat = "SELECT * FROM %s";
+ String getUnionQueryFormat() {
+ StringBuilder queryFormat = new StringBuilder();
+ queryFormat.append(unionQueryFormat);
+ if (getGroupByTree() != null) {
+ queryFormat.append(" GROUP BY %s");
+ }
+ if (getHavingTree() != null) {
+ queryFormat.append(" HAVING %s");
+ }
+ if (getOrderByTree() != null) {
+ queryFormat.append(" ORDER BY %s");
+ }
+ if (getLimitValue() != null) {
+ queryFormat.append(" LIMIT %s");
+ }
+ return queryFormat.toString();
+ }
+
private Object[] getQueryTreeStrings(String factStorageTable)
throws SemanticException {
List<String> qstrs = new ArrayList<String>();
@@ -750,6 +769,24 @@ public class CubeQueryContext {
return qstrs.toArray(new String[0]);
}
+ private Object[] getUnionQueryTreeStrings(String baseQuery) {
+ List<String> qstrs = new ArrayList<String>();
+ qstrs.add("(" + baseQuery + ") "+ getAliasForTabName(cube.getName()));
+ if (getGroupByTree() != null) {
+ qstrs.add(getGroupByTree());
+ }
+ if (getHavingTree() != null) {
+ qstrs.add(getHavingTree());
+ }
+ if (getOrderByTree() != null) {
+ qstrs.add(getOrderByTree());
+ }
+ if (getLimitValue() != null) {
+ qstrs.add(String.valueOf(getLimitValue()));
+ }
+ return qstrs.toArray(new String[0]);
+ }
+
private String getFromString() throws SemanticException {
String fromString = null;
if (joinTree == null) {
@@ -827,6 +864,12 @@ public class CubeQueryContext {
return String.format(qfmt, getQueryTreeStrings(tableName));
}
+ private String getUnionQuery(String baseQuery) {
+ String qfmt = getUnionQueryFormat();
+ LOG.info("union query format:" + qfmt);
+ return String.format(qfmt, getUnionQueryTreeStrings(baseQuery));
+
+ }
private void appendWhereClause(StringBuilder whereWithoutTimerange,
String whereClause, boolean hasMore) {
if (hasMore) {
@@ -919,7 +962,11 @@ public class CubeQueryContext {
query.append(" UNION ALL ");
}
}
- return query.toString();
+ if (partColMap.keySet().size() > 1) {
+ return getUnionQuery(query.toString());
+ } else {
+ return query.toString();
+ }
} else {
return toHQL(null);
}
Modified: hive/branches/HIVE-4115/ql/src/test/org/apache/hadoop/hive/ql/cube/processors/TestCubeDriver.java
URL: http://svn.apache.org/viewvc/hive/branches/HIVE-4115/ql/src/test/org/apache/hadoop/hive/ql/cube/processors/TestCubeDriver.java?rev=1490611&r1=1490610&r2=1490611&view=diff
==============================================================================
--- hive/branches/HIVE-4115/ql/src/test/org/apache/hadoop/hive/ql/cube/processors/TestCubeDriver.java (original)
+++ hive/branches/HIVE-4115/ql/src/test/org/apache/hadoop/hive/ql/cube/processors/TestCubeDriver.java Fri Jun 7 12:31:44 2013
@@ -131,7 +131,15 @@ public class TestCubeDriver {
}
i++;
}
- return expected.toString();
+ if (numTabs > 1) {
+ String query = "select * from (" + expected.toString() + ")" + cubeName;
+ if (postWhereExpr != null) {
+ query += " " + postWhereExpr;
+ }
+ return query;
+ } else {
+ return expected.toString();
+ }
}
public String getExpectedQuery(String cubeName, String selExpr,
@@ -171,7 +179,15 @@ public class TestCubeDriver {
}
i++;
}
- return expected.toString();
+ if (numTabs > 1) {
+ String query = "select * from (" + expected.toString() + ")" + cubeName;
+ if (postWhereExpr != null) {
+ query += " " + postWhereExpr;
+ }
+ return query;
+ } else {
+ return expected.toString();
+ }
}
private Map<String, String> getWhereForDailyAndHourly2days(String cubeName,
@@ -280,10 +296,12 @@ public class TestCubeDriver {
}
private void compareQueries(String expected, String actual) {
+ System.out.println("Expected:" + expected);
expected = expected.replaceAll("\\W", "");
actual = actual.replaceAll("\\W", "");
Assert.assertTrue(expected.equalsIgnoreCase(actual));
}
+
@Test
public void testCubeWhereQuery() throws Exception {
String hqlQuery = driver.compileCubeQuery("select SUM(msr2) from testCube" +