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)