diff --git a/serde/src/java/org/apache/hadoop/hive/serde2/OpenCSVSerde.java b/serde/src/java/org/apache/hadoop/hive/serde2/OpenCSVSerde.java index d287df05f5..ff6efa2ea0 100644 --- a/serde/src/java/org/apache/hadoop/hive/serde2/OpenCSVSerde.java +++ b/serde/src/java/org/apache/hadoop/hive/serde2/OpenCSVSerde.java @@ -25,6 +25,8 @@ import org.apache.hadoop.hive.serde2.objectinspector.StructObjectInspector; import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory; import org.apache.hadoop.hive.serde2.objectinspector.primitive.StringObjectInspector; +import org.apache.hadoop.hive.serde2.typeinfo.TypeInfo; +import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoUtils; import org.apache.hadoop.io.Text; import org.apache.hadoop.io.Writable; import org.slf4j.Logger; @@ -77,8 +79,14 @@ public void initialize(final Configuration conf, final Properties tbl) throws Se numCols = columnNames.size(); final List columnOIs = new ArrayList(numCols); + final String columnTypeProperty = tbl.getProperty(serdeConstants.LIST_COLUMN_TYPES); + final List columnTypeInfos = TypeInfoUtils.getTypeInfosFromTypeString(columnTypeProperty); - for (int i = 0; i < numCols; i++) { + for (TypeInfo typeInfo : columnTypeInfos) { + columnOIs.add(TypeInfoUtils.getStandardJavaObjectInspectorFromTypeInfo(typeInfo)); + } + // if "columns.types" is missing, all columns will be of String type + for (int i = 0, size = numCols - columnTypeInfos.size(); i < size; i++) { columnOIs.add(PrimitiveObjectInspectorFactory.javaStringObjectInspector); }