[ https://issues.apache.org/jira/browse/HIVE-22335?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
xialu reassigned HIVE-22335: ---------------------------- > 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 > Priority: Major > > 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)