Yaoxuan Wu created SPARK-60362:
----------------------------------

             Summary: RC pushdown of IS NULL on a nested field drops rows whose 
parent struct is NULL
                 Key: SPARK-60362
                 URL: https://issues.apache.org/jira/browse/SPARK-60362
             Project: Spark
          Issue Type: Bug
          Components: SQL
    Affects Versions: 4.1.1, 4.2.0, 4.0.0
            Reporter: Yaoxuan Wu


{code:python}
path = "/tmp/orc_nested_is_null"
spark.sql("SELECT IF(id = 0, NULL, named_struct('b', id)) AS s FROM range(2)") \
    .coalesce(1).write.mode("overwrite").orc(path)
spark.read.orc(path).filter("s.b IS NULL").collect()
# expected: [Row(s=None)]
# actual:   []

spark.conf.set("spark.sql.orc.filterPushdown", "false")
spark.read.orc(path).filter("s.b IS NULL").collect()
# [Row(s=None)]  correct without ORC filter pushdown
{code}
When {{s}} is NULL, {{s.b}} is NULL as well, so the row should be returned. It 
is returned once ORC filter pushdown is turned off, and with Parquet.

{{s.b IS NULL}} is pushed to ORC, which evaluates it on the statistics of the 
child column {{s.b}}. A row whose parent {{s}} is NULL has no entry in the 
child column, so the child's statistics show no NULLs and the row group is 
skipped.

Reproduces on 3.5.8, 4.0.0, 4.1.1 and 4.2.0.




--
This message was sent by Atlassian Jira
(v8.20.10#820010)

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

Reply via email to