[ 
https://issues.apache.org/jira/browse/PARQUET-1217?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Gabor Szadovszky updated PARQUET-1217:
--------------------------------------
    Description: 
As per the parquet-format specs the min/max values in statistics are optional. 
Therefore, it is possible to have {{numNulls}} in {{Statistics}} while we don't 
have min/max values. In {{StatisticsFilter}} we rely on the method 
[StatisticsFilter.isAllNulls(ColumnChunkMetaData)|https://github.com/apache/parquet-mr/blob/master/parquet-hadoop/src/main/java/org/apache/parquet/filter2/statisticslevel/StatisticsFilter.java#L90]
 to handle the case of {{null}} min/max values which is not correct due to the 
described scenario. 
 We shall check {{Statistics.hasNonNullValue()}} any time before using the 
actual min/max values.

In addition we don't check if the {{null_count}} is set or not when reading 
from the parquet file. We simply use the value which is {{0}} in case of unset. 
In the parquet-mr side the {{Statistics}} object uses the value {{0}} to sign 
that the {{num_nulls}} is unset. It is incorrect if we are searching for null 
values and we falsely drop a column chunk thinking there are no null values but 
the field in the statistics was simply unset.

  was:
As per the parquet-format specs the min/max values in statistics are optional. 
Therefore, it is possible to have {{numNulls}} in {{Statistics}} while we don't 
have min/max values. In {{StatisticsFilter}} we rely on the method 
[StatisticsFilter.isAllNulls(ColumnChunkMetaData)|https://github.com/apache/parquet-mr/blob/master/parquet-hadoop/src/main/java/org/apache/parquet/filter2/statisticslevel/StatisticsFilter.java#L90]
 to handle the case of {{null}} min/max values which is not correct due to the 
described scenario. 
We shall check {{Statistics.hasNonNullValue()}} any time before using the 
actual min/max values.


> Incorrect handling of missing values in Statistics
> --------------------------------------------------
>
>                 Key: PARQUET-1217
>                 URL: https://issues.apache.org/jira/browse/PARQUET-1217
>             Project: Parquet
>          Issue Type: Bug
>    Affects Versions: 1.5.0, 1.6.0, 1.7.0, 1.8.0, 1.9.0, 1.10.0
>            Reporter: Gabor Szadovszky
>            Assignee: Gabor Szadovszky
>            Priority: Major
>
> As per the parquet-format specs the min/max values in statistics are 
> optional. Therefore, it is possible to have {{numNulls}} in {{Statistics}} 
> while we don't have min/max values. In {{StatisticsFilter}} we rely on the 
> method 
> [StatisticsFilter.isAllNulls(ColumnChunkMetaData)|https://github.com/apache/parquet-mr/blob/master/parquet-hadoop/src/main/java/org/apache/parquet/filter2/statisticslevel/StatisticsFilter.java#L90]
>  to handle the case of {{null}} min/max values which is not correct due to 
> the described scenario. 
>  We shall check {{Statistics.hasNonNullValue()}} any time before using the 
> actual min/max values.
> In addition we don't check if the {{null_count}} is set or not when reading 
> from the parquet file. We simply use the value which is {{0}} in case of 
> unset. In the parquet-mr side the {{Statistics}} object uses the value {{0}} 
> to sign that the {{num_nulls}} is unset. It is incorrect if we are searching 
> for null values and we falsely drop a column chunk thinking there are no null 
> values but the field in the statistics was simply unset.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to