diff --git a/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java b/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java index f038d04..b471773 100644 --- a/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java +++ b/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java @@ -28,6 +28,8 @@ import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Properties; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.security.auth.login.LoginException; @@ -993,11 +995,13 @@ public class HiveConf extends Configuration { } public static int getPositionFromInternalName(String internalName) { - char pos = internalName.charAt(internalName.length()-1); - if (Character.isDigit(pos)) { - return Character.digit(pos, 10); - } else{ + Pattern internalPattern = Pattern.compile("_col([0-9]+)"); + Matcher m = internalPattern.matcher(internalName); + if (!m.matches()){ return -1; + } else { + return Integer.parseInt(m.group(1)); } + } } diff --git a/common/src/test/org/apache/hadoop/hive/conf/TestHiveConf.java b/common/src/test/org/apache/hadoop/hive/conf/TestHiveConf.java index 7fa0eac..46c72ff 100644 --- a/common/src/test/org/apache/hadoop/hive/conf/TestHiveConf.java +++ b/common/src/test/org/apache/hadoop/hive/conf/TestHiveConf.java @@ -76,4 +76,10 @@ public class TestHiveConf extends TestCase { // Test HiveConf property variable substitution in hive-site.xml checkHiveConf("test.var.hiveconf.property", ConfVars.DEFAULTPARTITIONNAME.defaultVal); } + + public void testColumnNameMapping() throws Exception { + for (int i = 0 ; i < 20 ; i++ ){ + assertTrue(i == HiveConf.getPositionFromInternalName(HiveConf.getColumnInternalName(i))); + } + } }