You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hive.apache.org by "Terje Marthinussen (JIRA)" <ji...@apache.org> on 2010/12/14 14:23:01 UTC

[jira] Updated: (HIVE-1850) alter table set serdeproperties bypasses regexps checks (leaves table in a non-recoverable state?)

     [ https://issues.apache.org/jira/browse/HIVE-1850?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Terje Marthinussen updated HIVE-1850:
-------------------------------------

    Description: 
{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.

  was:
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.


> 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
>
> {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.
-
You can reply to this email to add a comment to the issue online.