Index: data/files/in3.txt =================================================================== --- data/files/in3.txt (revision 0) +++ data/files/in3.txt (revision 0) @@ -0,0 +1,4 @@ +1235 +40 +48 +100100 Index: ql/src/java/org/apache/hadoop/hive/ql/exec/CommonJoinOperator.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/exec/CommonJoinOperator.java (revision 993606) +++ ql/src/java/org/apache/hadoop/hive/ql/exec/CommonJoinOperator.java (working copy) @@ -40,10 +40,12 @@ import org.apache.hadoop.hive.ql.plan.TableDesc; import org.apache.hadoop.hive.serde2.SerDe; import org.apache.hadoop.hive.serde2.SerDeException; +import org.apache.hadoop.hive.serde2.SerDeUtils; import org.apache.hadoop.hive.serde2.lazybinary.LazyBinarySerDe; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorFactory; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils; +import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils.ObjectInspectorCopyOption; import org.apache.hadoop.mapred.SequenceFileInputFormat; @@ -97,10 +99,14 @@ * The expressions for join outputs. */ protected transient Map> joinValues; + + protected transient Map> joinFilters; /** * The ObjectInspectors for the join inputs. */ protected transient Map> joinValuesObjectInspectors; + + protected transient Map> joinFilterObjectInspectors; /** * The standard ObjectInspectors for the join inputs. */ @@ -183,6 +189,8 @@ this.posToAliasMap = clone.posToAliasMap; this.spillTableDesc = clone.spillTableDesc; this.statsMap = clone.statsMap; + this.joinFilters = clone.joinFilters; + this.joinFilterObjectInspectors = clone.joinFilterObjectInspectors; } protected int populateJoinKeyValue(Map> outMap, @@ -282,6 +290,8 @@ joinValues = new HashMap>(); + joinFilters = new HashMap>(); + if (order == null) { order = conf.getTagOrder(); } @@ -289,9 +299,12 @@ noOuterJoin = conf.isNoOuterJoin(); totalSz = populateJoinKeyValue(joinValues, conf.getExprs()); + populateJoinKeyValue(joinFilters, conf.getFilters()); joinValuesObjectInspectors = getObjectInspectorsFromEvaluators(joinValues, inputObjInspectors); + joinFilterObjectInspectors = getObjectInspectorsFromEvaluators(joinFilters, + inputObjInspectors); joinValuesStandardObjectInspectors = getStandardObjectInspectors(joinValuesObjectInspectors); dummyObj = new Object[numAliases]; @@ -900,6 +913,26 @@ } } + protected Boolean evaluateFilters(Object row) throws HiveException { + // apply join filters on the row. + List evaluators = joinFilters.get(alias); + List ois = joinFilterObjectInspectors.get(alias); + Boolean ret = true; + assert (evaluators.size() == ois.size()); + for (int i = 0; i < evaluators.size(); i++) { + LOG.info("evaluating " + SerDeUtils.getJSONString(row, inputObjInspectors[alias]) + + " with " + evaluators.get(i) + " with oi" + ois.get(i)); + Object condition = evaluators.get(i).evaluate(row); + ret = (Boolean) ((PrimitiveObjectInspector)ois.get(i)).getPrimitiveJavaObject(condition); + LOG.info("filter evaluated for " + row + " as " + ret); + // if row did not pass through filter + if (ret == null || !ret) { + return false; + } + } + return ret; + } + /** * All done. * Index: ql/src/java/org/apache/hadoop/hive/ql/exec/JoinOperator.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/exec/JoinOperator.java (revision 993606) +++ ql/src/java/org/apache/hadoop/hive/ql/exec/JoinOperator.java (working copy) @@ -119,7 +119,8 @@ // Add the value to the vector storage.get(alias).add(nr); // if join-key is null, process each row in different group. - if (SerDeUtils.hasAnyNullObject(keyObject, sf.getFieldObjectInspector())) { + if (SerDeUtils.hasAnyNullObject(keyObject, sf.getFieldObjectInspector()) + || !evaluateFilters(row)) { endGroup(); startGroup(); } Index: ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java (revision 993606) +++ ql/src/java/org/apache/hadoop/hive/ql/exec/MapJoinOperator.java (working copy) @@ -283,7 +283,8 @@ MapJoinObjectValue o = mapJoinTables.get(pos).get(keyMap); // there is no join-value or join-key has all null elements - if (o == null || (hasAnyNulls(key))) { + // or the row does not pass through filters + if (o == null || (hasAnyNulls(key)) || !evaluateFilters(row)) { if (noOuterJoin) { storage.put(pos, emptyList); } else { Index: ql/src/java/org/apache/hadoop/hive/ql/optimizer/MapJoinProcessor.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/MapJoinProcessor.java (revision 993606) +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/MapJoinProcessor.java (working copy) @@ -53,6 +53,7 @@ import org.apache.hadoop.hive.ql.lib.NodeProcessorCtx; import org.apache.hadoop.hive.ql.lib.Rule; import org.apache.hadoop.hive.ql.lib.RuleRegExp; +import org.apache.hadoop.hive.ql.parse.ASTNode; import org.apache.hadoop.hive.ql.parse.ErrorMsg; import org.apache.hadoop.hive.ql.parse.GenMapRedWalker; import org.apache.hadoop.hive.ql.parse.OpParseContext; @@ -60,6 +61,7 @@ import org.apache.hadoop.hive.ql.parse.QBJoinTree; import org.apache.hadoop.hive.ql.parse.RowResolver; import org.apache.hadoop.hive.ql.parse.SemanticException; +import org.apache.hadoop.hive.ql.parse.TypeCheckProcFactory; import org.apache.hadoop.hive.ql.plan.ExprNodeColumnDesc; import org.apache.hadoop.hive.ql.plan.ExprNodeDesc; import org.apache.hadoop.hive.ql.plan.JoinDesc; @@ -126,6 +128,7 @@ ArrayList outputColumnNames = new ArrayList(); Map> keyExprMap = new HashMap>(); Map> valueExprMap = new HashMap>(); + HashMap> filterMap = new HashMap>(); // Walk over all the sources (which are guaranteed to be reduce sink // operators). @@ -180,6 +183,7 @@ newParentOps.get(pos)).getRR(); List values = new ArrayList(); + List filterDesc = new ArrayList(); Iterator keysIter = inputRS.getTableNames().iterator(); while (keysIter.hasNext()) { @@ -208,7 +212,15 @@ } } + for (ASTNode cond : joinTree.getFilters().get((byte)pos)) { + ExprNodeDesc filter = TypeCheckProcFactory.genExprNode(cond, inputRS); + LOG.info("filter" + filter); + filterDesc.add(filter); + } + + valueExprMap.put(new Byte((byte) pos), values); + filterMap.put(new Byte((byte) pos), filterDesc); } org.apache.hadoop.hive.ql.plan.JoinCondDesc[] joinCondns = op.getConf() @@ -247,8 +259,8 @@ MapJoinOperator mapJoinOp = (MapJoinOperator) putOpInsertMap( OperatorFactory.getAndMakeChild(new MapJoinDesc(keyExprMap, keyTableDesc, valueExprMap, valueTableDescs, outputColumnNames, - mapJoinPos, joinCondns), new RowSchema(outputRS.getColumnInfos()), - newPar), outputRS); + mapJoinPos, joinCondns, filterMap, op.getConf().getNoOuterJoin()), + new RowSchema(outputRS.getColumnInfos()), newPar), outputRS); mapJoinOp.getConf().setReversedExprs(op.getConf().getReversedExprs()); mapJoinOp.setColumnExprMap(colExprMap); Index: ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/GenMRSkewJoinProcessor.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/GenMRSkewJoinProcessor.java (revision 993606) +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/GenMRSkewJoinProcessor.java (working copy) @@ -267,8 +267,8 @@ MapJoinDesc mapJoinDescriptor = new MapJoinDesc(newJoinKeys, keyTblDesc, newJoinValues, newJoinValueTblDesc, joinDescriptor - .getOutputColumnNames(), i, joinDescriptor.getConds()); - mapJoinDescriptor.setNoOuterJoin(joinDescriptor.isNoOuterJoin()); + .getOutputColumnNames(), i, joinDescriptor.getConds(), + joinDescriptor.getFilters(), joinDescriptor.getNoOuterJoin()); mapJoinDescriptor.setTagOrder(tags); mapJoinDescriptor.setHandleSkewJoin(false); Index: ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (revision 993606) +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (working copy) @@ -4089,6 +4089,7 @@ HashMap> exprMap = new HashMap>(); Map colExprMap = new HashMap(); HashMap> posToAliasMap = new HashMap>(); + HashMap> filterMap = new HashMap>(); for (int pos = 0; pos < right.length; ++pos) { @@ -4098,6 +4099,7 @@ } ArrayList keyDesc = new ArrayList(); + ArrayList filterDesc = new ArrayList(); Byte tag = Byte.valueOf((byte) (((ReduceSinkDesc) (input.getConf())) .getTag())); @@ -4135,8 +4137,15 @@ } } } + if (join.getFilters().size() != 0) { + for (ASTNode cond : join.getFilters().get(tag)) { + LOG.info("filter" + cond.dump()); + filterDesc.add(genExprNodeDesc(cond, inputRS)); + } + } } exprMap.put(tag, keyDesc); + filterMap.put(tag, filterDesc); rightOps[pos] = input; } @@ -4146,7 +4155,8 @@ joinCondns[i] = new JoinCondDesc(condn); } - JoinDesc desc = new JoinDesc(exprMap, outputColumnNames, joinCondns); + JoinDesc desc = new JoinDesc(exprMap, outputColumnNames, + join.getNoOuterJoin(), joinCondns, filterMap); desc.setReversedExprs(reversedExprs); JoinOperator joinOp = (JoinOperator) OperatorFactory.getAndMakeChild(desc, new RowSchema(outputRS.getColumnInfos()), rightOps); @@ -4430,18 +4440,29 @@ */ private void pushJoinFilters(QB qb, QBJoinTree joinTree, HashMap map) throws SemanticException { - ArrayList> filters = joinTree.getFilters(); if (joinTree.getJoinSrc() != null) { pushJoinFilters(qb, joinTree.getJoinSrc(), map); } - + ArrayList> filters = joinTree.getFilters(); int pos = 0; for (String src : joinTree.getBaseSrc()) { + // do not push filters for alias zero for left outer join and + // alias one for right outer join and + // never push filters for full-outer join. + if (joinTree.getJoinCond()[0].getJoinType().equals(JoinType.FULLOUTER) || + (pos == 0 && joinTree.getJoinCond()[0].getJoinType().equals(JoinType.LEFTOUTER)) || + (pos == 1 && joinTree.getJoinCond()[0].getJoinType().equals(JoinType.RIGHTOUTER))) { + pos++; + continue; + } if (src != null) { Operator srcOp = map.get(src); - ArrayList filter = filters.get(pos); - for (ASTNode cond : filter) { + Iterator filterIt = filters.get(pos).iterator(); + while (filterIt.hasNext()) { + ASTNode cond = filterIt.next(); srcOp = genFilterPlan(qb, cond, srcOp); + // remove the filter once the plan is generated + filterIt.remove(); } map.put(src, srcOp); } Index: ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java (revision 993606) +++ ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java (working copy) @@ -21,21 +21,28 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import java.util.Stack; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.hadoop.hive.ql.exec.AmbiguousMethodException; import org.apache.hadoop.hive.ql.exec.ColumnInfo; import org.apache.hadoop.hive.ql.exec.FunctionInfo; import org.apache.hadoop.hive.ql.exec.FunctionRegistry; import org.apache.hadoop.hive.ql.exec.UDFArgumentException; import org.apache.hadoop.hive.ql.exec.UDFArgumentLengthException; import org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException; +import org.apache.hadoop.hive.ql.lib.DefaultGraphWalker; +import org.apache.hadoop.hive.ql.lib.DefaultRuleDispatcher; +import org.apache.hadoop.hive.ql.lib.Dispatcher; +import org.apache.hadoop.hive.ql.lib.GraphWalker; import org.apache.hadoop.hive.ql.lib.Node; import org.apache.hadoop.hive.ql.lib.NodeProcessor; import org.apache.hadoop.hive.ql.lib.NodeProcessorCtx; +import org.apache.hadoop.hive.ql.lib.Rule; +import org.apache.hadoop.hive.ql.lib.RuleRegExp; import org.apache.hadoop.hive.ql.plan.ExprNodeColumnDesc; import org.apache.hadoop.hive.ql.plan.ExprNodeConstantDesc; import org.apache.hadoop.hive.ql.plan.ExprNodeDesc; @@ -111,6 +118,51 @@ return desc; } + public static ExprNodeDesc genExprNode(ASTNode expr, RowResolver inputRS) + throws SemanticException { + // Create the walker, the rules dispatcher and the context. + TypeCheckCtx tcCtx = new TypeCheckCtx(inputRS); + + // create a walker which walks the tree in a DFS manner while maintaining + // the operator stack. The dispatcher + // generates the plan from the operator tree + Map opRules = new LinkedHashMap(); + + opRules.put(new RuleRegExp("R1", HiveParser.TOK_NULL + "%"), + getNullExprProcessor()); + opRules.put(new RuleRegExp("R2", HiveParser.Number + "%"), + getNumExprProcessor()); + opRules + .put(new RuleRegExp("R3", HiveParser.Identifier + "%|" + + HiveParser.StringLiteral + "%|" + HiveParser.TOK_CHARSETLITERAL + + "%|" + HiveParser.KW_IF + "%|" + HiveParser.KW_CASE + "%|" + + HiveParser.KW_WHEN + "%|" + HiveParser.KW_IN + "%|" + + HiveParser.KW_ARRAY + "%|" + HiveParser.KW_MAP + "%|" + + HiveParser.KW_STRUCT + "%"), + getStrExprProcessor()); + opRules.put(new RuleRegExp("R4", HiveParser.KW_TRUE + "%|" + + HiveParser.KW_FALSE + "%"), getBoolExprProcessor()); + opRules.put(new RuleRegExp("R5", HiveParser.TOK_TABLE_OR_COL + "%"), + getColumnExprProcessor()); + + // The dispatcher fires the processor corresponding to the closest matching + // rule and passes the context along + Dispatcher disp = new DefaultRuleDispatcher(getDefaultExprProcessor(), + opRules, tcCtx); + GraphWalker ogw = new DefaultGraphWalker(disp); + + // Create a list of topop nodes + ArrayList topNodes = new ArrayList(); + topNodes.add(expr); + HashMap nodeOutputs = new HashMap(); + ogw.startWalking(topNodes, nodeOutputs); + ExprNodeDesc desc = (ExprNodeDesc) nodeOutputs.get(expr); + if (desc == null) { + throw new SemanticException(tcCtx.getError()); + } + return desc; + } + /** * Processor for processing NULL expression. */ Index: ql/src/java/org/apache/hadoop/hive/ql/plan/JoinDesc.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/plan/JoinDesc.java (revision 993606) +++ ql/src/java/org/apache/hadoop/hive/ql/plan/JoinDesc.java (working copy) @@ -48,6 +48,9 @@ // alias to key mapping private Map> exprs; + // alias to filter mapping + private Map> filters; + // used for create joinOutputObjectInspector protected List outputColumnNames; @@ -67,17 +70,23 @@ public JoinDesc(final Map> exprs, List outputColumnNames, final boolean noOuterJoin, - final JoinCondDesc[] conds) { + final JoinCondDesc[] conds, final Map> filters) { this.exprs = exprs; this.outputColumnNames = outputColumnNames; this.noOuterJoin = noOuterJoin; this.conds = conds; + this.filters = filters; tagOrder = new Byte[exprs.size()]; for (int i = 0; i < tagOrder.length; i++) { tagOrder[i] = (byte) i; } } + public JoinDesc(final Map> exprs, + List outputColumnNames, final boolean noOuterJoin, + final JoinCondDesc[] conds) { + this(exprs, outputColumnNames, noOuterJoin, conds, null); + } public JoinDesc(final Map> exprs, List outputColumnNames) { @@ -86,7 +95,7 @@ public JoinDesc(final Map> exprs, List outputColumnNames, final JoinCondDesc[] conds) { - this(exprs, outputColumnNames, false, conds); + this(exprs, outputColumnNames, true, conds, null); } public JoinDesc(JoinDesc clone) { @@ -102,6 +111,7 @@ this.skewKeysValuesTables = clone.skewKeysValuesTables; this.smallKeysDirMap = clone.smallKeysDirMap; this.tagOrder = clone.tagOrder; + this.filters = clone.filters; } public Map> getExprs() { @@ -149,6 +159,15 @@ this.exprs = exprs; } + @Explain(displayName = "filter predicates") + public Map> getFilters() { + return filters; + } + + public void setFilters(Map> filters) { + this.filters = filters; + } + @Explain(displayName = "outputColumnNames") public List getOutputColumnNames() { return outputColumnNames; @@ -288,7 +307,7 @@ } public boolean isNoOuterJoin() { - for (org.apache.hadoop.hive.ql.plan.JoinCondDesc cond : conds) { +/* for (org.apache.hadoop.hive.ql.plan.JoinCondDesc cond : conds) { if (cond.getType() == JoinDesc.FULL_OUTER_JOIN || (cond.getType() == JoinDesc.LEFT_OUTER_JOIN) || cond.getType() == JoinDesc.RIGHT_OUTER_JOIN) { @@ -296,6 +315,8 @@ } } return true; +*/ + return noOuterJoin; } public void setKeyTableDesc(TableDesc keyTblDesc) { Index: ql/src/java/org/apache/hadoop/hive/ql/plan/MapJoinDesc.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/plan/MapJoinDesc.java (revision 993606) +++ ql/src/java/org/apache/hadoop/hive/ql/plan/MapJoinDesc.java (working copy) @@ -68,8 +68,9 @@ public MapJoinDesc(final Map> keys, final TableDesc keyTblDesc, final Map> values, final List valueTblDescs, List outputColumnNames, - final int posBigTable, final JoinCondDesc[] conds) { - super(values, outputColumnNames, conds); + final int posBigTable, final JoinCondDesc[] conds, + final Map> filters, boolean noOuterJoin) { + super(values, outputColumnNames, noOuterJoin, conds, filters); this.keys = keys; this.keyTblDesc = keyTblDesc; this.valueTblDescs = valueTblDescs; Index: ql/src/test/queries/clientpositive/join_filters.q =================================================================== --- ql/src/test/queries/clientpositive/join_filters.q (revision 0) +++ ql/src/test/queries/clientpositive/join_filters.q (revision 0) @@ -0,0 +1,37 @@ +CREATE TABLE myinput1(key int, value int); +LOAD DATA LOCAL INPATH '../data/files/in3.txt' INTO TABLE myinput1; + +SELECT * FROM myinput1 a JOIN myinput1 b on a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b on a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b on a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT * FROM myinput1 a JOIN myinput1 b ON a.key = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT * FROM myinput1 a JOIN myinput1 b ON a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT * FROM myinput1 a JOIN myinput1 b ON a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT * FROM myinput1 a JOIN myinput1 b ON a.value = b.value and a.key=b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.key and a.value=b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key=b.key and a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT * FROM myinput1 a FULL OUTER JOIN myinput1 b ON a.key = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT * FROM myinput1 a FULL OUTER JOIN myinput1 b ON a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT * FROM myinput1 a FULL OUTER JOIN myinput1 b ON a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT * FROM myinput1 a FULL OUTER JOIN myinput1 b ON a.value = b.value and a.key=b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; + +SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b on a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b ON a.key = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b ON a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b ON a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a JOIN myinput1 b ON a.key = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a JOIN myinput1 b ON a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a JOIN myinput1 b ON a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a JOIN myinput1 b ON a.value = b.value and a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; +SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value; Index: ql/src/test/results/clientpositive/join_filters.q.out =================================================================== --- ql/src/test/results/clientpositive/join_filters.q.out (revision 0) +++ ql/src/test/results/clientpositive/join_filters.q.out (revision 0) @@ -0,0 +1,377 @@ +PREHOOK: query: CREATE TABLE myinput1(key int, value int) +PREHOOK: type: CREATETABLE +POSTHOOK: query: CREATE TABLE myinput1(key int, value int) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@myinput1 +PREHOOK: query: LOAD DATA LOCAL INPATH '../data/files/in3.txt' INTO TABLE myinput1 +PREHOOK: type: LOAD +POSTHOOK: query: LOAD DATA LOCAL INPATH '../data/files/in3.txt' INTO TABLE myinput1 +POSTHOOK: type: LOAD +POSTHOOK: Output: default@myinput1 +PREHOOK: query: SELECT * FROM myinput1 a JOIN myinput1 b on a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-44-29_537_7579602323067827192/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a JOIN myinput1 b on a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-44-29_537_7579602323067827192/-mr-10000 +12 35 12 35 +PREHOOK: query: SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b on a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-44-32_451_6395355699625684155/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b on a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-44-32_451_6395355699625684155/-mr-10000 +12 35 NULL NULL +NULL 40 NULL NULL +48 NULL NULL NULL +100 100 NULL NULL +PREHOOK: query: SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b on a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-44-35_195_1012058313685937489/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b on a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-44-35_195_1012058313685937489/-mr-10000 +12 35 12 35 +12 35 NULL 40 +NULL NULL 48 NULL +NULL NULL 100 100 +PREHOOK: query: SELECT * FROM myinput1 a JOIN myinput1 b ON a.key = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-44-37_677_869391257343721330/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a JOIN myinput1 b ON a.key = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-44-37_677_869391257343721330/-mr-10000 +PREHOOK: query: SELECT * FROM myinput1 a JOIN myinput1 b ON a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-44-40_156_5389098939490880566/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a JOIN myinput1 b ON a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-44-40_156_5389098939490880566/-mr-10000 +12 35 12 35 +PREHOOK: query: SELECT * FROM myinput1 a JOIN myinput1 b ON a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-44-42_698_3851677292433557280/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a JOIN myinput1 b ON a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-44-42_698_3851677292433557280/-mr-10000 +12 35 12 35 +PREHOOK: query: SELECT * FROM myinput1 a JOIN myinput1 b ON a.value = b.value and a.key=b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-44-45_323_7959041321732872881/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a JOIN myinput1 b ON a.value = b.value and a.key=b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-44-45_323_7959041321732872881/-mr-10000 +12 35 12 35 +PREHOOK: query: SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-44-47_630_1461486487542085749/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-44-47_630_1461486487542085749/-mr-10000 +NULL 40 NULL NULL +12 35 NULL NULL +48 NULL NULL NULL +100 100 NULL NULL +PREHOOK: query: SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-44-49_977_922617154820306774/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-44-49_977_922617154820306774/-mr-10000 +48 NULL NULL NULL +12 35 12 35 +NULL 40 NULL NULL +100 100 NULL NULL +PREHOOK: query: SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-44-52_269_7134989046494345607/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-44-52_269_7134989046494345607/-mr-10000 +NULL 40 NULL NULL +12 35 12 35 +48 NULL NULL NULL +100 100 NULL NULL +PREHOOK: query: SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.key and a.value=b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-44-54_669_2069686779130493839/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.key and a.value=b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-44-54_669_2069686779130493839/-mr-10000 +NULL 40 NULL NULL +12 35 12 35 +48 NULL NULL NULL +100 100 NULL NULL +PREHOOK: query: SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-44-57_015_4957605391576994731/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-44-57_015_4957605391576994731/-mr-10000 +NULL NULL 48 NULL +NULL NULL 12 35 +NULL NULL NULL 40 +NULL NULL 100 100 +PREHOOK: query: SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-44-59_383_438142532978435171/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-44-59_383_438142532978435171/-mr-10000 +NULL NULL NULL 40 +12 35 12 35 +NULL NULL 48 NULL +NULL NULL 100 100 +PREHOOK: query: SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-01_727_552069334353749128/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-01_727_552069334353749128/-mr-10000 +NULL NULL 48 NULL +12 35 12 35 +NULL NULL NULL 40 +NULL NULL 100 100 +PREHOOK: query: SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key=b.key and a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-04_068_7640279166390296511/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key=b.key and a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-04_068_7640279166390296511/-mr-10000 +NULL NULL NULL 40 +12 35 12 35 +NULL NULL 48 NULL +NULL NULL 100 100 +PREHOOK: query: SELECT * FROM myinput1 a FULL OUTER JOIN myinput1 b ON a.key = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-06_412_5631011045403434355/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a FULL OUTER JOIN myinput1 b ON a.key = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-06_412_5631011045403434355/-mr-10000 +NULL 40 NULL NULL +NULL NULL 48 NULL +12 35 NULL NULL +NULL NULL 12 35 +NULL NULL NULL 40 +48 NULL NULL NULL +100 100 NULL NULL +NULL NULL 100 100 +PREHOOK: query: SELECT * FROM myinput1 a FULL OUTER JOIN myinput1 b ON a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-08_730_3317412167281216018/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a FULL OUTER JOIN myinput1 b ON a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-08_730_3317412167281216018/-mr-10000 +NULL 40 NULL NULL +NULL NULL NULL 40 +12 35 12 35 +48 NULL NULL NULL +NULL NULL 48 NULL +100 100 NULL NULL +NULL NULL 100 100 +PREHOOK: query: SELECT * FROM myinput1 a FULL OUTER JOIN myinput1 b ON a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-11_037_7530733494307744413/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a FULL OUTER JOIN myinput1 b ON a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-11_037_7530733494307744413/-mr-10000 +48 NULL NULL NULL +NULL NULL 48 NULL +12 35 12 35 +NULL 40 NULL NULL +NULL NULL NULL 40 +100 100 NULL NULL +NULL NULL 100 100 +PREHOOK: query: SELECT * FROM myinput1 a FULL OUTER JOIN myinput1 b ON a.value = b.value and a.key=b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-13_323_7777703262528615590/-mr-10000 +POSTHOOK: query: SELECT * FROM myinput1 a FULL OUTER JOIN myinput1 b ON a.value = b.value and a.key=b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-13_323_7777703262528615590/-mr-10000 +48 NULL NULL NULL +NULL NULL 48 NULL +12 35 12 35 +NULL 40 NULL NULL +NULL NULL NULL 40 +100 100 NULL NULL +NULL NULL 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b on a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-15_617_2530169571757650688/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b on a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-15_617_2530169571757650688/-mr-10000 +12 35 12 35 +PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b ON a.key = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-17_917_517883212378679117/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b ON a.key = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-17_917_517883212378679117/-mr-10000 +PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b ON a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-20_275_5738956998670590690/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b ON a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-20_275_5738956998670590690/-mr-10000 +12 35 12 35 +PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b ON a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-22_876_2550270391101403802/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a JOIN myinput1 b ON a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-22_876_2550270391101403802/-mr-10000 +12 35 12 35 +PREHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a JOIN myinput1 b ON a.key = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-25_215_4057048251815752254/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a JOIN myinput1 b ON a.key = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-25_215_4057048251815752254/-mr-10000 +PREHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a JOIN myinput1 b ON a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-27_520_7393689718943424921/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a JOIN myinput1 b ON a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-27_520_7393689718943424921/-mr-10000 +12 35 12 35 +PREHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a JOIN myinput1 b ON a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-29_815_2080097723103804478/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a JOIN myinput1 b ON a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-29_815_2080097723103804478/-mr-10000 +12 35 12 35 +PREHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a JOIN myinput1 b ON a.value = b.value and a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-32_206_2273873259410705993/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a JOIN myinput1 b ON a.value = b.value and a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-32_206_2273873259410705993/-mr-10000 +12 35 12 35 +PREHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-34_525_7570830980369735799/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-34_525_7570830980369735799/-mr-10000 +12 35 NULL NULL +NULL 40 NULL NULL +48 NULL NULL NULL +100 100 NULL NULL +PREHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-36_814_4689970610633347884/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-36_814_4689970610633347884/-mr-10000 +12 35 12 35 +NULL 40 NULL NULL +48 NULL NULL NULL +100 100 NULL NULL +PREHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-39_155_4249223460867410620/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(b) */ * FROM myinput1 a LEFT OUTER JOIN myinput1 b ON a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-39_155_4249223460867410620/-mr-10000 +12 35 12 35 +NULL 40 NULL NULL +48 NULL NULL NULL +100 100 NULL NULL +PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-41_450_5857337673140369076/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-41_450_5857337673140369076/-mr-10000 +NULL NULL 12 35 +NULL NULL NULL 40 +NULL NULL 48 NULL +NULL NULL 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-43_776_1496096811441101478/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.key = b.key AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-43_776_1496096811441101478/-mr-10000 +12 35 12 35 +NULL NULL NULL 40 +NULL NULL 48 NULL +NULL NULL 100 100 +PREHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +PREHOOK: type: QUERY +PREHOOK: Input: default@myinput1 +PREHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-46_056_811501630708229150/-mr-10000 +POSTHOOK: query: SELECT /*+ MAPJOIN(a) */ * FROM myinput1 a RIGHT OUTER JOIN myinput1 b ON a.value = b.value AND a.key < 40 AND a.value < 50 AND a.key < a.value AND b.key < 40 AND b.value < 50 AND b.key < b.value +POSTHOOK: type: QUERY +POSTHOOK: Input: default@myinput1 +POSTHOOK: Output: file:/tmp/amarsri/hive_2010-09-09_04-45-46_056_811501630708229150/-mr-10000 +12 35 12 35 +NULL NULL NULL 40 +NULL NULL 48 NULL +NULL NULL 100 100