turboFei commented on a change in pull request #24685: [SPARK-27814][SQL] The 
cast operation for partition key may push down uncorrect filter, which  is 
fatal.
URL: https://github.com/apache/spark/pull/24685#discussion_r287724196
 
 

 ##########
 File path: 
sql/hive/src/main/scala/org/apache/spark/sql/hive/client/HiveShim.scala
 ##########
 @@ -675,12 +675,23 @@ private[client] class Shim_v0_13 extends Shim_v0_12 {
     val useAdvanced = SQLConf.get.advancedPartitionPredicatePushdownEnabled
 
     object ExtractAttribute {
+      val partitionKeys = table.getPartitionKeys.asScala.map(_.getName).toSet
+      var castToStr = false
+
       def unapply(expr: Expression): Option[Attribute] = {
         expr match {
-          case attr: Attribute => Some(attr)
+          case attr: Attribute
 
 Review comment:
   But if you execute a sql like 
   ```
   sql("SELECT c1 FROM t1 WHERE CAST(p1 as STRING) = '5'").show
   ```
   It will throw a exception:
   ```
   Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at 
org.apache.spark.sql.hive.client.Shim_v0_13.getPartitionsByFilter(HiveShim.scala:759)
        ... 57 more
   Caused by: MetaException(message:Filtering is supported only on partition 
keys of type string)
   ```

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to