Skip to content

[SPARK-26709][SQL] OptimizeMetadataOnlyQuery does not handle empty records correctly - #23635

Closed
gengliangwang wants to merge 7 commits into
apache:masterfrom
gengliangwang:optimizeMetadata
Closed

[SPARK-26709][SQL] OptimizeMetadataOnlyQuery does not handle empty records correctly#23635
gengliangwang wants to merge 7 commits into
apache:masterfrom
gengliangwang:optimizeMetadata

Conversation

@gengliangwang

@gengliangwanggengliangwang commented Jan 24, 2019

Copy link
Copy Markdown
Member

What changes were proposed in this pull request?

When reading from empty tables, the optimization OptimizeMetadataOnlyQuery may return wrong results:

sql("CREATE TABLE t (col1 INT, p1 INT) USING PARQUET PARTITIONED BY (p1)")
sql("INSERT INTO TABLE t PARTITION (p1 = 5) SELECT ID FROM range(1, 1)")
sql("SELECT MAX(p1) FROM t")

The result is supposed to be null. However, with the optimization the result is 5.

The rule is originally ported from https://issues.apache.org/jira/browse/HIVE-1003 in #13494. In Hive, the rule is disabled by default in a later release(https://issues.apache.org/jira/browse/HIVE-15397), due to the same problem.

It is hard to completely avoid the correctness issue. Because data sources like Parquet can be metadata-only. Spark can't tell whether it is empty or not without actually reading it. This PR disable the optimization by default.

How was this patch tested?

Unit test

Loading
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants

@gengliangwang@maropu@hvanhovell@SparkQA@gatorsmile@cloud-fan