alter table set serdeproperties bypasses regexps checks (leaves table in a non-recoverable state?) --------------------------------------------------------------------------------------------------
Key: HIVE-1850 URL: https://issues.apache.org/jira/browse/HIVE-1850 Project: Hive Issue Type: Bug Components: Serializers/Deserializers Affects Versions: 0.7.0 Environment: Trunk build from a few days ago, but seen once before with older version as well. Reporter: Terje Marthinussen create table aa ( test STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' WITH SERDEPROPERTIES ("input.regex" = "[^\\](.*)", "output.format.string" = "$1s"); This will fail. Great! create table aa ( test STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' WITH SERDEPROPERTIES ("input.regex" = "(.*)", "output.format.string" = "$1s"); Works, no problem there. alter table aa set serdeproperties ("input.regex" = "[^\\](.*)", "output.format.string" = "$1s"); Wups... I can set that without any problems! alter table aa set serdeproperties ("input.regex" = "(.*)", "output.format.string" = "$1s"); FAILED: Hive Internal Error: java.util.regex.PatternSyntaxException(Unclosed character class near index 7 [^\](.*) ^) java.util.regex.PatternSyntaxException: Unclosed character class near index 7 [^\](.*) ^ at java.util.regex.Pattern.error(Pattern.java:1713) at java.util.regex.Pattern.clazz(Pattern.java:2254) at java.util.regex.Pattern.sequence(Pattern.java:1818) at java.util.regex.Pattern.expr(Pattern.java:1752) at java.util.regex.Pattern.compile(Pattern.java:1460) at java.util.regex.Pattern.<init>(Pattern.java:1133) at java.util.regex.Pattern.compile(Pattern.java:847) at org.apache.hadoop.hive.contrib.serde2.RegexSerDe.initialize(RegexSerDe.java:101) at org.apache.hadoop.hive.metastore.MetaStoreUtils.getDeserializer(MetaStoreUtils.java:199) at org.apache.hadoop.hive.ql.metadata.Table.getDeserializer(Table.java:253) at org.apache.hadoop.hive.ql.metadata.Table.getCols(Table.java:484) at org.apache.hadoop.hive.ql.metadata.Table.checkValidity(Table.java:161) at org.apache.hadoop.hive.ql.metadata.Hive.getTable(Hive.java:803) at org.apache.hadoop.hive.ql.parse.DDLSemanticAnalyzer.analyzeAlterTableSerdeProps(DDLSemanticAnalyzer.java:558) at org.apache.hadoop.hive.ql.parse.DDLSemanticAnalyzer.analyzeInternal(DDLSemanticAnalyzer.java:232) at org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer.analyze(BaseSemanticAnalyzer.java:238) at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:335) at org.apache.hadoop.hive.ql.Driver.run(Driver.java:686) at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:142) at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:216) at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:370) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.hadoop.util.RunJar.main(RunJar.java:156) After this, all further commands on the table fails, including drop table :) 1. The alter table command should probably check the regexp just like the create table command does 2. Even though the regexp is bad, it should be possible to do things like set the regexp again or drop the table. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.