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.