Skip to content

Commit

Permalink
Added support for date types (hive 1.2.0 and later)
Browse files Browse the repository at this point in the history
  • Loading branch information
rcongiu committed Dec 11, 2015
1 parent 7e4b3db commit 883ae1a
Show file tree
Hide file tree
Showing 4 changed files with 93 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,15 @@

package org.openx.data.jsonserde.objectinspector.primitive;

import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.AbstractPrimitiveJavaObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorUtils.PrimitiveTypeEntry;
import org.apache.hadoop.hive.serde2.typeinfo.PrimitiveTypeInfo;
import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory;

import java.util.Map;

/**
*
* @author Roberto Congiu <rcongiu@yahoo.com>
Expand All @@ -32,5 +36,11 @@ public class TypeEntryShim {
public static PrimitiveTypeEntry timestampType = PrimitiveObjectInspectorUtils.timestampTypeEntry;
public static PrimitiveTypeEntry stringType = PrimitiveObjectInspectorUtils.stringTypeEntry;
public static PrimitiveTypeEntry booleanType = PrimitiveObjectInspectorUtils.booleanTypeEntry;

// this won't actually be used since datetype was added in 1.2, but we have to add it anyway
public static PrimitiveTypeEntry dateType = PrimitiveObjectInspectorUtils.stringTypeEntry;

// no specific OIs in this shimt
public static void addObjectInspectors(Map<PrimitiveObjectInspector.PrimitiveCategory, AbstractPrimitiveJavaObjectInspector> primitiveOICache) {

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package org.openx.data.jsonserde.objectinspector.primitive;

import org.apache.hadoop.hive.serde2.io.DateWritable;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.AbstractPrimitiveJavaObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.SettableDateObjectInspector;

import java.sql.Date;
import java.text.SimpleDateFormat;

/**
* Created by rcongiu on 11/12/15.
*/
public class JavaStringDateObjectInspector extends AbstractPrimitiveJavaObjectInspector
implements SettableDateObjectInspector {

private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

public JavaStringDateObjectInspector() {
super(TypeEntryShim.dateType);
}



@Override
public Object set(Object o, java.sql.Date d) {
return d.toString();
}

@Override
public Object set(Object o, DateWritable tw) {
return create( tw.get());
}


@Override
public Object create(Date d) {
return d.toString();
}

@Override
public DateWritable getPrimitiveWritableObject(Object o) {
if(o == null) return null;

if(o instanceof String) {
return new DateWritable(parse((String)o));
} else {
return new DateWritable(((Date) o));
}
}

@Override
public Date getPrimitiveJavaObject(Object o) {
if(o instanceof String) {
parse((String)o);
} else {
if (o instanceof Date) return ((Date) o);
}
return null;
}

protected java.sql.Date parse(String o) {
try {
return new java.sql.Date(sdf.parse(o).getTime());
} catch(java.text.ParseException e) {
return null;
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,13 @@

package org.openx.data.jsonserde.objectinspector.primitive;

import org.apache.hadoop.hive.serde2.objectinspector.PrimitiveObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.AbstractPrimitiveJavaObjectInspector;
import org.apache.hadoop.hive.serde2.typeinfo.PrimitiveTypeInfo;
import org.apache.hadoop.hive.serde2.typeinfo.TypeInfoFactory;

import java.util.Map;

/**
*
* @author Roberto Congiu <rcongiu@yahoo.com>
Expand All @@ -29,4 +33,10 @@ public class TypeEntryShim {
public static PrimitiveTypeInfo timestampType = TypeInfoFactory.timestampTypeInfo;
public static PrimitiveTypeInfo stringType = TypeInfoFactory.stringTypeInfo;
public static PrimitiveTypeInfo booleanType = TypeInfoFactory.booleanTypeInfo;
public static PrimitiveTypeInfo dateType = TypeInfoFactory.dateTypeInfo;

public static void addObjectInspectors(Map<PrimitiveObjectInspector.PrimitiveCategory, AbstractPrimitiveJavaObjectInspector> primitiveOICache) {
primitiveOICache.put(dateType.getPrimitiveCategory(), new JavaStringDateObjectInspector());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,7 @@
import org.apache.hadoop.hive.serde2.objectinspector.primitive.AbstractPrimitiveJavaObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.primitive.PrimitiveObjectInspectorFactory;
import org.apache.hadoop.hive.serde2.typeinfo.*;
import org.openx.data.jsonserde.objectinspector.primitive.JavaStringByteObjectInspector;
import org.openx.data.jsonserde.objectinspector.primitive.JavaStringDoubleObjectInspector;
import org.openx.data.jsonserde.objectinspector.primitive.JavaStringFloatObjectInspector;
import org.openx.data.jsonserde.objectinspector.primitive.JavaStringIntObjectInspector;
import org.openx.data.jsonserde.objectinspector.primitive.JavaStringJsonObjectInspector;
import org.openx.data.jsonserde.objectinspector.primitive.JavaStringLongObjectInspector;
import org.openx.data.jsonserde.objectinspector.primitive.JavaStringShortObjectInspector;
import org.openx.data.jsonserde.objectinspector.primitive.JavaStringTimestampObjectInspector;
import org.openx.data.jsonserde.objectinspector.primitive.JavaStringBooleanObjectInspector;
import org.openx.data.jsonserde.objectinspector.primitive.*;

/**
*
Expand Down Expand Up @@ -210,6 +202,8 @@ public static JsonMapObjectInspector getJsonMapObjectInspector(
primitiveOICache.put(PrimitiveCategory.DOUBLE, new JavaStringDoubleObjectInspector());
primitiveOICache.put(PrimitiveCategory.TIMESTAMP, new JavaStringTimestampObjectInspector());
primitiveOICache.put(PrimitiveCategory.BOOLEAN, new JavaStringBooleanObjectInspector());
// add the OIs that were introduced in different versions of hive
TypeEntryShim.addObjectInspectors(primitiveOICache);
}

/**
Expand Down

0 comments on commit 883ae1a

Please sign in to comment.