diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveGroupingID.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveGroupingID.java index 345b64a..eed120d 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveGroupingID.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/reloperators/HiveGroupingID.java @@ -5,6 +5,7 @@ import org.apache.calcite.sql.type.InferTypes; import org.apache.calcite.sql.type.OperandTypes; import org.apache.calcite.sql.type.ReturnTypes; +import org.apache.hadoop.hive.ql.metadata.VirtualColumn; public class HiveGroupingID extends SqlInternalOperator { @@ -12,7 +13,7 @@ new HiveGroupingID(); private HiveGroupingID() { - super("$GROUPING__ID", + super(VirtualColumn.GROUPINGID.getName(), SqlKind.OTHER, 0, false, @@ -22,4 +23,3 @@ private HiveGroupingID() { } } - diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/ASTConverter.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/ASTConverter.java index ea59181..2e625ae 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/ASTConverter.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/ASTConverter.java @@ -189,31 +189,7 @@ else if (aggregateType == Group.CUBE) { int i = 0; for (RexNode r : select.getChildExps()) { - // If it is a GroupBy with grouping sets and grouping__id column - // is selected, we reformulate to project that column from - // the output of the GroupBy operator - boolean reformulate = false; - if (groupBy != null && groupBy.indicator) { - RexNode expr = select.getChildExps().get(i); - if (expr instanceof RexCall) { - if ( ((RexCall) expr).getOperator(). - equals(HiveGroupingID.GROUPING__ID)) { - reformulate = true; - } - } - } - ASTNode expr; - if(reformulate) { - RexInputRef iRef = new RexInputRef( - groupBy.getGroupCount() * 2 + groupBy.getAggCallList().size(), - TypeConverter.convert( - VirtualColumn.GROUPINGID.getTypeInfo(), - groupBy.getCluster().getTypeFactory())); - expr = iRef.accept(new RexVisitor(schema)); - } - else { - expr = r.accept(new RexVisitor(schema, r instanceof RexLiteral)); - } + ASTNode expr = r.accept(new RexVisitor(schema, r instanceof RexLiteral)); String alias = select.getRowType().getFieldNames().get(i++); ASTNode selectExpr = ASTBuilder.selectExpr(expr, alias); b.add(selectExpr); @@ -550,6 +526,12 @@ public ASTNode visitCall(RexCall call) { } SqlOperator op = call.getOperator(); + // If it is a grouping__id column, we reformulate to project + // that column + if (op.kind == SqlKind.OTHER && + op.getName().equals(VirtualColumn.GROUPINGID.getName())) { + return ASTBuilder.unqualifiedName(VirtualColumn.GROUPINGID.getName()); + } List astNodeLst = new LinkedList(); if (op.kind == SqlKind.CAST) { HiveToken ht = TypeConverter.hiveToken(call.getType());