You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by sz...@apache.org on 2014/08/21 21:00:21 UTC
svn commit: r1619555 - in /hive/trunk: data/files/
ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/
ql/src/java/org/apache/hadoop/hive/ql/io/parquet/read/
ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/
ql/src/java/org/apache/hadoop/hi...
Author: szehon
Date: Thu Aug 21 19:00:21 2014
New Revision: 1619555
URL: http://svn.apache.org/r1619555
Log:
HIVE-7735 : Implement Char, Varchar in ParquetSerDe (Mohit Sabharwal via Szehon)
Removed:
hive/trunk/ql/src/test/queries/clientnegative/parquet_char.q
hive/trunk/ql/src/test/queries/clientnegative/parquet_varchar.q
hive/trunk/ql/src/test/results/clientnegative/parquet_char.q.out
hive/trunk/ql/src/test/results/clientnegative/parquet_timestamp.q.out
hive/trunk/ql/src/test/results/clientnegative/parquet_varchar.q.out
Modified:
hive/trunk/data/files/parquet_types.txt
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/ArrayWritableGroupConverter.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/DataWritableGroupConverter.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/DataWritableRecordConverter.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/ETypeConverter.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/HiveGroupConverter.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/HiveSchemaConverter.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/read/DataWritableReadSupport.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ArrayWritableObjectInspector.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveSerDe.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/metadata/VirtualColumn.java
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java
hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/TestHiveSchemaConverter.java
hive/trunk/ql/src/test/queries/clientpositive/parquet_types.q
hive/trunk/ql/src/test/results/clientpositive/parquet_types.q.out
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/Deserializer.java
hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfo.java
Modified: hive/trunk/data/files/parquet_types.txt
URL: http://svn.apache.org/viewvc/hive/trunk/data/files/parquet_types.txt?rev=1619555&r1=1619554&r2=1619555&view=diff
==============================================================================
--- hive/trunk/data/files/parquet_types.txt (original)
+++ hive/trunk/data/files/parquet_types.txt Thu Aug 21 19:00:21 2014
@@ -1,21 +1,21 @@
-100|1|1|1.0|0.0|abc|2011-01-01 01:01:01.111111111
-101|2|2|1.1|0.3|def|2012-02-02 02:02:02.222222222
-102|3|3|1.2|0.6|ghi|2013-03-03 03:03:03.333333333
-103|1|4|1.3|0.9|jkl|2014-04-04 04:04:04.444444444
-104|2|5|1.4|1.2|mno|2015-05-05 05:05:05.555555555
-105|3|1|1.0|1.5|pqr|2016-06-06 06:06:06.666666666
-106|1|2|1.1|1.8|stu|2017-07-07 07:07:07.777777777
-107|2|3|1.2|2.1|vwx|2018-08-08 08:08:08.888888888
-108|3|4|1.3|2.4|yza|2019-09-09 09:09:09.999999999
-109|1|5|1.4|2.7|bcd|2020-10-10 10:10:10.101010101
-110|2|1|1.0|3.0|efg|2021-11-11 11:11:11.111111111
-111|3|2|1.1|3.3|hij|2022-12-12 12:12:12.121212121
-112|1|3|1.2|3.6|klm|2023-01-02 13:13:13.131313131
-113|2|4|1.3|3.9|nop|2024-02-02 14:14:14.141414141
-114|3|5|1.4|4.2|qrs|2025-03-03 15:15:15.151515151
-115|1|1|1.0|4.5|tuv|2026-04-04 16:16:16.161616161
-116|2|2|1.1|4.8|wxy|2027-05-05 17:17:17.171717171
-117|3|3|1.2|5.1|zab|2028-06-06 18:18:18.181818181
-118|1|4|1.3|5.4|cde|2029-07-07 19:19:19.191919191
-119|2|5|1.4|5.7|fgh|2030-08-08 20:20:20.202020202
-120|3|1|1.0|6.0|ijk|2031-09-09 21:21:21.212121212
+100|1|1|1.0|0.0|abc|2011-01-01 01:01:01.111111111|a |a
+101|2|2|1.1|0.3|def|2012-02-02 02:02:02.222222222|ab |ab
+102|3|3|1.2|0.6|ghi|2013-03-03 03:03:03.333333333|abc|abc
+103|1|4|1.3|0.9|jkl|2014-04-04 04:04:04.444444444|abcd|abcd
+104|2|5|1.4|1.2|mno|2015-05-05 05:05:05.555555555|abcde|abcde
+105|3|1|1.0|1.5|pqr|2016-06-06 06:06:06.666666666|abcdef|abcdef
+106|1|2|1.1|1.8|stu|2017-07-07 07:07:07.777777777|abcdefg|abcdefg
+107|2|3|1.2|2.1|vwx|2018-08-08 08:08:08.888888888|bcdefg|abcdefgh
+108|3|4|1.3|2.4|yza|2019-09-09 09:09:09.999999999|cdefg|abcdefghijklmnop
+109|1|5|1.4|2.7|bcd|2020-10-10 10:10:10.101010101|klmno|abcdedef
+110|2|1|1.0|3.0|efg|2021-11-11 11:11:11.111111111|pqrst|abcdede
+111|3|2|1.1|3.3|hij|2022-12-12 12:12:12.121212121|nopqr|abcded
+112|1|3|1.2|3.6|klm|2023-01-02 13:13:13.131313131|opqrs|abcdd
+113|2|4|1.3|3.9|nop|2024-02-02 14:14:14.141414141|pqrst|abc
+114|3|5|1.4|4.2|qrs|2025-03-03 15:15:15.151515151|qrstu|b
+115|1|1|1.0|4.5|tuv|2026-04-04 16:16:16.161616161|rstuv|abcded
+116|2|2|1.1|4.8|wxy|2027-05-05 17:17:17.171717171|stuvw|abcded
+117|3|3|1.2|5.1|zab|2028-06-06 18:18:18.181818181|tuvwx|abcded
+118|1|4|1.3|5.4|cde|2029-07-07 19:19:19.191919191|uvwzy|abcdede
+119|2|5|1.4|5.7|fgh|2030-08-08 20:20:20.202020202|vwxyz|abcdede
+120|3|1|1.0|6.0|ijk|2031-09-09 21:21:21.212121212|wxyza|abcde
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/ArrayWritableGroupConverter.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/ArrayWritableGroupConverter.java?rev=1619555&r1=1619554&r2=1619555&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/ArrayWritableGroupConverter.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/ArrayWritableGroupConverter.java Thu Aug 21 19:00:21 2014
@@ -13,6 +13,9 @@
*/
package org.apache.hadoop.hive.ql.io.parquet.convert;
+import java.util.List;
+
+import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
import org.apache.hadoop.io.ArrayWritable;
import org.apache.hadoop.io.Writable;
@@ -30,7 +33,7 @@ public class ArrayWritableGroupConverter
private Writable[] mapPairContainer;
public ArrayWritableGroupConverter(final GroupType groupType, final HiveGroupConverter parent,
- final int index) {
+ final int index, List<TypeInfo> hiveSchemaTypeInfos) {
this.parent = parent;
this.index = index;
int count = groupType.getFieldCount();
@@ -40,7 +43,8 @@ public class ArrayWritableGroupConverter
isMap = count == 2;
converters = new Converter[count];
for (int i = 0; i < count; i++) {
- converters[i] = getConverterFromDescription(groupType.getType(i), i, this);
+ converters[i] = getConverterFromDescription(groupType.getType(i), i, this,
+ hiveSchemaTypeInfos);
}
}
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/DataWritableGroupConverter.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/DataWritableGroupConverter.java?rev=1619555&r1=1619554&r2=1619555&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/DataWritableGroupConverter.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/DataWritableGroupConverter.java Thu Aug 21 19:00:21 2014
@@ -16,6 +16,7 @@ package org.apache.hadoop.hive.ql.io.par
import java.util.ArrayList;
import java.util.List;
+import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
import org.apache.hadoop.io.ArrayWritable;
import org.apache.hadoop.io.Writable;
@@ -36,19 +37,21 @@ public class DataWritableGroupConverter
private final Object[] currentArr;
private Writable[] rootMap;
- public DataWritableGroupConverter(final GroupType requestedSchema, final GroupType tableSchema) {
- this(requestedSchema, null, 0, tableSchema);
+ public DataWritableGroupConverter(final GroupType requestedSchema, final GroupType tableSchema,
+ final List<TypeInfo> hiveSchemaTypeInfos) {
+ this(requestedSchema, null, 0, tableSchema, hiveSchemaTypeInfos);
final int fieldCount = tableSchema.getFieldCount();
this.rootMap = new Writable[fieldCount];
}
public DataWritableGroupConverter(final GroupType groupType, final HiveGroupConverter parent,
- final int index) {
- this(groupType, parent, index, groupType);
+ final int index, final List<TypeInfo> hiveSchemaTypeInfos) {
+ this(groupType, parent, index, groupType, hiveSchemaTypeInfos);
}
public DataWritableGroupConverter(final GroupType selectedGroupType,
- final HiveGroupConverter parent, final int index, final GroupType containingGroupType) {
+ final HiveGroupConverter parent, final int index, final GroupType containingGroupType,
+ final List<TypeInfo> hiveSchemaTypeInfos) {
this.parent = parent;
this.index = index;
final int totalFieldCount = containingGroupType.getFieldCount();
@@ -62,7 +65,8 @@ public class DataWritableGroupConverter
Type subtype = selectedFields.get(i);
if (containingGroupType.getFields().contains(subtype)) {
converters[i] = getConverterFromDescription(subtype,
- containingGroupType.getFieldIndex(subtype.getName()), this);
+ containingGroupType.getFieldIndex(subtype.getName()), this,
+ hiveSchemaTypeInfos);
} else {
throw new IllegalStateException("Group type [" + containingGroupType +
"] does not contain requested field: " + subtype);
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/DataWritableRecordConverter.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/DataWritableRecordConverter.java?rev=1619555&r1=1619554&r2=1619555&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/DataWritableRecordConverter.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/DataWritableRecordConverter.java Thu Aug 21 19:00:21 2014
@@ -13,6 +13,9 @@
*/
package org.apache.hadoop.hive.ql.io.parquet.convert;
+import java.util.List;
+
+import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
import org.apache.hadoop.io.ArrayWritable;
import parquet.io.api.GroupConverter;
@@ -28,8 +31,10 @@ public class DataWritableRecordConverter
private final DataWritableGroupConverter root;
- public DataWritableRecordConverter(final GroupType requestedSchema, final GroupType tableSchema) {
- this.root = new DataWritableGroupConverter(requestedSchema, tableSchema);
+ public DataWritableRecordConverter(final GroupType requestedSchema, final GroupType tableSchema,
+ final List<TypeInfo> hiveColumnTypeInfos) {
+ this.root = new DataWritableGroupConverter(requestedSchema, tableSchema,
+ hiveColumnTypeInfos);
}
@Override
@@ -41,4 +46,4 @@ public class DataWritableRecordConverter
public GroupConverter getRootConverter() {
return root;
}
-}
+}
\ No newline at end of file
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/ETypeConverter.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/ETypeConverter.java?rev=1619555&r1=1619554&r2=1619555&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/ETypeConverter.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/ETypeConverter.java Thu Aug 21 19:00:21 2014
@@ -16,12 +16,19 @@ package org.apache.hadoop.hive.ql.io.par
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.ArrayList;
+import java.util.List;
+import org.apache.hadoop.hive.common.type.HiveChar;
+import org.apache.hadoop.hive.common.type.HiveVarchar;
import org.apache.hadoop.hive.ql.io.parquet.timestamp.NanoTime;
import org.apache.hadoop.hive.ql.io.parquet.timestamp.NanoTimeUtils;
+import org.apache.hadoop.hive.serde.serdeConstants;
import org.apache.hadoop.hive.serde2.io.DoubleWritable;
+import org.apache.hadoop.hive.serde2.io.HiveCharWritable;
import org.apache.hadoop.hive.serde2.io.HiveDecimalWritable;
+import org.apache.hadoop.hive.serde2.io.HiveVarcharWritable;
import org.apache.hadoop.hive.serde2.io.TimestampWritable;
+import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
import org.apache.hadoop.io.BooleanWritable;
import org.apache.hadoop.io.BytesWritable;
import org.apache.hadoop.io.FloatWritable;
@@ -145,6 +152,32 @@ public enum ETypeConverter {
}
};
}
+ },
+ ECHAR_CONVERTER(HiveCharWritable.class) {
+ @Override
+ Converter getConverter(final PrimitiveType type, final int index, final HiveGroupConverter parent) {
+ return new BinaryConverter<HiveCharWritable>(type, parent, index) {
+ @Override
+ protected HiveCharWritable convert(Binary binary) {
+ HiveChar hiveChar = new HiveChar();
+ hiveChar.setValue(binary.toStringUsingUTF8());
+ return new HiveCharWritable(hiveChar);
+ }
+ };
+ }
+ },
+ EVARCHAR_CONVERTER(HiveVarcharWritable.class) {
+ @Override
+ Converter getConverter(final PrimitiveType type, final int index, final HiveGroupConverter parent) {
+ return new BinaryConverter<HiveVarcharWritable>(type, parent, index) {
+ @Override
+ protected HiveVarcharWritable convert(Binary binary) {
+ HiveVarchar hiveVarchar = new HiveVarchar();
+ hiveVarchar.setValue(binary.toStringUsingUTF8());
+ return new HiveVarcharWritable(hiveVarchar);
+ }
+ };
+ }
};
final Class<?> _type;
@@ -159,7 +192,8 @@ public enum ETypeConverter {
abstract Converter getConverter(final PrimitiveType type, final int index, final HiveGroupConverter parent);
- public static Converter getNewConverter(final PrimitiveType type, final int index, final HiveGroupConverter parent) {
+ public static Converter getNewConverter(final PrimitiveType type, final int index,
+ final HiveGroupConverter parent, List<TypeInfo> hiveSchemaTypeInfos) {
if (type.isPrimitive() && (type.asPrimitiveType().getPrimitiveTypeName().equals(PrimitiveType.PrimitiveTypeName.INT96))) {
//TODO- cleanup once parquet support Timestamp type annotation.
return ETypeConverter.ETIMESTAMP_CONVERTER.getConverter(type, index, parent);
@@ -167,7 +201,15 @@ public enum ETypeConverter {
if (OriginalType.DECIMAL == type.getOriginalType()) {
return EDECIMAL_CONVERTER.getConverter(type, index, parent);
} else if (OriginalType.UTF8 == type.getOriginalType()) {
- return ESTRING_CONVERTER.getConverter(type, index, parent);
+ if (hiveSchemaTypeInfos.get(index).getTypeName()
+ .startsWith(serdeConstants.CHAR_TYPE_NAME)) {
+ return ECHAR_CONVERTER.getConverter(type, index, parent);
+ } else if (hiveSchemaTypeInfos.get(index).getTypeName()
+ .startsWith(serdeConstants.VARCHAR_TYPE_NAME)) {
+ return EVARCHAR_CONVERTER.getConverter(type, index, parent);
+ } else if (type.isPrimitive()) {
+ return ESTRING_CONVERTER.getConverter(type, index, parent);
+ }
}
Class<?> javaType = type.getPrimitiveTypeName().javaType;
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/HiveGroupConverter.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/HiveGroupConverter.java?rev=1619555&r1=1619554&r2=1619555&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/HiveGroupConverter.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/HiveGroupConverter.java Thu Aug 21 19:00:21 2014
@@ -13,6 +13,9 @@
*/
package org.apache.hadoop.hive.ql.io.parquet.convert;
+import java.util.List;
+
+import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
import org.apache.hadoop.io.Writable;
import parquet.io.api.Converter;
@@ -23,17 +26,20 @@ import parquet.schema.Type.Repetition;
public abstract class HiveGroupConverter extends GroupConverter {
protected static Converter getConverterFromDescription(final Type type, final int index,
- final HiveGroupConverter parent) {
+ final HiveGroupConverter parent, List<TypeInfo> hiveSchemaTypeInfos) {
if (type == null) {
return null;
}
if (type.isPrimitive()) {
- return ETypeConverter.getNewConverter(type.asPrimitiveType(), index, parent);
+ return ETypeConverter.getNewConverter(type.asPrimitiveType(), index, parent,
+ hiveSchemaTypeInfos);
} else {
if (type.asGroupType().getRepetition() == Repetition.REPEATED) {
- return new ArrayWritableGroupConverter(type.asGroupType(), parent, index);
+ return new ArrayWritableGroupConverter(type.asGroupType(), parent, index,
+ hiveSchemaTypeInfos);
} else {
- return new DataWritableGroupConverter(type.asGroupType(), parent, index);
+ return new DataWritableGroupConverter(type.asGroupType(), parent, index,
+ hiveSchemaTypeInfos);
}
}
}
@@ -42,4 +48,4 @@ public abstract class HiveGroupConverter
protected abstract void add(int index, Writable value);
-}
+}
\ No newline at end of file
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/HiveSchemaConverter.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/HiveSchemaConverter.java?rev=1619555&r1=1619554&r2=1619555&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/HiveSchemaConverter.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/convert/HiveSchemaConverter.java Thu Aug 21 19:00:21 2014
@@ -16,6 +16,7 @@ package org.apache.hadoop.hive.ql.io.par
import java.util.List;
import org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe;
+import org.apache.hadoop.hive.serde.serdeConstants;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector.Category;
import org.apache.hadoop.hive.serde2.typeinfo.DecimalTypeInfo;
import org.apache.hadoop.hive.serde2.typeinfo.ListTypeInfo;
@@ -25,7 +26,6 @@ import org.apache.hadoop.hive.serde2.typ
import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory;
import parquet.schema.ConversionPatterns;
-import parquet.schema.DecimalMetadata;
import parquet.schema.GroupType;
import parquet.schema.MessageType;
import parquet.schema.OriginalType;
@@ -81,6 +81,14 @@ public class HiveSchemaConverter {
return new PrimitiveType(repetition, PrimitiveTypeName.INT96, name);
} else if (typeInfo.equals(TypeInfoFactory.voidTypeInfo)) {
throw new UnsupportedOperationException("Void type not implemented");
+ } else if (typeInfo.getTypeName().toLowerCase().startsWith(
+ serdeConstants.CHAR_TYPE_NAME)) {
+ return Types.optional(PrimitiveTypeName.BINARY).as(OriginalType.UTF8)
+ .named(name);
+ } else if (typeInfo.getTypeName().toLowerCase().startsWith(
+ serdeConstants.VARCHAR_TYPE_NAME)) {
+ return Types.optional(PrimitiveTypeName.BINARY).as(OriginalType.UTF8)
+ .named(name);
} else if (typeInfo instanceof DecimalTypeInfo) {
DecimalTypeInfo decimalTypeInfo = (DecimalTypeInfo) typeInfo;
int prec = decimalTypeInfo.precision();
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/read/DataWritableReadSupport.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/read/DataWritableReadSupport.java?rev=1619555&r1=1619554&r2=1619555&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/read/DataWritableReadSupport.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/read/DataWritableReadSupport.java Thu Aug 21 19:00:21 2014
@@ -14,6 +14,7 @@
package org.apache.hadoop.hive.ql.io.parquet.read;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -23,6 +24,8 @@ import org.apache.hadoop.hive.ql.io.IOCo
import org.apache.hadoop.hive.ql.io.parquet.convert.DataWritableRecordConverter;
import org.apache.hadoop.hive.ql.metadata.VirtualColumn;
import org.apache.hadoop.hive.serde2.ColumnProjectionUtils;
+import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
+import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoUtils;
import org.apache.hadoop.io.ArrayWritable;
import org.apache.hadoop.util.StringUtils;
@@ -60,6 +63,28 @@ public class DataWritableReadSupport ext
return (List<String>) VirtualColumn.
removeVirtualColumns(StringUtils.getStringCollection(columns));
}
+
+ private static List<TypeInfo> getColumnTypes(Configuration configuration) {
+
+ List<String> columnNames;
+ String columnNamesProperty = configuration.get(IOConstants.COLUMNS);
+ if (columnNamesProperty.length() == 0) {
+ columnNames = new ArrayList<String>();
+ } else {
+ columnNames = Arrays.asList(columnNamesProperty.split(","));
+ }
+ List<TypeInfo> columnTypes;
+ String columnTypesProperty = configuration.get(IOConstants.COLUMNS_TYPES);
+ if (columnTypesProperty.length() == 0) {
+ columnTypes = new ArrayList<TypeInfo>();
+ } else {
+ columnTypes = TypeInfoUtils.getTypeInfosFromTypeString(columnTypesProperty);
+ }
+
+ columnTypes = VirtualColumn.removeVirtualColumnTypes(columnNames, columnTypes);
+ return columnTypes;
+ }
+
/**
*
* It creates the readContext for Parquet side with the requested schema during the init phase.
@@ -148,7 +173,8 @@ public class DataWritableReadSupport ext
}
final MessageType tableSchema = resolveSchemaAccess(MessageTypeParser.
parseMessageType(metadata.get(HIVE_SCHEMA_KEY)), fileSchema, configuration);
- return new DataWritableRecordConverter(readContext.getRequestedSchema(), tableSchema);
+ return new DataWritableRecordConverter(readContext.getRequestedSchema(), tableSchema,
+ getColumnTypes(configuration));
}
/**
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ArrayWritableObjectInspector.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ArrayWritableObjectInspector.java?rev=1619555&r1=1619554&r2=1619555&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ArrayWritableObjectInspector.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ArrayWritableObjectInspector.java Thu Aug 21 19:00:21 2014
@@ -25,12 +25,14 @@ import org.apache.hadoop.hive.serde2.obj
import org.apache.hadoop.hive.serde2.objectinspector.SettableStructObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.StructField;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
+import org.apache.hadoop.hive.serde2.typeinfo.CharTypeInfo;
import org.apache.hadoop.hive.serde2.typeinfo.DecimalTypeInfo;
import org.apache.hadoop.hive.serde2.typeinfo.ListTypeInfo;
import org.apache.hadoop.hive.serde2.typeinfo.MapTypeInfo;
import org.apache.hadoop.hive.serde2.typeinfo.StructTypeInfo;
import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo;
import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory;
+import org.apache.hadoop.hive.serde2.typeinfo.VarcharTypeInfo;
import org.apache.hadoop.io.ArrayWritable;
/**
@@ -102,12 +104,10 @@ public class ArrayWritableObjectInspecto
return PrimitiveObjectInspectorFactory.writableTimestampObjectInspector;
} else if (typeInfo.equals(TypeInfoFactory.dateTypeInfo)) {
throw new UnsupportedOperationException("Parquet does not support date. See HIVE-6384");
- } else if (typeInfo.getTypeName().toLowerCase().startsWith(serdeConstants.DECIMAL_TYPE_NAME)) {
- throw new UnsupportedOperationException("Parquet does not support decimal. See HIVE-6384");
} else if (typeInfo.getTypeName().toLowerCase().startsWith(serdeConstants.CHAR_TYPE_NAME)) {
- throw new UnsupportedOperationException("Parquet does not support char. See HIVE-6384");
+ return PrimitiveObjectInspectorFactory.getPrimitiveWritableObjectInspector((CharTypeInfo) typeInfo);
} else if (typeInfo.getTypeName().toLowerCase().startsWith(serdeConstants.VARCHAR_TYPE_NAME)) {
- throw new UnsupportedOperationException("Parquet does not support varchar. See HIVE-6384");
+ return PrimitiveObjectInspectorFactory.getPrimitiveWritableObjectInspector((VarcharTypeInfo) typeInfo);
} else {
throw new UnsupportedOperationException("Unknown field type: " + typeInfo);
}
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveSerDe.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveSerDe.java?rev=1619555&r1=1619554&r2=1619555&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveSerDe.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveSerDe.java Thu Aug 21 19:00:21 2014
@@ -42,6 +42,8 @@ import org.apache.hadoop.hive.serde2.obj
import org.apache.hadoop.hive.serde2.objectinspector.primitive.ByteObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.DoubleObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.FloatObjectInspector;
+import org.apache.hadoop.hive.serde2.objectinspector.primitive.HiveCharObjectInspector;
+import org.apache.hadoop.hive.serde2.objectinspector.primitive.HiveVarcharObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.IntObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.LongObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.ShortObjectInspector;
@@ -60,6 +62,7 @@ import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.Writable;
+import parquet.io.api.Binary;
/**
*
@@ -280,6 +283,12 @@ public class ParquetHiveSerDe extends Ab
return new BytesWritable(tgt);
case TIMESTAMP:
return new TimestampWritable(((TimestampObjectInspector) inspector).getPrimitiveJavaObject(obj));
+ case CHAR:
+ String strippedValue = ((HiveCharObjectInspector) inspector).getPrimitiveJavaObject(obj).getStrippedValue();
+ return new BytesWritable(Binary.fromString(strippedValue).getBytes());
+ case VARCHAR:
+ String value = ((HiveVarcharObjectInspector) inspector).getPrimitiveJavaObject(obj).getValue();
+ return new BytesWritable(Binary.fromString(value).getBytes());
default:
throw new SerDeException("Unknown primitive : " + inspector.getPrimitiveCategory());
}
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/metadata/VirtualColumn.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/metadata/VirtualColumn.java?rev=1619555&r1=1619554&r2=1619555&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/metadata/VirtualColumn.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/metadata/VirtualColumn.java Thu Aug 21 19:00:21 2014
@@ -22,7 +22,10 @@ import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
+import java.util.ListIterator;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hive.common.classification.InterfaceAudience;
import org.apache.hadoop.hive.conf.HiveConf;
@@ -60,8 +63,9 @@ public class VirtualColumn implements Se
public static final VirtualColumn GROUPINGID =
new VirtualColumn("GROUPING__ID", (PrimitiveTypeInfo) TypeInfoFactory.intTypeInfo);
- public static final VirtualColumn[] VIRTUAL_COLUMNS =
- new VirtualColumn[] {FILENAME, BLOCKOFFSET, ROWOFFSET, RAWDATASIZE, GROUPINGID, ROWID};
+ public static ImmutableSet<String> VIRTUAL_COLUMN_NAMES =
+ ImmutableSet.of(FILENAME.getName(), BLOCKOFFSET.getName(), ROWOFFSET.getName(),
+ RAWDATASIZE.getName(), GROUPINGID.getName(), ROWID.getName());
private final String name;
private final TypeInfo typeInfo;
@@ -139,12 +143,29 @@ public class VirtualColumn implements Se
return 31 * typeInfo.getTypeName().hashCode() + c;
}
public static Collection<String> removeVirtualColumns(final Collection<String> columns) {
- for(VirtualColumn vcol : VIRTUAL_COLUMNS) {
- columns.remove(vcol.getName());
- }
+ Iterables.removeAll(columns, VIRTUAL_COLUMN_NAMES);
return columns;
}
+ public static List<TypeInfo> removeVirtualColumnTypes(final List<String> columnNames,
+ final List<TypeInfo> columnTypes) {
+ if (columnNames.size() != columnTypes.size()) {
+ throw new IllegalArgumentException("Number of column names in configuration " +
+ columnNames.size() + " differs from column types " + columnTypes.size());
+ }
+
+ int i = 0;
+ ListIterator<TypeInfo> it = columnTypes.listIterator();
+ while(it.hasNext()) {
+ it.next();
+ if (VIRTUAL_COLUMN_NAMES.contains(columnNames.get(i))) {
+ it.remove();
+ }
+ ++i;
+ }
+ return columnTypes;
+ }
+
public static StructObjectInspector getVCSObjectInspector(List<VirtualColumn> vcs) {
List<String> names = new ArrayList<String>(vcs.size());
List<ObjectInspector> inspectors = new ArrayList<ObjectInspector>(vcs.size());
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java?rev=1619555&r1=1619554&r2=1619555&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/Vectorizer.java Thu Aug 21 19:00:21 2014
@@ -927,11 +927,9 @@ public class Vectorizer implements Physi
if (desc instanceof ExprNodeColumnDesc) {
ExprNodeColumnDesc c = (ExprNodeColumnDesc) desc;
// Currently, we do not support vectorized virtual columns (see HIVE-5570).
- for (VirtualColumn vc : VirtualColumn.VIRTUAL_COLUMNS) {
- if (c.getColumn().equals(vc.getName())) {
- LOG.info("Cannot vectorize virtual column " + c.getColumn());
- return false;
- }
+ if (VirtualColumn.VIRTUAL_COLUMN_NAMES.contains(c.getColumn())) {
+ LOG.info("Cannot vectorize virtual column " + c.getColumn());
+ return false;
}
}
String typeName = desc.getTypeInfo().getTypeName();
@@ -1076,10 +1074,8 @@ public class Vectorizer implements Physi
// Not using method column.getIsVirtualCol() because partitioning columns are also
// treated as virtual columns in ColumnInfo.
- for (VirtualColumn vc : VirtualColumn.VIRTUAL_COLUMNS) {
- if (column.getInternalName().equals(vc.getName())) {
+ if (VirtualColumn.VIRTUAL_COLUMN_NAMES.contains(column.getInternalName())) {
return true;
- }
}
return false;
}
Modified: hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/TestHiveSchemaConverter.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/TestHiveSchemaConverter.java?rev=1619555&r1=1619554&r2=1619555&view=diff
==============================================================================
--- hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/TestHiveSchemaConverter.java (original)
+++ hive/trunk/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/TestHiveSchemaConverter.java Thu Aug 21 19:00:21 2014
@@ -88,6 +88,26 @@ public class TestHiveSchemaConverter {
}
@Test
+ public void testCharType() throws Exception {
+ testConversion(
+ "a",
+ "char(5)",
+ "message hive_schema {\n"
+ + " optional binary a (UTF8);\n"
+ + "}\n");
+ }
+
+ @Test
+ public void testVarcharType() throws Exception {
+ testConversion(
+ "a",
+ "varchar(10)",
+ "message hive_schema {\n"
+ + " optional binary a (UTF8);\n"
+ + "}\n");
+ }
+
+ @Test
public void testArray() throws Exception {
testConversion("arrayCol",
"array<int>",
Modified: hive/trunk/ql/src/test/queries/clientpositive/parquet_types.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/parquet_types.q?rev=1619555&r1=1619554&r2=1619555&view=diff
==============================================================================
--- hive/trunk/ql/src/test/queries/clientpositive/parquet_types.q (original)
+++ hive/trunk/ql/src/test/queries/clientpositive/parquet_types.q Thu Aug 21 19:00:21 2014
@@ -8,7 +8,9 @@ CREATE TABLE parquet_types_staging (
cfloat float,
cdouble double,
cstring1 string,
- t timestamp
+ t timestamp,
+ cchar char(5),
+ cvarchar varchar(10)
) ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|';
@@ -19,7 +21,9 @@ CREATE TABLE parquet_types (
cfloat float,
cdouble double,
cstring1 string,
- t timestamp
+ t timestamp,
+ cchar char(5),
+ cvarchar varchar(10)
) STORED AS PARQUET;
LOAD DATA LOCAL INPATH '../../data/files/parquet_types.txt' OVERWRITE INTO TABLE parquet_types_staging;
Modified: hive/trunk/ql/src/test/results/clientpositive/parquet_types.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/parquet_types.q.out?rev=1619555&r1=1619554&r2=1619555&view=diff
==============================================================================
--- hive/trunk/ql/src/test/results/clientpositive/parquet_types.q.out (original)
+++ hive/trunk/ql/src/test/results/clientpositive/parquet_types.q.out Thu Aug 21 19:00:21 2014
@@ -13,7 +13,9 @@ PREHOOK: query: CREATE TABLE parquet_typ
cfloat float,
cdouble double,
cstring1 string,
- t timestamp
+ t timestamp,
+ cchar char(5),
+ cvarchar varchar(10)
) ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
PREHOOK: type: CREATETABLE
@@ -26,7 +28,9 @@ POSTHOOK: query: CREATE TABLE parquet_ty
cfloat float,
cdouble double,
cstring1 string,
- t timestamp
+ t timestamp,
+ cchar char(5),
+ cvarchar varchar(10)
) ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
POSTHOOK: type: CREATETABLE
@@ -39,7 +43,9 @@ PREHOOK: query: CREATE TABLE parquet_typ
cfloat float,
cdouble double,
cstring1 string,
- t timestamp
+ t timestamp,
+ cchar char(5),
+ cvarchar varchar(10)
) STORED AS PARQUET
PREHOOK: type: CREATETABLE
PREHOOK: Output: database:default
@@ -51,7 +57,9 @@ POSTHOOK: query: CREATE TABLE parquet_ty
cfloat float,
cdouble double,
cstring1 string,
- t timestamp
+ t timestamp,
+ cchar char(5),
+ cvarchar varchar(10)
) STORED AS PARQUET
POSTHOOK: type: CREATETABLE
POSTHOOK: Output: database:default
@@ -72,12 +80,14 @@ POSTHOOK: query: INSERT OVERWRITE TABLE
POSTHOOK: type: QUERY
POSTHOOK: Input: default@parquet_types_staging
POSTHOOK: Output: default@parquet_types
+POSTHOOK: Lineage: parquet_types.cchar SIMPLE [(parquet_types_staging)parquet_types_staging.FieldSchema(name:cchar, type:char(5), comment:null), ]
POSTHOOK: Lineage: parquet_types.cdouble SIMPLE [(parquet_types_staging)parquet_types_staging.FieldSchema(name:cdouble, type:double, comment:null), ]
POSTHOOK: Lineage: parquet_types.cfloat SIMPLE [(parquet_types_staging)parquet_types_staging.FieldSchema(name:cfloat, type:float, comment:null), ]
POSTHOOK: Lineage: parquet_types.cint SIMPLE [(parquet_types_staging)parquet_types_staging.FieldSchema(name:cint, type:int, comment:null), ]
POSTHOOK: Lineage: parquet_types.csmallint SIMPLE [(parquet_types_staging)parquet_types_staging.FieldSchema(name:csmallint, type:smallint, comment:null), ]
POSTHOOK: Lineage: parquet_types.cstring1 SIMPLE [(parquet_types_staging)parquet_types_staging.FieldSchema(name:cstring1, type:string, comment:null), ]
POSTHOOK: Lineage: parquet_types.ctinyint SIMPLE [(parquet_types_staging)parquet_types_staging.FieldSchema(name:ctinyint, type:tinyint, comment:null), ]
+POSTHOOK: Lineage: parquet_types.cvarchar SIMPLE [(parquet_types_staging)parquet_types_staging.FieldSchema(name:cvarchar, type:varchar(10), comment:null), ]
POSTHOOK: Lineage: parquet_types.t SIMPLE [(parquet_types_staging)parquet_types_staging.FieldSchema(name:t, type:timestamp, comment:null), ]
PREHOOK: query: SELECT * FROM parquet_types
PREHOOK: type: QUERY
@@ -87,27 +97,27 @@ POSTHOOK: query: SELECT * FROM parquet_t
POSTHOOK: type: QUERY
POSTHOOK: Input: default@parquet_types
#### A masked pattern was here ####
-100 1 1 1.0 0.0 abc 2011-01-01 01:01:01.111111111
-101 2 2 1.1 0.3 def 2012-02-02 02:02:02.222222222
-102 3 3 1.2 0.6 ghi 2013-03-03 03:03:03.333333333
-103 1 4 1.3 0.9 jkl 2014-04-04 04:04:04.444444444
-104 2 5 1.4 1.2 mno 2015-05-05 05:05:05.555555555
-105 3 1 1.0 1.5 pqr 2016-06-06 06:06:06.666666666
-106 1 2 1.1 1.8 stu 2017-07-07 07:07:07.777777777
-107 2 3 1.2 2.1 vwx 2018-08-08 08:08:08.888888888
-108 3 4 1.3 2.4 yza 2019-09-09 09:09:09.999999999
-109 1 5 1.4 2.7 bcd 2020-10-10 10:10:10.101010101
-110 2 1 1.0 3.0 efg 2021-11-11 11:11:11.111111111
-111 3 2 1.1 3.3 hij 2022-12-12 12:12:12.121212121
-112 1 3 1.2 3.6 klm 2023-01-02 13:13:13.131313131
-113 2 4 1.3 3.9 nop 2024-02-02 14:14:14.141414141
-114 3 5 1.4 4.2 qrs 2025-03-03 15:15:15.151515151
-115 1 1 1.0 4.5 tuv 2026-04-04 16:16:16.161616161
-116 2 2 1.1 4.8 wxy 2027-05-05 17:17:17.171717171
-117 3 3 1.2 5.1 zab 2028-06-06 18:18:18.181818181
-118 1 4 1.3 5.4 cde 2029-07-07 19:19:19.191919191
-119 2 5 1.4 5.7 fgh 2030-08-08 20:20:20.202020202
-120 3 1 1.0 6.0 ijk 2031-09-09 21:21:21.212121212
+100 1 1 1.0 0.0 abc 2011-01-01 01:01:01.111111111 a a
+101 2 2 1.1 0.3 def 2012-02-02 02:02:02.222222222 ab ab
+102 3 3 1.2 0.6 ghi 2013-03-03 03:03:03.333333333 abc abc
+103 1 4 1.3 0.9 jkl 2014-04-04 04:04:04.444444444 abcd abcd
+104 2 5 1.4 1.2 mno 2015-05-05 05:05:05.555555555 abcde abcde
+105 3 1 1.0 1.5 pqr 2016-06-06 06:06:06.666666666 abcde abcdef
+106 1 2 1.1 1.8 stu 2017-07-07 07:07:07.777777777 abcde abcdefg
+107 2 3 1.2 2.1 vwx 2018-08-08 08:08:08.888888888 bcdef abcdefgh
+108 3 4 1.3 2.4 yza 2019-09-09 09:09:09.999999999 cdefg abcdefghij
+109 1 5 1.4 2.7 bcd 2020-10-10 10:10:10.101010101 klmno abcdedef
+110 2 1 1.0 3.0 efg 2021-11-11 11:11:11.111111111 pqrst abcdede
+111 3 2 1.1 3.3 hij 2022-12-12 12:12:12.121212121 nopqr abcded
+112 1 3 1.2 3.6 klm 2023-01-02 13:13:13.131313131 opqrs abcdd
+113 2 4 1.3 3.9 nop 2024-02-02 14:14:14.141414141 pqrst abc
+114 3 5 1.4 4.2 qrs 2025-03-03 15:15:15.151515151 qrstu b
+115 1 1 1.0 4.5 tuv 2026-04-04 16:16:16.161616161 rstuv abcded
+116 2 2 1.1 4.8 wxy 2027-05-05 17:17:17.171717171 stuvw abcded
+117 3 3 1.2 5.1 zab 2028-06-06 18:18:18.181818181 tuvwx abcded
+118 1 4 1.3 5.4 cde 2029-07-07 19:19:19.191919191 uvwzy abcdede
+119 2 5 1.4 5.7 fgh 2030-08-08 20:20:20.202020202 vwxyz abcdede
+120 3 1 1.0 6.0 ijk 2031-09-09 21:21:21.212121212 wxyza abcde
PREHOOK: query: SELECT ctinyint,
MAX(cint),
MIN(csmallint),
Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/Deserializer.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/Deserializer.java?rev=1619555&r1=1619554&r2=1619555&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/Deserializer.java (original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/Deserializer.java Thu Aug 21 19:00:21 2014
@@ -52,7 +52,7 @@ public interface Deserializer {
* Deserialize an object out of a Writable blob. In most cases, the return
* value of this function will be constant since the function will reuse the
* returned object. If the client wants to keep a copy of the object, the
- * client needs to clone the returnDeserializered value by calling
+ * client needs to clone the returned deserialized value by calling
* ObjectInspectorUtils.getStandardObject().
*
* @param blob
Modified: hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfo.java
URL: http://svn.apache.org/viewvc/hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfo.java?rev=1619555&r1=1619554&r2=1619555&view=diff
==============================================================================
--- hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfo.java (original)
+++ hive/trunk/serde/src/java/org/apache/hadoop/hive/serde2/typeinfo/TypeInfo.java Thu Aug 21 19:00:21 2014
@@ -26,10 +26,11 @@ import org.apache.hadoop.hive.serde2.obj
* Stores information about a type. Always use the TypeInfoFactory to create new
* TypeInfo objects.
*
- * We support 5 categories of types: 1. Primitive objects (String, Number, etc)
+ * We support 8 categories of types: 1. Primitive objects (String, Number, etc)
* 2. List objects (a list of objects of a single type) 3. Map objects (a map
* from objects of one type to objects of another type) 4. Struct objects (a
* list of fields with names and their own types) 5. Union objects
+ * 6. Decimal objects 7. Char objects 8. Varchar objects
*/
public abstract class TypeInfo implements Serializable {