You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2014/08/12 22:07:00 UTC
svn commit: r1617575 - in /hive/branches/cbo:
common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
Author: hashutosh
Date: Tue Aug 12 20:06:59 2014
New Revision: 1617575
URL: http://svn.apache.org/r1617575
Log:
HIVE-7687 : Invoke cbo only when needed (Ashutosh Chauhan via John Pullokkran)
Modified:
hive/branches/cbo/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
Modified: hive/branches/cbo/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
URL: http://svn.apache.org/viewvc/hive/branches/cbo/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java?rev=1617575&r1=1617574&r2=1617575&view=diff
==============================================================================
--- hive/branches/cbo/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java (original)
+++ hive/branches/cbo/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java Tue Aug 12 20:06:59 2014
@@ -611,9 +611,6 @@ public class HiveConf extends Configurat
// CBO related
HIVE_CBO_ENABLED("hive.cbo.enable", false, "Flag to control enabling Cost Based Optimizations using Optiq framework."),
- HIVE_CBO_MAX_JOINS_SUPPORTED("hive.cbo.max.joins.supported", 10, " Control queries that will be considered for join reordering, based on number of joins in them. Beyond a certain number of joins, the cost of considering possible permutations is prohibitive."),
- HIVE_CBO_PULLPROJECTABOVEJOIN_RULE("hive.cbo.project.pullabovejoin.rule", false, ""),
- HIVE_CBO_GREEDY_JOIN_ORDER("hive.cbo.greedy.join.order", false, ""),
// hive.mapjoin.bucket.cache.size has been replaced by hive.smbjoin.cache.row,
// need to remove by hive .13. Also, do not change default (see SMB operator)
Modified: hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java?rev=1617575&r1=1617574&r2=1617575&view=diff
==============================================================================
--- hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (original)
+++ hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java Tue Aug 12 20:06:59 2014
@@ -11766,8 +11766,7 @@ public class SemanticAnalyzer extends Ba
private boolean canHandleQuery() {
boolean runOptiqPlanner = false;
- if ((queryProperties.getJoinCount() < HiveConf.getIntVar(conf,
- HiveConf.ConfVars.HIVE_CBO_MAX_JOINS_SUPPORTED))
+ if ((queryProperties.getJoinCount() > 1)
&& !queryProperties.hasClusterBy()
&& !queryProperties.hasDistributeBy()
&& !queryProperties.hasSortBy()
@@ -11840,56 +11839,27 @@ public class SemanticAnalyzer extends Ba
List<RelMetadataProvider> list = Lists.newArrayList();
list.add(HiveDefaultRelMetadataProvider.INSTANCE);
RelTraitSet desiredTraits = cluster.traitSetOf(HiveRel.CONVENTION, RelCollationImpl.EMPTY);
- final boolean bushy = RelOptUtil.countJoins(optiqPreCboPlan) > 3 ? true : false;
- if (!bushy) {
- planner.registerMetadataProviders(list);
+ HepProgram hepPgm = null;
+ HepProgramBuilder hepPgmBldr = new HepProgramBuilder().addMatchOrder(
+ HepMatchOrder.BOTTOM_UP).addRuleInstance(new ConvertMultiJoinRule(HiveJoinRel.class));
+ hepPgmBldr.addRuleInstance(new LoptOptimizeJoinRule(HiveJoinRel.HIVE_JOIN_FACTORY));
- RelMetadataProvider chainedProvider = ChainedRelMetadataProvider.of(list);
- cluster.setMetadataProvider(new CachingRelMetadataProvider(chainedProvider, planner));
+ hepPgm = hepPgmBldr.build();
+ HepPlanner hepPlanner = new HepPlanner(hepPgm);
- planner.addRule(HiveSwapJoinRule.INSTANCE);
- planner.addRule(HivePushJoinThroughJoinRule.LEFT);
- planner.addRule(HivePushJoinThroughJoinRule.RIGHT);
- if (HiveConf.getBoolVar(conf, HiveConf.ConfVars.HIVE_CBO_PULLPROJECTABOVEJOIN_RULE)) {
- planner.addRule(HivePullUpProjectsAboveJoinRule.BOTH_PROJECT);
- planner.addRule(HivePullUpProjectsAboveJoinRule.LEFT_PROJECT);
- planner.addRule(HivePullUpProjectsAboveJoinRule.RIGHT_PROJECT);
- planner.addRule(HiveMergeProjectRule.INSTANCE);
- }
-
- RelNode rootRel = optiqPreCboPlan;
- if (!optiqPreCboPlan.getTraitSet().equals(desiredTraits)) {
- rootRel = planner.changeTraits(optiqPreCboPlan, desiredTraits);
- }
- planner.setRoot(rootRel);
-
- optiqOptimizedPlan = planner.findBestExp();
- } else {
- HepProgram hepPgm = null;
- HepProgramBuilder hepPgmBldr = new HepProgramBuilder().addMatchOrder(
- HepMatchOrder.BOTTOM_UP).addRuleInstance(new ConvertMultiJoinRule(HiveJoinRel.class));
- if (HiveConf.getBoolVar(conf, HiveConf.ConfVars.HIVE_CBO_GREEDY_JOIN_ORDER)) {
- hepPgmBldr.addRuleInstance(new LoptOptimizeJoinRule(HiveJoinRel.HIVE_JOIN_FACTORY));
- } else {
- hepPgmBldr.addRuleInstance(new OptimizeBushyJoinRule(HiveJoinRel.HIVE_JOIN_FACTORY,
- HiveProjectRel.DEFAULT_PROJECT_FACTORY));
- }
- hepPgm = hepPgmBldr.build();
- HepPlanner hepPlanner = new HepPlanner(hepPgm);
+ hepPlanner.registerMetadataProviders(list);
+ RelMetadataProvider chainedProvider = ChainedRelMetadataProvider.of(list);
+ cluster.setMetadataProvider(new CachingRelMetadataProvider(chainedProvider, hepPlanner));
- hepPlanner.registerMetadataProviders(list);
- RelMetadataProvider chainedProvider = ChainedRelMetadataProvider.of(list);
- cluster.setMetadataProvider(new CachingRelMetadataProvider(chainedProvider, hepPlanner));
+ RelNode rootRel = optiqPreCboPlan;
+ if (!optiqPreCboPlan.getTraitSet().equals(desiredTraits)) {
+ rootRel = hepPlanner.changeTraits(optiqPreCboPlan, desiredTraits);
+ }
+ hepPlanner.setRoot(rootRel);
- RelNode rootRel = optiqPreCboPlan;
- if (!optiqPreCboPlan.getTraitSet().equals(desiredTraits)) {
- rootRel = hepPlanner.changeTraits(optiqPreCboPlan, desiredTraits);
- }
- hepPlanner.setRoot(rootRel);
+ optiqOptimizedPlan = hepPlanner.findBestExp();
- optiqOptimizedPlan = hepPlanner.findBestExp();
- }
if (LOG.isDebugEnabled()) {
LOG.debug("CBO Planning details:\n");