You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by dh...@apache.org on 2008/09/17 02:28:24 UTC
svn commit: r696112 - in /hadoop/core/trunk: ./
src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/
src/contrib/hive/ql/src/test/queries/clientpositive/
src/contrib/hive/ql/src/test/queries/negative/
src/contrib/hive/ql/src/test/results/clien...
Author: dhruba
Date: Tue Sep 16 17:28:22 2008
New Revision: 696112
URL: http://svn.apache.org/viewvc?rev=696112&view=rev
Log:
HADOOP-4139. Optimize Hive multi group-by.
(Namin Jain via dhruba)
Added:
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/groupby7.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/groupby8.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/negative/wrong_distinct3.q
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/groupby7.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/groupby8.q.out
hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/errors/wrong_distinct3.q.out
Modified:
hadoop/core/trunk/CHANGES.txt
hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
Modified: hadoop/core/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/CHANGES.txt?rev=696112&r1=696111&r2=696112&view=diff
==============================================================================
--- hadoop/core/trunk/CHANGES.txt (original)
+++ hadoop/core/trunk/CHANGES.txt Tue Sep 16 17:28:22 2008
@@ -574,6 +574,9 @@
HADOOP-4129. Changed memory limits of TaskTracker and Tasks to be in
KiloBytes rather than bytes. (Vinod Kumar Vavilapalli via acmurthy)
+ HADOOP-4139. Optimize Hive multi group-by.
+ (Namin Jain via dhruba)
+
Release 0.18.1 - 2008-09-17
IMPROVEMENTS
Modified: hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java?rev=696112&r1=696111&r2=696112&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (original)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java Tue Sep 16 17:28:22 2008
@@ -1027,6 +1027,78 @@
}
@SuppressWarnings("nls")
+ private OperatorInfo genGroupByPlanGroupByOpForward(
+ QBParseInfo parseInfo, String dest, OperatorInfo forwardOpInfo,
+ groupByDesc.Mode mode)
+ throws SemanticException {
+ RowResolver inputRS = forwardOpInfo.getRowResolver();
+ RowResolver outputRS = new RowResolver();
+ outputRS.setIsExprResolver(true);
+ ArrayList<exprNodeDesc> groupByKeys = new ArrayList<exprNodeDesc>();
+ ArrayList<aggregationDesc> aggregations = new ArrayList<aggregationDesc>();
+ List<CommonTree> grpByExprs = getGroupByForClause(parseInfo, dest);
+ for (int i = 0; i < grpByExprs.size(); i++) {
+ CommonTree grpbyExpr = grpByExprs.get(i);
+ String text = grpbyExpr.toStringTree();
+ ColumnInfo exprInfo = inputRS.get("",text);
+
+ if (exprInfo == null) {
+ throw new SemanticException(ErrorMsg.INVALID_COLUMN.getMsg(grpbyExpr));
+ }
+
+ groupByKeys.add(new exprNodeColumnDesc(exprInfo.getType(), exprInfo.getInternalName()));
+ String field = (Integer.valueOf(i)).toString();
+ outputRS.put("", text,
+ new ColumnInfo(field, exprInfo.getType(), exprInfo.getIsVirtual()));
+ }
+
+ // For each aggregation
+ HashMap<String, CommonTree> aggregationTrees = parseInfo
+ .getAggregationExprsForClause(dest);
+ assert (aggregationTrees != null);
+ for (Map.Entry<String, CommonTree> entry : aggregationTrees.entrySet()) {
+ CommonTree value = entry.getValue();
+ String aggName = value.getChild(0).getText();
+ Class<? extends UDAF> aggClass = UDAFRegistry.getUDAF(aggName);
+ assert (aggClass != null);
+ ArrayList<exprNodeDesc> aggParameters = new ArrayList<exprNodeDesc>();
+ ArrayList<Class<?>> aggClasses = new ArrayList<Class<?>>();
+ // 0 is the function name
+ for (int i = 1; i < value.getChildCount(); i++) {
+ String text = value.getChild(i).toStringTree();
+ CommonTree paraExpr = (CommonTree)value.getChild(i);
+ ColumnInfo paraExprInfo = inputRS.get("", text);
+ if (paraExprInfo == null) {
+ throw new SemanticException(ErrorMsg.INVALID_COLUMN.getMsg(paraExpr));
+ }
+
+ String paraExpression = paraExprInfo.getInternalName();
+ assert(paraExpression != null);
+ aggParameters.add(new exprNodeColumnDesc(paraExprInfo.getType(), paraExprInfo.getInternalName()));
+ aggClasses.add(paraExprInfo.getType().getPrimitiveClass());
+ }
+
+ if (null == UDAFRegistry.getUDAFMethod(aggName, aggClasses)) {
+ String reason = "Looking for UDAF \"" + aggName + "\" with parameters " + aggClasses;
+ throw new SemanticException(ErrorMsg.INVALID_FUNCTION_SIGNATURE.getMsg((CommonTree)value.getChild(0), reason));
+ }
+
+ aggregations.add(new aggregationDesc(aggClass, aggParameters,
+ value.getToken().getType() == HiveParser.TOK_FUNCTIONDI));
+ outputRS.put("",value.toStringTree(),
+ new ColumnInfo(Integer.valueOf(groupByKeys.size() + aggregations.size() -1).toString(),
+ String.class, false)); // Everything is a string right now
+ }
+
+ return new OperatorInfo(
+ OperatorFactory.getAndMakeChild(new groupByDesc(mode, groupByKeys, aggregations),
+ new RowSchema(outputRS.getColumnInfos()),
+ forwardOpInfo.getOp()),
+ outputRS
+ );
+ }
+
+ @SuppressWarnings("nls")
private OperatorInfo genGroupByPlanReduceSinkOperator(QBParseInfo parseInfo,
String dest, OperatorInfo inputOperatorInfo, int numPartitionFields)
throws SemanticException {
@@ -1095,6 +1167,106 @@
}
@SuppressWarnings("nls")
+ private OperatorInfo genGroupByPlanReduceSinkOperator(QBParseInfo parseInfo,
+ OperatorInfo input, CommonTree distinctText, TreeSet<String> ks)
+ throws SemanticException {
+ RowResolver inputRS = input.getRowResolver();
+ RowResolver outputRS = new RowResolver();
+ outputRS.setIsExprResolver(true);
+ ArrayList<exprNodeDesc> reduceKeys = new ArrayList<exprNodeDesc>();
+
+ // Spray on distinctText first
+ if (distinctText != null)
+ {
+ reduceKeys.add(genExprNodeDesc(distinctText, parseInfo.getAlias(), inputRS));
+ String text = distinctText.toStringTree();
+ assert (outputRS.get("", text) == null);
+ outputRS.put("", text,
+ new ColumnInfo(Utilities.ReduceField.KEY.toString() + "." + Integer.valueOf(reduceKeys.size() - 1).toString(),
+ String.class, false));
+ }
+ else
+ reduceKeys.add(new exprNodeNullDesc());
+
+ // copy the input row resolver
+ ArrayList<exprNodeDesc> reduceValues = new ArrayList<exprNodeDesc>();
+ Iterator<String> keysIter = inputRS.getTableNames().iterator();
+ while (keysIter.hasNext())
+ {
+ String key = keysIter.next();
+ HashMap<String, ColumnInfo> map = inputRS.getFieldMap(key);
+ Iterator<String> fNamesIter = map.keySet().iterator();
+ while (fNamesIter.hasNext())
+ {
+ String field = fNamesIter.next();
+ ColumnInfo valueInfo = inputRS.get(key, field);
+
+ if (outputRS.get(key, field) == null)
+ {
+ reduceValues.add(new exprNodeColumnDesc(valueInfo.getType(), valueInfo.getInternalName()));
+ outputRS.put(key, field, new ColumnInfo(Utilities.ReduceField.VALUE.toString() + "." + Integer.valueOf(reduceValues.size() - 1).toString(), valueInfo.getType(),
+ valueInfo.getIsVirtual()));
+ }
+ }
+ }
+
+ for (String dest : ks) {
+ List<CommonTree> grpByExprs = getGroupByForClause(parseInfo, dest);
+
+ // send all the group by expressions
+ for (int i = 0; i < grpByExprs.size(); ++i) {
+ CommonTree grpbyExpr = grpByExprs.get(i);
+ String text = grpbyExpr.toStringTree();
+ if (outputRS.get("", text) == null) {
+ exprNodeDesc grpbyExprNode = genExprNodeDesc(grpbyExpr, parseInfo.getAlias(), inputRS);
+ reduceValues.add(grpbyExprNode);
+ outputRS.put("", text,
+ new ColumnInfo(Utilities.ReduceField.VALUE.toString() + "." + Integer.valueOf(reduceValues.size() - 1).toString(),
+ grpbyExprNode.getTypeInfo(), false));
+ }
+ }
+
+ // send all the aggregation expressions
+ HashMap<String, CommonTree> aggregationTrees = parseInfo.getAggregationExprsForClause(dest);
+ for (Map.Entry<String, CommonTree> entry : aggregationTrees.entrySet()) {
+ CommonTree value = entry.getValue();
+ // 0 is function name
+ for (int i = 1; i < value.getChildCount(); i++) {
+ CommonTree parameter = (CommonTree) value.getChild(i);
+ String text = parameter.toStringTree();
+ if (outputRS.get("",text) == null) {
+ exprNodeDesc pNode = genExprNodeDesc(parameter, parseInfo.getAlias(), inputRS);
+ reduceValues.add(pNode);
+ outputRS.put("", text,
+ new ColumnInfo(Utilities.ReduceField.VALUE.toString() + "." + Integer.valueOf(reduceValues.size() - 1).toString(),
+ pNode.getTypeInfo(), false));
+ }
+ }
+ }
+ }
+
+ return new OperatorInfo(
+ OperatorFactory.getAndMakeChild(new reduceSinkDesc(reduceKeys, reduceValues, distinctText == null ? -1 : 1),
+ new RowSchema(outputRS.getColumnInfos()), input.getOp()),
+ outputRS);
+ }
+
+ @SuppressWarnings("nls")
+ private OperatorInfo genGroupByPlanForwardOperator(QBParseInfo parseInfo, OperatorInfo input)
+ throws SemanticException {
+ RowResolver outputRS = input.getRowResolver();;
+
+ Operator<? extends Serializable> forward = OperatorFactory.get(forwardDesc.class,
+ new RowSchema(outputRS.getColumnInfos()));
+ // set forward operator as child of each of input
+ List<Operator<? extends Serializable>> child = new ArrayList<Operator<? extends Serializable>>();
+ child.add(forward);
+ input.getOp().setChildOperators(child);
+
+ return new OperatorInfo(forward, outputRS);
+ }
+
+ @SuppressWarnings("nls")
private OperatorInfo genGroupByPlanReduceSinkOperator2MR(
QBParseInfo parseInfo, String dest, OperatorInfo groupByOperatorInfo,
int numPartitionFields) {
@@ -1298,6 +1470,46 @@
return output;
}
+ /**
+ * Generate a Group-By plan using a 2 map-reduce jobs. The first map-reduce
+ * job has already been constructed. Evaluate partial aggregates first,
+ * followed by actual aggregates. The first map-reduce stage will be
+ * shared by all groupbys.
+ */
+ @SuppressWarnings("nls")
+ private OperatorInfoList genGroupByPlan3MR(String dest, QB qb,
+ OperatorInfoList inputList) throws SemanticException {
+
+ // We can assert here that the input list is of size one
+ if (inputList.size() != 1) {
+ throw new SemanticException("Select has more than one inputs");
+ }
+ OperatorInfo inputOperatorInfo = inputList.get(0);
+ QBParseInfo parseInfo = qb.getParseInfo();
+
+ // ////// Generate GroupbyOperator
+ OperatorInfo groupByOperatorInfo = genGroupByPlanGroupByOpForward(parseInfo,
+ dest, inputOperatorInfo, groupByDesc.Mode.PARTIAL1);
+
+ // ////// Generate ReduceSinkOperator2
+ OperatorInfo reduceSinkOperatorInfo2 = genGroupByPlanReduceSinkOperator2MR(
+ parseInfo, dest, groupByOperatorInfo,
+ getGroupByForClause(parseInfo, dest).size());
+
+ // ////// Generate GroupbyOperator2
+ OperatorInfo groupByOperatorInfo2 = genGroupByPlanGroupByOperator2MR(
+ parseInfo, dest, reduceSinkOperatorInfo2);
+
+ // ////// Generate SelectOperator
+ OperatorInfo selectOperatorInfo = genGroupByPlanSelectOperator(parseInfo,
+ dest, groupByOperatorInfo2);
+
+ // ////// Create output
+ OperatorInfoList output = new OperatorInfoList();
+ output.add(selectOperatorInfo);
+ return output;
+ }
+
@SuppressWarnings("nls")
private OperatorInfoList genConversionOps(String dest, QB qb,
OperatorInfoList input) throws SemanticException {
@@ -1870,26 +2082,66 @@
TreeSet<String> ks = new TreeSet<String>();
ks.addAll(qbp.getClauseNames());
- // Go over all the destination tables
+ String distinctText = null;
+ CommonTree distn = null;
+ OperatorInfoList opList = null;
+ boolean grpBy = false;
+
+ // In case of a multiple group bys, all of them should have the same distinct key
for (String dest : ks) {
+ // is it a group by
+ if ((qbp.getAggregationExprsForClause(dest).size() != 0)
+ || (getGroupByForClause(qbp, dest).size() > 0)) {
+ grpBy = true;
+
+ // If there is a distinctFuncExp, add all parameters to the reduceKeys.
+ if (qbp.getDistinctFuncExprForClause(dest) != null) {
+ CommonTree value = qbp.getDistinctFuncExprForClause(dest);
+ if (value.getChildCount() != 2)
+ throw new SemanticException(ErrorMsg.UNSUPPORTED_MULTIPLE_DISTINCTS.getMsg(value));
+ distn = (CommonTree)value.getChild(1);
+ String dist = distn.toStringTree();;
+ if (distinctText == null)
+ distinctText = dist;
+ if (!distinctText.equals(dist))
+ throw new SemanticException(ErrorMsg.UNSUPPORTED_MULTIPLE_DISTINCTS.getMsg(value));
+ }
+ }
+ }
+
+ // In the first stage, copy the input and all the group by expressions
+ // and aggregate paramaters. This can be optimized in the future to only
+ // evaluate expressions that occur frequently
+ if (grpBy) {
+ OperatorInfo reduceSinkOperatorInfo =
+ genGroupByPlanReduceSinkOperator(qbp, input.get(0), distn, ks);
- OperatorInfoList curr = input;
+ // ////// 2. Generate GroupbyOperator
+ OperatorInfo forwardOperatorInfo = genGroupByPlanForwardOperator(qbp, reduceSinkOperatorInfo);
+ opList = new OperatorInfoList();
+ opList.add(forwardOperatorInfo);
+ }
+
+ // Go over all the destination tables
+ for (String dest : ks) {
+ boolean groupByExpr = false;
+ if (qbp.getAggregationExprsForClause(dest).size() != 0
+ || getGroupByForClause(qbp, dest).size() > 0)
+ groupByExpr = true;
+
+ OperatorInfoList curr = input;
+ if (groupByExpr)
+ curr = opList;
if (qbp.getWhrForClause(dest) != null) {
curr = genFilterPlan(dest, qb, curr);
}
if (qbp.getAggregationExprsForClause(dest).size() != 0
- || getGroupByForClause(qbp, dest).size() > 0) {
- // We always do 2MR group-by for now.
- // In the future, we will do 1MR group-by for
- // 1. Queries without DISTINCT (we will add combiner to 1MR group-by);
- // 2. Queries with UDAFs that does not support partial aggregations.
- curr = genGroupByPlan2MR(dest, qb, curr);
- // curr = genGroupByPlan1MR(dest, qb, curr);
- } else {
+ || getGroupByForClause(qbp, dest).size() > 0)
+ curr = genGroupByPlan3MR(dest, qb, curr);
+ else
curr = genSelectPlan(dest, qb, curr);
- }
if (qbp.getClusterByForClause(dest) != null) {
curr = genReduceSinkPlan(dest, qb, curr);
Added: hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/groupby7.q
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/groupby7.q?rev=696112&view=auto
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/groupby7.q (added)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/groupby7.q Tue Sep 16 17:28:22 2008
@@ -0,0 +1,9 @@
+CREATE TABLE DEST1(key INT, value STRING);
+CREATE TABLE DEST2(key INT, value STRING);
+
+FROM SRC
+INSERT OVERWRITE TABLE DEST1 SELECT SRC.key, sum(SUBSTR(SRC.value,4)) GROUP BY SRC.key
+INSERT OVERWRITE TABLE DEST2 SELECT SRC.key, sum(SUBSTR(SRC.value,4)) GROUP BY SRC.key;
+
+SELECT DEST1.* FROM DEST1;
+SELECT DEST1.* FROM DEST2;
Added: hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/groupby8.q
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/groupby8.q?rev=696112&view=auto
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/groupby8.q (added)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/clientpositive/groupby8.q Tue Sep 16 17:28:22 2008
@@ -0,0 +1,10 @@
+CREATE TABLE DEST1(key INT, value STRING);
+CREATE TABLE DEST2(key INT, value STRING);
+
+FROM SRC
+INSERT OVERWRITE TABLE DEST1 SELECT SRC.key, COUNT(DISTINCT SUBSTR(SRC.value,4)) GROUP BY SRC.key
+INSERT OVERWRITE TABLE DEST2 SELECT SRC.key, COUNT(DISTINCT SUBSTR(SRC.value,4)) GROUP BY SRC.key;
+
+SELECT DEST1.* FROM DEST1;
+SELECT DEST1.* FROM DEST2;
+
Added: hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/negative/wrong_distinct3.q
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/negative/wrong_distinct3.q?rev=696112&view=auto
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/negative/wrong_distinct3.q (added)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/test/queries/negative/wrong_distinct3.q Tue Sep 16 17:28:22 2008
@@ -0,0 +1,3 @@
+FROM SRC
+INSERT OVERWRITE TABLE DEST1 SELECT SRC.key, COUNT(DISTINCT SUBSTR(SRC.value,4)) GROUP BY SRC.key
+INSERT OVERWRITE TABLE DEST2 SELECT SRC.key, COUNT(DISTINCT SUBSTR(SRC.value,5)) GROUP BY SRC.key
Added: hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/groupby7.q.out
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/groupby7.q.out?rev=696112&view=auto
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/groupby7.q.out (added)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/groupby7.q.out Tue Sep 16 17:28:22 2008
@@ -0,0 +1,618 @@
+0 0.0
+10 10.0
+100 200.0
+103 206.0
+104 208.0
+105 105.0
+11 11.0
+111 111.0
+113 226.0
+114 114.0
+116 116.0
+118 236.0
+119 357.0
+12 24.0
+120 240.0
+125 250.0
+126 126.0
+128 384.0
+129 258.0
+131 131.0
+133 133.0
+134 268.0
+136 136.0
+137 274.0
+138 552.0
+143 143.0
+145 145.0
+146 292.0
+149 298.0
+15 30.0
+150 150.0
+152 304.0
+153 153.0
+155 155.0
+156 156.0
+157 157.0
+158 158.0
+160 160.0
+162 162.0
+163 163.0
+164 328.0
+165 330.0
+166 166.0
+167 501.0
+168 168.0
+169 676.0
+17 17.0
+170 170.0
+172 344.0
+174 348.0
+175 350.0
+176 352.0
+177 177.0
+178 178.0
+179 358.0
+18 36.0
+180 180.0
+181 181.0
+183 183.0
+186 186.0
+187 561.0
+189 189.0
+19 19.0
+190 190.0
+191 382.0
+192 192.0
+193 579.0
+194 194.0
+195 390.0
+196 196.0
+197 394.0
+199 597.0
+2 2.0
+20 20.0
+200 400.0
+201 201.0
+202 202.0
+203 406.0
+205 410.0
+207 414.0
+208 624.0
+209 418.0
+213 426.0
+214 214.0
+216 432.0
+217 434.0
+218 218.0
+219 438.0
+221 442.0
+222 222.0
+223 446.0
+224 448.0
+226 226.0
+228 228.0
+229 458.0
+230 1150.0
+233 466.0
+235 235.0
+237 474.0
+238 476.0
+239 478.0
+24 48.0
+241 241.0
+242 484.0
+244 244.0
+247 247.0
+248 248.0
+249 249.0
+252 252.0
+255 510.0
+256 512.0
+257 257.0
+258 258.0
+26 52.0
+260 260.0
+262 262.0
+263 263.0
+265 530.0
+266 266.0
+27 27.0
+272 544.0
+273 819.0
+274 274.0
+275 275.0
+277 1108.0
+278 556.0
+28 28.0
+280 560.0
+281 562.0
+282 564.0
+283 283.0
+284 284.0
+285 285.0
+286 286.0
+287 287.0
+288 576.0
+289 289.0
+291 291.0
+292 292.0
+296 296.0
+298 894.0
+30 30.0
+302 302.0
+305 305.0
+306 306.0
+307 614.0
+308 308.0
+309 618.0
+310 310.0
+311 933.0
+315 315.0
+316 948.0
+317 634.0
+318 954.0
+321 642.0
+322 644.0
+323 323.0
+325 650.0
+327 981.0
+33 33.0
+331 662.0
+332 332.0
+333 666.0
+335 335.0
+336 336.0
+338 338.0
+339 339.0
+34 34.0
+341 341.0
+342 684.0
+344 688.0
+345 345.0
+348 1740.0
+35 105.0
+351 351.0
+353 706.0
+356 356.0
+360 360.0
+362 362.0
+364 364.0
+365 365.0
+366 366.0
+367 734.0
+368 368.0
+369 1107.0
+37 74.0
+373 373.0
+374 374.0
+375 375.0
+377 377.0
+378 378.0
+379 379.0
+382 764.0
+384 1152.0
+386 386.0
+389 389.0
+392 392.0
+393 393.0
+394 394.0
+395 790.0
+396 1188.0
+397 794.0
+399 798.0
+4 4.0
+400 400.0
+401 2005.0
+402 402.0
+403 1209.0
+404 808.0
+406 1624.0
+407 407.0
+409 1227.0
+41 41.0
+411 411.0
+413 826.0
+414 828.0
+417 1251.0
+418 418.0
+419 419.0
+42 84.0
+421 421.0
+424 848.0
+427 427.0
+429 858.0
+43 43.0
+430 1290.0
+431 1293.0
+432 432.0
+435 435.0
+436 436.0
+437 437.0
+438 1314.0
+439 878.0
+44 44.0
+443 443.0
+444 444.0
+446 446.0
+448 448.0
+449 449.0
+452 452.0
+453 453.0
+454 1362.0
+455 455.0
+457 457.0
+458 916.0
+459 918.0
+460 460.0
+462 924.0
+463 926.0
+466 1398.0
+467 467.0
+468 1872.0
+469 2345.0
+47 47.0
+470 470.0
+472 472.0
+475 475.0
+477 477.0
+478 956.0
+479 479.0
+480 1440.0
+481 481.0
+482 482.0
+483 483.0
+484 484.0
+485 485.0
+487 487.0
+489 1956.0
+490 490.0
+491 491.0
+492 984.0
+493 493.0
+494 494.0
+495 495.0
+496 496.0
+497 497.0
+498 1494.0
+5 15.0
+51 102.0
+53 53.0
+54 54.0
+57 57.0
+58 116.0
+64 64.0
+65 65.0
+66 66.0
+67 134.0
+69 69.0
+70 210.0
+72 144.0
+74 74.0
+76 152.0
+77 77.0
+78 78.0
+8 8.0
+80 80.0
+82 82.0
+83 166.0
+84 168.0
+85 85.0
+86 86.0
+87 87.0
+9 9.0
+90 270.0
+92 92.0
+95 190.0
+96 96.0
+97 194.0
+98 196.0
+0 0.0
+10 10.0
+100 200.0
+103 206.0
+104 208.0
+105 105.0
+11 11.0
+111 111.0
+113 226.0
+114 114.0
+116 116.0
+118 236.0
+119 357.0
+12 24.0
+120 240.0
+125 250.0
+126 126.0
+128 384.0
+129 258.0
+131 131.0
+133 133.0
+134 268.0
+136 136.0
+137 274.0
+138 552.0
+143 143.0
+145 145.0
+146 292.0
+149 298.0
+15 30.0
+150 150.0
+152 304.0
+153 153.0
+155 155.0
+156 156.0
+157 157.0
+158 158.0
+160 160.0
+162 162.0
+163 163.0
+164 328.0
+165 330.0
+166 166.0
+167 501.0
+168 168.0
+169 676.0
+17 17.0
+170 170.0
+172 344.0
+174 348.0
+175 350.0
+176 352.0
+177 177.0
+178 178.0
+179 358.0
+18 36.0
+180 180.0
+181 181.0
+183 183.0
+186 186.0
+187 561.0
+189 189.0
+19 19.0
+190 190.0
+191 382.0
+192 192.0
+193 579.0
+194 194.0
+195 390.0
+196 196.0
+197 394.0
+199 597.0
+2 2.0
+20 20.0
+200 400.0
+201 201.0
+202 202.0
+203 406.0
+205 410.0
+207 414.0
+208 624.0
+209 418.0
+213 426.0
+214 214.0
+216 432.0
+217 434.0
+218 218.0
+219 438.0
+221 442.0
+222 222.0
+223 446.0
+224 448.0
+226 226.0
+228 228.0
+229 458.0
+230 1150.0
+233 466.0
+235 235.0
+237 474.0
+238 476.0
+239 478.0
+24 48.0
+241 241.0
+242 484.0
+244 244.0
+247 247.0
+248 248.0
+249 249.0
+252 252.0
+255 510.0
+256 512.0
+257 257.0
+258 258.0
+26 52.0
+260 260.0
+262 262.0
+263 263.0
+265 530.0
+266 266.0
+27 27.0
+272 544.0
+273 819.0
+274 274.0
+275 275.0
+277 1108.0
+278 556.0
+28 28.0
+280 560.0
+281 562.0
+282 564.0
+283 283.0
+284 284.0
+285 285.0
+286 286.0
+287 287.0
+288 576.0
+289 289.0
+291 291.0
+292 292.0
+296 296.0
+298 894.0
+30 30.0
+302 302.0
+305 305.0
+306 306.0
+307 614.0
+308 308.0
+309 618.0
+310 310.0
+311 933.0
+315 315.0
+316 948.0
+317 634.0
+318 954.0
+321 642.0
+322 644.0
+323 323.0
+325 650.0
+327 981.0
+33 33.0
+331 662.0
+332 332.0
+333 666.0
+335 335.0
+336 336.0
+338 338.0
+339 339.0
+34 34.0
+341 341.0
+342 684.0
+344 688.0
+345 345.0
+348 1740.0
+35 105.0
+351 351.0
+353 706.0
+356 356.0
+360 360.0
+362 362.0
+364 364.0
+365 365.0
+366 366.0
+367 734.0
+368 368.0
+369 1107.0
+37 74.0
+373 373.0
+374 374.0
+375 375.0
+377 377.0
+378 378.0
+379 379.0
+382 764.0
+384 1152.0
+386 386.0
+389 389.0
+392 392.0
+393 393.0
+394 394.0
+395 790.0
+396 1188.0
+397 794.0
+399 798.0
+4 4.0
+400 400.0
+401 2005.0
+402 402.0
+403 1209.0
+404 808.0
+406 1624.0
+407 407.0
+409 1227.0
+41 41.0
+411 411.0
+413 826.0
+414 828.0
+417 1251.0
+418 418.0
+419 419.0
+42 84.0
+421 421.0
+424 848.0
+427 427.0
+429 858.0
+43 43.0
+430 1290.0
+431 1293.0
+432 432.0
+435 435.0
+436 436.0
+437 437.0
+438 1314.0
+439 878.0
+44 44.0
+443 443.0
+444 444.0
+446 446.0
+448 448.0
+449 449.0
+452 452.0
+453 453.0
+454 1362.0
+455 455.0
+457 457.0
+458 916.0
+459 918.0
+460 460.0
+462 924.0
+463 926.0
+466 1398.0
+467 467.0
+468 1872.0
+469 2345.0
+47 47.0
+470 470.0
+472 472.0
+475 475.0
+477 477.0
+478 956.0
+479 479.0
+480 1440.0
+481 481.0
+482 482.0
+483 483.0
+484 484.0
+485 485.0
+487 487.0
+489 1956.0
+490 490.0
+491 491.0
+492 984.0
+493 493.0
+494 494.0
+495 495.0
+496 496.0
+497 497.0
+498 1494.0
+5 15.0
+51 102.0
+53 53.0
+54 54.0
+57 57.0
+58 116.0
+64 64.0
+65 65.0
+66 66.0
+67 134.0
+69 69.0
+70 210.0
+72 144.0
+74 74.0
+76 152.0
+77 77.0
+78 78.0
+8 8.0
+80 80.0
+82 82.0
+83 166.0
+84 168.0
+85 85.0
+86 86.0
+87 87.0
+9 9.0
+90 270.0
+92 92.0
+95 190.0
+96 96.0
+97 194.0
+98 196.0
Added: hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/groupby8.q.out
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/groupby8.q.out?rev=696112&view=auto
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/groupby8.q.out (added)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/test/results/clientpositive/groupby8.q.out Tue Sep 16 17:28:22 2008
@@ -0,0 +1,618 @@
+0 1
+10 1
+100 1
+103 1
+104 1
+105 1
+11 1
+111 1
+113 1
+114 1
+116 1
+118 1
+119 1
+12 1
+120 1
+125 1
+126 1
+128 1
+129 1
+131 1
+133 1
+134 1
+136 1
+137 1
+138 1
+143 1
+145 1
+146 1
+149 1
+15 1
+150 1
+152 1
+153 1
+155 1
+156 1
+157 1
+158 1
+160 1
+162 1
+163 1
+164 1
+165 1
+166 1
+167 1
+168 1
+169 1
+17 1
+170 1
+172 1
+174 1
+175 1
+176 1
+177 1
+178 1
+179 1
+18 1
+180 1
+181 1
+183 1
+186 1
+187 1
+189 1
+19 1
+190 1
+191 1
+192 1
+193 1
+194 1
+195 1
+196 1
+197 1
+199 1
+2 1
+20 1
+200 1
+201 1
+202 1
+203 1
+205 1
+207 1
+208 1
+209 1
+213 1
+214 1
+216 1
+217 1
+218 1
+219 1
+221 1
+222 1
+223 1
+224 1
+226 1
+228 1
+229 1
+230 1
+233 1
+235 1
+237 1
+238 1
+239 1
+24 1
+241 1
+242 1
+244 1
+247 1
+248 1
+249 1
+252 1
+255 1
+256 1
+257 1
+258 1
+26 1
+260 1
+262 1
+263 1
+265 1
+266 1
+27 1
+272 1
+273 1
+274 1
+275 1
+277 1
+278 1
+28 1
+280 1
+281 1
+282 1
+283 1
+284 1
+285 1
+286 1
+287 1
+288 1
+289 1
+291 1
+292 1
+296 1
+298 1
+30 1
+302 1
+305 1
+306 1
+307 1
+308 1
+309 1
+310 1
+311 1
+315 1
+316 1
+317 1
+318 1
+321 1
+322 1
+323 1
+325 1
+327 1
+33 1
+331 1
+332 1
+333 1
+335 1
+336 1
+338 1
+339 1
+34 1
+341 1
+342 1
+344 1
+345 1
+348 1
+35 1
+351 1
+353 1
+356 1
+360 1
+362 1
+364 1
+365 1
+366 1
+367 1
+368 1
+369 1
+37 1
+373 1
+374 1
+375 1
+377 1
+378 1
+379 1
+382 1
+384 1
+386 1
+389 1
+392 1
+393 1
+394 1
+395 1
+396 1
+397 1
+399 1
+4 1
+400 1
+401 1
+402 1
+403 1
+404 1
+406 1
+407 1
+409 1
+41 1
+411 1
+413 1
+414 1
+417 1
+418 1
+419 1
+42 1
+421 1
+424 1
+427 1
+429 1
+43 1
+430 1
+431 1
+432 1
+435 1
+436 1
+437 1
+438 1
+439 1
+44 1
+443 1
+444 1
+446 1
+448 1
+449 1
+452 1
+453 1
+454 1
+455 1
+457 1
+458 1
+459 1
+460 1
+462 1
+463 1
+466 1
+467 1
+468 1
+469 1
+47 1
+470 1
+472 1
+475 1
+477 1
+478 1
+479 1
+480 1
+481 1
+482 1
+483 1
+484 1
+485 1
+487 1
+489 1
+490 1
+491 1
+492 1
+493 1
+494 1
+495 1
+496 1
+497 1
+498 1
+5 1
+51 1
+53 1
+54 1
+57 1
+58 1
+64 1
+65 1
+66 1
+67 1
+69 1
+70 1
+72 1
+74 1
+76 1
+77 1
+78 1
+8 1
+80 1
+82 1
+83 1
+84 1
+85 1
+86 1
+87 1
+9 1
+90 1
+92 1
+95 1
+96 1
+97 1
+98 1
+0 1
+10 1
+100 1
+103 1
+104 1
+105 1
+11 1
+111 1
+113 1
+114 1
+116 1
+118 1
+119 1
+12 1
+120 1
+125 1
+126 1
+128 1
+129 1
+131 1
+133 1
+134 1
+136 1
+137 1
+138 1
+143 1
+145 1
+146 1
+149 1
+15 1
+150 1
+152 1
+153 1
+155 1
+156 1
+157 1
+158 1
+160 1
+162 1
+163 1
+164 1
+165 1
+166 1
+167 1
+168 1
+169 1
+17 1
+170 1
+172 1
+174 1
+175 1
+176 1
+177 1
+178 1
+179 1
+18 1
+180 1
+181 1
+183 1
+186 1
+187 1
+189 1
+19 1
+190 1
+191 1
+192 1
+193 1
+194 1
+195 1
+196 1
+197 1
+199 1
+2 1
+20 1
+200 1
+201 1
+202 1
+203 1
+205 1
+207 1
+208 1
+209 1
+213 1
+214 1
+216 1
+217 1
+218 1
+219 1
+221 1
+222 1
+223 1
+224 1
+226 1
+228 1
+229 1
+230 1
+233 1
+235 1
+237 1
+238 1
+239 1
+24 1
+241 1
+242 1
+244 1
+247 1
+248 1
+249 1
+252 1
+255 1
+256 1
+257 1
+258 1
+26 1
+260 1
+262 1
+263 1
+265 1
+266 1
+27 1
+272 1
+273 1
+274 1
+275 1
+277 1
+278 1
+28 1
+280 1
+281 1
+282 1
+283 1
+284 1
+285 1
+286 1
+287 1
+288 1
+289 1
+291 1
+292 1
+296 1
+298 1
+30 1
+302 1
+305 1
+306 1
+307 1
+308 1
+309 1
+310 1
+311 1
+315 1
+316 1
+317 1
+318 1
+321 1
+322 1
+323 1
+325 1
+327 1
+33 1
+331 1
+332 1
+333 1
+335 1
+336 1
+338 1
+339 1
+34 1
+341 1
+342 1
+344 1
+345 1
+348 1
+35 1
+351 1
+353 1
+356 1
+360 1
+362 1
+364 1
+365 1
+366 1
+367 1
+368 1
+369 1
+37 1
+373 1
+374 1
+375 1
+377 1
+378 1
+379 1
+382 1
+384 1
+386 1
+389 1
+392 1
+393 1
+394 1
+395 1
+396 1
+397 1
+399 1
+4 1
+400 1
+401 1
+402 1
+403 1
+404 1
+406 1
+407 1
+409 1
+41 1
+411 1
+413 1
+414 1
+417 1
+418 1
+419 1
+42 1
+421 1
+424 1
+427 1
+429 1
+43 1
+430 1
+431 1
+432 1
+435 1
+436 1
+437 1
+438 1
+439 1
+44 1
+443 1
+444 1
+446 1
+448 1
+449 1
+452 1
+453 1
+454 1
+455 1
+457 1
+458 1
+459 1
+460 1
+462 1
+463 1
+466 1
+467 1
+468 1
+469 1
+47 1
+470 1
+472 1
+475 1
+477 1
+478 1
+479 1
+480 1
+481 1
+482 1
+483 1
+484 1
+485 1
+487 1
+489 1
+490 1
+491 1
+492 1
+493 1
+494 1
+495 1
+496 1
+497 1
+498 1
+5 1
+51 1
+53 1
+54 1
+57 1
+58 1
+64 1
+65 1
+66 1
+67 1
+69 1
+70 1
+72 1
+74 1
+76 1
+77 1
+78 1
+8 1
+80 1
+82 1
+83 1
+84 1
+85 1
+86 1
+87 1
+9 1
+90 1
+92 1
+95 1
+96 1
+97 1
+98 1
Added: hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/errors/wrong_distinct3.q.out
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/errors/wrong_distinct3.q.out?rev=696112&view=auto
==============================================================================
--- hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/errors/wrong_distinct3.q.out (added)
+++ hadoop/core/trunk/src/contrib/hive/ql/src/test/results/compiler/errors/wrong_distinct3.q.out Tue Sep 16 17:28:22 2008
@@ -0,0 +1,2 @@
+Semantic Exception:
+line 3:45 DISTINCT on Different Columns not Supported 5
\ No newline at end of file