HIVE-14519 : Multi insert query bug (Ashutosh Chauhan via Yongzhi Chen) Signed-off-by: Ashutosh Chauhan <[email protected]>
Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/f23f9f2e Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/f23f9f2e Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/f23f9f2e Branch: refs/heads/branch-2.1 Commit: f23f9f2e05facc26de488a5cedc82f7ec8d1d27d Parents: 23c98ad Author: Yongzhi Chen <[email protected]> Authored: Sat Aug 13 12:48:51 2016 -0700 Committer: Sergio Pena <[email protected]> Committed: Wed Sep 28 15:46:24 2016 -0500 ---------------------------------------------------------------------- .../optimizer/physical/NullScanOptimizer.java | 12 +++++++ .../queries/clientpositive/inputwherefalse.q | 15 +++++++++ .../clientpositive/inputwherefalse.q.out | 33 ++++++++++++++++++++ 3 files changed, 60 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/f23f9f2e/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/NullScanOptimizer.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/NullScanOptimizer.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/NullScanOptimizer.java index 200e098..49b839a 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/NullScanOptimizer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/physical/NullScanOptimizer.java @@ -27,6 +27,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.hadoop.hive.ql.exec.FilterOperator; import org.apache.hadoop.hive.ql.exec.LimitOperator; +import org.apache.hadoop.hive.ql.exec.Operator; import org.apache.hadoop.hive.ql.exec.TableScanOperator; import org.apache.hadoop.hive.ql.lib.DefaultGraphWalker; import org.apache.hadoop.hive.ql.lib.Dispatcher; @@ -90,6 +91,17 @@ public class NullScanOptimizer implements PhysicalPlanResolver { return null; } + int numOfndPeers = 0; + if (filter.getParentOperators() != null) { + for (Operator<?> fParent : filter.getParentOperators()) { + if (fParent.getChildOperators() != null) { + numOfndPeers += fParent.getChildOperators().size(); + if (numOfndPeers > 1) + return null; + } + } + } + WalkerCtx ctx = (WalkerCtx) procCtx; for (Node op : stack) { if (op instanceof TableScanOperator) { http://git-wip-us.apache.org/repos/asf/hive/blob/f23f9f2e/ql/src/test/queries/clientpositive/inputwherefalse.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientpositive/inputwherefalse.q b/ql/src/test/queries/clientpositive/inputwherefalse.q new file mode 100644 index 0000000..c9186e6 --- /dev/null +++ b/ql/src/test/queries/clientpositive/inputwherefalse.q @@ -0,0 +1,15 @@ +From (select * from src) a +insert overwrite directory 'target/warehouse/destemp.out/dir1/' +select key +where key=200 limit 1 +insert overwrite directory 'target/warehouse/destemp.out/dir2/' +select 'header' +where 1=2 +insert overwrite directory 'target/warehouse/destemp.out/dir3/' +select key +where key = 100 limit 1; + +dfs -cat ${system:test.warehouse.dir}/destemp.out/dir1/000000_0; +dfs -cat ${system:test.warehouse.dir}/destemp.out/dir2/000000_0; +dfs -cat ${system:test.warehouse.dir}/destemp.out/dir3/000000_0; +dfs -rmr ${system:test.warehouse.dir}/destemp.out; http://git-wip-us.apache.org/repos/asf/hive/blob/f23f9f2e/ql/src/test/results/clientpositive/inputwherefalse.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/inputwherefalse.q.out b/ql/src/test/results/clientpositive/inputwherefalse.q.out new file mode 100644 index 0000000..ecb7300 --- /dev/null +++ b/ql/src/test/results/clientpositive/inputwherefalse.q.out @@ -0,0 +1,33 @@ +PREHOOK: query: From (select * from src) a +insert overwrite directory 'target/warehouse/destemp.out/dir1/' +select key +where key=200 limit 1 +insert overwrite directory 'target/warehouse/destemp.out/dir2/' +select 'header' +where 1=2 +insert overwrite directory 'target/warehouse/destemp.out/dir3/' +select key +where key = 100 limit 1 +PREHOOK: type: QUERY +PREHOOK: Input: default@src +PREHOOK: Output: target/warehouse/destemp.out/dir1 +PREHOOK: Output: target/warehouse/destemp.out/dir2 +PREHOOK: Output: target/warehouse/destemp.out/dir3 +POSTHOOK: query: From (select * from src) a +insert overwrite directory 'target/warehouse/destemp.out/dir1/' +select key +where key=200 limit 1 +insert overwrite directory 'target/warehouse/destemp.out/dir2/' +select 'header' +where 1=2 +insert overwrite directory 'target/warehouse/destemp.out/dir3/' +select key +where key = 100 limit 1 +POSTHOOK: type: QUERY +POSTHOOK: Input: default@src +POSTHOOK: Output: target/warehouse/destemp.out/dir1 +POSTHOOK: Output: target/warehouse/destemp.out/dir2 +POSTHOOK: Output: target/warehouse/destemp.out/dir3 +200 +100 +#### A masked pattern was here ####
