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)