[ 
https://issues.apache.org/jira/browse/HIVE-22335?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17027694#comment-17027694
 ] 

hezhang commented on HIVE-22335:
--------------------------------

can you paste create table sql(date_dim)?

> 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)

Reply via email to