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 2015/12/15 20:31:37 UTC
hive git commit: HIVE-12666:
PCRExprProcFactory.GenericFuncExprProcessor.process() aggressively removes
dynamic partition pruner generated synthetic join predicates (Hari
Subramaniyan, reviewed by Laljo John Pullokkaran)
Repository: hive
Updated Branches:
refs/heads/master be98f0133 -> 25c207c93
HIVE-12666: PCRExprProcFactory.GenericFuncExprProcessor.process() aggressively removes dynamic partition pruner generated synthetic join predicates (Hari Subramaniyan, reviewed by Laljo John Pullokkaran)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/25c207c9
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/25c207c9
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/25c207c9
Branch: refs/heads/master
Commit: 25c207c9398b2722d594837f011c12d497aeae43
Parents: be98f01
Author: Hari Subramaniyan <ha...@apache.org>
Authored: Tue Dec 15 11:31:26 2015 -0800
Committer: Hari Subramaniyan <ha...@apache.org>
Committed: Tue Dec 15 11:31:26 2015 -0800
----------------------------------------------------------------------
.../DynamicPartitionPruningOptimization.java | 73 +++++++++-----------
.../ql/optimizer/pcr/PcrExprProcFactory.java | 31 ++++++---
.../llap/dynamic_partition_pruning.q.out | 10 +--
.../vectorized_dynamic_partition_pruning.q.out | 10 +--
.../tez/dynamic_partition_pruning.q.out | 10 +--
.../results/clientpositive/tez/mergejoin.q.out | 2 -
.../vectorized_dynamic_partition_pruning.q.out | 10 +--
7 files changed, 64 insertions(+), 82 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hive/blob/25c207c9/ql/src/java/org/apache/hadoop/hive/ql/optimizer/DynamicPartitionPruningOptimization.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/DynamicPartitionPruningOptimization.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/DynamicPartitionPruningOptimization.java
index c2749a8..292d375 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/DynamicPartitionPruningOptimization.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/DynamicPartitionPruningOptimization.java
@@ -65,7 +65,6 @@ import org.apache.hadoop.hive.ql.plan.GroupByDesc;
import org.apache.hadoop.hive.ql.plan.OperatorDesc;
import org.apache.hadoop.hive.ql.plan.PlanUtils;
import org.apache.hadoop.hive.ql.plan.SelectDesc;
-import org.apache.hadoop.hive.ql.plan.TableScanDesc;
/**
* This optimization looks for expressions of the kind "x IN (RS[n])". If such
@@ -166,7 +165,8 @@ public class DynamicPartitionPruningOptimization implements NodeProcessor {
procCtx.getClass().getName());
}
- final FilterOperator filter = (FilterOperator) nd;
+ FilterOperator filter = (FilterOperator) nd;
+ FilterDesc desc = filter.getConf();
TableScanOperator ts = null;
@@ -183,19 +183,15 @@ public class DynamicPartitionPruningOptimization implements NodeProcessor {
ts = (TableScanOperator) filter.getParentOperators().get(0);
}
- final ExprNodeDesc filterPredicate = filter.getConf().getPredicate(),
- tsPredicate = ts != null ? ts.getConf().getFilterExpr() : null,
- predicateToUse = (tsPredicate == null) ? filterPredicate : tsPredicate;
-
if (LOG.isDebugEnabled()) {
LOG.debug("Parent: " + filter.getParentOperators().get(0));
- LOG.debug("Filter: " + predicateToUse.getExprString());
+ LOG.debug("Filter: " + desc.getPredicateString());
LOG.debug("TableScan: " + ts);
}
// collect the dynamic pruning conditions
removerContext.dynLists.clear();
- walkExprTree(predicateToUse, removerContext);
+ walkExprTree(desc.getPredicate(), removerContext);
for (DynamicListContext ctx : removerContext) {
String column = extractColName(ctx.parent);
@@ -228,53 +224,50 @@ public class DynamicPartitionPruningOptimization implements NodeProcessor {
}
// we always remove the condition by replacing it with "true"
- if (predicateToUse == filterPredicate) {
- removeDppExpr(filter.getConf(), ctx);
+ ExprNodeDesc constNode = new ExprNodeConstantDesc(ctx.parent.getTypeInfo(), true);
+ if (ctx.grandParent == null) {
+ desc.setPredicate(constNode);
} else {
- removeDppExpr(ts.getConf(), ctx);
+ int i = ctx.grandParent.getChildren().indexOf(ctx.parent);
+ ctx.grandParent.getChildren().remove(i);
+ ctx.grandParent.getChildren().add(i, constNode);
}
}
- // Clean up the other predicate too.
- if (predicateToUse == tsPredicate) {
- removerContext = new DynamicPartitionPrunerContext();
- removerContext.dynLists.clear();
- walkExprTree(filterPredicate, removerContext);
- for (DynamicListContext ctx : removerContext) {
- removeDppExpr(filter.getConf(), ctx);
- }
- }
+ // if we pushed the predicate into the table scan we need to remove the
+ // synthetic conditions there.
+ cleanTableScanFilters(ts);
return false;
}
+ private void cleanTableScanFilters(TableScanOperator ts) throws SemanticException {
- private void removeDppExpr(final FilterDesc desc, DynamicListContext ctx) {
- ExprNodeDesc constNode = new ExprNodeConstantDesc(ctx.parent.getTypeInfo(), true);
- if (ctx.grandParent == null) {
- desc.setPredicate(constNode);
- } else {
- int i = ctx.grandParent.getChildren().indexOf(ctx.parent);
- ctx.grandParent.getChildren().remove(i);
- ctx.grandParent.getChildren().add(i, constNode);
+ if (ts == null || ts.getConf() == null || ts.getConf().getFilterExpr() == null) {
+ // nothing to do
+ return;
}
- }
- private void removeDppExpr(TableScanDesc conf, DynamicListContext ctx) {
+ DynamicPartitionPrunerContext removerContext = new DynamicPartitionPrunerContext();
- ExprNodeDesc constNode = new ExprNodeConstantDesc(ctx.parent.getTypeInfo(), true);
- if (ctx.grandParent == null) {
- // we're the only node, just clear out the expression
- conf.setFilterExpr(null);
- } else {
- int i = ctx.grandParent.getChildren().indexOf(ctx.parent);
- ctx.grandParent.getChildren().remove(i);
- ctx.grandParent.getChildren().add(i, constNode);
+ // collect the dynamic pruning conditions
+ removerContext.dynLists.clear();
+ walkExprTree(ts.getConf().getFilterExpr(), removerContext);
+
+ for (DynamicListContext ctx : removerContext) {
+ // remove the condition by replacing it with "true"
+ ExprNodeDesc constNode = new ExprNodeConstantDesc(ctx.parent.getTypeInfo(), true);
+ if (ctx.grandParent == null) {
+ // we're the only node, just clear out the expression
+ ts.getConf().setFilterExpr(null);
+ } else {
+ int i = ctx.grandParent.getChildren().indexOf(ctx.parent);
+ ctx.grandParent.getChildren().remove(i);
+ ctx.grandParent.getChildren().add(i, constNode);
+ }
}
}
-
-
private void generateEventOperatorPlan(DynamicListContext ctx, ParseContext parseContext,
TableScanOperator ts, String column) {
http://git-wip-us.apache.org/repos/asf/hive/blob/25c207c9/ql/src/java/org/apache/hadoop/hive/ql/optimizer/pcr/PcrExprProcFactory.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/pcr/PcrExprProcFactory.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/pcr/PcrExprProcFactory.java
index 2ab1575..9cc9ea9 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/pcr/PcrExprProcFactory.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/pcr/PcrExprProcFactory.java
@@ -46,6 +46,7 @@ import org.apache.hadoop.hive.ql.parse.SemanticException;
import org.apache.hadoop.hive.ql.plan.ExprNodeColumnDesc;
import org.apache.hadoop.hive.ql.plan.ExprNodeConstantDesc;
import org.apache.hadoop.hive.ql.plan.ExprNodeDesc;
+import org.apache.hadoop.hive.ql.plan.ExprNodeDynamicListDesc;
import org.apache.hadoop.hive.ql.plan.ExprNodeFieldDesc;
import org.apache.hadoop.hive.ql.plan.ExprNodeGenericFuncDesc;
import org.apache.hadoop.hive.ql.udf.generic.GenericUDFIn;
@@ -377,17 +378,31 @@ public final class PcrExprProcFactory {
if (FunctionRegistry.isDeterministic(((ExprNodeGenericFuncDesc) lhs)
.getGenericUDF())) {
boolean hasOnlyPartCols = true;
+ boolean hasDynamicListDesc = false;
+
for (ExprNodeDesc ed : ((ExprNodeGenericFuncDesc) lhs).getChildren()) {
- // Check if the current field expression contains only
- // partition column or a virtual column or constants.
- // If yes, this filter predicate is a candidate for this optimization.
- if (!(ed instanceof ExprNodeColumnDesc &&
- ((ExprNodeColumnDesc)ed).getIsPartitionColOrVirtualCol())) {
- hasOnlyPartCols = false;
+ // Check if the current field expression contains only
+ // partition column or a virtual column or constants.
+ // If yes, this filter predicate is a candidate for this optimization.
+ if (!(ed instanceof ExprNodeColumnDesc &&
+ ((ExprNodeColumnDesc)ed).getIsPartitionColOrVirtualCol())) {
+ hasOnlyPartCols = false;
+ break;
+ }
+ }
+
+ // If we have non-partition columns, we cannot remove the predicate.
+ if (hasOnlyPartCols) {
+ // We should not remove the dynamic partition pruner generated synthetic predicates.
+ for (int i = 1; i < children.size(); i++) {
+ if (children.get(i) instanceof ExprNodeDynamicListDesc) {
+ hasDynamicListDesc = true;
break;
}
- }
- removePredElem = hasOnlyPartCols;
+ }
+ }
+
+ removePredElem = hasOnlyPartCols && !hasDynamicListDesc;
}
}
http://git-wip-us.apache.org/repos/asf/hive/blob/25c207c9/ql/src/test/results/clientpositive/llap/dynamic_partition_pruning.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/dynamic_partition_pruning.q.out b/ql/src/test/results/clientpositive/llap/dynamic_partition_pruning.q.out
index 17d527b..c6dc55c 100644
--- a/ql/src/test/results/clientpositive/llap/dynamic_partition_pruning.q.out
+++ b/ql/src/test/results/clientpositive/llap/dynamic_partition_pruning.q.out
@@ -1322,7 +1322,7 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (hr is not null and UDFToDouble(hr) is not null) (type: boolean)
+ filterExpr: UDFToDouble(hr) is not null (type: boolean)
Statistics: Num rows: 2000 Data size: 21248 Basic stats: COMPLETE Column stats: NONE
Filter Operator
predicate: UDFToDouble(hr) is not null (type: boolean)
@@ -2521,7 +2521,6 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (ds) IN (RS[5]) (type: boolean)
Statistics: Num rows: 2000 Data size: 21248 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: ds (type: string)
@@ -2596,7 +2595,6 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (ds) IN (RS[6]) (type: boolean)
Statistics: Num rows: 2000 Data size: 21248 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: ds (type: string)
@@ -2708,7 +2706,6 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (ds) IN (RS[12]) (type: boolean)
Statistics: Num rows: 1000 Data size: 10624 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: ds (type: string)
@@ -4272,7 +4269,7 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (hr is not null and UDFToDouble(hr) is not null) (type: boolean)
+ filterExpr: UDFToDouble(hr) is not null (type: boolean)
Statistics: Num rows: 2000 Data size: 21248 Basic stats: COMPLETE Column stats: NONE
Filter Operator
predicate: UDFToDouble(hr) is not null (type: boolean)
@@ -4804,7 +4801,6 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (ds) IN (RS[5]) (type: boolean)
Statistics: Num rows: 2000 Data size: 21248 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: ds (type: string)
@@ -4860,7 +4856,6 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (ds) IN (RS[6]) (type: boolean)
Statistics: Num rows: 2000 Data size: 21248 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: ds (type: string)
@@ -4951,7 +4946,6 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (ds) IN (RS[12]) (type: boolean)
Statistics: Num rows: 1000 Data size: 10624 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: ds (type: string)
http://git-wip-us.apache.org/repos/asf/hive/blob/25c207c9/ql/src/test/results/clientpositive/llap/vectorized_dynamic_partition_pruning.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/llap/vectorized_dynamic_partition_pruning.q.out b/ql/src/test/results/clientpositive/llap/vectorized_dynamic_partition_pruning.q.out
index 5fbc4f6..5ceefe1 100644
--- a/ql/src/test/results/clientpositive/llap/vectorized_dynamic_partition_pruning.q.out
+++ b/ql/src/test/results/clientpositive/llap/vectorized_dynamic_partition_pruning.q.out
@@ -1322,7 +1322,7 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (hr is not null and UDFToDouble(hr) is not null) (type: boolean)
+ filterExpr: UDFToDouble(hr) is not null (type: boolean)
Statistics: Num rows: 2000 Data size: 21248 Basic stats: COMPLETE Column stats: NONE
Filter Operator
predicate: UDFToDouble(hr) is not null (type: boolean)
@@ -2521,7 +2521,6 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (ds) IN (RS[5]) (type: boolean)
Statistics: Num rows: 2000 Data size: 21248 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: ds (type: string)
@@ -2596,7 +2595,6 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (ds) IN (RS[6]) (type: boolean)
Statistics: Num rows: 2000 Data size: 21248 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: ds (type: string)
@@ -2708,7 +2706,6 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (ds) IN (RS[12]) (type: boolean)
Statistics: Num rows: 1000 Data size: 10624 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: ds (type: string)
@@ -4272,7 +4269,7 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (hr is not null and UDFToDouble(hr) is not null) (type: boolean)
+ filterExpr: UDFToDouble(hr) is not null (type: boolean)
Statistics: Num rows: 2000 Data size: 21248 Basic stats: COMPLETE Column stats: NONE
Filter Operator
predicate: UDFToDouble(hr) is not null (type: boolean)
@@ -4804,7 +4801,6 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (ds) IN (RS[5]) (type: boolean)
Statistics: Num rows: 2000 Data size: 21248 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: ds (type: string)
@@ -4860,7 +4856,6 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (ds) IN (RS[6]) (type: boolean)
Statistics: Num rows: 2000 Data size: 21248 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: ds (type: string)
@@ -4951,7 +4946,6 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (ds) IN (RS[12]) (type: boolean)
Statistics: Num rows: 1000 Data size: 10624 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: ds (type: string)
http://git-wip-us.apache.org/repos/asf/hive/blob/25c207c9/ql/src/test/results/clientpositive/tez/dynamic_partition_pruning.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/tez/dynamic_partition_pruning.q.out b/ql/src/test/results/clientpositive/tez/dynamic_partition_pruning.q.out
index b4d19ee..d4b670d 100644
--- a/ql/src/test/results/clientpositive/tez/dynamic_partition_pruning.q.out
+++ b/ql/src/test/results/clientpositive/tez/dynamic_partition_pruning.q.out
@@ -1284,7 +1284,7 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (hr is not null and UDFToDouble(hr) is not null) (type: boolean)
+ filterExpr: UDFToDouble(hr) is not null (type: boolean)
Statistics: Num rows: 2000 Data size: 21248 Basic stats: COMPLETE Column stats: NONE
Filter Operator
predicate: UDFToDouble(hr) is not null (type: boolean)
@@ -2445,7 +2445,6 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (ds) IN (RS[5]) (type: boolean)
Statistics: Num rows: 2000 Data size: 21248 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: ds (type: string)
@@ -2517,7 +2516,6 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (ds) IN (RS[6]) (type: boolean)
Statistics: Num rows: 2000 Data size: 21248 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: ds (type: string)
@@ -2625,7 +2623,6 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (ds) IN (RS[12]) (type: boolean)
Statistics: Num rows: 1000 Data size: 10624 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: ds (type: string)
@@ -4141,7 +4138,7 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (hr is not null and UDFToDouble(hr) is not null) (type: boolean)
+ filterExpr: UDFToDouble(hr) is not null (type: boolean)
Statistics: Num rows: 2000 Data size: 21248 Basic stats: COMPLETE Column stats: NONE
Filter Operator
predicate: UDFToDouble(hr) is not null (type: boolean)
@@ -4659,7 +4656,6 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (ds) IN (RS[5]) (type: boolean)
Statistics: Num rows: 2000 Data size: 21248 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: ds (type: string)
@@ -4713,7 +4709,6 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (ds) IN (RS[6]) (type: boolean)
Statistics: Num rows: 2000 Data size: 21248 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: ds (type: string)
@@ -4801,7 +4796,6 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (ds) IN (RS[12]) (type: boolean)
Statistics: Num rows: 1000 Data size: 10624 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: ds (type: string)
http://git-wip-us.apache.org/repos/asf/hive/blob/25c207c9/ql/src/test/results/clientpositive/tez/mergejoin.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/tez/mergejoin.q.out b/ql/src/test/results/clientpositive/tez/mergejoin.q.out
index b2b3872..15c204d 100644
--- a/ql/src/test/results/clientpositive/tez/mergejoin.q.out
+++ b/ql/src/test/results/clientpositive/tez/mergejoin.q.out
@@ -1363,7 +1363,6 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: b
- filterExpr: (key) IN (RS[4]) (type: boolean)
Statistics: Num rows: 500 Data size: 47000 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: key (type: int)
@@ -1456,7 +1455,6 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: a
- filterExpr: (key) IN (RS[5]) (type: boolean)
Statistics: Num rows: 242 Data size: 22748 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: key (type: int)
http://git-wip-us.apache.org/repos/asf/hive/blob/25c207c9/ql/src/test/results/clientpositive/tez/vectorized_dynamic_partition_pruning.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientpositive/tez/vectorized_dynamic_partition_pruning.q.out b/ql/src/test/results/clientpositive/tez/vectorized_dynamic_partition_pruning.q.out
index 2ec632a..4f6cb91 100644
--- a/ql/src/test/results/clientpositive/tez/vectorized_dynamic_partition_pruning.q.out
+++ b/ql/src/test/results/clientpositive/tez/vectorized_dynamic_partition_pruning.q.out
@@ -1303,7 +1303,7 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (hr is not null and UDFToDouble(hr) is not null) (type: boolean)
+ filterExpr: UDFToDouble(hr) is not null (type: boolean)
Statistics: Num rows: 2000 Data size: 21248 Basic stats: COMPLETE Column stats: NONE
Filter Operator
predicate: UDFToDouble(hr) is not null (type: boolean)
@@ -2483,7 +2483,6 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (ds) IN (RS[5]) (type: boolean)
Statistics: Num rows: 2000 Data size: 21248 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: ds (type: string)
@@ -2556,7 +2555,6 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (ds) IN (RS[6]) (type: boolean)
Statistics: Num rows: 2000 Data size: 21248 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: ds (type: string)
@@ -2666,7 +2664,6 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (ds) IN (RS[12]) (type: boolean)
Statistics: Num rows: 1000 Data size: 10624 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: ds (type: string)
@@ -4208,7 +4205,7 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (hr is not null and UDFToDouble(hr) is not null) (type: boolean)
+ filterExpr: UDFToDouble(hr) is not null (type: boolean)
Statistics: Num rows: 2000 Data size: 21248 Basic stats: COMPLETE Column stats: NONE
Filter Operator
predicate: UDFToDouble(hr) is not null (type: boolean)
@@ -4735,7 +4732,6 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (ds) IN (RS[5]) (type: boolean)
Statistics: Num rows: 2000 Data size: 21248 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: ds (type: string)
@@ -4790,7 +4786,6 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (ds) IN (RS[6]) (type: boolean)
Statistics: Num rows: 2000 Data size: 21248 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: ds (type: string)
@@ -4880,7 +4875,6 @@ STAGE PLANS:
Map Operator Tree:
TableScan
alias: srcpart
- filterExpr: (ds) IN (RS[12]) (type: boolean)
Statistics: Num rows: 1000 Data size: 10624 Basic stats: COMPLETE Column stats: NONE
Select Operator
expressions: ds (type: string)