Index: common/src/java/org/apache/hadoop/hive/conf/HiveConf.java =================================================================== --- common/src/java/org/apache/hadoop/hive/conf/HiveConf.java (revision 1043321) +++ common/src/java/org/apache/hadoop/hive/conf/HiveConf.java (working copy) @@ -64,6 +64,20 @@ }; /** + * dbVars are the parameters can be set per database. If these + * parameters are set as a database property, when switching to that + * database, the HiveConf variable will be changed. The change of these + * parameters will effectively change the DFS and MapReduce clusters + * for different databases. + */ + public static final HiveConf.ConfVars[] dbVars = { + HiveConf.ConfVars.HADOOPBIN, + HiveConf.ConfVars.HADOOPJT, + HiveConf.ConfVars.METASTOREWAREHOUSE, + HiveConf.ConfVars.SCRATCHDIR + }; + + /** * ConfVars. * */ @@ -315,7 +329,7 @@ HIVEFETCHOUTPUTSERDE("hive.fetch.output.serde", "org.apache.hadoop.hive.serde2.DelimitedJSONSerDe"), SEMANTIC_ANALYZER_HOOK("hive.semantic.analyzer.hook",null), - + // Print column names in output HIVE_CLI_PRINT_HEADER("hive.cli.print.header", false); ; Index: ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java (revision 1043321) +++ ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java (working copy) @@ -2490,6 +2490,22 @@ throw new HiveException("ERROR: The database " + dbName + " does not exist."); } db.setCurrentDatabase(dbName); + + // set database specific parameters + Database database = db.getDatabase(dbName); + assert(database != null); + Map dbParams = database.getParameters(); + if (dbParams != null) { + for (HiveConf.ConfVars var: HiveConf.dbVars) { + String newValue = dbParams.get(var.varname); + if (newValue != null) { + LOG.info("Changing " + var.varname + + " from " + conf.getVar(var) + " to " + newValue); + conf.setVar(var, newValue); + } + } + } + return 0; }