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

    https://github.com/apache/carbondata/pull/1730#discussion_r158956514
  
    --- Diff: 
integration/spark2/src/main/scala/org/apache/spark/sql/optimizer/CarbonFilters.scala
 ---
    @@ -405,13 +407,60 @@ object CarbonFilters {
         }
       }
     
    +  /**
    +   * Fetches partition information from hive
    +   * @param partitionFilters
    +   * @param sparkSession
    +   * @param identifier
    +   * @return
    +   */
       def getPartitions(partitionFilters: Seq[Expression],
           sparkSession: SparkSession,
           identifier: TableIdentifier): Seq[String] = {
    -    val partitions =
    -      sparkSession.sessionState.catalog.listPartitionsByFilter(identifier, 
partitionFilters)
    +    val partitions = {
    +      try {
    +        if (CarbonProperties.getInstance().
    +          
getProperty(CarbonCommonConstants.CARBON_READ_PARTITION_HIVE_DIRECT,
    +          
CarbonCommonConstants.CARBON_READ_PARTITION_HIVE_DIRECT_DEFAULT).toBoolean) {
    +          
sparkSession.sessionState.catalog.listPartitionsByFilter(identifier, 
partitionFilters)
    +        } else {
    +          getPartitionsAlternate(partitionFilters, sparkSession, 
identifier)
    +        }
    +      } catch {
    +        case e: Exception =>
    +          // Get partition information alternatively.
    +          getPartitionsAlternate(partitionFilters, sparkSession, 
identifier)
    +      }
    +    }
         partitions.toList.flatMap { partition =>
           partition.spec.seq.map{case (column, value) => column + "=" + value}
         }.toSet.toSeq
       }
    +
    +  /**
    +   * This is alternate way of getting partition information. It first 
fetches all partitions from
    +   * hive and then apply filter instead of querying hive along with 
filters.
    +   * @param partitionFilters
    +   * @param sparkSession
    +   * @param identifier
    +   * @return
    +   */
    +  private def getPartitionsAlternate(partitionFilters: Seq[Expression],
    --- End diff --
    
    move `partitionFilters` to next line, please follow this in future


---

Reply via email to