[CARBONDATA-4318]Improve load overwrite performance for partition tables
authorakashrn5 <akashnilugal@gmail.com>
Wed, 8 Dec 2021 10:19:47 +0000 (15:49 +0530)
committerkunal642 <kunalkapoor642@gmail.com>
Wed, 29 Dec 2021 09:56:23 +0000 (15:26 +0530)
commit308906e459607383eedf20c18236c7d17509959e
tree37720b091027afdc680b284569c2ffbf5cdde9f2
parent970f11d7dc7e4f11938ad0163cc416ed4b7b456d
[CARBONDATA-4318]Improve load overwrite performance for partition tables

Why is this PR needed?
With the increase in the number of overwrite loads for the partition table,
the time takes for each load keeps on increasing over time. This is because,

1. whenever a load overwrite for partition table is fired, it basically means
that we need to overwrite or drop the partitions if anything overlaps with
current partitions getting loaded. Since carbondata stores the partition
information in the segments file, to identify and drop partitions, it's
reading all the previous segment files to identify and drop the overwriting
partitions, which leads to a decrease in performance.

2. After partition load is completed, a cleanSegments method is called which
again reads segment file and table status file to identify MArked for delete
segments to clean. But Since the force clean is false and timeout also is
more than a day by default, it's not necessary to call this method.
Clean files should handle this part.

What changes were proposed in this PR?
1. we already have the information about current partitions, so with that first
identify if there are any partitions to overwrite, if yes then only we read segment
files to call dropParitition, else we don't read the segment files unnecessarily.
It also contains other refactoring to avoid reading table status file also.
2. no need to call clean segments after every load. Clean files will take care
to delete the expired ones.

This closes #4242
core/src/main/java/org/apache/carbondata/core/metadata/SegmentFileStore.java
hadoop/src/main/java/org/apache/carbondata/hadoop/api/CarbonOutputCommitter.java
integration/spark/src/main/scala/org/apache/carbondata/spark/rdd/CarbonDropPartitionRDD.scala
integration/spark/src/main/scala/org/apache/spark/sql/execution/command/management/CommonLoadUtils.scala
integration/spark/src/main/scala/org/apache/spark/sql/execution/command/partition/CarbonAlterTableDropHivePartitionCommand.scala
integration/spark/src/test/scala/org/apache/carbondata/spark/testsuite/allqueries/InsertIntoCarbonTableTestCase.scala