Index: ql/src/java/org/apache/hadoop/hive/ql/optimizer/BucketMapjoinProc.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/BucketMapjoinProc.java (revision 1458710) +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/BucketMapjoinProc.java (working copy) @@ -54,6 +54,7 @@ if (convert) { // convert the mapjoin to a bucketized mapjoin convertMapJoinToBucketMapJoin(mapJoinOperator, context); + pGraphContext.getQueryProperties().setHasBucketMapJoin(true); } return null; Index: ql/src/java/org/apache/hadoop/hive/ql/optimizer/SortedMergeJoinProc.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/SortedMergeJoinProc.java (revision 1458710) +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/SortedMergeJoinProc.java (working copy) @@ -49,6 +49,7 @@ if (convert) { convertJoinToSMBJoin(joinOp, smbJoinContext, pGraphContext); + pGraphContext.getQueryProperties().setHasSortMergeJoin(true); } return null; } Index: ql/src/java/org/apache/hadoop/hive/ql/optimizer/SortedMergeBucketMapjoinProc.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/SortedMergeBucketMapjoinProc.java (revision 1458710) +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/SortedMergeBucketMapjoinProc.java (working copy) @@ -61,6 +61,7 @@ if (convert) { convertBucketMapJoinToSMBJoin(mapJoinOp, smbJoinContext, pGraphContext); + pGraphContext.getQueryProperties().setHasSortMergeJoin(true); } return null; } Index: ql/src/java/org/apache/hadoop/hive/ql/QueryProperties.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/QueryProperties.java (revision 1458710) +++ ql/src/java/org/apache/hadoop/hive/ql/QueryProperties.java (working copy) @@ -25,7 +25,7 @@ * A structure to contain features of a query that are determined * during parsing and may be useful for categorizing a query type * - * These inlucde whether the query contains: + * These include whether the query contains: * a join clause, a group by clause, an order by clause, a sort by * clause, a group by clause following a join clause, and whether * the query uses a script for mapping/reducing @@ -44,6 +44,9 @@ boolean hasDistributeBy = false; boolean hasClusterBy = false; + boolean hasBucketMapJoin = false; + boolean hasSortMergeJoin = false; + public boolean hasJoin() { return hasJoin; } @@ -107,4 +110,20 @@ public void setHasClusterBy(boolean hasClusterBy) { this.hasClusterBy = hasClusterBy; } + + public boolean isHasBucketMapJoin() { + return hasBucketMapJoin; + } + + public void setHasBucketMapJoin(boolean hasBucketMapJoin) { + this.hasBucketMapJoin = hasBucketMapJoin; + } + + public boolean isHasSortMergeJoin() { + return hasSortMergeJoin; + } + + public void setHasSortMergeJoin(boolean hasSortMergeJoin) { + this.hasSortMergeJoin = hasSortMergeJoin; + } } Index: ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (revision 1458710) +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (working copy) @@ -317,7 +317,7 @@ loadFileWork, ctx, idToTableNameMap, destTableId, uCtx, listMapJoinOpsNoReducer, groupOpToInputTables, prunedPartitions, opToSamplePruner, globalLimitCtx, nameToSplitSample, inputs, rootTasks, - opToPartToSkewedPruner, viewAliasToInput); + opToPartToSkewedPruner, viewAliasToInput, queryProperties); } @SuppressWarnings("nls") @@ -8486,7 +8486,7 @@ loadTableWork, loadFileWork, ctx, idToTableNameMap, destTableId, uCtx, listMapJoinOpsNoReducer, groupOpToInputTables, prunedPartitions, opToSamplePruner, globalLimitCtx, nameToSplitSample, inputs, rootTasks, - opToPartToSkewedPruner, viewAliasToInput); + opToPartToSkewedPruner, viewAliasToInput, queryProperties); // Generate table access stats if required if (HiveConf.getBoolVar(this.conf, HiveConf.ConfVars.HIVE_STATS_COLLECT_TABLEKEYS) == true) { Index: ql/src/java/org/apache/hadoop/hive/ql/parse/ParseContext.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/parse/ParseContext.java (revision 1458710) +++ ql/src/java/org/apache/hadoop/hive/ql/parse/ParseContext.java (working copy) @@ -28,6 +28,7 @@ import org.apache.hadoop.hive.conf.HiveConf; import org.apache.hadoop.hive.ql.Context; +import org.apache.hadoop.hive.ql.QueryProperties; import org.apache.hadoop.hive.ql.exec.AbstractMapJoinOperator; import org.apache.hadoop.hive.ql.exec.FetchTask; import org.apache.hadoop.hive.ql.exec.GroupByOperator; @@ -109,6 +110,7 @@ private List> rootTasks; private FetchTask fetchTask; + private QueryProperties queryProperties; public ParseContext() { } @@ -174,7 +176,8 @@ HashMap nameToSplitSample, HashSet semanticInputs, List> rootTasks, Map> opToPartToSkewedPruner, - Map viewAliasToInput) { + Map viewAliasToInput, + QueryProperties queryProperties) { this.conf = conf; this.qb = qb; this.ast = ast; @@ -203,6 +206,7 @@ this.rootTasks = rootTasks; this.opToPartToSkewedPruner = opToPartToSkewedPruner; this.viewAliasToInput = viewAliasToInput; + this.queryProperties = queryProperties; } /** @@ -596,4 +600,12 @@ public Map getViewAliasToInput() { return viewAliasToInput; } + + public QueryProperties getQueryProperties() { + return queryProperties; + } + + public void setQueryProperties(QueryProperties queryProperties) { + this.queryProperties = queryProperties; + } }