[ https://issues.apache.org/jira/browse/HIVE-1850?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Amareshwari Sriramadasu updated HIVE-1850: ------------------------------------------ Attachment: patch-1850.txt Even though, DDLTask.alterTable() does a checkValidity for the table after all the alterations, this problem is not found. Because getDeserializer() was not getting it from the Metastore with modified properties. Patch does the required change and add regression test. > 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 > Assignee: Amareshwari Sriramadasu > Attachments: patch-1850.txt > > > {code} > create table aa ( test STRING ) > ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' > WITH SERDEPROPERTIES ("input.regex" = "[^\\](.*)", "output.format.string" = > "$1s"); > {code} > This will fail. Great! > {code} > create table aa ( test STRING ) > ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' > WITH SERDEPROPERTIES ("input.regex" = "(.*)", "output.format.string" = > "$1s"); > {code} > Works, no problem there. > {code} > alter table aa set serdeproperties ("input.regex" = "[^\\](.*)", > "output.format.string" = "$1s"); > {code} > Wups... I can set that without any problems! > {code} > 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) > {code} > 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. For more information on JIRA, see: http://www.atlassian.com/software/jira