Sagar Sumit created HUDI-7639:
---------------------------------

             Summary: Refactor HoodieFileIndex so that different indexes can be 
used via optimizer rules
                 Key: HUDI-7639
                 URL: https://issues.apache.org/jira/browse/HUDI-7639
             Project: Apache Hudi
          Issue Type: Task
            Reporter: Sagar Sumit
             Fix For: 1.0.0


Currently, `HoodieFileIndex` is responsible for partition pruning as well as 
file skipping. All indexes are being used in 
[lookupCandidateFilesInMetadataTable|https://github.com/apache/hudi/blob/b5b14f7d4fa6224a6674b021664b510c6ae8afb9/hudi-spark-datasource/hudi-spark-common/src/main/scala/org/apache/hudi/HoodieFileIndex.scala#L333]
 method through if-else branches. This is not only hard to maintain as we add 
more indexes, but also induces a static hierarchy. Instead, we need more 
flexibility so that we can alter logical plan based on availability of indexes. 
For partition pruning in Spark, we already have 
[HoodiePruneFileSourcePartitions|https://github.com/apache/hudi/blob/b5b14f7d4fa6224a6674b021664b510c6ae8afb9/hudi-spark-datasource/hudi-spark/src/main/scala/org/apache/spark/sql/hudi/analysis/HoodiePruneFileSourcePartitions.scala#L40]
 rule but it is injected during the operator optimization batch and it does not 
modify the result of the LogicalPlan. To be fully extensible, we should be able 
to rewrite the LogicalPlan. We should be able to inject rules after partition 
pruning after the operator optimization batch and before any CBO rules that 
depend on stats. Spark provides 
[injectPreCBORules|https://github.com/apache/spark/blob/6232085227ee2cc4e831996a1ac84c27868a1595/sql/core/src/main/scala/org/apache/spark/sql/SparkSessionExtensions.scala#L304]
 API to do so, however it is only available in Spark 3.1.0 onwards.

The goal of this ticket is to refactor index hierarchy and create new rules 
such that Spark version < 3.1.0 still go via the old path, while later versions 
can modify the plan using an appropriate index and inject as a pre-CBO rule.



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

Reply via email to