You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hive.apache.org by "xialu (Jira)" <ji...@apache.org> on 2019/10/14 08:59:00 UTC
[jira] [Created] (HIVE-22335) CBO throws Invalid column reference
exception
xialu created HIVE-22335:
----------------------------
Summary: CBO throws Invalid column reference exception
Key: HIVE-22335
URL: https://issues.apache.org/jira/browse/HIVE-22335
Project: Hive
Issue Type: Bug
Affects Versions: 2.1.1
Reporter: xialu
Assignee: Pengcheng Xiong
issues:
create table temp_test_bug as
select X.d_current_month from
(
select d_current_month, count(distinct d_date_sk) as num
from date_dim group by d_current_month
) X
where X.num > 0;
thows:
Caused by: org.apache.hadoop.hive.ql.parse.SemanticException: Line 0:-1 Invalid column reference 'd_date_sk'
at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genGroupByPlanGroupByOperator1(SemanticAnalyzer.java:4867) ~[hive-exec-2.1.1.jar:2.1.1]
at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genGroupByPlanMapAggrNoSkew(SemanticAnalyzer.java:6158) ~[hive-exec-2.1.1.jar:2.1.1]
at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genBodyPlan(SemanticAnalyzer.java:9388) ~[hive-exec-2.1.1.jar:2.1.1]
at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:10287) ~[hive-exec-2.1.1.jar:2.1.1]
at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genPlan(SemanticAnalyzer.java:10165) ~[hive-exec-2.1.1.jar:2.1.1]
at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.genOPTree(SemanticAnalyzer.java:10838) ~[hive-exec-2.1.1.jar:2.1.1]
at org.apache.hadoop.hive.ql.parse.CalcitePlanner.genOPTree(CalcitePlanner.java:369) ~[hive-exec-2.1.1.jar:2.1.1]
at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.analyzeInternal(SemanticAnalyzer.java:10849) ~[hive-exec-2.1.1.jar:2.1.1]
at org.apache.hadoop.hive.ql.parse.CalcitePlanner.analyzeInternal(CalcitePlanner.java:244) ~[hive-exec-2.1.1.jar:2.1.1]
at org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer.analyze(BaseSemanticAnalyzer.java:250) ~[hive-exec-2.1.1.jar:2.1.1]
analyze:
for (int i = 1; i < value.getChildCount(); i++) {
ASTNode paraExpr = (ASTNode) value.getChild(i);
ColumnInfo paraExprInfo =
*{color:#FF0000}groupByInputRowResolver.getExpression(paraExpr);{color}*
if (paraExprInfo == null) {
throw new SemanticException(ErrorMsg.INVALID_COLUMN
.getMsg(paraExpr));
}
but when we put elements to groupByInputRowResolver, we put parent of paraExpr, code below
for (Map.Entry<String, ASTNode> entry : aggregationTrees.entrySet()) {
ASTNode value = entry.getValue();
String aggName = unescapeIdentifier(value.getChild(0).getText());
ArrayList<ExprNodeDesc> aggParameters = new ArrayList<ExprNodeDesc>();
// 0 is the function name
for (int i = 1; i < value.getChildCount(); i++) {
ASTNode paraExpr = (ASTNode) value.getChild(i);
ExprNodeDesc paraExprNode = genExprNodeDesc(paraExpr,
groupByInputRowResolver);
aggParameters.add(paraExprNode);
}
boolean isDistinct = value.getType() == HiveParser.TOK_FUNCTIONDI;
containsDistinctAggr = containsDistinctAggr || isDistinct;
boolean isAllColumns = value.getType() == HiveParser.TOK_FUNCTIONSTAR;
Mode amode = groupByDescModeToUDAFMode(mode, isDistinct);
GenericUDAFEvaluator genericUDAFEvaluator = getGenericUDAFEvaluator(
aggName, aggParameters, value, isDistinct, isAllColumns);
assert (genericUDAFEvaluator != null);
GenericUDAFInfo udaf = getGenericUDAFInfo(genericUDAFEvaluator, amode,
aggParameters);
aggregations.add(new AggregationDesc(aggName.toLowerCase(),
udaf.genericUDAFEvaluator, udaf.convertedParameters, isDistinct,
amode));
String field = getColumnInternalName(groupByKeys.size()
+ aggregations.size() - 1);
outputColumnNames.add(field);
if (groupByOutputRowResolver.getExpression(value) == null) {
*{color:#FF0000}groupByOutputRowResolver.putExpression{color}*(value, new ColumnInfo(
field, udaf.returnType, "", false));
}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)