Github user ravipesala commented on a diff in the pull request:

    https://github.com/apache/carbondata/pull/1464#discussion_r149001761
  
    --- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/execution/command/preaaggregate/PreAggregateUtil.scala
 ---
    @@ -49,70 +50,109 @@ object PreAggregateUtil {
     
       def getParentCarbonTable(plan: LogicalPlan): CarbonTable = {
         plan match {
    -      case Aggregate(_, aExp, SubqueryAlias(_, l: LogicalRelation, _))
    -        if l.relation.isInstanceOf[CarbonDatasourceHadoopRelation] =>
    -        
l.relation.asInstanceOf[CarbonDatasourceHadoopRelation].carbonRelation.metaData.carbonTable
    +      case Aggregate(_, _, SubqueryAlias(_, logicalRelation: 
LogicalRelation, _))
    +        if 
logicalRelation.relation.isInstanceOf[CarbonDatasourceHadoopRelation] =>
    +        
logicalRelation.relation.asInstanceOf[CarbonDatasourceHadoopRelation].
    +          carbonRelation.metaData.carbonTable
    +      case Aggregate(_, _, logicalRelation: LogicalRelation)
    +        if 
logicalRelation.relation.isInstanceOf[CarbonDatasourceHadoopRelation] =>
    +        
logicalRelation.relation.asInstanceOf[CarbonDatasourceHadoopRelation].
    +          carbonRelation.metaData.carbonTable
           case _ => throw new MalformedCarbonCommandException("table does not 
exist")
         }
       }
     
       /**
        * Below method will be used to validate the select plan
        * and get the required fields from select plan
    -   * Currently only aggregate query is support any other type of query will
    -   * fail
    +   * Currently only aggregate query is support any other type of query 
will fail
    +   *
        * @param plan
        * @param selectStmt
        * @return list of fields
        */
       def validateActualSelectPlanAndGetAttrubites(plan: LogicalPlan,
           selectStmt: String): scala.collection.mutable.LinkedHashMap[Field, 
DataMapField] = {
    -    val fieldToDataMapFieldMap = 
scala.collection.mutable.LinkedHashMap.empty[Field, DataMapField]
         plan match {
    -      case Aggregate(_, aExp, SubqueryAlias(_, l: LogicalRelation, _))
    -        if l.relation.isInstanceOf[CarbonDatasourceHadoopRelation] =>
    -        val carbonTable = 
l.relation.asInstanceOf[CarbonDatasourceHadoopRelation].carbonRelation
    -          .metaData.carbonTable
    -        val parentTableName = 
carbonTable.getAbsoluteTableIdentifier.getCarbonTableIdentifier
    -          .getTableName
    -        val parentDatabaseName = 
carbonTable.getAbsoluteTableIdentifier.getCarbonTableIdentifier
    -          .getDatabaseName
    -        val parentTableId = 
carbonTable.getAbsoluteTableIdentifier.getCarbonTableIdentifier
    -          .getTableId
    -        if 
(!carbonTable.getTableInfo.getParentRelationIdentifiers.isEmpty) {
    +      case Aggregate(groupByExp, aggExp, SubqueryAlias(_, logicalRelation: 
LogicalRelation, _)) =>
    +        getFieldsFromPlan(groupByExp, aggExp, logicalRelation, selectStmt)
    +      case Aggregate(groupByExp, aggExp, logicalRelation: LogicalRelation) 
=>
    +        getFieldsFromPlan(groupByExp, aggExp, logicalRelation, selectStmt)
    +      case _ =>
    +        throw new MalformedCarbonCommandException(s"Unsupported Select 
Statement:${ selectStmt } ")
    +    }
    +  }
    +
    +  /**
    +   * Below method will be used to get the fields from expressions
    +   * @param groupByExp
    +   *                  grouping expression
    +   * @param aggExp
    +   *               aggregate expression
    +   * @param logicalRelation
    +   *                        logical relation
    +   * @param selectStmt
    +   *                   select statement
    +   * @return fields from expressions
    +   */
    +  def getFieldsFromPlan(groupByExp: Seq[Expression],
    +      aggExp: Seq[NamedExpression], logicalRelation: LogicalRelation, 
selectStmt: String):
    +  scala.collection.mutable.LinkedHashMap[Field, DataMapField] = {
    +    val fieldToDataMapFieldMap = 
scala.collection.mutable.LinkedHashMap.empty[Field, DataMapField]
    +    if 
(!logicalRelation.relation.isInstanceOf[CarbonDatasourceHadoopRelation]) {
    +      throw new MalformedCarbonCommandException("Un-supported table")
    +    }
    +    val carbonTable = logicalRelation.relation.
    +      asInstanceOf[CarbonDatasourceHadoopRelation].carbonRelation
    +      .metaData.carbonTable
    +    val parentTableName = 
carbonTable.getAbsoluteTableIdentifier.getCarbonTableIdentifier
    +      .getTableName
    +    val parentDatabaseName = 
carbonTable.getAbsoluteTableIdentifier.getCarbonTableIdentifier
    +      .getDatabaseName
    +    val parentTableId = 
carbonTable.getAbsoluteTableIdentifier.getCarbonTableIdentifier
    +      .getTableId
    +    if (!carbonTable.getTableInfo.getParentRelationIdentifiers.isEmpty) {
    +      throw new MalformedCarbonCommandException(
    +        "Pre Aggregation is not supported on Pre-Aggregated Table")
    +    }
    +    groupByExp.map {
    +      case attr: AttributeReference =>
    +        fieldToDataMapFieldMap += getField(attr.name,
    +          attr.dataType,
    +          parentColumnId = carbonTable.getColumnByName(parentTableName, 
attr.name).getColumnId,
    +          parentTableName = parentTableName,
    +          parentDatabaseName = parentDatabaseName, parentTableId = 
parentTableId)
    +      case _ =>
    +        throw new MalformedCarbonCommandException(s"Unsupported Select 
Statement:${
    --- End diff --
    
    it is unsupported function exception


---

Reply via email to