carbondata.git
14 months ago[maven-release-plugin] prepare release apache-carbondata-2.1.1-rc2 apache-carbondata-2.1.1-rc2
ajantha-bhat [Fri, 26 Mar 2021 07:35:52 +0000 (13:05 +0530)] 
[maven-release-plugin] prepare release apache-carbondata-2.1.1-rc2

14 months ago[CARBONDATA-4154] Fix various concurrent issues with clean files
Vikram Ahuja [Tue, 16 Mar 2021 11:27:10 +0000 (16:57 +0530)] 
[CARBONDATA-4154] Fix various concurrent issues with clean files

Why is this PR needed?
There are 2 issues in clean files operation when ran concurrently with multiple load operations:

Dry run can show negative space freed for clean files with concurrent load.
Accidental deletion of Insert in progress(ongoing load) during clean files operation.
What changes were proposed in this PR?
To solve the dry run negative result, saving the old metadatadetails before the clean files operation and comparing it with loadmetadetails after the clean files operation and just ignoring any new entry that has been added, basically doing an intersection of new and old metadatadetails to show the correct space freed.
In case of load failure issue, there can be scenarios where load in going on(insert in progress state and segment lock is occupied) and as during clean files operation when the final table status lock is removed, there can be scenarios where the load has completed and the segment lock is released but in the clean files in the final list of loadmetadatadetails to be deleted, that load can still be in Insert In Progress state with segment lock released by the load. The clean files operation will delete such loads. To solve this issue, instead of sending a boolean which check if update is required or not in the tablestatus, can send a list of load numbers and will only delete those loadnumbers.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #4109

15 months ago[CARBONDATA-4156] Fix Writing Segment Min max with all blocks of a segment
Indhumathi27 [Tue, 9 Mar 2021 10:39:37 +0000 (16:09 +0530)] 
[CARBONDATA-4156] Fix Writing Segment Min max with all blocks of a segment

Why is this PR needed?
PR-3999 has removed some code related to getting segment min max from all blocks.
Because of this, if segment has more than one block, currently, it is writing
min max considering one block only.

What changes were proposed in this PR?
Reverted specific code from above PR. Removed unwanted synchronization for some methods

This closes #4101

15 months ago[CARBONDATA-4149] Fix query issues after alter add empty partition location
ShreelekhyaG [Tue, 23 Mar 2021 09:05:56 +0000 (14:35 +0530)] 
[CARBONDATA-4149] Fix query issues after alter add empty partition location

Why is this PR needed?
Query with SI after add partition based on empty location on partition
table gives incorrect results. pr- 4107 fixes the issue for add
partition if the location is not empty.

What changes were proposed in this PR?
while creating blockid, get segment number from the file name for
the external partition. This blockid will be added to SI and used
for pruning. To identify as an external partition during the compaction
process, instead of checking with loadmetapath, checking with
filepath.startswith(tablepath) format.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #4112

15 months ago[CARBONDATA-4155] Fix Create table like table with MV
Indhumathi27 [Mon, 22 Mar 2021 15:12:35 +0000 (20:42 +0530)] 
[CARBONDATA-4155] Fix Create table like table with MV

Why is this PR needed?
PR-4076 has added a new table property to fact table.
While executing create table like command, this property
is not excluded, which leads to parsing exception.

What changes were proposed in this PR?
Remove MV related info from destination table properties

This closes #4111

15 months ago[CARBONDATA-4153] Fix DoNot Push down not equal to filter with Cast on SI
Indhumathi27 [Tue, 16 Mar 2021 09:34:25 +0000 (15:04 +0530)] 
[CARBONDATA-4153] Fix DoNot Push down not equal to filter with Cast on SI

Why is this PR needed?
NOT EQUAL TO filter on SI index column, should not be pushed down to SI table.
Currently, where x!='2' is not pushing down to SI, but where x!=2 is pushed down to SI.

This is because "x != 2" will be wrapped in a CAST expression like NOT EQUAL TO(cast(x as int) = 2).

What changes were proposed in this PR?
Handle CAST case while checking DONOT PUSH DOWN to SI

This closes #4108

15 months ago[CARBONDATA-4146]Query fails and the error message "unable to get file status" is...
liuhe0702 [Wed, 10 Mar 2021 12:54:25 +0000 (20:54 +0800)] 
[CARBONDATA-4146]Query fails and the error message "unable to get file status" is displayed.
query is normal after the "drop metacache on table" command is executed.

Why is this PR needed?
During compact execution, the status of the new segment is set to success before index
files are merged. After index files are merged, the carbonindex files are deleted.
As a result, the query task cannot find the cached carbonindex files.

What changes were proposed in this PR?
Set the status of the new segment to succeeded after index files are merged.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #4104

15 months ago[CARBONDATA-4147] Fix re-arrange schema in logical relation on MV partition table...
Indhumathi27 [Fri, 12 Mar 2021 10:36:27 +0000 (16:06 +0530)] 
[CARBONDATA-4147] Fix re-arrange schema in logical relation on MV partition table having sort column

Why is this PR needed?
After PR-3615, we have avoided rearranging catalog table schema if already re-arranged.
For MV on a partition table, we always move the partition column to the end on a MV partition table.
Catalog table will also have the column schema in same order(partition column at last). Hence, in
this case, we do not re-arrange logical relation in a catalog table again.

But, if there is a sort column present in MV table, then selected column schema and catalog table
schema will not be in same order. In that case, we have to re-arrange the catalog table schema.
Currently, we are using rearrangedIndex to re-arrange the catalog table logical relation, but
rearrangedIndex will keep the index of partition column at the end, whereas, catalog table has
partition column already at the end. Hence, we are re-arranging the partition column index
again in catalog table relation, which leads to insertion failure.

Example:
Create MV on columns: c1, c2 (partition), c3(sort_column), c4
Problem:
Create order: c1,c2,c3,c4
Create order index: 0,1,2,3

Rearranged Index:
Existing Catalog table schema order: c1, c3, c4, c2 (for MV, partition column will be moved to Last)
Rearrange index: 2,0,3,1
After Re-arrange catalog table order: c4,c2,c2, c3(which is wrong)

Solution:
Change MV create order as below
New Create order: c1,c4,c3,c2
Create order index: 0,1,2,3

Rearranged Index:
Existing Catalog table schema order: c1, c3, c4, c2 (for MV, partition column will be moved to Last)
Rearrange index: 1,0,2,3
After Re-arrange catalog table order: c3,c1,c4,c2

What changes were proposed in this PR?
In MV case, if there is any column schema order change apart from partition column, then re-arrange
index of only those columns and use the same to re-arrange catalog table logical relation.

This closes #4106

15 months ago[CARBONDATA-4148] Reindex failed when SI has stale carbonindexmerge file
jack86596 [Fri, 12 Mar 2021 07:07:40 +0000 (15:07 +0800)] 
[CARBONDATA-4148] Reindex failed when SI has stale carbonindexmerge file

Why is this PR needed?
Reindex failed when SI has stale carbonindexmerge file, throw exception FileNotFoundException.
This is because SegmentFileStore.getIndexFiles stores the mapping of indexfile to indexmergefile,
when stale carbon indexmergefile exists, indexmergefile will not be null. During merging index
file, new indexmergefile will be created with same name as before in the same location.
At the end of CarbonIndexFileMergeWriter.writeMergeIndexFileBasedOnSegmentFile, carbon index
file will be deleted. Since indexmergefile is stored in the indexFiles list, newly created
indexmergefile will be delete also, which leads to FileNotFoundException.

What changes were proposed in this PR?
1. SegmentFileStore.getIndexFiles stores the mapping of indexfile to indexmergefile which is redundant.
2. SegmentFileStore.getIndexOrMergeFiles returns both index file and index merge file, so
   function name is incorrect, rename to getIndexAndMergeFiles.
3. CarbonLoaderUtil.getActiveExecutor actually get active node, so function name is incorrect,
   rename to getActiveNode, together replace all "executor" with "node" in function assignBlocksByDataLocality.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #4105

15 months ago[CARBONDATA-4149] Fix query issues after alter add partition.
ShreelekhyaG [Sat, 13 Mar 2021 18:45:43 +0000 (00:15 +0530)] 
[CARBONDATA-4149] Fix query issues after alter add partition.

Why is this PR needed?
Query with SI after add partition based on location on partition table gives incorrect results.
1. While pruning, if it's an external segment, it should use ExternalSegmentResolver , and no
   need to use ImplicitIncludeFilterExecutor as an external segment is not added in the SI table.
2. If the partition table has external partitions, after compaction the new files are loaded
   to the external path.
3. Data is not loaded to the child table(MV) after executing add partition command

What changes were proposed in this PR?
1. add path to loadMetadataDetails for external partition. It is used to identify it as an
   external segment.
2. After compaction, to not maintain any link to the external partition, the compacted files
   will be added as a new partition in the table. To update partition spec details in hive metastore,
   (drop partition + add partition) operations performed.
3. Add Load Pre and Post listener's in CarbonAlterTableAddHivePartitionCommand to trigger data
   load to materialized view.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #4107

15 months ago[CARBONDATA-4145] Query fails and the message "File does not exist: xxxx.carbondata" is
liuhe0702 [Wed, 10 Mar 2021 09:24:42 +0000 (17:24 +0800)] 
[CARBONDATA-4145] Query fails and the message "File does not exist: xxxx.carbondata" is
displayed

Why is this PR needed?
If an exception occurs when the refresh index command is executed, a task has been
successful. The new query will be failed.
Reason: After the compaction task is executed successfully, the old carbondata files are
deleted. If other exception occurs, the deleted files are missing.
This PR will fix this issue.

What changes were proposed in this PR?
When all tasks are successful, the driver deletes the old carbondata files.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #4103

15 months ago[CARBONDATA-4144] During compaction, the segment lock of SI table is not released...
liuhe0702 [Wed, 10 Mar 2021 07:45:41 +0000 (15:45 +0800)] 
[CARBONDATA-4144] During compaction, the segment lock of SI table is not released in abnormal
scenarios.

Why is this PR needed?
When compact operation fails, the segment lock of SI table is not released. Run compaction again,
can not get the segment lock of the SI table and compation does nothing, but in the tablestatus
file of SI table the merged segment status is set to success and the segmentfile is
xxx_null.segments and the vaule of indexsize is 0.

What changes were proposed in this PR?
If an exception occurs, release the obtained segment locks.
If getting segment locks failed, not update the segment status.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #4102

15 months ago[CARBONDATA-4110] Support clean files dry run operation and show statistics after...
Vikram Ahuja [Thu, 7 Jan 2021 05:49:54 +0000 (11:19 +0530)] 
[CARBONDATA-4110] Support clean files dry run operation and show statistics after clean files
operation

Why is this PR needed?
Currently in the clean files operation the user does not know how much space will be freed.
The idea is the add support for dry run in clean files which can tell the user how much space
will be freed in the clean files operation without cleaning the actual data.

What changes were proposed in this PR?
This PR has the following changes:

1. Support dry run in clean files: It will show the user how much space will be freed by the
   clean files operation and how much space left (which can be released after expiration time)
   after the clean files operation.
2. Clean files output: Total size released during the clean files operation
3. Disable clean files Statistics option in case the user does not want clean files statistics
4. Clean files log: To enhance the clean files log to print the name of every file that is being
deleted in the info log.

This closes #4072

15 months ago[CARBONDATA-4075] Using withEvents instead of fireEvent
QiangCai [Tue, 19 Jan 2021 12:49:33 +0000 (20:49 +0800)] 
[CARBONDATA-4075] Using withEvents instead of fireEvent

Why is this PR needed?
withEvents method can simplify code to fire event

What changes were proposed in this PR?
Refactor code to use the withEvents method instead of fireEvent

This closes #4078

15 months ago[CARBONDATA-4141] Index Server is not caching indexes for external tables with sdk...
Karan980 [Tue, 2 Mar 2021 11:43:49 +0000 (17:13 +0530)] 
[CARBONDATA-4141] Index Server is not caching indexes for external tables with sdk segments

Why is this PR needed?
Indexes cached in Executor cache are not dropped when drop table is called for external table
with SDK segments. Because, external tables with sdk segments will not have metadata like table
status file. So in drop table command we send zero segments to indexServer clearIndexes job,
which clears nothing from executor side. So when we drop this type of table, executor side
indexes are not dropped. Now when we again create external table with same location and do
select * or select count(*), it will not cache the indexes for this table, because indexes with
same loaction are already present. Now show metacache on this newly created table will use new tableId ,
but indexes present have the old tableId, whose table is already dropped. So show metacache will return
nothing, because of tableId mismatch.

What changes were proposed in this PR?
Prepared the validSegments from indexFiles present at external table location and send it to IndexServer clearIndexes job through IndexInputFormat.

This closes #4099

15 months ago[CARBONDATA-4133] Concurrent Insert Overwrite with static partition on Index server...
ShreelekhyaG [Tue, 23 Feb 2021 15:15:46 +0000 (20:45 +0530)] 
[CARBONDATA-4133] Concurrent Insert Overwrite with static partition on Index server fails

Why is this PR needed?
Concurrent Insert Overwrite with static partition on Index server fails. When index server
and prepriming are enabled, prepriming is triggered even when load fails as it is in finally block.
Performance degradation with indexserver due to #4080

What changes were proposed in this PR?
Removed triggerPrepriming method from finally.
Reverted 4080 and used a boolean flag to determine the external segment.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No, tested in cluster.

This closes #4096

15 months ago[CARBONDATA-4137] Refactor CarbonDataSourceScan without the soruces.Filter of Spark 3
QiangCai [Mon, 22 Feb 2021 11:36:34 +0000 (19:36 +0800)] 
[CARBONDATA-4137] Refactor CarbonDataSourceScan without the soruces.Filter of Spark 3

Why is this PR needed?
1. In spark version 3, org.apache.spark.sql.sources.Filter is sealed, carbon can't extend it in carbon code.
2. The name of CarbonLateDecodeStrategy class is incorrect, the code is complex and hard to read
3. CarbonDataSourceScan can be the same for 2.3 and 2.4, and should support both batch reading and row reading.

What changes were proposed in this PR?
1. translate spark Expression to carbon Expression directly, skip the spark Filter step. Remove all spark Filters in carbon code.
  old follow: Spark Expression => Spark Filter => Carbon Expression
  new follow: Spark Expression => Carbon Expression
2. Remove filter reorder, need to implement expression reorder (added CARBONDATA-4138).
3. separate CarbonLateDecodeStrategy to CarbonSourceStrategy and DMLStrategy, and simplify the code of CarbonSourceStrategy.
4. move CarbonDataSourceScan back to the source folder, use one CarbonDataSourceScan for all versions
  CarbonDataSourceScan supports both VectorReader and RowReader, Carbon will not use RowDataSourceScanExec.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

15 months ago[CARBONDATA-4115] Successful load and insert will return segment ID
areyouokfreejoe [Sat, 30 Jan 2021 09:41:20 +0000 (17:41 +0800)] 
[CARBONDATA-4115] Successful load and insert will return segment ID

Why is this PR needed?
Currently successful load and insert sql return empty Seq in carbondata, we need it to return the segment ID.

What changes were proposed in this PR?
Successful load and insert will return segment ID.

Does this PR introduce any user interface change?
Yes. (Successful load and insert will return segment ID.)

Is any new testcase added?
Yes

This closes #4086

16 months ago[CARBONDATA-4121] Prepriming is not working in Index Server
Karan980 [Fri, 5 Feb 2021 11:26:23 +0000 (16:56 +0530)] 
[CARBONDATA-4121] Prepriming is not working in Index Server

Why is this PR needed?
Prepriming is not working in Index Server. Server.getRemoteUser
returns null value in async call of prepriming which results in
NPE and crashes the indexServer application. Issue Induced after PR #3952

What changes were proposed in this PR?
Computed the Server.getRemoteUser value before making the async prepriming
call and then used the same value during async call. Code reset to code before PR #3952

This closes #4088

16 months ago[CARBONDATA-4126] Concurrent compaction failed with load on table
Karan980 [Thu, 11 Feb 2021 07:44:07 +0000 (13:14 +0530)] 
[CARBONDATA-4126] Concurrent compaction failed with load on table

Why is this PR needed?
Concurrent compaction was failing when run in parallel with load.
During load we acquire SegmentLock for a particular segment, and
when this same lock we try to acquire during compaction, we were
not able to acquire this lock and compaction fails.

What changes were proposed in this PR?
Skipped compaction for segments for which we are not able to acquire
the SegmentLock instead of throwing the exception.

This closes #4093

16 months ago[CARBONDATA-3962] Fixed concurrent load failure with flat folder structure.
Nihal ojha [Tue, 16 Feb 2021 07:31:34 +0000 (13:01 +0530)] 
[CARBONDATA-3962] Fixed concurrent load failure with flat folder structure.

Why is this PR needed?
PR #3904 has added the code to remove fact directory and because of this concurrent
load fails with file not found exception.

What changes were proposed in this PR?
Reverted PR 3904.

This closes #4905

16 months ago[CARBONDATA-4117][CARBONDATA-4123] cg index and bloom index query issue with Index...
ShreelekhyaG [Fri, 5 Feb 2021 15:00:47 +0000 (20:30 +0530)] 
[CARBONDATA-4117][CARBONDATA-4123] cg index and bloom index query issue with Index server

Why is this PR needed?
1. Test cg index query with Index server fails with NPE. While initializing the index model,
a parsing error is thrown when trying to uncompress with snappy.
2. Bloom index query with Index server giving incorrect results when splits have >1 blocklets.
Blocklet level details are not serialized for index server as it is considered as block level cache.

What changes were proposed in this PR?
1. Have set segment and schema details to BlockletIndexInputSplit object. While writing
minmax object, write byte size instead of position.
2. Creating BlockletIndex when bloom filter is used, so in createBlocklet step isBlockCache
is set to false.

This closes #4089

16 months ago[CARBONDATA-4124] Fix Refresh MV which does not exist error message
Indhumathi27 [Tue, 9 Feb 2021 05:31:54 +0000 (11:01 +0530)] 
[CARBONDATA-4124] Fix Refresh MV which does not exist error message

Why is this PR needed?
Refreshing MV which does not exist, is not throwing proper carbon error message.
It throws Table NOT found message from Spark. This is because, getSchema is
returning null, if schema is not present.

What changes were proposed in this PR?
1. Check If getSchema is null and throw No such MV exception.
2. While drop table, drop mv and then drop fact table from metastore, to avoid
getting Nullpointer exception, when trying to access fact table while drop MV.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #4091

16 months ago[CARBONDATA-4125] SI compatability issue fix
Indhumathi27 [Wed, 3 Feb 2021 15:06:26 +0000 (20:36 +0530)] 
[CARBONDATA-4125] SI compatability issue fix

Why is this PR needed?
Currently, while upgrading table store with SI, we have to execute REFRESH tables and
REGISTER INDEX command to refresh and register the index to main table. And also, while
SI creation, we add a property 'indexTableExists' to main table, to identify if table
has SI or not. If a table has SI, then we load the index information for that table
from Hive {org.apache.spark.sql.secondaryindex.hive.CarbonInternalMetastore#refreshIndexInfo}.
indexTableExists will be default 'false' to all tables which does not have SI and for
SI tables, this property will not be added.

{org.apache.spark.sql.secondaryindex.hive.CarbonInternalMetastore#refreshIndexInfo} will
be called on any command to refresh indexInfo. indexTableExists property should be either
true(Main table) or null (SI), in order to get index information from Hive and set it to
carbon table.

Issue 1:
While upgarding tables with SI, after refresh main table and SI, If user does any operation
like Select or Show cache, it is adding indexTableExists property to false. After register
index and on doing any operation with SI(load or select),
{org.apache.spark.sql.secondaryindex.hive.CarbonInternalMetastore#refreshIndexInfo} is not
updating index information to SI table, since indexTableExists is false. Hence, load to SI
will fail.

Issue 2:
While upgarding tables with SI, after refresh main table and SI, If user does any operation
like Update, alter, delete to SI table, while registering it as a index, it is not validating
the alter operations done on that table.

What changes were proposed in this PR?
Issue 1:
While registering SI table as a index, check if SI table has indexTableExists proeprty and
remove it. For already registered index, allow re-register index to remove the property.

Issue 2:
Added validations for checking if SI has undergone Load/Update/delete/alter opertaion before
registering it as a index and throw exception.

This closes #4087

16 months ago[CARBONDATA-4122] Use CarbonFile API instead of java File API for Flink CarbonLocalWriter
Indhumathi27 [Sun, 7 Feb 2021 11:32:31 +0000 (17:02 +0530)] 
[CARBONDATA-4122] Use CarbonFile API instead of java File API for Flink CarbonLocalWriter

Why is this PR needed?
Currently, only two writer's(Local & S3) is supported for flink carbon streaming support. If user wants to ingest data from flink as a carbon format, directly into HDFS carbon table, there is no writer type to support it.

What changes were proposed in this PR?
Since the code for writing flink stage data will be same for Local and Hdfs FileSystems, we can use the existing CarbonLocalWriter to write data into hdfs, by using CarbonFile API instead of java File API.

Changed code to use CarbonFile API instead of java.io.File.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #4090

16 months ago[CARBONDATA-4102] Added UT and FT to improve coverage of SI module.
Nihal ojha [Wed, 23 Dec 2020 09:26:57 +0000 (14:56 +0530)] 
[CARBONDATA-4102] Added UT and FT to improve coverage of SI module.

Why is this PR needed?
Added UT and FT to improve coverage of SI module and also removed the dead or unused code.

What changes were proposed in this PR?
Added UT and FT to improve coverage of SI module and also removed the dead or unused code.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #4071

16 months ago[CARBONDATA-4111] Filter query having invalid results after add segment to table...
ShreelekhyaG [Mon, 25 Jan 2021 10:39:32 +0000 (16:09 +0530)] 
[CARBONDATA-4111] Filter query having invalid results after add segment to table having SI with Indexserver

Why is this PR needed?
When the index server is enabled, filter query on SI column after alter table
add sdk segment to maintable throws NoSuchMethodException and the rows added
by sdk segment are not returned in the result.

What changes were proposed in this PR?
Added segment path in index server flow, as it is used to identify external segment
in filter resolver step. No need to load to SI, if it is an add load command.
Default constructor for SegmentWrapperContainer declared.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #4080

16 months ago[CARBONDATA-4107] Added related MV tables Map to fact table and added lock while...
Indhumathi27 [Tue, 12 Jan 2021 08:38:56 +0000 (14:08 +0530)] 
[CARBONDATA-4107] Added related MV tables Map to fact table and added lock while touchMDTFile

Why is this PR needed?
1. After MV support multi-tenancy PR, mv system folder is moved to database level. Hence,
during each operation, insert/Load/IUD/show mv/query, we are listing all the databases in the
system and collecting mv schemas and checking if there is any mv mapped to the table or not.
This will degrade performance of the query, to collect mv schemas from all databases, even
though the table has mv or not.

2. When different jvm process call touchMDTFile method, file creation and deletion can
happen same time. This may fail the operation.

What changes were proposed in this PR?
1. Added a table property relatedMVTablesMap to fact tables of MV during MV creation. During
any operation, check if the table has MV or not using the added property and if it has, then
collect schemas of only related databases. In this way, we can avoid collecting mv schemas
for table which dont have MV.

2. Take a Global level lock on system folder location, to update last modified time.

NOTE: For compatibilty scenarios, can perform refresh MV operation to update these table properties.

Does this PR introduce any user interface change?
Yes.
For compatibilty scenarios, can perform refresh MV operation to update these table properties.

Is any new testcase added?
No

This closes #4076

16 months ago[CARBONDATA-4082] Fix alter table add segment query on adding a segment having delete...
Karan980 [Mon, 4 Jan 2021 06:40:05 +0000 (12:10 +0530)] 
[CARBONDATA-4082] Fix alter table add segment query on adding a segment having delete delta files

Why is this PR needed?
When a segment is added to a carbon table by alter table add segment query
and that segment also have a deleteDelta file present in it, then on querying
the carbon table the deleted rows are coming in the result.

What changes were proposed in this PR?
Updating the tableStatus and tableUpdateStatus files in correct way for the
segments having delta delta files.

This closes #4070

16 months ago[CARBONDATA-4113] Partition prune and cache fix when carbon.read.partition.hive.direc...
ShreelekhyaG [Thu, 28 Jan 2021 10:10:27 +0000 (15:40 +0530)] 
[CARBONDATA-4113] Partition prune and cache fix when carbon.read.partition.hive.direct is disabled

Why is this PR needed?
When carbon.read.partition.hive.direct is false then select queries on
partition table result is invalid . For a single partition, partition
values are appended to form the wrong path when loaded by the same segment.
Ex: For partition on column b, path: /tablepath/b=1/b=2

What changes were proposed in this PR?
In PartitionCacheManager, changes made to handle single and multiple partitions.
Encoded the URI path to handle space values in the string.

This closes #4084

16 months ago[CARBONDATA-4112] Data mismatch issue in SI global sort merge flow
Karan980 [Thu, 28 Jan 2021 10:09:04 +0000 (15:39 +0530)] 
[CARBONDATA-4112] Data mismatch issue in SI global sort merge flow

Why is this PR needed?
When the data files of a SI segment are merged. it results in having more number of rows in SI table than main table.

What changes were proposed in this PR?
CARBON_INPUT_SEGMENT property was not set before creating the dataframe from SI segment. So it was creating dataframe from all the rows in the table, not only from a particular segment.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #4083

16 months ago[CARBONDATA-4109] Improve carbondata coverage for presto-integration code
akkio-97 [Mon, 11 Jan 2021 16:44:04 +0000 (22:14 +0530)] 
[CARBONDATA-4109] Improve carbondata coverage for presto-integration code

Why is this PR needed?
Few scenarios had missing coverage in presto-integration code. This PR aims to improve it by considering all such scenarios.

Dead code- ObjectStreamReader.java was created with an aim to query complex types. Instead ComplexTypeStreamReader was created. Making ObjectStreamreader obsolete.

What changes were proposed in this PR?
Test cases added for scenarios that were not covered earlier in presto-integration code
Removed dead code.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #4074

16 months ago[CARBONDATA-4104] Vector filling for complex decimal type needs to be handled
akkio-97 [Thu, 7 Jan 2021 19:51:59 +0000 (01:21 +0530)] 
[CARBONDATA-4104] Vector filling for complex decimal type needs to be handled

Why is this PR needed?
Filling of vectors in case of complex decimal type whose precision is greater than 18 is not handled properly.
for ex-
array<decimal(20,3)>

What changes were proposed in this PR?
Ensured proper vector filling considering it's page data type.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #4073

16 months ago[CARBONDATA-4097] ColumnVectors should not be initialized as
Karan980 [Tue, 22 Dec 2020 13:21:23 +0000 (18:51 +0530)] 
[CARBONDATA-4097] ColumnVectors should not be initialized as
ColumnVectorWrapperDirect for alter tables

Why is this PR needed?
Direct filling of column vectors is not allowed for alter tables,
But its column vectors were getting initialized as ColumnVectorWrapperDirect.

What changes were proposed in this PR?
Changed the initialization of column vectors to ColumnVectorWrapper
for alter tables.

This closes #4062

16 months ago[CARBONDATA-4051] Geo spatial index algorithm improvement and UDFs enhancement
shenjiayu17 [Thu, 19 Nov 2020 07:30:24 +0000 (15:30 +0800)] 
[CARBONDATA-4051] Geo spatial index algorithm improvement and UDFs enhancement

Why is this PR needed?
Spatial index feature optimization of CarbonData

What changes were proposed in this PR?
1. Update spatial index encoded algorithm, which can reduce the required properties of creating geo table
2. Enhance geo query UDFs, support querying geo table with polygon list, polyline list, geoId range list. And add some geo transforming util UDFs.
3. Load data (include LOAD and INSERT INTO) allows user to input spatial index, which column will still generated internally when user does not give.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #4012

17 months ago[CARBONDATA-4096] SDK read fails from cluster and sdk read filter query on
ShreelekhyaG [Tue, 22 Dec 2020 13:14:43 +0000 (18:44 +0530)] 
[CARBONDATA-4096] SDK read fails from cluster and sdk read filter query on
sort column giving wrong result with IndexServer

Why is this PR needed?
1. Create a table and read from sdk written files fails in cluster with
java.nio.file.NoSuchFileException: hdfs:/hacluster/user/hive/warehouse/carbon.store/default/sdk.
2. After fixing the above path issue, filter query on sort column gives
the wrong result with IndexServer.

What changes were proposed in this PR?
1. In getAllDeleteDeltaFiles , used CarbonFiles.listFiles instead of Files.walk
to handle custom file types.
2. In PruneWithFilter , isResolvedOnSegment is used in filterResolver step.
Have set table and expression on executor side, so indexserver can use this
in filterResolver step.

This closes #4064

17 months ago[CARBONDATA-4055]Fix creation of empty segment directory and meta
akashrn5 [Mon, 23 Nov 2020 13:48:06 +0000 (19:18 +0530)] 
[CARBONDATA-4055]Fix creation of empty segment directory and meta
entry when there is no update/insert data

Why is this PR needed?
1. After #3999 when an update happens on the table, a new segment
is created for updated data. But when there is no data to update,
still the segments are created and the table status has in progress
entries for those empty segments. This leads to unnecessary segment
dirs and an increase in table status entries.
2. after this, clean files don't clean these empty segments.
3. when the source table do not have data, CTAS will result in same
problem mentioned.

What changes were proposed in this PR?
when the data is not present during update, make the segment as marked
for delete so that the clean files take care to delete the segment,
for cats already handled, added test cases.

This closes #4018

17 months ago[DOC] Running the Thrift JDBC/ODBC server with CarbonExtensions
QiangCai [Fri, 15 Jan 2021 02:30:15 +0000 (10:30 +0800)] 
[DOC] Running the Thrift JDBC/ODBC server with CarbonExtensions

Why is this PR needed?
since version 2.0, carbon supports starting spark ThriftServer with CarbonExtensions.

What changes were proposed in this PR?
add the document to start spark ThriftServer with CarbonExtensions.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #4077

17 months ago[CARBONDATA-4065] Support MERGE INTO SQL Command
BrooksLi [Thu, 5 Nov 2020 06:42:35 +0000 (14:42 +0800)] 
[CARBONDATA-4065] Support MERGE INTO SQL Command

Why is this PR needed?
In order to support MERGE INTO SQL Command in Carbondata
The previous Scala Parser having trouble to parse the complicated Merge Into SQL Command

What changes were proposed in this PR?
Add an ANTLR parser, and support parse MERGE INTO SQL Command to DataSet Command

Does this PR introduce any user interface change?
Yes.
The PR introduces the MERGE INTO SQL Command.

Is any new testcase added?
Yes

This closes #4032

Co-authored-by: Zhangshunyu <zhangshunyu1990@126.com>
17 months ago[CARBONDATA-4070] [CARBONDATA-4059] Fixed SI issues and improved FT
Nihal ojha [Fri, 27 Nov 2020 10:40:47 +0000 (16:10 +0530)] 
[CARBONDATA-4070] [CARBONDATA-4059] Fixed SI issues and improved FT

Why is this PR needed?
1. Block SI creation on binary column.
2. Block alter table drop column directly on SI table.
3. Create table as like should not be allowed for SI tables.
4. Filter with like should not scan SI table.
5. Currently compaction is allowed on SI table. Because of this if only SI table
is compacted and running filter query query on main table is causing more data
scan of SI table which will causing performance degradation.

What changes were proposed in this PR?
1. Blocked SI creation on binary column.
2. Blocked alter table drop column directly on SI table.
3. Handled Create table as like for SI tables.
4. Handled filter with like to not scan SI table.
5. Block the direct compaction on SI table and add FTs for compaction scenario of SI.
6. Added FT for compression and range column on SI table.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #4037

17 months ago[CARBONDATA-3987] Handled filter and IUD operation for pagination reader in SDK
Nihal ojha [Wed, 30 Dec 2020 08:34:51 +0000 (14:04 +0530)] 
[CARBONDATA-3987] Handled filter and IUD operation for pagination reader in SDK

Why is this PR needed?
Currently, SDK pagination reader is not supported for the filter expression and also returning the wrong result after performing IUD operation through SDK.

What changes were proposed in this PR?
In case of filter present or update/delete operation get the total rows in splits after building the carbon reader else get the row count from the details info of each splits.
Handled ArrayIndexOutOfBoundException and return zero in case of rowCountInSplits.size() == 0

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #4068

17 months ago[CARBONDATA-4073] Added FT for missing scenarios and removed dead code in Presto...
akkio-97 [Sun, 29 Nov 2020 19:24:12 +0000 (00:54 +0530)] 
[CARBONDATA-4073] Added FT for missing scenarios and removed dead code in Presto integration

Why is this PR needed?
FT for following cases has been added. Here store is created by spark and it is read by Presto.

update without local-dict
delete operations on table
minor, major, custom compaction
add and delete segments
test update with inverted index
read with partition columns
Filter on partition columns
Bloom index
test range columns
read streaming data

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #4031

17 months ago[CARBONDATA-4100] Fix SI segments are in inconsistent state with maintable after...
Indhumathi27 [Mon, 28 Dec 2020 16:08:10 +0000 (21:38 +0530)] 
[CARBONDATA-4100] Fix SI segments are in inconsistent state with maintable after concurrent Load & Compaction operation

Why is this PR needed?
When Concurrent LOAD and COMPACTION is in progress on main table having SI, SILoadEventListenerForFailedSegments listener is called to repair SI failed segments if any. It will compare SI and main table segment status, if there is a mismatch, then it will add that specific load to failedLoads to be re-loaded again.

During Compaction, SI will be updated first and then maintable. So, in some cases, SI segment will be in compacted state and main table will be in SUCCESS state(the compaction can be still in progress or due to some operation failure). SI index repair will add those segments to failedLoads, by checking if segment lock can be acquired. But, if maintable compaction is finished by the time, SI repair comparison is done, then also, it can acquire segment lock and add those load to failedLoad(even though main table load is COMPACTED). After the concurrent operation is finished, some segments of SI are marked as INSERT_IN_PROGRESS. This will lead to inconsistent state between SI and mainTable segments.

What changes were proposed in this PR?
Acquire compaction lock on maintable(to ensure compaction is not running), and then compare SI and main table load details, to repair SI segments.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No (concurrent scenario)

This closes #4067

17 months ago[CARBONDATA-4099] Fixed select query on main table with a SI table in case of concurr...
Vikram Ahuja [Mon, 28 Dec 2020 12:50:44 +0000 (18:20 +0530)] 
[CARBONDATA-4099] Fixed select query on main table with a SI table in case of concurrent load,
compact and clean files operation

Why is this PR needed?
There were 2 issues in the clean files post event listener:

1. In concurrent cases, while writing entry back to the table status file, wrong path was given,
due to which table status file was not updated in the case of SI table.
2. While writing the loadmetadetails to the table status file during concurrent scenarios,
we were only writing the unwanted segments and not all the segments, which could make segments
stale in the SI table
Due to these 2 issues, when selet query is executed on SI table, the tablestatus would have entry
for a segment but it's carbondata file would be deleted, thus throwing an IO Exception.
3. Segment ID is null when writing hive table

What changes were proposed in this PR?
1.& 2. Added correct table status path as well sending the correct loadmetadatadetails to be updated in
the table status file. Now when select query is fired on the SI table, it will not throw
carbondata file not found exception
3. set the load model after setup job of committer

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #4066

18 months ago[CARBONDATA-4088] Drop metacache didn't clear some cache information which leads...
jack86596 [Thu, 17 Dec 2020 09:09:56 +0000 (17:09 +0800)] 
[CARBONDATA-4088] Drop metacache didn't clear some cache information which leads to memory leak

Why is this PR needed?
When there are two spark applications, one drop a table, some cache information of this table
stay in another application and cannot be removed with any method like "Drop metacache" command.
This leads to memory leak. With the passage of time, memory leak will also accumulate which
finally leads to driver OOM. Following are the leak points:
1) tableModifiedTimeStore in CarbonFileMetastore;
2) segmentLockMap in BlockletDataMapIndexStore;
3) absoluteTableIdentifierByteMap in SegmentPropertiesAndSchemaHolder;
4) tableInfoMap in CarbonMetadata.

What changes were proposed in this PR?
Using expiring map to cache the table information in CarbonMetadata and modified time in
CarbonFileMetaStore so that stale information will be cleared automatically after the expiration
time. Operations in BlockletDataMapIndexStore no need to be locked, remove all the logic
related to segmentLockMap.

Does this PR introduce any user interface change?
New configuration carbon.metacache.expiration.seconds is added.

Is any new testcase added?
No

This closes #4057

18 months ago[CARBONDATA-4095] Fix Select Query with SI filter fails, when columnDrift is Set
Indhumathi27 [Tue, 22 Dec 2020 13:22:00 +0000 (18:52 +0530)] 
[CARBONDATA-4095] Fix Select Query with SI filter fails, when columnDrift is Set

Why is this PR needed?
After converting expression to IN Expression for maintable with SI, expression
is not processed if ColumnDrift is enabled. Query fails with NPE during
resolveFilter. Exception is added in JIRA

What changes were proposed in this PR?
Process the filter expression after adding implicit expression

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #4063

18 months ago[CARBONDATA-4089] Create table with location, if the location doesn't have scheme...
jack86596 [Tue, 22 Dec 2020 14:11:40 +0000 (22:11 +0800)] 
[CARBONDATA-4089] Create table with location, if the location doesn't have scheme, the default will be local file system, which is not the file system defined by fs.defaultFS

Why is this PR needed?
Create table with location, if the location doesn't have scheme, the default will be local file system, which is not the file system defined by fs.defaultFS.

What changes were proposed in this PR?
If the location doesn't have scheme, add the fs.defaultFS scheme to the beginning of the location.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #4065

18 months ago[CARBONDATA-4094]: Fix fallback count(*) issue on partition table with index server
Vikram Ahuja [Mon, 21 Dec 2020 08:00:11 +0000 (13:30 +0530)] 
[CARBONDATA-4094]: Fix fallback count(*) issue on partition table with index server

Why is this PR needed?
The used asJava converts to java "in place", without copying the whole data to save
time and memory and it just simply wraps the scala collection with a class that
conforms to the java interface and thus java serializer is not able to serialize it.

What changes were proposed in this PR?
Converting it to list, so that it is able to serialize a list.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #4061

18 months ago[CARBONDATA-4093] Added logs for MV and method to verify if mv is in Sync during...
Indhumathi27 [Sat, 19 Dec 2020 10:39:26 +0000 (16:09 +0530)] 
[CARBONDATA-4093] Added logs for MV and method to verify if mv is in Sync during query

Why is this PR needed?
Added logs for MV and method to verify if mv is in Sync during query

What changes were proposed in this PR?
1. Move MV Enable Check to beginning to avoid transform logical plan
2. Add Logger if exception is occurred during fetching mv schema
3. Check if MV is in Sync and allow Query rewrite
4. Reuse reading LoadMetadetails to get mergedLoadMapping
5. Set NO-Dict Schema types for insert-partition flow - missed from [CARBONDATA-4077]

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #4060

18 months ago[CARBONDATA-4092] Fix concurrent issues in delete segment API's and MV flow
Vikram Ahuja [Fri, 18 Dec 2020 11:37:36 +0000 (17:07 +0530)] 
[CARBONDATA-4092] Fix concurrent issues in delete segment API's and MV flow

Why is this PR needed?
They are multiple issues with the Delete segment API:

Not using the latest loadmetadatadetails while writing to table status file, thus can remove table status entry of any concurrently loaded Insert In progress/success segment.
The code reads the table status file 2 times
When in concurrent queries, they both access checkAndReloadSchema for MV on all databases, 2 different queries try to create a file on same location, HDFS takes the lock for one and fails for another, thus failing the query

What changes were proposed in this PR?
Only reading the table status file once.
Using the latest tablestatus to mark the segment Marked for delete, thus no concurrent issues will come
Made touchMDT and checkAndReloadSchema methods syncronized, so that only instance can access it at one time.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #4059

18 months ago[CARBONDATA-4084] Fixed data corruption issue after fallback of Local dictionary
kumarvishal09 [Fri, 18 Dec 2020 10:18:58 +0000 (15:48 +0530)] 
[CARBONDATA-4084] Fixed data corruption issue after fallback of Local dictionary

Why is this PR needed?
Data is getting corrupted when fallback happens for local dictionary encoded page.

What changes were proposed in this PR?
In LVByteBufferColumnPage Length getting added inside put method. In case of fallback when reverse lookup is done and encoded page is replaced with actual value[Dictionary values]. As actual Dictionary value is already present in LV format again one more length is getting added[LLV], so during query it's showing extra character for those columns

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #4058

18 months ago[CARBONDATA-4076] Fix MV having Subquery alias used in query projection #4038
Indhumathi27 [Thu, 3 Dec 2020 12:14:50 +0000 (17:44 +0530)] 
[CARBONDATA-4076] Fix MV having Subquery alias used in query projection #4038

Why is this PR needed?
If alias is used in subquery and that alias is used in main query projection,
then the query is not hitting MV after creation.

For example:

Select a, sum(b) from (select c, d b from t1)

This is because, currently, we are not checking for subquery alias child node
for matching the query.

What changes were proposed in this PR?
1. If the outputList contains Alias, then compare the alias child of subsume/subsumer
2. In GroupbyNoselect, compare the alias.sql subsume/subsumer
3. Added logs for MV Rewrite and matching

This closes #4038

18 months ago[CARBONDATA-4071] Fix wrong values of date or timestamp child columns on reading...
Karan980 [Mon, 7 Dec 2020 14:02:48 +0000 (19:32 +0530)] 
[CARBONDATA-4071] Fix wrong values of date or timestamp child columns on reading through SDK

Why is this PR needed?
When date or timestamp column is present inside complex columns (for eg : Array(Date)),
it gives wrong result on reading through SDK.

What changes were proposed in this PR?
Fix the conversion of INT into date and LONG into timestamp column

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #4046

18 months ago[CARBONDATA-4072] Clean files command is not deleting .segment files for the
Karan980 [Tue, 8 Dec 2020 10:43:16 +0000 (16:13 +0530)] 
[CARBONDATA-4072] Clean files command is not deleting .segment files for the
segments added through alter table add segment query.

Why is this PR needed?
Clean files command is not deleting .segment files present at
tablePath/Metadata/Segments for the compacted/marked for delete segments
added through alter table add segment query.

What changes were proposed in this PR?
Added code for deleting the segment file for the segments added
through alter table add segment query.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #4048

18 months ago[CARBONDATA-4078] Add external segment and query with index server fails
ShreelekhyaG [Mon, 7 Dec 2020 13:38:01 +0000 (19:08 +0530)] 
[CARBONDATA-4078] Add external segment and query with index server fails

Why is this PR needed?
Query after adding an external segment to carbon table tries to getSplits from Index server
and throws an exception as it cannot read the external(orc/parquet) file format.
When the fallback mode is disabled, it throws an exception and fails.

What changes were proposed in this PR?
To avoid the exception, filtered only valid carbon segments to cache in the index server.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No, tested in cluster.

This closes #4047

18 months ago[CARBONDATA-4080] Wrong results for select count on invalid segments
akkio-97 [Wed, 9 Dec 2020 09:45:51 +0000 (15:15 +0530)] 
[CARBONDATA-4080] Wrong results for select count on invalid segments

Why is this PR needed?
Wrong results for
1. select count on marked for delete segment
2. select count on compacted segment
Issue comes only when the user explicitly sets deleted/compacted
segments using the property carbon.input.segments.
As select * on such segments gives 0 rows as output, in order to
maintain consistency, select count should also give 0 rows.

What changes were proposed in this PR?
So this PR focuses on considering only valid segments to be accessed
during select count query.

This closes #4050

18 months ago[CARBONDATA-4077] Refactor and Fix Insert into partition issue with FileMergeSortComp...
Indhumathi27 [Sat, 5 Dec 2020 14:05:58 +0000 (19:35 +0530)] 
[CARBONDATA-4077] Refactor and Fix Insert into partition issue with FileMergeSortComparator

Why is this PR needed?
From PR-3995 changes, insert into partition flow scenario is missed. Using Map for getting
Dict/No-Dict sort column info during final sort task will affect load performance,
if number of sort columns is more.

What changes were proposed in this PR?
Handled the insert into partition flow
Refactored the code, to use list of only Dict/No-Dict sort column indexes instead of
Map to fix performance issue.

This closes #4039

18 months ago[CARBONDATA-4087] Handled issue with huge data (exceeding 32K records) after enabling...
akkio-97 [Wed, 16 Dec 2020 08:46:03 +0000 (14:16 +0530)] 
[CARBONDATA-4087] Handled issue with huge data (exceeding 32K records) after enabling local dictionary in Presto

Why is this PR needed?
After enabling local dictionary, this issue appears while doing SELECT on array(varchar) types, for data exceeding the batch size - 32k.
The int array used to store the surrogate values of dictionary has a default size of 32K only. ArrayOutOfBounds exception is thrown if the page size exceeds 32k.

What changes were proposed in this PR?
If its size is not sufficient to accommodate all the string values then increase the default size to the desired page size.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #4055

18 months ago[CARBONDATA-4081] Fix multiple issues with clean files command
Vikram Ahuja [Thu, 10 Dec 2020 09:08:17 +0000 (14:38 +0530)] 
[CARBONDATA-4081] Fix multiple issues with clean files command

Why is this PR needed?
While getting stale segment, we do a list files and take all the files, if there is any folder/file other than .segment file, it will lead to further issues while copying data to the trash folder.

In the case when AbstractDFSCarbonFile is created with path and HadoopConf instead of fileStatus and if the file does not exist, since fileStatus is empty ListDirs returns empty result and getAbsolutePath throws file does not exist exception

Clean files is not allowed with concurrent insert overwrite in progress, In case with concurrent loading to MV is by default an insert overwrite operation, clean files operation on that MV would fail and throw exception.

What changes were proposed in this PR?
Added a filter, to only consider the files ending with ".segment"
Using listfiles instead of list dirs in the trash folder
No need to throw exceptions, just put a info message in case of such MV tables and continue blocking clean files for such MV.
Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #4051

18 months ago[CARBONDATA-4069] [CARBONDATA-4068] handled set streaming and long string for SI...
Nihal ojha [Fri, 4 Dec 2020 07:04:43 +0000 (12:34 +0530)] 
[CARBONDATA-4069] [CARBONDATA-4068] handled set streaming and long string for SI table or table having SI

Why is this PR needed?
Currently alter table set streaming = true is allowed either for SI table or MT which has SI.
Currently set column as long string on which SI is already created is allowed. This operation
should not be allowed because SI doesn't support long strings.

What changes were proposed in this PR?
Handled set streaming true for SI table and MT which has SI and throws the exception.
Handled set long string on SI columns and throws the exception.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #4042

18 months ago[HOTFIX] Refact Carbon Util
Zhangshunyu [Fri, 27 Nov 2020 03:17:55 +0000 (11:17 +0800)] 
[HOTFIX] Refact Carbon Util

Why is this PR needed?
Currentlly, we have some Carbon{$FUNCTION_NAME}Util, for example CarbonSparkUtil, CarbonQueryUtil, CarbonMergeUtil, CarbonLoadUtil, and we also have some CarbonUtil/CarbonUtils which has some mixed functions in, we should clean code and move the functions in CarbonUtils to the specified Util where it should be.

What changes were proposed in this PR?
Refact the code to clean it

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #4029

18 months ago[CARBONDATA-4062] Refactor clean files feature
QiangCai [Sun, 6 Dec 2020 18:07:32 +0000 (02:07 +0800)] 
[CARBONDATA-4062] Refactor clean files feature

Why is this PR needed?
To prevent accidental deletion of data, carbon will introduce trash data management. It will provide buffer time for accidental deletion of data to roll back the delete operation.

Trash data management is a part of carbon data lifecycle management. Clean files as a data trash manager should contain the following two parts.
part 1: manage metadata-indexed data trash.
This data is at the original place of the table and indexed by metadata. carbon manages this data by metadata index and should avoid using listFile() interface.
part 2: manage ".Trash" folder.
Now ".Trash" folder is without metadata index, and the operation on it bases on timestamp and listFile() interface. In the future, carbon will index ".Trash" folder to improve data trash management.

What changes were proposed in this PR?
remove data clean function from all features, but keep exception-handling part
Notes: the following features still clean data
a) drop table/index/mv
b) drop database
only clean files function works as a data trash manager now
support concurrent operation with other feature(loading, compaction, update/delete, and so on)

Does this PR introduce any user interface change?
Yes. Document is updated.

Is any new testcase added?
No

This closes #4044

18 months ago[CARBONDATA-4067]: Removing force option in clean files command and changing behaviou...
Vikram Ahuja [Fri, 6 Nov 2020 07:29:43 +0000 (12:59 +0530)] 
[CARBONDATA-4067]: Removing force option in clean files command and changing behaviour when MFD, Compacted and stale Inprogress segments can be deleted

Why is this PR needed?
Change the behaviour change for clean files operation
Old behaviour: Clean files command is by default force option = true and ignores query timeout. So, the MFD, Compacted and Inprogress segments are removed immediately when clean files is called. The user can by mistake call delete some important data

What changes were proposed in this PR?
Instead of just a force option deleting all MFD, Compacted and Insert In Progress segments, dividing them into 2 parameters, forceClean and cleanStaleInProgress. forceClean parameter will clean data immediately and cleanStaleInProgress will decide if stale InProgress segments can be deleted. The behaviour is described below.

New Behaviour: clean files is no longer force by default and depends on 2 variables(forceClean and cleanStaleInProgress).
default clean files behaviour(clean files on table t1): clean MFD and Compacted segments will depend on query timeout(1 hr) and trashRetentionTimeout(7 days, default). For example:
If trashRetentionTimeout is 7 days and query timeout is 1 hr--> Delete after 7 days
If trashRetentionTimeout is 0 days and query timeout is 1 hr--> Delete after 1 hr
It will also empty trash based on trash retention time.
clean files on table t1 options('force'='true'): clean MFD and Compacted segments immediately(Do not check for any timeout) and empty trash immediately.
clean files on table t1 options('clean_inprgress'='true') : clean stale inprogress, MFD and Compacted segments depends on trashRetentionTimeout, after 7 days(default behaviour) and empty trash based on trash retention time.
clean files on table t1 options('clean_inprgress'='true', 'force'='true') : clean MFD, Compacted and stale inprogress segments immediately(Do not check for any timeout) and empty trash immediately.

Does this PR introduce any user interface change?
Yes. Document is updated.

Is any new testcase added?
No (previous test cases changed)

This closes #4035

18 months ago[CARBONDATA-4029] [CARBONDATA-3908] Issue while adding segments through alter add...
akkio-97 [Mon, 2 Nov 2020 15:58:08 +0000 (21:28 +0530)] 
[CARBONDATA-4029] [CARBONDATA-3908] Issue while adding segments through alter add segment command

Why is this PR needed?
While adding segments into carbon table using "alter add segment" command- if the HDFS location path has " / " file separator in the end, then it leads to NPE during full scan.

What changes were proposed in this PR?
Have removed this extra file separator.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #4001

18 months ago[CARBONDATA-4054] Support data size control for minor compaction
Zhangshunyu [Tue, 24 Nov 2020 03:53:16 +0000 (11:53 +0800)] 
[CARBONDATA-4054] Support data size control for minor compaction

Why is this PR needed?
Currentlly, minor compaction only consider the num of segments and major
compaction only consider the SUM size of segments, but consider a scenario
that the user want to use minor compaction by the num of segments but he
dont want to merge the segment whose datasize larger the threshold for
example 2GB, as it is no need to merge so much big segment and it is time
costly.

What changes were proposed in this PR?
add a parameter to control the threshold of segment included
in minor compaction, so that the user can specify the segment not included
in minor compaction once the datasize exeed the threshold, system level and table level can be set, and if not set the use default
value.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #4020

18 months ago[CARBONDATA-4050]Avoid redundant RPC calls to get file status when CarbonFile is
Venu Reddy [Wed, 18 Nov 2020 19:03:20 +0000 (00:33 +0530)] 
[CARBONDATA-4050]Avoid redundant RPC calls to get file status when CarbonFile is
instantiated with fileStatus constructor

Why is this PR needed?
In createCarbonDataFileBlockMetaInfoMapping method, we get list of carbondata
files in the segment, loop through all the carbon files and make a map of
fileNameToMetaInfoMapping<path-string, BlockMetaInfo>

In that carbon files loop, if the file is of AbstractDFSCarbonFile type, we get
the org.apache.hadoop.fs.FileStatus thrice for each file. And the method to get
file status is an RPC call(fileSystem.getFileStatus(path)). It takes ~2ms in the
cluster for each call. Thus, incur an overhead of ~6ms per file. So overall driver
side query processing time has increased significantly when there are more carbon
files. Hence caused TPC-DS queries performance degradation.

What changes were proposed in this PR?
Avoided redundant RPC calls to get file status in getAbsolutePath(), getSize() and
getLocations() methods when CarbonFile is instantiated with FileStatus constructor

This closes #4010

18 months ago[CARBONDATA-4046] Handled multiple partition columns for partition cache
Nihal ojha [Tue, 3 Nov 2020 05:17:02 +0000 (10:47 +0530)] 
[CARBONDATA-4046] Handled multiple partition columns for partition cache

Why is this PR needed?
1. Currently when property carbon.read.partition.hive.direct is false then
select count * fails on table which contains multiple partition columns.
2. Subtraction of the different data types.
3. If the final cache is empty and the invalid segment list is non-empty
then clear the cache.

What changes were proposed in this PR?
1. Handled multiple partition columns.
2. Handled subtraction of the different data types.
3. If the final cache is empty and the invalid segment list is non-empty then clear the cache.

This closes #4002

18 months ago[CARBONDATA-4022] Fix invalid path issue for segment added through alter add segment...
Karan980 [Fri, 20 Nov 2020 11:41:16 +0000 (17:11 +0530)] 
[CARBONDATA-4022] Fix invalid path issue for segment added through alter add segment query

Why is this PR needed?
Segment Added through alter table add segment query doesn't require tablepath in its
filepath, because the segment is present at some external location which is not inside
the table.

What changes were proposed in this PR?
Filepath for normal segments (which are not added through alter table add segment query)
is tablePath + filePath. But for segments added through alter table add segment query
doesn't require tablePath, so we directly use the filePath of the segment.

This closes #4017

18 months ago[CARBONDATA-4020] Fixed drop index when multiple index exists
Nihal ojha [Fri, 30 Oct 2020 07:14:18 +0000 (12:44 +0530)] 
[CARBONDATA-4020] Fixed drop index when multiple index exists

Why is this PR needed?
Currently when we have multiple bloom indexes and we drop one index
then 'show index' command is showing an empty index list.

What changes were proposed in this PR?
Checked, if no CG or FG index then set indexExist as true.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #4000

18 months ago[CARBONDATA-4052] Handled insert overwrite scenario for SI
Nihal ojha [Fri, 20 Nov 2020 10:08:03 +0000 (15:38 +0530)] 
[CARBONDATA-4052] Handled insert overwrite scenario for SI

Why is this PR needed?
Currently in case of insert overwrite query SI existing segment
are not getting marked for delete. Because of this select query
on SI table is giving wrong result.

What changes were proposed in this PR?
Handled insert overwrite for SI table and changed the status of
existing segment as MARKED_FOR_DELETE.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #4015

18 months ago[CARBONDATA-3978] Support .Trash folder
Vikram Ahuja [Fri, 6 Nov 2020 07:29:43 +0000 (12:59 +0530)] 
[CARBONDATA-3978] Support .Trash folder

Why is this PR needed?
To add support for a trash folder, where all the carbondata and index files of all the stale segments(segments whose entry is not in tablestatus file but exists in Fact folder and metadata folder) will go after clean files is called.

What changes were proposed in this PR?
Added trash folder(recycle bin) where all the data files of stale segments(segments whose entry is not in tablestatus file but exists in Fact folder and metadata folder) go to after clean files operation. Timestamp based subdirectories are added in the trash folder and those subdirectories will contain the segment folders which are moved to the trash. By default the expiration day of the timestamp subdirectory is 7 days, the subsequent clean files command after the expiration will remove that timestamp subdirectory. The property exposed for this purpose is "carbon.trash.retention.days".
Clean files with force option directly empties the trash folder. By default, clean files with force option is disabled. It can be enabled by setting the carbon property "carbon.clean.file.force.allowed" to true.
The MFD and Compacted segments will also take in into account the Carbon Trash Retention Property before they are being deleted instead of just max query timeout.

Does this PR introduce any user interface change?
Yes. (Added clean-files.md)

Is any new testcase added?
Yes

This closes #4005

18 months ago[CARBONDATA-4064] Fix tpcds query failure with SI
Indhumathi27 [Fri, 27 Nov 2020 13:59:38 +0000 (19:29 +0530)] 
[CARBONDATA-4064] Fix tpcds query failure with SI

Why is this PR needed?
TPCDS queries are failing with None.get exception when SI is configured for some tables.

What changes were proposed in this PR?
Check if parentRelation is none for filter condition, and return false for checkIfPushDownOrderByLimitAndNotNullFilter

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #4030

18 months ago[CARBONDATA-4066] data mismatch observed with SI and without SI when SI global sort...
Mahesh Raju Somalaraju [Tue, 1 Dec 2020 11:12:42 +0000 (16:42 +0530)] 
[CARBONDATA-4066] data mismatch observed with SI and without SI when SI global sort and SI segment merge is true

Why is this PR needed?
data mismatch observed with SI and without SI when SI global sort and SI segment merge is true. After merge si data files position reference is also sorted and due to this pointing to wrong position reference causing data mismatch with SI and without SI

What changes were proposed in this PR?
no need to calculate the position references after data files merge should use existed position reference column from SI table.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #4033

18 months ago[HOTFIX] Fix a random CI failure in HiveCarbonTest: 'metastore_db' already exists
haomarch [Thu, 26 Nov 2020 12:35:00 +0000 (20:35 +0800)] 
[HOTFIX] Fix a random CI failure in HiveCarbonTest: 'metastore_db' already exists

Why is this PR needed?
HiveCarbonTest will fails randomly, the exception message is as below:
Dictionary 'metastore_db' exists. However, it does not contain the expected 'service.properties' file.
The root cause maybe there is stale metastore_db dictionary in the filesystem.

What changes were proposed in this PR?
Clean the metastore_db dictionary before testcase running.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #4028

18 months ago[CARBONDATA-4056] Added global sort for data files merge operation in SI segments.
Karan980 [Tue, 24 Nov 2020 11:31:34 +0000 (17:01 +0530)] 
[CARBONDATA-4056] Added global sort for data files merge operation in SI segments.

Why is this PR needed?
Earlier global sort was not supported during data files merge operation of SI segments. So if some SI is created with global sort and value of carbon.si.segment.merge is true, it merges the data files in SI segments but disorder the globally sorted data.

What changes were proposed in this PR?
Added global sort for data files merge operation in SI segments.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #4022

18 months ago[CARBONDATA-4057] Support Complex DataType when Save DataFrame with MODE.OVERWRITE
haomarch [Tue, 24 Nov 2020 09:59:56 +0000 (17:59 +0800)] 
[CARBONDATA-4057] Support Complex DataType when Save DataFrame with MODE.OVERWRITE

Why is this PR needed?
Currently, when save dataframe with MODE.OVERWRITE, createtable will be triggered. But complex type isn't supported.
Which weaks the functionality of dataframe save in carbondata format.

What changes were proposed in this PR?
Add the converter of ARRAY/MAP/STRUCT in CarbonDataFrameWriter.convertToCarbonType

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #4021

18 months ago[CARBONDATA-4029] Fix oldTimeStamp issue in alter table add segment query.
Karan980 [Tue, 24 Nov 2020 13:43:57 +0000 (19:13 +0530)] 
[CARBONDATA-4029] Fix oldTimeStamp issue in alter table add segment query.

Why is this PR needed?
Earlier timestamp present in name of carbondata files was in nanoseconds. Currently the timestamp is in milliseconds. When old SDK file segment is added to table through alter table add segment query then it is treated as invalid block due to timestamp present in nanoseconds.

What changes were proposed in this PR?
Removed update validation for SDK written files.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #4024

18 months ago[CARBONDATA-4053] Fix alter table rename column failed when column name is "a"
jack86596 [Tue, 24 Nov 2020 02:44:25 +0000 (10:44 +0800)] 
[CARBONDATA-4053] Fix alter table rename column failed when column name is "a"

Why is this PR needed?
Alter table rename column failed because incorrectly replace the content in tblproperties by new column name, which the content is not related to column name.

What changes were proposed in this PR?
Instead of calling replace method on property value directly, first filter out the properties which related to column name, then find the matched old column name, replace it with new name.

Does this PR introduce any user interface change?
No
Is any new testcase added?
Yes

This closes #4019

19 months ago[CARBONDATA-3905] NPE due to null length while querying in Presto
akkio-97 [Wed, 4 Nov 2020 11:04:15 +0000 (16:34 +0530)] 
[CARBONDATA-3905] NPE due to null length while querying in Presto

Why is this PR needed?
Earlier the implementation of putAllByteArray() in class SliceStreamReader was added with regards to handling of complex string type columns. This method is also called in case of plain string type.
While querying plain string type the lengths may be equal to null. Hence this check has been added.

What changes were proposed in this PR?
Handled the same

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #4003

19 months ago[HOTFIX] Avoid calling SecondaryIndexUtil.readFileFooter() for every splits identifie...
ajantha-bhat [Fri, 6 Nov 2020 09:01:34 +0000 (14:31 +0530)] 
[HOTFIX] Avoid calling SecondaryIndexUtil.readFileFooter() for every splits identified during SI creation

Why is this PR needed?
1. Redundant functionality SecondaryIndexUtil.readFileFooter() exist for SI creation
2. Some info logs can be changed to debug to avoid looping.

What changes were proposed in this PR?
1. remove SecondaryIndexUtil.readFileFooter() for SI creation
2. Some info logs to debug to avoid looping.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #4006

19 months ago[maven-release-plugin] prepare for next development iteration
kunal642 [Tue, 3 Nov 2020 17:16:59 +0000 (22:46 +0530)] 
[maven-release-plugin] prepare for next development iteration

19 months ago[maven-release-plugin] prepare release apache-carbondata-2.1.0-rc2 apache-carbondata-2.1.0-rc2
kunal642 [Tue, 3 Nov 2020 17:14:54 +0000 (22:44 +0530)] 
[maven-release-plugin] prepare release apache-carbondata-2.1.0-rc2

19 months ago[CARBONDATA-4044] Fix dirty data in index file while IUD with stale data in segment...
haomarch [Tue, 13 Oct 2020 15:10:58 +0000 (23:10 +0800)] 
[CARBONDATA-4044] Fix dirty data in index file while IUD with stale data in segment folder

Why is this PR needed?
XX.mergecarbonindex and XX..segment records the indexfiles list of a segment. now, we generate xx.mergeindexfile and xx.segment  based on filter out all indexfiles(including carbonindex and mergecarbonindex), which will leading dirty data when there is stale data in segment folder.
For example, there are a stale index file in segment_0 folder, "0_1603763776.carbonindex".
While loading, a new carbonindex "0_16037752342.carbonindex" is wrote, when merge carbonindex files, we expect to only merge 0_16037752342.carbonindex, But If we filter out all carbonindex in segment folder, both "0_1603763776.carbonindex" and 0_16037752342.carbonindex will be merged and recorded into segment file.
While updating, there has same problem.

What changes were proposed in this PR?
1. IUD: merge file based on UUID(timestamp).
2. IUD: write segment file based on UUID(timestamp).
3. Update: update will generate a new segment to avoid rewrite segment file. also will rollback the new segment when update fails
4. We delete horizotal compaction processing of update delta(both carbondata files and carbonindex).
5. Clean the dead code when update write into new segment
6. Fix an update issue: The wrong update result after drop partition.

Does this PR introduce any user interface change?
Yes

Is any new testcase added?
Yes

This closes #3999

19 months ago[CARBONDATA-4006] Fix for currentUser as NULL in getcount method
Vikram Ahuja [Wed, 23 Sep 2020 07:27:58 +0000 (12:57 +0530)] 
[CARBONDATA-4006] Fix for currentUser as NULL in getcount method
during index server fallback mode

Why is this PR needed?
In case of index server fallback, Server.getRemoteUser.getShortUserName
always returns NULL. Can give null pointer exception in any generic events.

What changes were proposed in this PR?
Do not launch any generic events in case of index server fallback mode.
The behaviour is similar as getSplits and invalidateSegmentCache API's.

This closes #3952

19 months ago[CARBONDATA-4043] Fix data load failure issue for columns added in legacy store
Indhumathi27 [Wed, 21 Oct 2020 13:43:24 +0000 (19:13 +0530)] 
[CARBONDATA-4043] Fix data load failure issue for columns added in legacy store

Why is this PR needed?
When dimension is added in older versions like 1.1, by default it will be sort column.
In sort step we assume data will be coming as sort column in the beginning.
But the added column will be at last eventhough sort column. So, while building
the dataload configurations for loading data, we rearrange the columns(dimensions
and datafields) in order to bring the sort column to beginning and no-sort to last
and revert them back to schema order before FinalMerge/DataWriter step.

Issue:
Data loading is failing because of castException in data writing step in case
of NO_SORT and in final sort step in case of LOCAL_SORT.
NO_SORT:
In this flow, datafields are rearranged based on sort columns order, which is not required.
LOCAL_SORT:
During FinalMerge, we assume intermediate row data will have only sort column
data in schema order. But intermediate sort row data can contain no-dictionary
and dictionary data also. So, the information about the actual index of sort column data is insufficient.

What changes were proposed in this PR?
NO_SORT:
Update datafields based on sort columns only if the table is a sort table and sort columns are configured.
LOCAL_SORT:
Collect the sort column info from all the dimensions into a map and identify the sort column index using it and compare only sort column data in final merge.

This closes #3995

19 months ago[CARBONDATA-4034] Improve the time-consuming of Horizontal Compaction for update
shenjiayu17 [Tue, 13 Oct 2020 03:02:24 +0000 (11:02 +0800)] 
[CARBONDATA-4034] Improve the time-consuming of Horizontal Compaction for update

Why is this PR needed?
The horizontal compaction flow will be too slow when updating with lots of segments(or lots of blocks), so we try to analyze and optimize it for time-consuming problem.

What changes were proposed in this PR?
1. In performDeleteDeltaCompaction, optimize the method getSegListIUDCompactionQualified.
2. Combine two traversals of segments which have same process.
3. Use forming delete delta file name instead of listFiles operation.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #3986

19 months ago[CARBONDATA-4042]Launch same number of task as select query for insert into
Venu Reddy [Thu, 8 Oct 2020 07:16:33 +0000 (12:46 +0530)] 
[CARBONDATA-4042]Launch same number of task as select query for insert into
select and ctas cases when target table is of no_sort

Why is this PR needed?
At present, When we do insert into table select from or create table as select
from, we lauch one single task per node. Whereas when we do a simple select *
from table query, tasks launched are equal to number of carbondata
files(CARBON_TASK_DISTRIBUTION default is CARBON_TASK_DISTRIBUTION_BLOCK).

Thus, slows down the load performance of insert into select and ctas cases.
Refer [Community discussion regd. task lauch]
(http://apache-carbondata-dev-mailing-list-archive.1130556.n5.nabble.com/
Discussion-Query-Regarding-Task-launch-mechanism-for-data-load-operations-tt98711.html)

What changes were proposed in this PR?
1. Lauch the same number of tasks as in select query for insert into select and
ctas cases when the target table is of no-sort.
2. Replaced all checkAnswerWithoutSort with checkAnswer in TestSIWithSecondaryIndex
to fix random UT failure issues in that file.

This closes #3972

19 months ago[CARBONDATA-4007] Fix multiple issues in SDK_IUD
Karan980 [Wed, 7 Oct 2020 06:46:33 +0000 (12:16 +0530)] 
[CARBONDATA-4007] Fix multiple issues in SDK_IUD

Why is this PR needed?
Fix multiple issues occurred in SDK_IUD.
a) TupleId always have linux file separator independent of the system.
b) Filtered rows array size gives ArrayOutOfBound exception if number of deleted rows is greater than 4096.
c) On read, date columns were returned as integers and timestamp columns were returned as long.

What changes were proposed in this PR?
a) Changed the tupleId file separator to linux file separator.
b) Change the filtered rows size to default column page rows size.
c) Converted the date and timestamp columns to their respective forms on read.

This closes #3970

19 months ago[DOC] Adjust partition table document
QiangCai [Fri, 23 Oct 2020 07:05:36 +0000 (15:05 +0800)] 
[DOC] Adjust partition table document

Why is this PR needed?
the function description of the partitioned table is incorrect

What changes were proposed in this PR?
1. not support splitting partition
2. change "STANDARD PARTITION" to "PARTITION"

This close #3996

19 months ago[CARBONDATA-3934] Support write transactional table with presto.
akashrn5 [Mon, 16 Mar 2020 17:10:25 +0000 (22:40 +0530)] 
[CARBONDATA-3934] Support write transactional table with presto.

Why is this PR needed?
Currently we have the read support from presto which reads all primitive and complex types and partition support. Here main bottleneck is, user has to create table and load the data in spark, so its better if the user can load the transactional data from presto itself.

What changes were proposed in this PR?
This PR supports writing the trasactional data to the carbon table. This supports just the insert command, as we cant have load command here. This PR just supports the insert, there are separate jiras for partition and complex write support, i will raise separate PRs for the same.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3875

19 months ago[CARBONDATA-4027] Fix the wrong modifiedtime of loading files in insert stage
haomarch [Mon, 12 Oct 2020 01:58:58 +0000 (09:58 +0800)] 
[CARBONDATA-4027] Fix the wrong modifiedtime of loading files in insert stage

Why is this PR needed?

ISSUE1: In the insertstage flow, there is a empty file with suffix '.loading'
to mark the stage in the status of 'in processing'. We update the modifiedtime
of '.loading' file for monitoring the insertstage start time, which can be used
for calculate TIMEOUT, help to retry and recovery. Before, we use setModifiedTime
function to update the modifiedtime, which has a serious bug. For S3 file,
setModifiedTime operation do not take effect. leading to the incorrect
inserstage starttime of 'loading' file.

ISSUE2: For now, Insertstage non-parttion table will not merge index files,
which will degrade the query performance heavily.

What changes were proposed in this PR?
1. Update the modifiedtime of loading files based on recreating files.
2. Trigger indexfiles merging after insertstage non-parttiontable.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #3977

20 months ago[CARBONDATA-3979] Added Hive local dictionary support example
ShreelekhyaG [Mon, 7 Sep 2020 07:30:05 +0000 (13:00 +0530)] 
[CARBONDATA-3979] Added Hive local dictionary support example

Why is this PR needed?
To verify local dictionary support in hive.

What changes were proposed in this PR?
Added example in HiveExample class
Added testcase in HiveTest
Refactored the functions to verify local dictionary.

This closes #3914

20 months ago[CARBONDATA-4039] Support Local dictionary for Presto complex datatypes
akkio-97 [Fri, 9 Oct 2020 10:58:02 +0000 (16:28 +0530)] 
[CARBONDATA-4039] Support Local dictionary for Presto complex datatypes

Why is this PR needed?
Enable local-dictionary for presto complex types.

What changes were proposed in this PR?
As local dictionary is only supported in case of strings, while we fill primitive type - VariableLengthDimensionColumnPage is instantiated which in turn calls fillVector().

Dictionary block is created with positionCount set from batchSize whose default value is 32000. Since it is a complex primitive type its value will never get updated from CarbondataPageSource. So will have to update it during the loading of that page along with other child pages.

Calculate surrogate value for date type only in case of non-null values. Doing otherwise might cause exception in case of null values.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3987

20 months ago[Carbondata-3999] Fix permission issue of indexServerTmp directory
Karan980 [Fri, 9 Oct 2020 05:10:24 +0000 (10:40 +0530)] 
[Carbondata-3999] Fix permission issue of indexServerTmp directory

Why is this PR needed?
When dir "/indexservertmp" is not existing,then select query with
indexserver will create a dir "/indexservertmp/[queryid]" with
permission 755,and the permission of dir "/indexservertmp" is also
755,it will cause permission issue.

What changes were proposed in this PR?
When select query with indexserver,first check if the dir "/indexservertmp"
is existing,and if not,then create dir "/indexservertmp" with permission 777

This closes #3974

20 months ago[Carbondata-3954] Fix insertion from ORC table into carbon table when sort scope...
Karan980 [Mon, 12 Oct 2020 06:17:47 +0000 (11:47 +0530)] 
[Carbondata-3954] Fix insertion from ORC table into carbon table when sort scope is global sort

Why is this PR needed?
Loading records from ORC table having null values into carbon table having sort scope as global sort gives NPE.

What changes were proposed in this PR?
Added null check for arrayType and mapType before writing the data into byteArrays

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3979

20 months ago[CARBONDATA-4035]Fix MV query issue with aggregation on decimal column
akashrn5 [Wed, 14 Oct 2020 09:46:35 +0000 (15:16 +0530)] 
[CARBONDATA-4035]Fix MV query issue with aggregation on decimal column

Why is this PR needed?
When the aggregation like sum is performed on decimal column similar to MV schema query,
the user query is not getting results from MV. Since in MV schema during MV created we
prepare the plan on the query string of modular plan(modularPlan.asCompactSQL) which adds
multiple cast expression, because of which the semantic equals fails

What changes were proposed in this PR?
During MV creation, to set the query to MV schema, just use the direct query string,
instead of compactSQL.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3984

20 months ago[CARBONDATA-4032] Fix drop partition command clean data issue
haomarch [Tue, 13 Oct 2020 17:20:14 +0000 (01:20 +0800)] 
[CARBONDATA-4032] Fix drop partition command clean data issue

Why is this PR needed?
1. CREATE TABLE droppartition (id STRING, sales STRING) PARTITIONED BY (dtm STRING)STORED AS carbondata
2.
insert into droppartition values ('01', '0', '20200907'),('03', '0', '20200908'),
insert overwrite table droppartition partition (dtm=20200908) select * from droppartition where dtm = 20200907;
insert overwrite table droppartition partition (dtm=20200909) select * from droppartition where dtm = 20200907;

3. alter table droppartition drop partition (dtm=20200909)

the dirctionary "20200908" was deleted.

The rootcause: drop partition will clean stale data, but delete the parent dirctionary contains the stale data, leading to normal data loss.

What changes were proposed in this PR?
Fix this issue by limit to clean stale data, not the whole dirctionary

Does this PR introduce any user interface change?
No

Is any new testcase added?
YES

This closes #3982

20 months ago[CARBONDATA-3994] Skip Order by for map task if it is sort column and use limit pushd...
ajantha-bhat [Wed, 16 Sep 2020 10:42:20 +0000 (16:12 +0530)] 
[CARBONDATA-3994] Skip Order by for map task if it is sort column and use limit pushdown for array_contains filter

Why is this PR needed?
To improve query performance in specific scenarios these changes are proposed.

What changes were proposed in this PR?
When the order by column is in sort column, every map task output will be already sorted. No need to sort the data again.
Hence skipping the order at map task by changing plan node from TakeOrderedAndProject --> CarbonTakeOrderedAndProjectExec
Also in this scenario collecting the limit at map task and Array_contains() will use this limit value for row scan filtering to break scan once limit value is reached.
Also added a carbon property to control this .
carbon.mapOrderPushDown.<db_name>_<table_name>.column

Note: later we can improve this for other filters also to use the limit value.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3932

Co-authored-by: li36909 <369091991@qq.com>
20 months ago[HOTFIX] Fix random failure issue due to indexMerge
Indhumathi27 [Tue, 20 Oct 2020 14:01:50 +0000 (19:31 +0530)] 
[HOTFIX] Fix random failure issue due to indexMerge

Why is this PR needed?
CarbonIndexFileMerge test cases are failing randomly in CI

What changes were proposed in this PR?
Unset merge properties to default in afterALL function

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #3989

20 months ago[CARBONDATA-3889] Enable scalastyle check for all scala test code
QiangCai [Sat, 19 Sep 2020 02:05:36 +0000 (10:05 +0800)] 
[CARBONDATA-3889] Enable scalastyle check for all scala test code

Why is this PR needed?
there are many code style issues in test source code
it results in ugly code

What changes were proposed in this PR?
keep long sql if needed by using comment "// scalastyle:off lineLength"
optimize import for all scala test cases
fix code style issues

Does this PR introduce any user interface change?
No

Is any new test case added?
No

This closes #3950