You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by br...@apache.org on 2014/10/30 21:20:31 UTC
svn commit: r1635602 - in /hive/branches/branch-0.14: ./ data/files/
ql/src/test/queries/clientpositive/ ql/src/test/results/clientpositive/
serde/src/java/org/apache/hadoop/hive/serde2/avro/
Author: brock
Date: Thu Oct 30 20:20:30 2014
New Revision: 1635602
URL: http://svn.apache.org/r1635602
Log:
Merge HIVE-8577 - Cannot deserialize Avro schema with a map<string,string> with null values
Added:
hive/branches/branch-0.14/data/files/map_null_schema.avro
- copied unchanged from r1635373, hive/trunk/data/files/map_null_schema.avro
hive/branches/branch-0.14/data/files/map_null_val.avro
- copied unchanged from r1635373, hive/trunk/data/files/map_null_val.avro
hive/branches/branch-0.14/ql/src/test/queries/clientpositive/avro_deserialize_map_null.q
- copied unchanged from r1635373, hive/trunk/ql/src/test/queries/clientpositive/avro_deserialize_map_null.q
hive/branches/branch-0.14/ql/src/test/results/clientpositive/avro_deserialize_map_null.q.out
- copied unchanged from r1635373, hive/trunk/ql/src/test/results/clientpositive/avro_deserialize_map_null.q.out
Modified:
hive/branches/branch-0.14/ (props changed)
hive/branches/branch-0.14/serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroDeserializer.java
Propchange: hive/branches/branch-0.14/
------------------------------------------------------------------------------
Merged /hive/trunk:r1635373
Modified: hive/branches/branch-0.14/serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroDeserializer.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.14/serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroDeserializer.java?rev=1635602&r1=1635601&r2=1635602&view=diff
==============================================================================
--- hive/branches/branch-0.14/serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroDeserializer.java (original)
+++ hive/branches/branch-0.14/serde/src/java/org/apache/hadoop/hive/serde2/avro/AvroDeserializer.java Thu Oct 30 20:20:30 2014
@@ -199,7 +199,7 @@ class AvroDeserializer {
// Avro requires NULLable types to be defined as unions of some type T
// and NULL. This is annoying and we're going to hide it from the user.
if(AvroSerdeUtils.isNullableType(recordSchema)) {
- return deserializeNullableUnion(datum, fileSchema, recordSchema, columnType);
+ return deserializeNullableUnion(datum, fileSchema, recordSchema);
}
switch(columnType.getCategory()) {
@@ -289,8 +289,8 @@ class AvroDeserializer {
* Extract either a null or the correct type from a Nullable type. This is
* horrible in that we rebuild the TypeInfo every time.
*/
- private Object deserializeNullableUnion(Object datum, Schema fileSchema, Schema recordSchema,
- TypeInfo columnType) throws AvroSerdeException {
+ private Object deserializeNullableUnion(Object datum, Schema fileSchema, Schema recordSchema)
+ throws AvroSerdeException {
int tag = GenericData.get().resolveUnion(recordSchema, datum); // Determine index of value
Schema schema = recordSchema.getTypes().get(tag);
if (schema.getType().equals(Schema.Type.NULL)) {
@@ -299,8 +299,14 @@ class AvroDeserializer {
Schema currentFileSchema = null;
if (fileSchema != null) {
- currentFileSchema =
- fileSchema.getType() == Type.UNION ? fileSchema.getTypes().get(tag) : fileSchema;
+ if (fileSchema.getType() == Type.UNION) {
+ // The fileSchema may have the null value in a different position, so
+ // we need to get the correct tag
+ tag = GenericData.get().resolveUnion(fileSchema, datum);
+ currentFileSchema = fileSchema.getTypes().get(tag);
+ } else {
+ currentFileSchema = fileSchema;
+ }
}
return worker(datum, currentFileSchema, schema, SchemaToTypeInfo.generateTypeInfo(schema));