diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/SortedDynPartitionOptimizer.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/SortedDynPartitionOptimizer.java index 926386b..a958598 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/SortedDynPartitionOptimizer.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/SortedDynPartitionOptimizer.java @@ -171,7 +171,7 @@ public Object process(Node nd, Stack stack, NodeProcessorCtx procCtx, // unlink connection between FS and its parent fsParent = fsOp.getParentOperators().get(0); - fsParent.getChildOperators().clear(); + fsParent.getChildOperators().remove(fsOp); DynamicPartitionCtx dpCtx = fsOp.getConf().getDynPartCtx(); int numBuckets = destTable.getNumBuckets(); diff --git ql/src/test/queries/clientpositive/dynpart_sort_optimization.q ql/src/test/queries/clientpositive/dynpart_sort_optimization.q index 5ef8ead..d27a1bc 100644 --- ql/src/test/queries/clientpositive/dynpart_sort_optimization.q +++ ql/src/test/queries/clientpositive/dynpart_sort_optimization.q @@ -208,3 +208,33 @@ insert overwrite table over1k_part3 partition(s,t,i) select si,b,f,s,t,i from ov insert overwrite table over1k_part3 partition(s,t,i) select si,b,f,s,t,i from over1k where i=100 and t=27 and s="foo"; select sum(hash(*)) from over1k_part3; + + +-- verify multiple branches in SDPO +create table over1k_part4_0(i int) + partitioned by (s string); +create table over1k_part4_1(i int) + partitioned by (s string); + +EXPLAIN +FROM ( + select i, s from over1k +) src1k +insert overwrite table over1k_part4_0 partition(s) +select i, s +insert overwrite table over1k_part4_1 partition(s) +select i, s +; + +FROM ( + select i, s from over1k +) src1k +insert overwrite table over1k_part4_0 partition(s) +select i, s +insert overwrite table over1k_part4_1 partition(s) +select i, s +; + +select count(1) from over1k_part4_0; +select count(1) from over1k_part4_1; +