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/07/17 22:22:50 UTC
svn commit: r1504263 -
/hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizationContext.java
Author: hashutosh
Date: Wed Jul 17 20:22:50 2013
New Revision: 1504263
URL: http://svn.apache.org/r1504263
Log:
HIVE-4685 : query using LIKE does not vectorize (Eric Hanson via Ashutosh Chauhan)
Modified:
hive/branches/vectorization/ql/src/java/org/apache/hadoop/hive/ql/exec/vector/VectorizationContext.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=1504263&r1=1504262&r2=1504263&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 Wed Jul 17 20:22:50 2013
@@ -35,6 +35,7 @@ import org.apache.hadoop.hive.ql.exec.UD
import org.apache.hadoop.hive.ql.exec.vector.expressions.ConstantVectorExpression;
import org.apache.hadoop.hive.ql.exec.vector.expressions.FilterExprAndExpr;
import org.apache.hadoop.hive.ql.exec.vector.expressions.FilterExprOrExpr;
+import org.apache.hadoop.hive.ql.exec.vector.expressions.FilterStringColLikeStringScalar;
import org.apache.hadoop.hive.ql.exec.vector.expressions.IdentityExpression;
import org.apache.hadoop.hive.ql.exec.vector.expressions.SelectColumnIsNotNull;
import org.apache.hadoop.hive.ql.exec.vector.expressions.SelectColumnIsNull;
@@ -71,6 +72,7 @@ import org.apache.hadoop.hive.ql.plan.Ex
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.UDFLike;
import org.apache.hadoop.hive.ql.udf.UDFMinute;
import org.apache.hadoop.hive.ql.udf.UDFMonth;
import org.apache.hadoop.hive.ql.udf.UDFOPDivide;
@@ -99,6 +101,7 @@ import org.apache.hadoop.hive.ql.udf.gen
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;
+import org.apache.hadoop.io.Text;
/**
* Context class for vectorization execution.
@@ -448,11 +451,33 @@ public class VectorizationContext {
cl.equals(UDFMinute.class) ||
cl.equals(UDFSecond.class)) {
return getTimestampFieldExpression(cl.getSimpleName(), childExpr);
+ } else if (cl.equals(UDFLike.class)) {
+ return getLikeExpression(childExpr);
}
throw new HiveException("Udf: "+udf.getClass().getSimpleName()+", is not supported");
}
+ private VectorExpression getLikeExpression(List<ExprNodeDesc> childExpr) throws HiveException {
+ ExprNodeDesc leftExpr = childExpr.get(0);
+ ExprNodeDesc rightExpr = childExpr.get(1);
+
+ VectorExpression expr = null;
+ if ((leftExpr instanceof ExprNodeColumnDesc) &&
+ (rightExpr instanceof ExprNodeConstantDesc) ) {
+ ExprNodeColumnDesc leftColDesc = (ExprNodeColumnDesc) leftExpr;
+ ExprNodeConstantDesc constDesc = (ExprNodeConstantDesc) rightExpr;
+ int inputCol = getInputColumnIndex(leftColDesc.getColumn());
+ expr = (VectorExpression) new FilterStringColLikeStringScalar(inputCol,
+ new Text((byte[]) getScalarValue(constDesc)));
+ }
+ // TODO add logic to handle cases where left input is an expression.
+ if (expr == null) {
+ throw new HiveException("Vector LIKE filter expression could not be initialized");
+ }
+ return expr;
+ }
+
private VectorExpression getTimestampFieldExpression(String udf,
List<ExprNodeDesc> childExpr) throws HiveException {
ExprNodeDesc leftExpr = childExpr.get(0);