You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2013/06/14 23:57:58 UTC

svn commit: r1493260 - in /hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector: ./ expressions/

Author: hashutosh
Date: Fri Jun 14 21:57:58 2013
New Revision: 1493260

URL: http://svn.apache.org/r1493260
Log:
HIVE-4699 : Integrate basic UDFs for Timesamp (Gopal V via Ashutosh Chauhan)

Modified:
    hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizationContext.java
    hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFDayOfMonthLong.java
    hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFHourLong.java
    hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFMinuteLong.java
    hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFMonthLong.java
    hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFSecondLong.java
    hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFUnixTimeStampLong.java
    hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFWeekOfYearLong.java
    hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFYearLong.java

Modified: hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizationContext.java
URL: http://svn.apache.org/viewvc/hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizationContext.java?rev=1493260&r1=1493259&r2=1493260&view=diff
==============================================================================
--- hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizationContext.java (original)
+++ hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizationContext.java Fri Jun 14 21:57:58 2013
@@ -42,6 +42,7 @@ import org.apache.hadoop.hive.ql.exec.ve
 import org.apache.hadoop.hive.ql.exec.vector.expressions.SelectColumnIsNull;
 import org.apache.hadoop.hive.ql.exec.vector.expressions.SelectColumnIsTrue;
 import org.apache.hadoop.hive.ql.exec.vector.expressions.VectorExpression;
+import org.apache.hadoop.hive.ql.exec.vector.expressions.VectorUDFUnixTimeStampLong;
 import org.apache.hadoop.hive.ql.exec.vector.expressions.aggregates.VectorAggregateExpression;
 import org.apache.hadoop.hive.ql.exec.vector.expressions.aggregates.VectorUDAFCount;
 import org.apache.hadoop.hive.ql.exec.vector.expressions.aggregates.VectorUDAFCountStar;
@@ -70,6 +71,10 @@ import org.apache.hadoop.hive.ql.plan.Ex
 import org.apache.hadoop.hive.ql.plan.ExprNodeDesc;
 import org.apache.hadoop.hive.ql.plan.ExprNodeGenericFuncDesc;
 import org.apache.hadoop.hive.ql.plan.api.OperatorType;
+import org.apache.hadoop.hive.ql.udf.UDFDayOfMonth;
+import org.apache.hadoop.hive.ql.udf.UDFHour;
+import org.apache.hadoop.hive.ql.udf.UDFMinute;
+import org.apache.hadoop.hive.ql.udf.UDFMonth;
 import org.apache.hadoop.hive.ql.udf.UDFOPDivide;
 import org.apache.hadoop.hive.ql.udf.UDFOPMinus;
 import org.apache.hadoop.hive.ql.udf.UDFOPMod;
@@ -77,6 +82,9 @@ import org.apache.hadoop.hive.ql.udf.UDF
 import org.apache.hadoop.hive.ql.udf.UDFOPNegative;
 import org.apache.hadoop.hive.ql.udf.UDFOPPlus;
 import org.apache.hadoop.hive.ql.udf.UDFOPPositive;
+import org.apache.hadoop.hive.ql.udf.UDFSecond;
+import org.apache.hadoop.hive.ql.udf.UDFWeekOfYear;
+import org.apache.hadoop.hive.ql.udf.UDFYear;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDF;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDFBridge;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPAnd;
@@ -90,6 +98,7 @@ import org.apache.hadoop.hive.ql.udf.gen
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPNotNull;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPNull;
 import org.apache.hadoop.hive.ql.udf.generic.GenericUDFOPOr;
+import org.apache.hadoop.hive.ql.udf.generic.GenericUDFToUnixTimeStamp;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils;
 
@@ -386,6 +395,29 @@ public class VectorizationContext {
       return getVectorExpression((GenericUDFOPOr) udf, childExpr);
     } else if (udf instanceof GenericUDFBridge) {
       return getVectorExpression((GenericUDFBridge) udf, childExpr);
+    } else if(udf instanceof GenericUDFToUnixTimeStamp) {
+      return getVectorExpression((GenericUDFToUnixTimeStamp) udf, childExpr);
+    }
+    throw new HiveException("Udf: "+udf.getClass().getSimpleName()+", is not supported");
+  }
+
+  private VectorExpression getVectorExpression(GenericUDFToUnixTimeStamp udf,
+      List<ExprNodeDesc> childExpr) throws HiveException {
+    ExprNodeDesc leftExpr = childExpr.get(0);
+    leftExpr = foldConstantsForUnaryExpression(leftExpr);
+    VectorExpression v1 = getVectorExpression(leftExpr);
+    String colType = v1.getOutputType();
+    String outputType = "long";
+    if(colType.equalsIgnoreCase("timestamp")) {
+      int inputCol = v1.getOutputColumn();
+      int outputCol = ocm.allocateOutputColumn(outputType);
+      try {
+        VectorExpression v2 = new VectorUDFUnixTimeStampLong(inputCol, outputCol);
+        return v2;
+      } catch(Exception e) {
+        e.printStackTrace();
+        throw new HiveException("Udf: Vector"+udf+", could not be initialized for " + colType, e);
+      }
     }
     throw new HiveException("Udf: "+udf.getClass().getSimpleName()+", is not supported");
   }
@@ -408,10 +440,44 @@ public class VectorizationContext {
       return getUnaryMinusExpression(childExpr);
     } else if (cl.equals(UDFOPPositive.class)) {
       return getUnaryPlusExpression(childExpr);
+    } else if (cl.equals(UDFYear.class) ||
+        cl.equals(UDFMonth.class) ||
+        cl.equals(UDFWeekOfYear.class) ||
+        cl.equals(UDFDayOfMonth.class) ||
+        cl.equals(UDFHour.class) ||
+        cl.equals(UDFMinute.class) ||
+        cl.equals(UDFSecond.class)) {
+      return getTimestampFieldExpression(cl.getSimpleName(), childExpr);
     }
+
     throw new HiveException("Udf: "+udf.getClass().getSimpleName()+", is not supported");
   }
 
+  private VectorExpression getTimestampFieldExpression(String udf,
+      List<ExprNodeDesc> childExpr) throws HiveException {
+    ExprNodeDesc leftExpr = childExpr.get(0);
+    leftExpr = foldConstantsForUnaryExpression(leftExpr);
+    VectorExpression v1 = getVectorExpression(leftExpr);
+    String colType = v1.getOutputType();
+    String outputType = "long";
+    if(colType.equalsIgnoreCase("timestamp")) {
+        int inputCol = v1.getOutputColumn();
+        int outputCol = ocm.allocateOutputColumn(outputType);
+        String pkg = "org.apache.hadoop.hive.ql.exec.vector.expressions";
+        // org.apache.hadoop.hive.ql.exec.vector.expressions.VectorUDFYearLong
+        String vectorUDF = pkg + ".Vector"+udf+"Long";
+        try {
+          VectorExpression v2 = (VectorExpression)Class.forName(vectorUDF).
+              getDeclaredConstructors()[0].newInstance(inputCol,outputCol);
+          return v2;
+        } catch(Exception e) {
+          e.printStackTrace();
+          throw new HiveException("Udf: Vector"+udf+", could not be initialized for " + colType, e);
+        }
+    }
+    throw new HiveException("Udf: "+udf+", is not supported for " + colType);
+  }
+
   private VectorExpression getBinaryArithmeticExpression(String method,
       List<ExprNodeDesc> childExpr) throws HiveException {
     ExprNodeDesc leftExpr = childExpr.get(0);

Modified: hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFDayOfMonthLong.java
URL: http://svn.apache.org/viewvc/hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFDayOfMonthLong.java?rev=1493260&r1=1493259&r2=1493260&view=diff
==============================================================================
--- hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFDayOfMonthLong.java (original)
+++ hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFDayOfMonthLong.java Fri Jun 14 21:57:58 2013
@@ -23,7 +23,7 @@ import java.util.Calendar;
 
 public final class VectorUDFDayOfMonthLong extends VectorUDFTimestampFieldLong {
 
-  VectorUDFDayOfMonthLong(int colNum, int outputColumn) {
+  public VectorUDFDayOfMonthLong(int colNum, int outputColumn) {
     super(Calendar.DAY_OF_MONTH, colNum,outputColumn);
   }
 

Modified: hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFHourLong.java
URL: http://svn.apache.org/viewvc/hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFHourLong.java?rev=1493260&r1=1493259&r2=1493260&view=diff
==============================================================================
--- hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFHourLong.java (original)
+++ hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFHourLong.java Fri Jun 14 21:57:58 2013
@@ -23,7 +23,7 @@ import java.util.Calendar;
 
 public final class VectorUDFHourLong extends VectorUDFTimestampFieldLong {
 
-  VectorUDFHourLong(int colNum, int outputColumn) {
+  public VectorUDFHourLong(int colNum, int outputColumn) {
     super(Calendar.HOUR_OF_DAY, colNum,outputColumn);
   }
 

Modified: hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFMinuteLong.java
URL: http://svn.apache.org/viewvc/hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFMinuteLong.java?rev=1493260&r1=1493259&r2=1493260&view=diff
==============================================================================
--- hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFMinuteLong.java (original)
+++ hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFMinuteLong.java Fri Jun 14 21:57:58 2013
@@ -23,7 +23,7 @@ import java.util.Calendar;
 
 public final class VectorUDFMinuteLong extends VectorUDFTimestampFieldLong {
 
-  VectorUDFMinuteLong(int colNum, int outputColumn) {
+  public VectorUDFMinuteLong(int colNum, int outputColumn) {
     super(Calendar.MINUTE, colNum,outputColumn);
   }
 

Modified: hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFMonthLong.java
URL: http://svn.apache.org/viewvc/hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFMonthLong.java?rev=1493260&r1=1493259&r2=1493260&view=diff
==============================================================================
--- hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFMonthLong.java (original)
+++ hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFMonthLong.java Fri Jun 14 21:57:58 2013
@@ -23,7 +23,7 @@ import java.util.Calendar;
 
 public final class VectorUDFMonthLong extends VectorUDFTimestampFieldLong {
 
-  VectorUDFMonthLong(int colNum, int outputColumn) {
+  public VectorUDFMonthLong(int colNum, int outputColumn) {
     super(Calendar.MONTH, colNum,outputColumn);
   }
 

Modified: hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFSecondLong.java
URL: http://svn.apache.org/viewvc/hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFSecondLong.java?rev=1493260&r1=1493259&r2=1493260&view=diff
==============================================================================
--- hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFSecondLong.java (original)
+++ hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFSecondLong.java Fri Jun 14 21:57:58 2013
@@ -23,7 +23,7 @@ import java.util.Calendar;
 
 public final class VectorUDFSecondLong extends VectorUDFTimestampFieldLong {
 
-  VectorUDFSecondLong(int colNum, int outputColumn) {
+  public VectorUDFSecondLong(int colNum, int outputColumn) {
     super(Calendar.SECOND, colNum,outputColumn);
   }
 

Modified: hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFUnixTimeStampLong.java
URL: http://svn.apache.org/viewvc/hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFUnixTimeStampLong.java?rev=1493260&r1=1493259&r2=1493260&view=diff
==============================================================================
--- hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFUnixTimeStampLong.java (original)
+++ hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFUnixTimeStampLong.java Fri Jun 14 21:57:58 2013
@@ -33,7 +33,7 @@ public final class VectorUDFUnixTimeStam
     return ms/1000;
   }
 
-  VectorUDFUnixTimeStampLong(int colNum, int outputColumn) {
+  public VectorUDFUnixTimeStampLong(int colNum, int outputColumn) {
     /* not a real field */
     super(-1, colNum,outputColumn);
   }

Modified: hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFWeekOfYearLong.java
URL: http://svn.apache.org/viewvc/hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFWeekOfYearLong.java?rev=1493260&r1=1493259&r2=1493260&view=diff
==============================================================================
--- hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFWeekOfYearLong.java (original)
+++ hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFWeekOfYearLong.java Fri Jun 14 21:57:58 2013
@@ -23,7 +23,7 @@ import java.util.Calendar;
 
 public final class VectorUDFWeekOfYearLong extends VectorUDFTimestampFieldLong {
 
-  VectorUDFWeekOfYearLong(int colNum, int outputColumn) {
+  public VectorUDFWeekOfYearLong(int colNum, int outputColumn) {
     super(Calendar.WEEK_OF_YEAR, colNum,outputColumn);
     /* code copied over from UDFWeekOfYear implementation */
     calendar.setFirstDayOfWeek(Calendar.MONDAY);

Modified: hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFYearLong.java
URL: http://svn.apache.org/viewvc/hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFYearLong.java?rev=1493260&r1=1493259&r2=1493260&view=diff
==============================================================================
--- hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFYearLong.java (original)
+++ hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/expressions/VectorUDFYearLong.java Fri Jun 14 21:57:58 2013
@@ -53,7 +53,7 @@ public final class VectorUDFYearLong ext
     }
   }
 
-  VectorUDFYearLong(int colNum, int outputColumn) {
+  public VectorUDFYearLong(int colNum, int outputColumn) {
     super(Calendar.YEAR, colNum,outputColumn);
   }