You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hive.apache.org by "xialu (Jira)" <ji...@apache.org> on 2019/10/14 11:48:00 UTC

[jira] [Commented] (HIVE-22335) CBO throws Invalid column reference exception

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

xialu commented on HIVE-22335:
------------------------------

[~ashutoshc] , could you take a look?

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