[ https://issues.apache.org/jira/browse/HIVE-9960?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14363971#comment-14363971 ]
Arup Malakar commented on HIVE-9960: ------------------------------------ [~spena] I have been using hive 0.14 with HIVE-8909 applied on it. This patch doesn't apply cleanly on top of that, as this patch seems to be meant for trunk. On the other hand I am unable to compile trunk against hadoop 2.3.0 as it complains about package KeyProvider etc. I would need to port this patch for 0.14, with HIVE-8909, to be able to test it. > Hive not backward compatibilie while adding optional new field to struct in > parquet files > ----------------------------------------------------------------------------------------- > > Key: HIVE-9960 > URL: https://issues.apache.org/jira/browse/HIVE-9960 > Project: Hive > Issue Type: Bug > Components: Serializers/Deserializers > Reporter: Arup Malakar > Assignee: Sergio Peña > Attachments: HIVE-9960.1.patch > > > I recently added an optional field to a struct, when I tried to query old > data with the new hive table which has the new field as column it throws > error. Any clue how I can make it backward compatible so that I am still able > to query old data with the new table definition. > > I am using hive-0.14.0 release with HIVE-8909 patch applied. > Details: > New optional field in a struct > {code} > struct Event { > 1: optional Type type; > 2: optional map<string, string> values; > 3: optional i32 num = -1; // <--- New field > } > {code} > Main thrift definition > {code} > 10: optional list<Event> events; > {code} > Corresponding hive table definition > {code} > events array< struct <type: string, values: map<string, string>, num: int>>) > {code} > Try to read something from the old data, using the new table definition > {{select events from table1 limit 1;}} > Failed with exception: > {code} > java.io.IOException:org.apache.hadoop.hive.ql.metadata.HiveException: > java.lang.ArrayIndexOutOfBoundsException: 2 > Error thrown: > 15/03/12 17:23:43 [main]: ERROR CliDriver: Failed with exception > java.io.IOException:org.apache.hadoop.hive.ql.metadata.HiveException: > java.lang.ArrayIndexOutOfBoundsException: 2 > java.io.IOException: org.apache.hadoop.hive.ql.metadata.HiveException: > java.lang.ArrayIndexOutOfBoundsException: 2 > > at org.apache.hadoop.hive.ql.exec.FetchTask.fetch(FetchTask.java:152) > > > at org.apache.hadoop.hive.ql.Driver.getResults(Driver.java:1621) > > > at > org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:267) > > > at > org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:199) > > > at > org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:410) > > > at > org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:783) > > > at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:677) > > > at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:616) > > > 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:212) > > > Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: > java.lang.ArrayIndexOutOfBoundsException: 2 > > at > org.apache.hadoop.hive.ql.exec.ListSinkOperator.processOp(ListSinkOperator.java:90) > > > at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:815) > > > at > org.apache.hadoop.hive.ql.exec.LimitOperator.processOp(LimitOperator.java:51) > > > at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:815) > > > at > org.apache.hadoop.hive.ql.exec.SelectOperator.processOp(SelectOperator.java:84) > > > at org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:815) > > > at > org.apache.hadoop.hive.ql.exec.TableScanOperator.processOp(TableScanOperator.java:95) > > > at > org.apache.hadoop.hive.ql.exec.FetchOperator.pushRow(FetchOperator.java:571) > > > at > org.apache.hadoop.hive.ql.exec.FetchOperator.pushRow(FetchOperator.java:563) > > > at org.apache.hadoop.hive.ql.exec.FetchTask.fetch(FetchTask.java:138) > > > ... 12 more > > > Caused by: java.lang.ArrayIndexOutOfBoundsException: 2 > > > at > org.apache.hadoop.hive.ql.io.parquet.serde.ArrayWritableObjectInspector.getStructFieldData(ArrayWritableObjectInspector.java:140) > > at > org.apache.hadoop.hive.serde2.SerDeUtils.buildJSONString(SerDeUtils.java:353) > > > at > org.apache.hadoop.hive.serde2.SerDeUtils.buildJSONString(SerDeUtils.java:306) > > > at > org.apache.hadoop.hive.serde2.SerDeUtils.getJSONString(SerDeUtils.java:197) > > > at > org.apache.hadoop.hive.serde2.DelimitedJSONSerDe.serializeField(DelimitedJSONSerDe.java:60) > > > at > org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe.doSerialize(LazySimpleSerDe.java:422) > > > at > org.apache.hadoop.hive.serde2.AbstractEncodingAwareSerDe.serialize(AbstractEncodingAwareSerDe.java:50) > > > at > org.apache.hadoop.hive.ql.exec.DefaultFetchFormatter.convert(DefaultFetchFormatter.java:71) > > > at > org.apache.hadoop.hive.ql.exec.DefaultFetchFormatter.convert(DefaultFetchFormatter.java:40) > > > at > org.apache.hadoop.hive.ql.exec.ListSinkOperator.processOp(ListSinkOperator.java:87) > > > ... 21 more > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)