diff --git itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java index 654bdf8..79e4818 100644 --- itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java +++ itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java @@ -3166,6 +3166,18 @@ private void testInsertOverwrite(HiveStatement stmt) throws SQLException { } @Test + public void testUnionUniqueColumnNames() throws Exception { + HiveStatement stmt = (HiveStatement) con.createStatement(); + + stmt.execute("SET hive.resultset.use.unique.column.names=true"); + ResultSet rs = stmt.executeQuery("select 1 UNION ALL select 2"); + ResultSetMetaData metaData = rs.getMetaData(); + assertEquals("_c0", metaData.getColumnLabel(1)); + assertTrue("There's no . for the UNION column name", !metaData.getColumnLabel(1).contains(".")); + stmt.close(); + } + + @Test public void testGetQueryId() throws Exception { HiveStatement stmt = (HiveStatement) con.createStatement(); HiveStatement stmt1 = (HiveStatement) con.createStatement(); diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g index 46fa563..bf9aa39 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g +++ ql/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g @@ -747,7 +747,7 @@ import org.apache.hadoop.hive.conf.HiveConf; // counter to generate unique union aliases private int aliasCounter; private String generateUnionAlias() { - return "_u" + (++aliasCounter); + return "__u" + (++aliasCounter); } private char [] excludedCharForColumnName = {'.', ':'}; private boolean containExcludedCharForCreateTableColumnName(String input) { diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java index a3da075..ff9d9dd 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -12823,7 +12823,8 @@ protected void saveViewDefinition() throws SemanticException { } qualifiedColName = rr.reverseLookup(colInfo.getInternalName()); - if (useTabAliasIfAvailable && qualifiedColName[0] != null && !qualifiedColName[0].isEmpty()) { + // __u is a UNION ALL placeholder name + if (useTabAliasIfAvailable && qualifiedColName[0] != null && (!qualifiedColName[0].isEmpty()) && (!qualifiedColName[0].startsWith("__u"))) { colName = qualifiedColName[0] + "." + qualifiedColName[1]; } else { colName = qualifiedColName[1];