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

    https://github.com/apache/spark/pull/22357#discussion_r216683076
  
    --- Diff: 
sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/parquet/ParquetSchemaPruning.scala
 ---
    @@ -110,7 +110,17 @@ private[sql] object ParquetSchemaPruning extends 
Rule[LogicalPlan] {
         val projectionRootFields = projects.flatMap(getRootFields)
         val filterRootFields = filters.flatMap(getRootFields)
     
    -    (projectionRootFields ++ filterRootFields).distinct
    +    // Kind of expressions don't need to access any fields of a root 
fields, e.g., `IsNotNull`.
    +    // For them, if there are any nested fields accessed in the query, we 
don't need to add root
    +    // field access of above expressions.
    +    // For example, for a query `SELECT name.first FROM contacts WHERE 
name IS NOT NULL`,
    +    // we don't need to read nested fields of `name` struct other than 
`first` field.
    --- End diff --
    
    @viirya, I see your point about the difference between a complex type being 
null and a subfield being null. So to answer the following query
    
        select address from contacts where name is not null
    
    do we need to read any of the fields in `name`? Or perhaps just read one 
arbitrary field of simple type, like `name.first`? That's surprising, but I'm 
starting to believe it's true.


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to