Index: data/files/tab_prefix_data.txt =================================================================== --- data/files/tab_prefix_data.txt (revision 0) +++ data/files/tab_prefix_data.txt (revision 0) @@ -0,0 +1,2 @@ +1,2 +1,3 Index: common/src/java/org/apache/hadoop/hive/conf/HiveConf.java =================================================================== --- common/src/java/org/apache/hadoop/hive/conf/HiveConf.java (revision 1357006) +++ common/src/java/org/apache/hadoop/hive/conf/HiveConf.java (working copy) @@ -189,6 +189,7 @@ JOB_DEBUG_TIMEOUT("hive.exec.job.debug.timeout", 30000), TASKLOG_DEBUG_TIMEOUT("hive.exec.tasklog.debug.timeout", 20000), OUTPUT_FILE_EXTENSION("hive.output.file.extension", null), + PREFIX_TAB_ALIAS_ON_SELECT_ALL("hive.exec.prefix.tab.alias.on.select.all", false), // should hive determine whether to run in local mode automatically ? LOCALMODEAUTO("hive.exec.mode.local.auto", false), Index: ql/src/test/results/clientpositive/tab_prefix_on_select_all.q.out =================================================================== --- ql/src/test/results/clientpositive/tab_prefix_on_select_all.q.out (revision 0) +++ ql/src/test/results/clientpositive/tab_prefix_on_select_all.q.out (revision 0) @@ -0,0 +1,78 @@ +PREHOOK: query: CREATE TABLE prefixtesttab (f1 int, f2 int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' +PREHOOK: type: CREATETABLE +POSTHOOK: query: CREATE TABLE prefixtesttab (f1 int, f2 int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@prefixtesttab +PREHOOK: query: LOAD DATA LOCAL INPATH '../data/files/tab_prefix_data.txt' INTO TABLE prefixtesttab +PREHOOK: type: LOAD +PREHOOK: Output: default@prefixtesttab +POSTHOOK: query: LOAD DATA LOCAL INPATH '../data/files/tab_prefix_data.txt' INTO TABLE prefixtesttab +POSTHOOK: type: LOAD +POSTHOOK: Output: default@prefixtesttab +PREHOOK: query: CREATE TABLE joined_ptt AS SELECT * from prefixtesttab tab1 INNER JOIN prefixtesttab tab2 ON (tab1.f1 = tab2.f1) +PREHOOK: type: CREATETABLE_AS_SELECT +PREHOOK: Input: default@prefixtesttab +POSTHOOK: query: CREATE TABLE joined_ptt AS SELECT * from prefixtesttab tab1 INNER JOIN prefixtesttab tab2 ON (tab1.f1 = tab2.f1) +POSTHOOK: type: CREATETABLE_AS_SELECT +POSTHOOK: Input: default@prefixtesttab +POSTHOOK: Output: default@joined_ptt +PREHOOK: query: DESCRIBE joined_ptt +PREHOOK: type: DESCTABLE +POSTHOOK: query: DESCRIBE joined_ptt +POSTHOOK: type: DESCTABLE +tab1_f1 int +tab1_f2 int +tab2_f1 int +tab2_f2 int +PREHOOK: query: SELECT * from joined_ptt +PREHOOK: type: QUERY +PREHOOK: Input: default@joined_ptt +#### A masked pattern was here #### +POSTHOOK: query: SELECT * from joined_ptt +POSTHOOK: type: QUERY +POSTHOOK: Input: default@joined_ptt +#### A masked pattern was here #### +1 2 1 2 +1 2 1 3 +1 3 1 2 +1 3 1 3 +PREHOOK: query: CREATE TABLE prefixtestimpliedtab (f1 int, f2 int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' +PREHOOK: type: CREATETABLE +POSTHOOK: query: CREATE TABLE prefixtestimpliedtab (f1 int, f2 int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@prefixtestimpliedtab +PREHOOK: query: LOAD DATA LOCAL INPATH '../data/files/tab_prefix_data.txt' INTO TABLE prefixtestimpliedtab +PREHOOK: type: LOAD +PREHOOK: Output: default@prefixtestimpliedtab +POSTHOOK: query: LOAD DATA LOCAL INPATH '../data/files/tab_prefix_data.txt' INTO TABLE prefixtestimpliedtab +POSTHOOK: type: LOAD +POSTHOOK: Output: default@prefixtestimpliedtab +PREHOOK: query: CREATE TABLE joined_ptit AS SELECT * from prefixtesttab INNER JOIN prefixtestimpliedtab ON (prefixtesttab.f1 = prefixtestimpliedtab.f1) +PREHOOK: type: CREATETABLE_AS_SELECT +PREHOOK: Input: default@prefixtestimpliedtab +PREHOOK: Input: default@prefixtesttab +POSTHOOK: query: CREATE TABLE joined_ptit AS SELECT * from prefixtesttab INNER JOIN prefixtestimpliedtab ON (prefixtesttab.f1 = prefixtestimpliedtab.f1) +POSTHOOK: type: CREATETABLE_AS_SELECT +POSTHOOK: Input: default@prefixtestimpliedtab +POSTHOOK: Input: default@prefixtesttab +POSTHOOK: Output: default@joined_ptit +PREHOOK: query: DESCRIBE joined_ptit +PREHOOK: type: DESCTABLE +POSTHOOK: query: DESCRIBE joined_ptit +POSTHOOK: type: DESCTABLE +prefixtesttab_f1 int +prefixtesttab_f2 int +prefixtestimpliedtab_f1 int +prefixtestimpliedtab_f2 int +PREHOOK: query: SELECT * from joined_ptit +PREHOOK: type: QUERY +PREHOOK: Input: default@joined_ptit +#### A masked pattern was here #### +POSTHOOK: query: SELECT * from joined_ptit +POSTHOOK: type: QUERY +POSTHOOK: Input: default@joined_ptit +#### A masked pattern was here #### +1 2 1 2 +1 2 1 3 +1 3 1 2 +1 3 1 3 Index: ql/src/test/queries/clientpositive/tab_prefix_on_select_all.q =================================================================== --- ql/src/test/queries/clientpositive/tab_prefix_on_select_all.q (revision 0) +++ ql/src/test/queries/clientpositive/tab_prefix_on_select_all.q (revision 0) @@ -0,0 +1,11 @@ +CREATE TABLE prefixtesttab (f1 int, f2 int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','; +LOAD DATA LOCAL INPATH '../data/files/tab_prefix_data.txt' INTO TABLE prefixtesttab; +SET hive.exec.prefix.tab.alias.on.select.all=true; +CREATE TABLE joined_ptt AS SELECT * from prefixtesttab tab1 INNER JOIN prefixtesttab tab2 ON (tab1.f1 = tab2.f1); +DESCRIBE joined_ptt; +SELECT * from joined_ptt; +CREATE TABLE prefixtestimpliedtab (f1 int, f2 int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','; +LOAD DATA LOCAL INPATH '../data/files/tab_prefix_data.txt' INTO TABLE prefixtestimpliedtab; +CREATE TABLE joined_ptit AS SELECT * from prefixtesttab INNER JOIN prefixtestimpliedtab ON (prefixtesttab.f1 = prefixtestimpliedtab.f1); +DESCRIBE joined_ptit; +SELECT * from joined_ptit; Index: ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (revision 1357006) +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (working copy) @@ -1612,6 +1612,7 @@ } // For the tab.* case, add all the columns to the fieldList // from the input schema + boolean prefixTabAlias = HiveConf.getBoolVar(conf, HiveConf.ConfVars.PREFIX_TAB_ALIAS_ON_SELECT_ALL); for (Map.Entry entry : fMap.entrySet()) { ColumnInfo colInfo = entry.getValue(); String name = colInfo.getInternalName(); @@ -1631,13 +1632,24 @@ continue; } - ExprNodeColumnDesc expr = new ExprNodeColumnDesc(colInfo.getType(), - name, colInfo.getTabAlias(), colInfo.getIsVirtualCol()); - col_list.add(expr); - output.put(tmp[0], tmp[1], - new ColumnInfo(getColumnInternalName(pos), colInfo.getType(), - colInfo.getTabAlias(), colInfo.getIsVirtualCol(), - colInfo.isHiddenVirtualCol())); + if(prefixTabAlias){ + ExprNodeColumnDesc expr = new ExprNodeColumnDesc(colInfo.getType(), + name, null, colInfo.getIsVirtualCol()); + col_list.add(expr); + output.put(null, tmp[0]+"_"+tmp[1], + new ColumnInfo(getColumnInternalName(pos), colInfo.getType(), + null, colInfo.getIsVirtualCol(), + colInfo.isHiddenVirtualCol())); + } + else{ + ExprNodeColumnDesc expr = new ExprNodeColumnDesc(colInfo.getType(), + name, colInfo.getTabAlias(), colInfo.getIsVirtualCol()); + col_list.add(expr); + output.put(tmp[0], tmp[1], + new ColumnInfo(getColumnInternalName(pos), colInfo.getType(), + colInfo.getTabAlias(), colInfo.getIsVirtualCol(), + colInfo.isHiddenVirtualCol())); + } pos = Integer.valueOf(pos.intValue() + 1); matched++;