Skip to content

Commit 54d8741

Browse files
authored
HIVE-29466: Ambiguous table alias exception when using CTE suggester (#6323)
1 parent 7060d94 commit 54d8741

File tree

3 files changed

+50
-0
lines changed

3 files changed

+50
-0
lines changed

ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/PlanModifierForASTConv.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.apache.calcite.rel.core.SetOp;
4545
import org.apache.calcite.rel.core.Sort;
4646
import org.apache.calcite.rel.core.Spool;
47+
import org.apache.calcite.rel.core.TableSpool;
4748
import org.apache.calcite.rel.core.Window.RexWinAggCall;
4849
import org.apache.calcite.rel.rules.MultiJoin;
4950
import org.apache.calcite.rel.type.RelDataType;
@@ -267,6 +268,10 @@ public RelNode visit(final RelNode rel) {
267268
aliases.add(((HiveTableScan) dq.getTableScan()).getTableAlias().toLowerCase());
268269
return dq;
269270
}
271+
if (rel instanceof TableSpool spool) {
272+
aliases.add(spool.getTable().getQualifiedName().getLast().toLowerCase());
273+
return spool;
274+
}
270275
return super.visit(rel);
271276
}
272277
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
create table t1 (key int, value int);
2+
3+
set hive.optimize.cte.materialize.threshold=1;
4+
set hive.optimize.cte.suggester.class=org.apache.hadoop.hive.ql.optimizer.calcite.CommonTableExpressionIdentitySuggester;
5+
set hive.optimize.cte.materialize.full.aggregate.only=false;
6+
7+
explain cbo
8+
select *
9+
from (select key from t1 where value = 10) a
10+
join (select key from t1 where value = 10) b;
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
PREHOOK: query: create table t1 (key int, value int)
2+
PREHOOK: type: CREATETABLE
3+
PREHOOK: Output: database:default
4+
PREHOOK: Output: default@t1
5+
POSTHOOK: query: create table t1 (key int, value int)
6+
POSTHOOK: type: CREATETABLE
7+
POSTHOOK: Output: database:default
8+
POSTHOOK: Output: default@t1
9+
Warning: Shuffle Join MERGEJOIN[16][tables = [$hdt$_0, cte_suggestion_0]] in Stage 'Reducer 3' is a cross product
10+
PREHOOK: query: explain cbo
11+
select *
12+
from (select key from t1 where value = 10) a
13+
join (select key from t1 where value = 10) b
14+
PREHOOK: type: QUERY
15+
PREHOOK: Input: default@cte_suggestion_0
16+
PREHOOK: Input: default@t1
17+
#### A masked pattern was here ####
18+
POSTHOOK: query: explain cbo
19+
select *
20+
from (select key from t1 where value = 10) a
21+
join (select key from t1 where value = 10) b
22+
POSTHOOK: type: QUERY
23+
POSTHOOK: Input: default@cte_suggestion_0
24+
POSTHOOK: Input: default@t1
25+
#### A masked pattern was here ####
26+
CBO PLAN:
27+
HiveProject(a.key=[$0], b.key=[$1])
28+
HiveJoin(condition=[true], joinType=[inner], algorithm=[none], cost=[not available])
29+
HiveProject(key=[$0])
30+
HiveTableSpool(table=[[cte, cte_suggestion_0]])
31+
HiveProject(key=[$0])
32+
HiveFilter(condition=[=($1, 10)])
33+
HiveTableScan(table=[[default, t1]], table:alias=[t1])
34+
HiveTableScan(table=[[cte, cte_suggestion_0]], table:alias=[cte_suggestion_0])
35+

0 commit comments

Comments
 (0)