Skip to content

Commit 217b26d

Browse files
committed
HIVE-24167: TPC-DS query 14 fails while generating plan for the filter
1 parent 055f43c commit 217b26d

File tree

6 files changed

+1136
-66
lines changed

6 files changed

+1136
-66
lines changed

ql/src/java/org/apache/hadoop/hive/ql/plan/mapper/GroupTransformer.java

Lines changed: 0 additions & 25 deletions
This file was deleted.

ql/src/java/org/apache/hadoop/hive/ql/plan/mapper/PlanMapper.java

Lines changed: 8 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import java.lang.reflect.Modifier;
2222
import java.util.ArrayList;
2323
import java.util.Collection;
24-
import java.util.Collections;
2524
import java.util.HashMap;
2625
import java.util.HashSet;
2726
import java.util.IdentityHashMap;
@@ -200,54 +199,30 @@ public void merge(Object o1, Object o2) {
200199
}
201200

202201
private void link(Object o1, Object o2, boolean mayMerge) {
203-
204-
Set<Object> keySet = Collections.newSetFromMap(new IdentityHashMap<Object, Boolean>());
205-
keySet.add(o1);
206-
keySet.add(o2);
207-
keySet.add(getKeyFor(o1));
208-
keySet.add(getKeyFor(o2));
209-
210-
Set<EquivGroup> mGroups = Collections.newSetFromMap(new IdentityHashMap<EquivGroup, Boolean>());
211-
212-
for (Object object : keySet) {
213-
EquivGroup group = objectMap.get(object);
214-
if (group != null) {
215-
mGroups.add(group);
216-
}
217-
}
218-
if (mGroups.size() > 1) {
202+
final EquivGroup group1 = objectMap.get(o1);
203+
final EquivGroup group2 = objectMap.get(o2);
204+
if (group1 != null && group2 != null && group1 != group2) {
219205
if (!mayMerge) {
220206
throw new RuntimeException("equivalence mapping violation");
221207
}
222208
EquivGroup newGrp = new EquivGroup();
223209
newGrp.add(o1);
224210
newGrp.add(o2);
225-
for (EquivGroup g : mGroups) {
226-
for (Object o : g.members) {
227-
newGrp.add(o);
228-
}
229-
}
211+
group1.members.forEach(newGrp::add);
212+
group2.members.forEach(newGrp::add);
230213
groups.add(newGrp);
231-
groups.removeAll(mGroups);
214+
groups.remove(group1);
215+
groups.remove(group2);
232216
} else {
233-
EquivGroup targetGroup = mGroups.isEmpty() ? new EquivGroup() : mGroups.iterator().next();
217+
EquivGroup targetGroup = group1 != null ? group1 : (group2 != null ? group2 : new EquivGroup());
234218
groups.add(targetGroup);
235219
targetGroup.add(o1);
236220
targetGroup.add(o2);
237221
}
238-
239222
}
240223

241224
private OpTreeSignatureFactory signatureCache = OpTreeSignatureFactory.newCache();
242225

243-
private Object getKeyFor(Object o) {
244-
if (o instanceof Operator) {
245-
Operator<?> operator = (Operator<?>) o;
246-
return signatureCache.getSignature(operator);
247-
}
248-
return o;
249-
}
250-
251226
public <T> List<T> getAll(Class<T> clazz) {
252227
List<T> ret = new ArrayList<>();
253228
for (EquivGroup g : groups) {
@@ -256,12 +231,6 @@ public <T> List<T> getAll(Class<T> clazz) {
256231
return ret;
257232
}
258233

259-
public void runMapper(GroupTransformer mapper) {
260-
for (EquivGroup equivGroup : groups) {
261-
mapper.map(equivGroup);
262-
}
263-
}
264-
265234
public <T> List<T> lookupAll(Class<T> clazz, Object key) {
266235
EquivGroup group = objectMap.get(key);
267236
if (group == null) {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
--! qt:dataset:src
2+
3+
set hive.optimize.cte.materialize.threshold=1;
4+
set hive.optimize.cte.materialize.full.aggregate.only=false;
5+
6+
EXPLAIN CBO
7+
WITH materialized_cte AS (
8+
SELECT key, value FROM src WHERE key != '100'
9+
),
10+
another_materialized_cte AS (
11+
SELECT key, value FROM src WHERE key != '100'
12+
)
13+
SELECT a.key, a.value, b.key, b.value
14+
FROM materialized_cte a
15+
JOIN another_materialized_cte b ON a.key = b.key
16+
ORDER BY a.key;
17+
18+
WITH materialized_cte AS (
19+
SELECT key, value FROM src WHERE key != '100'
20+
),
21+
another_materialized_cte AS (
22+
SELECT key, value FROM src WHERE key != '100'
23+
)
24+
SELECT a.key, a.value, b.key, b.value
25+
FROM materialized_cte a
26+
JOIN another_materialized_cte b ON a.key = b.key
27+
ORDER BY a.key;

ql/src/test/queries/clientpositive/perf/cbo_query14.q

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
--! qt:disabled:HIVE-24167
21
set hive.mapred.mode=nonstrict;
32
-- start query 1 in stream 0 using template query14.tpl and seed 1819994127
43
explain cbo

ql/src/test/queries/clientpositive/perf/query14.q

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
--! qt:disabled:HIVE-24167
21
set hive.mapred.mode=nonstrict;
32
-- start query 1 in stream 0 using template query14.tpl and seed 1819994127
43
explain

0 commit comments

Comments
 (0)