Dmitry Vasilenko created HCATALOG-630:
-----------------------------------------

             Summary: org.apache.hcatalog.data.JsonSerDe cannot handle maps 
with numeric values 
                 Key: HCATALOG-630
                 URL: https://issues.apache.org/jira/browse/HCATALOG-630
             Project: HCatalog
          Issue Type: Bug
          Components: storage handlers
    Affects Versions: 0.5, 0.4
            Reporter: Dmitry Vasilenko


Steps to replicate:

1) Create a Hive table

CREATE TABLE test_map (test map<STRING,INT>)
ROW FORMAT SERDE 'org.apache.hcatalog.data.JsonSerDe'
STORED AS TEXTFILE;

2) Load the data:

LOAD DATA LOCAL INPATH '/home/dvasilen/Downloads/QA_TEST/test_map.json' 
OVERWRITE INTO TABLE test_map;  

3) The test_map.json contains the single line:

{"test":{"key":1}}

4) Run "select * from test_map;" from Hive client

5) Note the following exception being thrown:

13/03/13 13:34:20 ERROR CliDriver: Failed with exception 
java.io.IOException:org.apache.hadoop.hive.serde2.SerDeException: 
org.codehaus.jackson.JsonParseException: Current token (FIELD_NAME) not 
numeric, can not use numeric value accessors
 at [Source: java.io.ByteArrayInputStream@2be32be3; line: 1, column: 17]
java.io.IOException: org.apache.hadoop.hive.serde2.SerDeException: 
org.codehaus.jackson.JsonParseException: Current token (FIELD_NAME) not 
numeric, can not use numeric value accessors
 at [Source: java.io.ByteArrayInputStream@2be32be3; line: 1, column: 17]
        at 
org.apache.hadoop.hive.ql.exec.FetchOperator.getNextRow(FetchOperator.java:521)
        at 
org.apache.hadoop.hive.ql.exec.FetchOperator.pushRow(FetchOperator.java:466)
        at org.apache.hadoop.hive.ql.exec.FetchTask.fetch(FetchTask.java:136)
        at org.apache.hadoop.hive.ql.Driver.getResults(Driver.java:1387)
        at 
org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:270)
        at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:216)
        at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:412)
        at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:755)
        at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:613)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:600)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:156)
Caused by: org.apache.hadoop.hive.serde2.SerDeException: 
org.codehaus.jackson.JsonParseException: Current token (FIELD_NAME) not 
numeric, can not use numeric value accessors
 at [Source: java.io.ByteArrayInputStream@2be32be3; line: 1, column: 17]
        at org.apache.hcatalog.data.JsonSerDe.deserialize(JsonSerDe.java:171)
        at 
org.apache.hadoop.hive.ql.exec.FetchOperator.getNextRow(FetchOperator.java:506)
        ... 13 more
Caused by: org.codehaus.jackson.JsonParseException: Current token (FIELD_NAME) 
not numeric, can not use numeric value accessors
 at [Source: java.io.ByteArrayInputStream@2be32be3; line: 1, column: 17]
        at org.codehaus.jackson.JsonParser._constructError(JsonParser.java:1291)
        at 
org.codehaus.jackson.impl.JsonParserMinimalBase._reportError(JsonParserMinimalBase.java:385)
        at 
org.codehaus.jackson.impl.JsonNumericParserBase._parseNumericValue(JsonNumericParserBase.java:399)
        at 
org.codehaus.jackson.impl.JsonNumericParserBase.getIntValue(JsonNumericParserBase.java:254)
        at 
org.apache.hcatalog.data.JsonSerDe.extractCurrentField(JsonSerDe.java:218)
        at 
org.apache.hcatalog.data.JsonSerDe.extractCurrentField(JsonSerDe.java:279)
        at org.apache.hcatalog.data.JsonSerDe.populateRecord(JsonSerDe.java:188)
        at org.apache.hcatalog.data.JsonSerDe.deserialize(JsonSerDe.java:167)
        ... 14 more


 
If you change the value type to string 

CREATE TABLE test_map (test map<STRING,STRING>)
ROW FORMAT SERDE 'org.apache.hcatalog.data.JsonSerDe'
STORED AS TEXTFILE;


and 

{"test":{"key":"string"}}

then it works correctly.

I see the same issue in 0.4.0 as well as 0.5.0.



--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to