You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by gu...@apache.org on 2014/11/03 03:00:28 UTC
svn commit: r1636227 -
/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/ExprNodeGenericFuncEvaluator.java
Author: gunther
Date: Mon Nov 3 02:00:28 2014
New Revision: 1636227
URL: http://svn.apache.org/r1636227
Log:
HIVE-8313: Optimize evaluation for ExprNodeConstantEvaluator and ExprNodeNullEvaluator (Mithun Radhakrishnan, reviewed by Navis)
Modified:
hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/ExprNodeGenericFuncEvaluator.java
Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/ExprNodeGenericFuncEvaluator.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/ExprNodeGenericFuncEvaluator.java?rev=1636227&r1=1636226&r2=1636227&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/ExprNodeGenericFuncEvaluator.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/ExprNodeGenericFuncEvaluator.java Mon Nov 3 02:00:28 2014
@@ -31,6 +31,9 @@ import org.apache.hadoop.hive.serde2.obj
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspector;
import org.apache.hadoop.hive.serde2.objectinspector.ObjectInspectorUtils;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* ExprNodeGenericFuncEvaluator.
*
@@ -44,6 +47,7 @@ public class ExprNodeGenericFuncEvaluato
transient Object rowObject;
transient ExprNodeEvaluator[] children;
transient GenericUDF.DeferredObject[] deferredChildren;
+ transient GenericUDF.DeferredObject[] childrenNeedingPrepare;
transient boolean isEager;
transient boolean isConstant = false;
@@ -73,6 +77,10 @@ public class ExprNodeGenericFuncEvaluato
}
}
+ public boolean needsPrepare() {
+ return !(eval instanceof ExprNodeConstantEvaluator || eval instanceof ExprNodeNullEvaluator);
+ }
+
public Object get() throws HiveException {
if (!evaluated) {
obj = eval.evaluate(rowObject, version);
@@ -113,9 +121,17 @@ public class ExprNodeGenericFuncEvaluato
@Override
public ObjectInspector initialize(ObjectInspector rowInspector) throws HiveException {
deferredChildren = new GenericUDF.DeferredObject[children.length];
+ List<GenericUDF.DeferredObject> childrenNeedingPrepare =
+ new ArrayList<GenericUDF.DeferredObject>(children.length);
for (int i = 0; i < deferredChildren.length; i++) {
- deferredChildren[i] = new DeferredExprObject(children[i], isEager);
+ DeferredExprObject deferredExprObject = new DeferredExprObject(children[i], isEager);
+ deferredChildren[i] = deferredExprObject;
+ if (deferredExprObject.needsPrepare()) {
+ childrenNeedingPrepare.add(deferredExprObject);
+ }
}
+ this.childrenNeedingPrepare =
+ childrenNeedingPrepare.toArray(new GenericUDF.DeferredObject[childrenNeedingPrepare.size()]);
// Initialize all children first
ObjectInspector[] childrenOIs = new ObjectInspector[children.length];
for (int i = 0; i < children.length; i++) {
@@ -163,8 +179,8 @@ public class ExprNodeGenericFuncEvaluato
return ((ConstantObjectInspector) outputOI).getWritableConstantValue();
}
rowObject = row;
- for (int i = 0; i < deferredChildren.length; i++) {
- deferredChildren[i].prepare(version);
+ for (GenericUDF.DeferredObject deferredObject : childrenNeedingPrepare) {
+ deferredObject.prepare(version);
}
return genericUDF.evaluate(deferredChildren);
}