From ee43be483a798b741a36b462b2e5f1a98ea23645 Mon Sep 17 00:00:00 2001 From: Oleskiy Sayankin Date: Thu, 27 Oct 2016 12:02:04 +0300 Subject: [PATCH] HIVE-15082: Hive-1.2 cannot read data from complex data types with TIMESTAMP column, stored in Parquet --- .../ql/io/parquet/convert/HiveStructConverter.java | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/HiveStructConverter.java b/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/HiveStructConverter.java index f95d15e..ad37eac 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/HiveStructConverter.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/HiveStructConverter.java @@ -31,18 +31,21 @@ public class HiveStructConverter extends HiveGroupConverter { private final int totalFieldCount; - private final Converter[] converters; + private Converter[] converters; private final ConverterParent parent; private final int index; private Writable[] writables; - private final List repeatedConverters; + private List repeatedConverters; private boolean reuseWritableArray = false; public HiveStructConverter(final GroupType requestedSchema, final GroupType tableSchema, Map metadata) { - this(requestedSchema, null, 0, tableSchema); setMetadata(metadata); this.reuseWritableArray = true; this.writables = new Writable[tableSchema.getFieldCount()]; + this.parent = null; + this.index = 0; + this.totalFieldCount = tableSchema.getFieldCount(); + init(requestedSchema, null, 0, tableSchema); } public HiveStructConverter(final GroupType groupType, final ConverterParent parent, @@ -52,12 +55,17 @@ public HiveStructConverter(final GroupType groupType, final ConverterParent pare public HiveStructConverter(final GroupType selectedGroupType, final ConverterParent parent, final int index, final GroupType containingGroupType) { - if (parent != null) { - setMetadata(parent.getMetadata()); - } this.parent = parent; this.index = index; this.totalFieldCount = containingGroupType.getFieldCount(); + init(selectedGroupType, parent, index, containingGroupType); + } + + private void init(final GroupType selectedGroupType, + final ConverterParent parent, final int index, final GroupType containingGroupType) { + if (parent != null) { + setMetadata(parent.getMetadata()); + } final int selectedFieldCount = selectedGroupType.getFieldCount(); converters = new Converter[selectedFieldCount]; -- 1.9.1