carbondata.git
20 months ago[maven-release-plugin] prepare release apache-carbondata-2.1.0-rc1 apache-carbondata-2.1.0-rc1
kunal642 [Sun, 4 Oct 2020 14:12:19 +0000 (19:42 +0530)] 
[maven-release-plugin] prepare release apache-carbondata-2.1.0-rc1

20 months ago[CARBONDATA-4014] Support Change Column Comment 3947/head
haomarch [Mon, 28 Sep 2020 07:04:20 +0000 (15:04 +0800)] 
[CARBONDATA-4014] Support Change Column Comment

Why is this PR needed?
Now, we support add column comment in "CREATE TABLE" and
"ADD COLUMN". but do not support alter comment of the column,
which shall be support in 'CHANGE COLUMN'

What changes were proposed in this PR?
Support "ALTER TABLE table_name CHANGE [COLUMN] col_name
col_name data_type [COMMENT col_comment]"

Does this PR introduce any user interface change?
Yes. add CHANGE COLUMN explaination in the ddl document.

Is any new testcase added?
Yes

This closes #3960

20 months ago[CARBONDATA-4011] drop index table is failed with table not found exception
Mahesh Raju Somalaraju [Fri, 25 Sep 2020 07:13:42 +0000 (12:43 +0530)] 
[CARBONDATA-4011] drop index table is failed with table not found exception

Why is this PR needed?
drop index table is failed with table not found exception.
Passing index table name instead of main table name while creating the SI.
When creating an empty main table and empty SI table and then drop only SI table causing problem.
If we load any data into maintable then the same field is updating in table refresh flow. But currently, we have not loaded data into tables, we just create table and then dropping hence the issue.
Problem code:

     val indexTableMeta = new IndexMetadata(indexTableName, true, carbonTable.getTablePath)

What changes were proposed in this PR?
Pass the main table name instead of index table name while creating the index metadata in SI creation flow.
Fixed code:

     val indexTableMeta = new IndexMetadata(mainTableName, true, carbonTable.getTablePath)

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3957

20 months ago[CARBONDATA-4009] Fix PartialQueries not hitting mv
Indhumathi27 [Thu, 24 Sep 2020 16:45:37 +0000 (22:15 +0530)] 
[CARBONDATA-4009] Fix PartialQueries not hitting mv

Why is this PR needed?
If a MV having aggregation, is created with all columns present in main table,
then some partial-queries are not hitting mv.

What changes were proposed in this PR?
When all columns are given in projection in a aggregate query, logical plan
will not have Project node. Added Project node to logical plan in this case,
to match partialqueries also to mv. In GroupByGroupByNochildData pattern,
added check for checking CAST(aggregate expression) and used group by result
to get final compensation result

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3955

21 months ago[CARBONDATA-4005] SI with cache level blocklet issue
ShreelekhyaG [Tue, 22 Sep 2020 13:04:28 +0000 (18:34 +0530)] 
[CARBONDATA-4005] SI with cache level blocklet issue

Why is this PR needed?
Select query on SI column returns blank resultset after changing the cache
level to blocklet

What changes were proposed in this PR?
In case of CACHE_LEVEL = BLOCKLET, blockId path contains both block id and
blocklet id. In getShortBlockId , added check for blocklet id file seperator
and made change to replace only the compressor name.
Added example in testcase.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3951

21 months ago[CARBONDATA-4002] Fix removal of columns from table schema.
Karan980 [Tue, 22 Sep 2020 07:12:36 +0000 (12:42 +0530)] 
[CARBONDATA-4002] Fix removal of columns from table schema.

Why is this PR needed?
When we change the value of sort_columns property and then perform
an alter table query to unset long_string_columns. It results in
removal of columns from table schema.

What changes were proposed in this PR?
Added fix to avoid removal of columns from table schema.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3946

21 months ago[CARBONDATA-3996]Fixed show table extended like command exception
Venu Reddy [Fri, 18 Sep 2020 15:50:35 +0000 (21:20 +0530)] 
[CARBONDATA-3996]Fixed show table extended like command exception

Why is this PR needed?
Show table extended like command throws java.lang.ArrayIndexOutOfBoundsException.
Same showTablesCommand class is used for show tables command and show table
extended like command from spark. The output attributes for show tables command
and show table extended like command are 3 and 4 respectively.
CarbonShowTablesCommand class handles for show tables with 3 output attributes.
Thus have exception when show table extended like command is executed.

What changes were proposed in this PR?
Instead of carbondata querying from session catalog and forming the output rows,
can call showTablesCommand.run(sparkSession), get the output rows for tables and
filter out rows corresponding to MV tables.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3938

21 months ago[CARBONDATA-4000] Presto select query failure right after firing update query.
akkio-97 [Mon, 21 Sep 2020 09:11:07 +0000 (14:41 +0530)] 
[CARBONDATA-4000] Presto select query failure right after firing update query.

Why is this PR needed?
The putObject() method implementation was missing due to which select query on struct complex data type after update queries were failing.

What changes were proposed in this PR?
Added implementation in ColumnarVectorWrapperDirectWithDeleteDelta. Earlier without this implementation control went to its parent class AbstractCarbonColumnarVector,java which was unsupported.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #3943

21 months ago[CARBONDATA-3998] Fixed file not found exception for hive during insert
kunal642 [Mon, 21 Sep 2020 11:34:20 +0000 (17:04 +0530)] 
[CARBONDATA-3998] Fixed file not found exception for hive during insert

Why is this PR needed?
FileNotFoundException being thrown in hive during insert.

What changes were proposed in this PR?
During insert the path in the parameters for write is for staging directory,
because carbon is non-native table therefore this directory does not exist.
When getAbsolutePath is called on this directory, it throws FileNotFound
exception. Removed the getAbsolutePath call to avoid this.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #3941

21 months ago[CARBONDATA-3997] Fix decimal value reading issue for negative decimal
ajantha-bhat [Mon, 21 Sep 2020 05:42:00 +0000 (11:12 +0530)] 
[CARBONDATA-3997] Fix decimal value reading issue for negative decimal
numbers from presto

Why is this PR needed?
Reading negative decimal numbers gives the wrong value from presto.

What changes were proposed in this PR?
When complex decimal column is stored with DIRECT_COMPRESS codec,
DataTypeUtil#bigDecimalToByte is used to create a byte array. So, while
decoding it, need to use DataTypeUtil#byteToBigDecimalto get back the original value.
Originally added a TODO to find what is happening at write step for
decimal, handled as part of this issue.

This closes #3940

21 months ago[CARBONDATA-4001] Fix SI global sort load on partition table
ajantha-bhat [Mon, 21 Sep 2020 13:26:39 +0000 (18:56 +0530)] 
[CARBONDATA-4001] Fix SI global sort load on partition table

Why is this PR needed?
On a partition table, when SI is created with global sort and
when data is loaded. It shows 0 rows as main table query results is 0 rows.

What changes were proposed in this PR?
For partition table, local sort SI flow current.segmentfile
is set in CarbonSecondaryIndexRDD
For the global sort, this value was not set. so, the main table
query was resulting in 0 rows. Setting this value for global sort flow also.

This closes #3944

21 months ago[CARBONDATA-3995] Support presto querying older complex type stores 3930/head
ajantha-bhat [Fri, 18 Sep 2020 07:11:45 +0000 (12:41 +0530)] 
[CARBONDATA-3995] Support presto querying older complex type stores

Why is this PR needed?
Before carbon 2.0, complex child length is stored as SHORT for string,
varchar, binary, date, decimal types.
So, In 2.0 as it is stored as INT, presto complex query code always
assumes it as INT and goes to out of bound exception when old store is queried.

What changes were proposed in this PR?
If INT_LENGTH_COMPLEX_CHILD_BYTE_ARRAY encoding is present, parse as
INT, else parse as SHORT. so, that both stores can be queried.

This closes #3937

21 months ago[CARBONDATA-3914] Fixed exception on reading data from carbon-hive empty table.
Nihal ojha [Thu, 17 Sep 2020 14:33:08 +0000 (20:03 +0530)] 
[CARBONDATA-3914] Fixed exception on reading data from carbon-hive empty table.

Why is this PR needed?
Reading data from empty carbontable through hive beeline was giving 'Unable read Carbon Schema' exception when no data is present in the carbon table. In case of empty table, some additional fields are present in the columns. And also schema is comma-separated which we are expecting to be colon-separated.

What changes were proposed in this PR?
Return the empty data if no data is present. Validated the columns and column types and removed, if any extra field was added. Also parsed the schema in such a way that it can consider comma-separated values also.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3936

21 months ago[CARBONDATA-3990] Fix DropCache log error when indexmap is null on SI table
Indhumathi27 [Tue, 15 Sep 2020 06:39:04 +0000 (12:09 +0530)] 
[CARBONDATA-3990] Fix DropCache log error when indexmap is null on SI table

Why is this PR needed?
1. DropCache on Maintable having SI throws NPE in error log, when refreshRequired
for SI table Schema is false.
2. While direct upgrading store to current version for tables having SI, query
fails with NPE, as indexProperties is null.

What changes were proposed in this PR?
1. Check if indexMetadata has indexmap or not, in case of index table, this value
will be null or empty. if null, return empty list.
2. If indexProperties is null in case of compatibility scenarios, prepare
indexProperties from indexColumns
3. Removed throwable in warning message on listFiles

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #3928

21 months ago[CARBONDATA-3891] Fix loading data will update all segments updateDeltaEndTimestamp
IceMimosa [Mon, 20 Jul 2020 15:08:40 +0000 (23:08 +0800)] 
[CARBONDATA-3891] Fix loading data will update all segments updateDeltaEndTimestamp

Why is this PR needed?
Loading Data to the partitioned table will update all segments updateDeltaEndTimestamp,that will cause the driver to clear all segments cache when doing the query.

What changes were proposed in this PR?
update only the current insert overwrite segment.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3848

21 months ago[CARBONDATA-3942] Fix type cast when loading data into partitioned table
IceMimosa [Thu, 6 Aug 2020 08:32:33 +0000 (16:32 +0800)] 
[CARBONDATA-3942] Fix type cast when loading data into partitioned table

Why is this PR needed?
Loading Int type data to carbondata double type, the value will be broken like this:

+---+----+
|cnt |time|
+---+----+
|4.9E-323|2020|
|1.0E-322|2020|
+---+----+

original cnt value is: 10, 20

What changes were proposed in this PR?
handle cast for partition table

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3884

21 months ago[CARBONDATA-3981] Presto filter check on binary, byte and float datatypes
akkio-97 [Thu, 10 Sep 2020 16:05:22 +0000 (21:35 +0530)] 
[CARBONDATA-3981] Presto filter check on binary, byte and float datatypes

Why is this PR needed?
Due to the absence of binary, byte and float datatypes check, there were either empty results or a problem during object serialisation in presto filter queries.

What changes were proposed in this PR?
Above datatype conversions and checks has been added in prestoFIlterUtil.java

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3920

21 months ago[CARBONDATA-3989] Fix unnecessary segment files creation when segment is neither...
akashrn5 [Mon, 7 Sep 2020 09:59:32 +0000 (15:29 +0530)] 
[CARBONDATA-3989] Fix unnecessary segment files creation when segment is neither updated nor deleted.

Why is this PR needed?
Unnecessary segment file is created for the segment, even though the segment is neither updated nor deleted.
Once the segment files are merged, old segment files are still present and will keep on increasing until clean files is fired.

What changes were proposed in this PR?
Create the new segment files only when the segment is updated or deleted data.
once the segment file merge is done, delete the old segment files to avoid many segment files in the metadata directory.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #3927

21 months ago[CARBONDATA-3984] compaction on table having range column after altering datatype...
Karan980 [Sun, 13 Sep 2020 18:21:22 +0000 (23:51 +0530)] 
[CARBONDATA-3984] compaction on table having range column after altering datatype from string
to long string fails

Why is this PR needed?
Fix multiple issues occurred after altering the column dataType to long_string_column.
a) When dataType of a String column which is also provided as range column in table properties
is altered to long_string_column. It throws following error while performing compaction on the
table.
VARCHAR not supported for the filter expression;
b) When longStringColumn name is present in UpperCase then Validation check for SortColumns
fails. As names of SortColumns are present in LowerCase.

What changes were proposed in this PR?
a) Added condition for VARCHAR datatype in all conditional expressions.
b) Changed the long_string_columns name to lowerCase before doing validation.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3923

21 months ago[CARBONDATA-3986] Fix multiple issues during compaction and concurrent scenarios
ajantha-bhat [Wed, 29 Jul 2020 08:20:08 +0000 (13:50 +0530)] 
[CARBONDATA-3986] Fix multiple issues during compaction and concurrent scenarios

Why is this PR needed?
Fix multiple issues during compaction and concurrent scenarios
a) Auto compaction/multiple times minor compaction is called, it was considering
compacted segments and coming compaction again ad overwriting the files and segments
b) Minor/ auto compaction should skip >=2 level segments, now only skipping =2 level
segments
c) when compaction failed, no need to call merge index
d) At executor, When segment file or table status file failed to write during merge
index event, need to remove the stale files.
e) during partial load cleanup segment folders are removed but segment metadata files
were not removed
f) Some table status retry issues
g) BlockIndex was not checking for empty partition

What changes were proposed in this PR?
a) Auto compaction/minor compaction consider only SUCCESS or PARTIAL_SUCCESS Segments
b) Minor/ auto compaction should skip >=2 level segments
c) when compaction failed, no need to call merge index
d) At executor, When segment file or table status file failed to write during merge
index event, Remove the stale files.
e) During partial load cleanup segment metadata files also need to be removed
f) add retry to table status
g) BlockIndex need to check for empty partition

Does this PR introduce any user interface change?
No

Is any new testcase added?
No [as mostly concurrent scenarios]

This closes #3871

21 months ago[CARBONDATA-3983] Fix SI compatability issue after tupleID format changed
ShreelekhyaG [Fri, 11 Sep 2020 09:36:06 +0000 (15:06 +0530)] 
[CARBONDATA-3983] Fix SI compatability issue after tupleID format changed

Why is this PR needed?
Read from maintable having SI returns empty resultset when SI is stored with
old tuple id storage format.

What changes were proposed in this PR?
Checked if blockletPath contains old tuple id format, and convert it to
compatible format.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No, tested in cluster

This closes #3922

21 months ago[CARBONDATA-3980] Load fails with aborted exception when Bad records action is unspec...
ShreelekhyaG [Thu, 10 Sep 2020 11:00:05 +0000 (16:30 +0530)] 
[CARBONDATA-3980] Load fails with aborted exception when Bad records action is unspecified

Why is this PR needed?
Load fails with aborted exception when Bad records action is unspecified.

When the partition column is loaded with a bad record value, load fails with 'Job aborted' message in cluster. However in complete stack trace we can see the actual error message. (Like, 'Data load failed due to bad record: The value with column name projectjoindate and column data type TIMESTAMP is not a valid TIMESTAMP type')

What changes were proposed in this PR?
Fix bad record error message for the partition column. Added the error message to operationContext map and if its not null throwing exception with errorMessage from CarbonLoadDataCommand.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3919

21 months ago[CARBONDATA-3928] Removed records from exception message.
Nihal ojha [Fri, 11 Sep 2020 07:31:37 +0000 (13:01 +0530)] 
[CARBONDATA-3928] Removed records from exception message.

    Why is this PR needed?
    Currently, when the string length exceeds 32000 and bad record action as default then
    records are thrown in exception message which violates security concern.

    What changes were proposed in this PR?
    Removed the records from exception message and only printed in logger file and redirected csv file.

    Does this PR introduce any user interface change?
    No

    Is any new testcase added?
    Yes

This closes #3921

21 months ago[CARBONDATA-3793]Fix update and delete issue when multiple partition columns are...
akashrn5 [Fri, 4 Sep 2020 05:52:06 +0000 (11:22 +0530)] 
[CARBONDATA-3793]Fix update and delete issue when multiple partition columns are present and clean files issue

Why is this PR needed?
1. After #3837 , when there are multiple partition columns are present in table,
update and delete not happening as , it was considering the tuple id as external
segment tuple ID , Because when multiple partitions are present TID contains # character.
2. when multiple segments are present, and some segments are updated, and clean
files delete the segment files of non updated segments considering as stale files.

What changes were proposed in this PR?
1. To double check for external segment, check if the segment metadata details has path is not null.
2. delete the old segment files of only the updated segments.

This closes #3911

21 months ago[CARBONDATA-3982] Use Partition instead of Span to split legacy and
Indhumathi27 [Thu, 10 Sep 2020 09:31:12 +0000 (15:01 +0530)] 
[CARBONDATA-3982] Use Partition instead of Span to split legacy and
non-legacy segments for executor distribution in indexserver

Why is this PR needed?
When we use segments.span to split legacy segments and non-legacy
segments where legacy segment index size is zero, segments list is empty.

What changes were proposed in this PR?
Use segments.partition instead of span to split legacy segments and non-legacy segments

This closes #3918

21 months ago[CARBONDATA-3967] cache partition on select to enable faster pruning
kunal642 [Thu, 27 Aug 2020 09:27:04 +0000 (14:57 +0530)] 
[CARBONDATA-3967] cache partition on select to enable faster pruning

Why is this PR needed?
spark's getPartition method can sometime take a lot of time which can degrade the performance for the queries.

What changes were proposed in this PR?
Cache the partition on each load and query so that the subsequent queries can perform faster. Caching is done under the expiring map interface so the cache expiration time can work for this also.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3908

21 months ago[CARBONDATA-3974] Improve partition purning performance in presto carbon integration
ajantha-bhat [Fri, 4 Sep 2020 17:04:19 +0000 (22:34 +0530)] 
[CARBONDATA-3974] Improve partition purning performance in presto carbon integration

Why is this PR needed?
a) For 200K segments table in cloud, presto partition query was taking
more than 5 hours. the reason is it was reading all segment files for
partition pruning. Now it is less than a minute !
b) If the query filter is < or > or more than one value.
Partition pruning is not working in presto.
c) prestodb profile compilation is broken from previous PR

What changes were proposed in this PR?
a) HiveTableHandle already have partition spec, matching for the filters
(it has queried metastore to get all partitions and pruned it). So, create
partitionSpec based on that. Also handled for both prestodb and prestosql
b) #3885 , broke prestodb compilation, only prestosql is compiled.
c) #3887, also didn't handled prestodb

This closes #3913

21 months ago[CARBONDATA-3922] Support order by limit push down for secondary index queries
ajantha-bhat [Thu, 23 Jul 2020 12:10:19 +0000 (17:40 +0530)] 
[CARBONDATA-3922] Support order by limit push down for secondary index queries

Why is this PR needed?
a) Limit pushdown for SI is already supported. But when order by column is
not SI column, Still we were pushing down limit. Need to fix it.
b) when Limit is present and order by column and all the filter column is
SI column. we can pushdown order by + limit.
This can reduce SI output results and reduce the scan time in main table.
c) SI transformation rule is applied even though any relation don't contain SI

What changes were proposed in this PR?
a) Block limit push down if order by column is not an SI column
b) when Limit is present and order by column and all the filter column is
SI column, pushdown order by + limit
c) SI transformation rule need to apply only when any relation contains SI

This closes #3861

21 months ago[CARBONDATA-3961] Reorder filter expression based on storage ordinal
kunal642 [Wed, 26 Aug 2020 08:13:47 +0000 (13:43 +0530)] 
[CARBONDATA-3961] Reorder filter expression based on storage ordinal

Why is this PR needed?
Currently the filter is being executed in the user specified order, which may be different than the storage order. This can cause a lot of backward seek in cloud storage solutions resulting in slower performance.

What changes were proposed in this PR?
Reorder the filter according to the column storage ordinal.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3902

21 months ago[CARBONDATA-3969] Fix Deserialization issue with DataType class
Indhumathi27 [Tue, 1 Sep 2020 12:16:11 +0000 (17:46 +0530)] 
[CARBONDATA-3969] Fix Deserialization issue with DataType class

Why is this PR needed?
When DataType(For eg, StringType) object is serialized and deserialized using Gson, DataType object after deserialization, gets changed to Main class (DataType) instance instead of child type(StringType in this example).

Because of this, presto query on table with complex columns fails with NPE, because while filing DimensionAndMeasureDetails(SegmentProperties.fillDimensionAndMeasureDetails) from CarbonLocalInputSplit.getDetailInfo, list of child dimensions will be left unfilled for Parent Carbon Dimension.

What changes were proposed in this PR?
Override JsonDeserializer method for DataType and deserialize the jsonObject based on its DataType child class instance.
Add registerTypeAdapter for DataType class to gsonObject, while deserializing carbonLocalInputSplit.detailInfo.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3910

21 months ago[CARBONDATA-3923] support global sort for SI
ajantha-bhat [Thu, 4 Jun 2020 12:57:04 +0000 (18:27 +0530)] 
[CARBONDATA-3923] support global sort for SI

Why is this PR needed?
Secondary index is always created with local sort, should support
global sort, it can improve SI lookup performance.

What changes were proposed in this PR?
support sort_scope and global_sort_partitions in create index property.

This closes #3787

21 months ago[CARBONDATA-3865] Implementation of delete/update feature in carbondata SDK.
Karan-c980 [Tue, 14 Apr 2020 19:07:42 +0000 (00:37 +0530)] 
[CARBONDATA-3865] Implementation of delete/update feature in carbondata SDK.

Why is this PR needed?
Currently carbondata SDK doesn't provide delete/update feature.
This PR will supports carbondata SDK to delete/update of records from carbondata files

What changes were proposed in this PR?
With the help of this PR carbondata SDK will support delete/update features.

This closes #3834

21 months ago[CARBONDATA-3855] Support carbon SDK to load data from different files
Nihal ojha [Fri, 26 Jun 2020 09:06:25 +0000 (14:36 +0530)] 
[CARBONDATA-3855] Support carbon SDK to load data from different files

Why is this PR needed?
    Currently, carbon SDK doesn't support loading the data from Parquet, ORC, CSV, AVRO, or JSON file. Loading of these types of files is supported by the spark-SQL library. This PR will support carbon   SDK to load data from Parquet, Avro, CSV, and ORC file.

What changes were proposed in this PR?
    With the help of this PR now carbon can load data from different types of files as mentioned above. Loading of these types of files is possible in different ways like carbon can load a single file at a given path or it can load all the files under the given directory or load only selected files under the given directory. In case of loading the multiple files, it is must that schema of all the files should same and all files are of the same type either Parquet, ORC, Avro, CSV, or JSON.

Does this PR introduce any user interface change?
    No

Is any new testcase added?
    Yes

This closes #3819

21 months ago[CARBONDATA-3964] Fixed, null pointer excption for select query and time zone depende...
Nihal ojha [Thu, 27 Aug 2020 08:28:29 +0000 (13:58 +0530)] 
[CARBONDATA-3964] Fixed, null pointer excption for select query and time zone dependent test
failures.

Why is this PR needed?
1. In case of 1 million record and 500 segments select query without filter is thowing null
pointer exception.
2. Currently some testcases are failing releated to timestamp and time zone.

What changes were proposed in this PR?
1. Select query without filter should execute pruneWithoutFilter method rather than
pruneWithMultiThread. Added null check for filter.
2. According to timezone version releases for Java we have different DST rule for different
JRE version. In this PR we have Changed the testcase timezone and date to be compatible.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #3905

21 months ago[CARBONDATA-3968]Added test cases for hive read complex types and handled other issues
akkio-97 [Thu, 27 Aug 2020 20:29:02 +0000 (01:59 +0530)] 
[CARBONDATA-3968]Added test cases for hive read complex types and handled other issues

Why is this PR needed?
Handled issues related to reading of byte, varchar and decimal types.
Map of primitive type with only one row inserted had issues.
Added test cases for hive read complex types.

What changes were proposed in this PR?
Byte datatype check was not present.
Varchar and decimal types were causing a problem during conversion from hive
datatypes to carbon(due to the presence of parentheses).
Handled map parser issue.
Added test cases for all primitive types excluding - binary datatype.

This closes #3906

21 months ago[CARBONDATA-3959] Added new property to set the value of executor
Karan980 [Mon, 17 Aug 2020 13:16:53 +0000 (18:46 +0530)] 
[CARBONDATA-3959] Added new property to set the value of executor
LRU cache size to 70% of the total executor memory in IndexServer,
if executor LRU cache size is not configured

Why is this PR needed?
This PR will set executor LRU cache memory to 70% of executor memory
size, if it is not configured.

What changes were proposed in this PR?
Added new property to set executor LRU cache size to 70%

This closes #3893

21 months ago[CARBONDATA-3957] Added property to enable disable the repair logic
Vikram Ahuja [Tue, 18 Aug 2020 06:42:03 +0000 (12:12 +0530)] 
[CARBONDATA-3957] Added property to enable disable the repair logic
and provide a limit to number of segments in SILoadEventListenerForFailedSegments

Why is this PR needed?
In the main table with SI tables after every load/insert command ,
SILoadEventListenerForFailedSegments.scala checks for missing segments or
segments mismatch in SI table and loads the missing/deleted segments to the SI
table. In case when there are very large number of missing segments in the SI
table(10000's), the repair logic will run for multiple days and will thus block the next load.

What changes were proposed in this PR?
The above mentioned issue is solved using 2 carbon properties.

1. carbon.load.si.repair- This property lets the user enable/disable the repair
SI logic in SILoadEventListenerForFailedSegments. The default value of this property is true.
2. carbon.si.repair.limit - This property decides the number of failed segments that
are being loaded again in the SI table in SILoadEventListenerForFailedSegments.
By default repairing all the segments. Instead of repairing all the segments in one
load the user can now set a limit thus not blocking the next load for the in case
of large number of missing SI segments.

This closes #3894

21 months ago[CARBONDATA-3916] Support array complex type with SI
Indhumathi27 [Thu, 21 May 2020 09:36:52 +0000 (15:06 +0530)] 
[CARBONDATA-3916] Support array complex type with SI

Why is this PR needed?
Currently, SI supports only dimension columns as index columns. This PR will support creating index with array data type.

What changes were proposed in this PR?
Support SI with array type
Store ARRAY type as STRING type internally, by storing data as flattened.
Currently, only one level of complex type is supported. Nested types will be supported in future PR
Support query on complex type, by rewriting the filter expression

This closes #3778

21 months ago[CARBONDATA-3960] Default comment should be null when adding columns
QiangCai [Tue, 25 Aug 2020 11:05:07 +0000 (19:05 +0800)] 
[CARBONDATA-3960] Default comment should be null when adding columns

Why is this PR needed?
1. column comment is an empty string by default when adding a column
2. there are too many redundancy codes

What changes were proposed in this PR?
1. change default column comment to null
2. re-factory code

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3898

21 months ago[CARBONDATA-3956] Reindex command on SI table
Vikram Ahuja [Wed, 29 Jul 2020 12:31:04 +0000 (18:01 +0530)] 
[CARBONDATA-3956] Reindex command on SI table

Why is this PR needed?
In the main table with SI tables after every
load/insert command , SILoadEventListenerForFailedSegments.scala
checks for missing segments or segments mismatch in SI table
and loads the missing/deleted segments to the SI table.
This functionality is dependent on the load/insert command.
A new functionality/command is required so that this repair
logic can be made independent to the load/insert logic.

What changes were proposed in this PR?
Added a separate SQL reindex command(reindex [index_table]
on table maintable) to call the SI repair logic without load/insert.

This closes #3873

21 months ago[CARBONDATA-3820] CDC update as new segment use target table's sort_scope
ajantha-bhat [Wed, 26 Aug 2020 07:30:25 +0000 (13:00 +0530)] 
[CARBONDATA-3820] CDC update as new segment use target table's sort_scope

Why is this PR needed?
Originally when CDC is developed, it was using target table sort_scope for new segment added but

What changes were proposed in this PR?
CDC update as new segment should use target table sort_scope

Does this PR introduce any user interface change?
No

Is any new testcase added?
No (verified manually the flows)

This closes #3901

21 months ago[CARBONDATA-3963]Fix hive timestamp data mismatch issue and empty data during query...
akashrn5 [Wed, 26 Aug 2020 08:53:58 +0000 (14:23 +0530)] 
[CARBONDATA-3963]Fix hive timestamp data mismatch issue and empty data during query issue

Why is this PR needed?
1. when carbon table is queried through beeline, gives empty data.
2. the timestamp data given by carbon table is different than hive table.
Because during read we used to send the Timestamp value to WritableTimestampObjectInspector's
create method, which basically was converting the value to EpochMillli, which resulted in the
time value go different than the actual input data.

What changes were proposed in this PR?
1. Pass the carbon storage_handler into the table parameters
2. Convert the the long value to formatted string and directly form the TimestampWritableV2,
by passing the Hive's Timestamp object which avoid EpochMilli and gives the proper data as output.

This closes #3903

21 months ago[CARBONDATA-3830] Support Array and Struct of all primitive type reading from presto
ajantha-bhat [Thu, 13 Aug 2020 16:35:15 +0000 (22:05 +0530)] 
[CARBONDATA-3830] Support Array and Struct of all primitive type reading from presto

Why is this PR needed?
Currently, presto cannot read complex data type stores. Sometimes it gives empty results and some times exception.

What changes were proposed in this PR?
Supported all the 13 complex primitive types (including binary, refer the testcase added) with non-nested array and struct data type

Supported complex type in Direct vector filling flow :
Currently, spark integration carbondata will use row level filling for complex type instead of vector filling. But presto supports only vector reading. so need to support complex type in vector filling.

Supported complex primitive vector handling in DIRECT_COMPESS, ADAPTIVE_CODEC flows
Encoding of all the complex primitive type is either DIRECT_COMPESS or ADAPTIVE_CODEC, it will never use a legacy encoding. so, because of this string, varchar (with/without local dictionary), binary, date vector filling need to handle in DIRECT_COMPESS. Parent column also comes as DIRECT_COMPESS. Extracted data from parent column page here.

Supported vector stack in complex column vectorInfo to store all the children vectors.

Keep a list of children vector inside CarbonColumnVectorImpl.java

Support ComplexStreamReader to fill presto ROW (struct) block and ARRAY block.

Handle null value filling by wrapping children vector with ColumnarVectorWrapperDirect

Limitations / next work:
Some pending TODO 's are,

Local dictionary need to handle for string / varchar columns as DIRECT_COMPRESS flow don't have that handling
Can support map of all primitive types
Can support multilevel nested arrays and struct

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes [Added test case for all 13 primitive type with array and struct, null values and more than one page data]

This closes #3887

Co-authored-by: akkio-97 <akshay.nuthala@gmail.com>
21 months ago[CARBONDATA-3962]Remove unwanted empty fact directory in case of flat_folder table
akashrn5 [Wed, 26 Aug 2020 11:46:09 +0000 (17:16 +0530)] 
[CARBONDATA-3962]Remove unwanted empty fact directory in case of flat_folder table

Why is this PR needed?
In case of flat folder, we write the data files directly at table path,
so fact dir is not required. Fact dir is unwanted and present as empty dir.

What changes were proposed in this PR?
Remove empty fact dirs

This closes #3904

21 months ago[CARBONDATA-3955] Fix load failures due to daylight saving time changes
ShreelekhyaG [Tue, 18 Aug 2020 13:01:12 +0000 (18:31 +0530)] 
[CARBONDATA-3955] Fix load failures due to daylight saving time changes

Why is this PR needed?
1. Fix load failures due to daylight saving time changes.
2. During load, date/timestamp year values with >4 digit should fail or
be null according to bad records action property.

What changes were proposed in this PR?
New property added to setLeniet as true and parse timestampformat.
Added validation for timestamp range values.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3896

21 months ago[HOTFIX] Avoid cleaning segments after reading tablestatus failed
QiangCai [Tue, 25 Aug 2020 13:11:39 +0000 (21:11 +0800)] 
[HOTFIX] Avoid cleaning segments after reading tablestatus failed

Why is this PR needed?
1. After reading tablestatus file failed, method TableProcessingOperations.
deletePartialLoadDataIfExist will delete all related segments.
2. If the tablestatus file was removed, the system will delete all original
segment before loading.

What changes were proposed in this PR?
1. check the result of reading tablestatus file, if it is empty, no need to process.
2. if the table status was removed, the system shouldn't delete any segment.
3. re-factory code to avoid invoking getAbsolutePath method too many times.

This closes #3899

21 months ago[CARBONDATA-3929] Improve CDC performance
akashrn5 [Thu, 28 May 2020 18:38:25 +0000 (00:08 +0530)] 
[CARBONDATA-3929] Improve CDC performance

Why is this PR needed?
This PR is to improve the CDC merge performance. CDC is currently very slow in the case of full outer joins and slow in normal cases. Identified pain points are as below:
1. currently we are writing the intermediate delete data to carbon format, which is the columnar format, and we do a full scan which is slow. Here since intermediate, we do full scan, compression, columnar format, its all-time taking.
2. Full outer join case is very slow.
3. when we insert new data into new segments, we follow the old insert flow with the converter step.
4. since we write the intermediate data carbon format, we use coalesce to limit the partition to number of active executors.

What changes were proposed in this PR?
Some improvements points are identified as below
1. Write the intermediate data to a faster row format like Avro.
2. use bucketing on join column and do the repartition of the Dataframe before performing the join operation, which avoids the shuffle on one side as shuffle is major time consuming part in join.
3. make the insert flow to the new flow without the converter step.
4. remove coalesce and can use resource to write the intermediate Avro data in a faster way.

Performance results
DataSize -> 2GB target table data
230MB source table data
InnerJoin case - around 17000+ deleted rows, 70400 odd updated rows
Full outer Join case - 2million target data, 0.2million src data, 70400 odd rows updated and some deleted
                Old Time(sec)         New Time(sec)
Join Type 1st time query 2nd time query 1st time query 2nd time query
Inner Join 20       9.6      14       4.6
Full Outer Join 43       17.8     26       7.7

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3856

21 months ago[CARBONDATA-3958] Avoid blocking the loading task when the output queue poll timeout
QiangCai [Mon, 24 Aug 2020 08:15:54 +0000 (16:15 +0800)] 
[CARBONDATA-3958] Avoid blocking the loading task when the output queue poll timeout

Why is this PR needed?
In some cases, the CDC merge tasks are blocked when data loading uses
CarbonTableOutputFormat.getRecordWriter method. PR #3856 change the code to avoid using
CarbonTableOutputFormat.getRecordWriter, CDC merge will not happen this issue again.
But this issue maybe happen in other similar scenarios.

Because the poll method of the queue is time out in some cases, so the row batch in
the queue will not be polled again.

After the queue is full, the queue blocks the writing task puts a new batch. Even if
the queue is not full, it will also lose the row batch in the queue.

What changes were proposed in this PR?
If the output is not closed, it will poll a row batch in the loops till it gets a not
null batch.
If the output is closed, it will break the loop.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #3897

21 months ago[CARBONDATA-3889] Enable scala check style
QiangCai [Fri, 14 Aug 2020 08:50:33 +0000 (16:50 +0800)] 
[CARBONDATA-3889] Enable scala check style

Why is this PR needed?

scala style checking is not working during compile and IntelliJ IDEA does not use the scala style config in the dev folder.
Intellij IDEA sort import with different order
What changes were proposed in this PR?

move scalastyle-config.xml to the parent project folder.
a) IntelliJ IDEA will show the style error during coding.
b) Fix scala style issue which the scala style checking report during maven compile.
change java-code-format-template.xml to sort import as Scalastyle.
Does this PR introduce any user interface change?

No
Is any new testcase added?

No

This closes #3891

22 months ago[CARBONDATA-3915] Correction in the documentation for spark-shell
akkio-97 [Tue, 28 Jul 2020 05:43:57 +0000 (11:13 +0530)] 
[CARBONDATA-3915] Correction in the documentation for spark-shell

Why is this PR needed?
Data load fails because the spark-shell code uses carbonSessions instead of carbonExtensions.

What changes were proposed in this PR?
Have made use of carbonExtensions.

This closes #3866

22 months ago[CARBONDATA-3933]Fix DDL/DML failures after table is created
akashrn5 [Fri, 24 Jul 2020 06:20:20 +0000 (11:50 +0530)] 
[CARBONDATA-3933]Fix DDL/DML failures after table is created
with column names having special characters like #,\,%

Why is this PR needed?
when operations like insert,describe, select is fired after
table is created with column names having special characters,
operations fails. This is because after table creation spark already
stred the column names with special characters correctly,
bt for further operations we try to update the metastore/refresh
with new schema parts which is unnecessary which causes this issue.

What changes were proposed in this PR?
We use unnecessary API to update the serde properties of table by
calling spark-sql, this was required when we used to support the
spark-2.1 and 2.2 version when spark was not supporting many alter
table operations. Now since we use other APIs to alter the table,
these API calls are not necessary. So once we remove we in turn
avoid updating the serde properties with the modified schema parts which solves this issue.

This closes #3862

22 months ago[CARBONDATA-3946] Support IndexServer with Presto Engine
Indhumathi27 [Thu, 6 Aug 2020 12:03:36 +0000 (17:33 +0530)] 
[CARBONDATA-3946] Support IndexServer with Presto Engine

Why is this PR needed?
Currently, when indexserver is enabled with presto, query will through NPE

What changes were proposed in this PR?
Use Config from Job to get index server client
Get QueryId from Presto and set it to indexFormat

This closes #3885

22 months ago[CARBONDATA-3928] Handled the Strings which length is greater than 32000 as a bad...
Nihal ojha [Mon, 27 Jul 2020 11:40:04 +0000 (17:10 +0530)] 
[CARBONDATA-3928] Handled the Strings which length is greater than 32000 as a bad record.

Why is this PR needed?
Currently, when the string length exceeds 32000 then the load is failed. The particular
record should be handled as a bad record and load should not be failed.

What changes were proposed in this PR?
At place of throwing exception in case of strings greater than 32000 bytes now we will
handle as a bad record and load will not fail.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3865

22 months ago[CARBONDATA-3925] flink write carbon file to hdfs when file size is less than 1M...
xiaoyu [Sat, 15 Aug 2020 07:46:23 +0000 (15:46 +0800)] 
[CARBONDATA-3925] flink write carbon file to hdfs when file size is less than 1M,can't write

Why is this PR needed?
write carbon file less than 1M , less than configured minimum value (dfs.namenode.fs-limits.min-block-size) 1M ;can't write hdfs file

What changes were proposed in this PR?
the default block size is set 1024 byte and compare with file size;when
file size big than 1KB but less than 1M ,can not write file to hdfs ;so
set default block size to 2MB

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #3892

22 months ago[CARBONDATA-3927]Remove unwanted fields from tupleID to make it
akashrn5 [Sun, 12 Jul 2020 15:53:23 +0000 (21:23 +0530)] 
[CARBONDATA-3927]Remove unwanted fields from tupleID to make it
short and to improve store size and performance

Why is this PR needed?
Currently, we store the tupleId which is very long, which
increases the store size and reduces query performance.

What changes were proposed in this PR?
Remove the compressor name, part id and batch number from the tupleID.
This helps to improve the store size and improve the query performance also.

part_0 is not required as it will be same for all
_batchno is not required as common word, can be replaced by -
compressor name not required as it does not plan any role.

This closes #3837

22 months ago[CARBONDATA-3863]after using index service clean the temp data
litao [Mon, 20 Jul 2020 13:52:28 +0000 (21:52 +0800)] 
[CARBONDATA-3863]after using index service clean the temp data

Why is this PR needed?
each query that use index server will create a folder under
/tmp/indexservertmp. but when query finished the folder will not
be delete. therefore as the number of queries increases, the
folders in /tmp/indexservertmp will increased. then will get
the directory item limit.

What changes were proposed in this PR?
after query finished delete the folder that created.
clean the /tmp/indexservertmp after index server restart.
run a thread that will delete the folder in /tmp/indexservertmp
that has existed for more than 3 hours.

This closes #3855

22 months ago[CARBONDATA-3943] Handling the addition of geo column to hive at the time of table...
ShreelekhyaG [Wed, 5 Aug 2020 17:15:00 +0000 (22:45 +0530)] 
[CARBONDATA-3943] Handling the addition of geo column to hive at the time of table creation.

Why is this PR needed?
PR #3774 adds geocolumn to hive when it is generated at the time of load.

What changes were proposed in this PR?
Handling the addition of column at create table itself. Added example class for the scenario
to check create geo table with carbon session.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3879

22 months ago[CARBONDATA-3919] Improve concurrent query performance
ajantha-bhat [Wed, 22 Jul 2020 11:13:15 +0000 (16:43 +0530)] 
[CARBONDATA-3919] Improve concurrent query performance

Why is this PR needed?
1. when 500 queries executed concurrently.
checkIfRefreshIsNeeded method was synchronized. so only one thread was working at a time.
But actually synchronization is required only when schema modified to drop tables. Not
for whole function.
2. TokenCache.obtainTokensForNamenodes was causing a performance bottleneck for concurrent
queries.so, removed it

What changes were proposed in this PR?
1. Synchronize only remove table part. Observed 500 query total performance improved from
10s to 3 seconds in cluster.
2. Avoid calling the API.

This closes #3858

22 months ago[CARBONDATA-3947]Fixed Hive read/write operation for Insert into Select operation.
Nihal ojha [Wed, 5 Aug 2020 10:07:05 +0000 (15:37 +0530)] 
[CARBONDATA-3947]Fixed Hive read/write operation for Insert into Select operation.

Why is this PR needed?
FileNotFound Exception is thrown for Hive read/write operation.

What changes were proposed in this PR?
When carbon schema file is not present at given location then build the table from the configuration at place of throwing exception.

This closes #3878

22 months ago[CARBONDATA-3931] Fix secondary index on DateType column giving wrong results
Indhumathi27 [Wed, 29 Jul 2020 15:48:48 +0000 (21:18 +0530)] 
[CARBONDATA-3931] Fix secondary index on DateType column giving wrong results

Why is this PR needed?
On data load to SI with date data type, dictionary values is loaded from factToIndexDictColumnMapping instead of getting from main table query results. factToIndexDictColumnMapping will have value as 0, hence only first row data will be loaded

What changes were proposed in this PR?
Get dictionary Keys from wrapper and convert it to Int and load to SI. Removed factToIndexDictColumnMapping.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3874

22 months ago[CARBONDATA-3889] Cleanup duplicated code in carbondata-spark module
QiangCai [Fri, 31 Jul 2020 09:54:34 +0000 (17:54 +0800)] 
[CARBONDATA-3889] Cleanup duplicated code in carbondata-spark module

Why is this PR needed?
There are many duplicated code in carbondata-spark module

What changes were proposed in this PR?
Cleanup duplicated code in carbondata-spark module

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #3877

22 months ago[CARBONDATA-3944] Insert Stage interrupted when IOException happen
haomarch [Fri, 7 Aug 2020 10:14:35 +0000 (18:14 +0800)] 
[CARBONDATA-3944] Insert Stage interrupted when IOException happen

Why is this PR needed?
In the insertstage flow, the stage files will be deleted with retry mechanism. but when IOException happen due to network abnormal etc, the insert stage will be interrupted, which is unexpected.

What changes were proposed in this PR?
When catch IOexception in the insert stage flow, Continue to retry.

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

This closes #3886

22 months ago[CARBONDATA-3948] Fix for Bloom Index create failure
Vikram Ahuja [Tue, 26 May 2020 20:05:47 +0000 (01:35 +0530)] 
[CARBONDATA-3948] Fix for Bloom Index create failure

Why is this PR needed?
In the case when the whole flow goes to fallback mode in the
index server, the parent table retrieved again in the processData
function of carboncreateIndexCommand does not contain the serialized
IndexMetaData. This issue is only seen in spark-sql because the same
jvm is used between driver and executor

What changes were proposed in this PR?
Setting the index information in parent table after the table is
retrieved again and creating it if it is null

This closes #3775

22 months ago[CARBONDATA-3940] Remove "spark.sql.sources.commitProtocolClass" configuration from...
haomarch [Thu, 6 Aug 2020 07:01:18 +0000 (15:01 +0800)] 
[CARBONDATA-3940] Remove "spark.sql.sources.commitProtocolClass" configuration from SparkCarbonTableFormat

Why is this PR needed?
During the load process, commitTask fails with high probability.
The exception stack shows that it was throwed by HadoopMapReduceCommitProtocol, not CarbonSQLHadoopMapMapReduceCommitProtocol,
implying that there is class init error during the initializing of "Committer".
It should have been initialized as CarbonSQLHadoopMapMapReduceCommitProtocol, but was incorrectly initialized to HadoopMapReduceCommitProtocol.

What changes were proposed in this PR?
Init the committer to be CarbonSQLHadoopMapMapReduceCommitProtocol directly

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #3883

22 months ago[CARBONDATA-3945] Fix NullPointerException of data loading
haomarch [Thu, 6 Aug 2020 02:25:02 +0000 (10:25 +0800)] 
[CARBONDATA-3945] Fix NullPointerException of data loading

Why is this PR needed?
1. getLastModifiedTime of LoadMetadataDetails fails due to "updateDeltaEndTimestamp is empty string".
2. In the getCommittedIndexFile founction, NPE happens because of "segmentfile is null" under the Unusual cases.
3. Cleaning temp files fails because of "partitionInfo is null" under the unusual cases.
4. When calculating sizeInBytes of CarbonRelation, under the unusual cases, it need to collect the directory size. but the directory path only works for non-partition tables, for partition tables, filenotfoundexcepiton was throwed.

What changes were proposed in this PR?
1. when updateDeltaEndTimestamp is empty string, skip the code "convertTimeStampToLong(updateDeltaEndTimestamp)";
2. when segmentfile is null, avoid trigger "segmentfile.getSegmentMetaDataInfo()"
3. init partitionInfo with a empty list instead of "null"
4. Add a judgment condition, to avoid scan directory path for partitiontable when the directroy path only works for non-partitiontable.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3881

22 months ago[CARBONDATA-3941] Support binary data type reading from presto
ajantha-bhat [Thu, 6 Aug 2020 07:17:41 +0000 (12:47 +0530)] 
[CARBONDATA-3941] Support binary data type reading from presto

Why is this PR needed?
When binary store is queried from presto, presto currently give 0 rows.

What changes were proposed in this PR?
Presto can support binary (varBinary) data type reading by using the SliceStreamReader
and it can put binary byte[] using putByteArray() method of SliceStreamReader

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3882

22 months ago[CARBONDATA-3889] Enable java check style for all java modules
QiangCai [Thu, 6 Aug 2020 08:24:39 +0000 (16:24 +0800)] 
[CARBONDATA-3889] Enable java check style for all java modules

Why is this PR needed?
some java modules skip to check java style
There are java files under the scala source directory

What changes were proposed in this PR?
enable check style for all java modules
Move java files into the java source directory

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #3872

22 months ago[CARBONDATA-3879] Filtering Segmets Optimazation
haomarch [Thu, 6 Aug 2020 01:48:34 +0000 (09:48 +0800)] 
[CARBONDATA-3879] Filtering Segmets Optimazation

Why is this PR needed?
During filter segments flow, there are a lot of LIST.CONTAINS, which has heavy time overhead when there are tens of thousands segments.

For example, if there are 50000 segments. it will trigger LIST.CONTAINS for each segment, the LIST also has about 50000 elements. so the time complexity will be O(50000 * 50000 )

What changes were proposed in this PR?
Change List.CONTAINS to MAP.containsKEY

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #3880

22 months ago[CARBONDATA-3930] Fix DataLoadingException of MVExample
QiangCai [Wed, 29 Jul 2020 02:07:57 +0000 (10:07 +0800)] 
[CARBONDATA-3930] Fix DataLoadingException of MVExample

Why is this PR needed?
MVExample is throwing DataLoadingException because the path of the input file is wrong.

What changes were proposed in this PR?
Correct the path of the input file
Remove unused CarbonMVRules
Both CarbonExtensions and CarbonSession use MVRewriteRule

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #3870

22 months ago[CARBONDATA-3841] Remove useless string in create and alter command
Manhua [Mon, 1 Jun 2020 08:39:04 +0000 (16:39 +0800)] 
[CARBONDATA-3841] Remove useless string in create and alter command

Why is this PR needed?
1. LoadDataCommand has duplicated info about user input. Since SQL plan is printed in
driver log and showed on SparkUI, we want to make it pretty.
2. Some variable/file are not in used.

What changes were proposed in this PR?
Remove the duplicated info and unused variable/file.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #3784

22 months ago[CARBONDATA-3939]Exception added for index creation on long string columns
akkio-97 [Tue, 28 Jul 2020 17:39:16 +0000 (23:09 +0530)] 
[CARBONDATA-3939]Exception added for index creation on long string columns

Why is this PR needed?
Index creation for long string columns are not yet supported.

What changes were proposed in this PR?
Exceptions are thrown if user tries to create the same.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3869

22 months ago[CARBONDATA-3833] Make geoID visible
Shreelekhya [Tue, 26 May 2020 17:36:01 +0000 (23:06 +0530)] 
[CARBONDATA-3833] Make geoID visible

Why is this PR needed?
To make geohash column visible to the user

What changes were proposed in this PR?
Generated geohash column is included in the schema. Validation added to avoid alter and drop the geohash column. Indexes, MV and other table properties not supported on this column.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3774

22 months ago[CARBONDATA-3889] Cleanup code in carbondata-core module
QiangCai [Tue, 28 Jul 2020 15:07:59 +0000 (23:07 +0800)] 
[CARBONDATA-3889] Cleanup code in carbondata-core module

Why is this PR needed?
1.Redundant 'if' statement
2.Array access many times in for loop
3.Repeated switch branch
4.Use StringBuffer

What changes were proposed in this PR?
1.Change redundant 'if' statement
2.Use enhanced for loop
3.Merge switch branch
4.Use StringBuilder instead of StringBuffer

Does this PR introduce any user interface change?
No
Yes. (please explain the change and update document)

Is any new testcase added?
No
Yes

This closes #3868

22 months ago[CARBONDATA-3889] Cleanup code typo in carbondata-spark module
QiangCai [Tue, 28 Jul 2020 13:34:03 +0000 (21:34 +0800)] 
[CARBONDATA-3889] Cleanup code typo in carbondata-spark module

Why is this PR needed?
There are many typos in carbondata-spark module.

What changes were proposed in this PR?
Cleanup code typo in carbondata-spark module

Does this PR introduce any user interface change?
No, not change interface name

Is any new testcase added?
No, not impact function.

This closes #3867

22 months ago[CARBONDATA-3914] Fixed issue on reading data from carbon tabel through hive beeline...
Karan980 [Tue, 21 Jul 2020 19:45:51 +0000 (01:15 +0530)] 
[CARBONDATA-3914] Fixed issue on reading data from carbon tabel through hive beeline when no data
is present in table.

Why is this PR needed?
Reading data from empty carbontable through hive beeline was giving "Unable read Carbon Schema"
exception, when no data is present in the carbon table.

What changes were proposed in this PR?
This PR will help to fix above scenario by returning the empty result when no data is inserted
in table.

This closes #3857

22 months ago[CARBONDATA-3889] Cleanup duplicated code in carbondata-core module
QiangCai [Thu, 23 Jul 2020 09:25:45 +0000 (17:25 +0800)] 
[CARBONDATA-3889] Cleanup duplicated code in carbondata-core module

Why is this PR needed?
There are duplicated code in carbondata-core module

What changes were proposed in this PR?
1.Cleanup duplicated code in carbondata-core module
2.Fix the typo

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #3860

22 months ago[HOTFIX] Show Segment with stage returns empty
haomarch [Mon, 27 Jul 2020 07:35:14 +0000 (15:35 +0800)] 
[HOTFIX] Show Segment with stage returns empty

Why is this PR needed?
ListStageFiles function has a bug, leading to the failure of listing stage files

What changes were proposed in this PR?
The code of judgment has been modified.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3864

22 months ago[CARBONDATA-3924] Add default dynamic parameters only one time in one JVM process
QiangCai [Mon, 27 Jul 2020 07:01:25 +0000 (15:01 +0800)] 
[CARBONDATA-3924] Add default dynamic parameters only one time in one JVM process

Why is this PR needed?
PR#3805 introduces a problem that the system will add default dynamic parameters many times in a JVM process at concurrent query case.
If ConfigEntry.registerEntry method registers an exists entry again, it will throw exception.

What changes were proposed in this PR?
Invoking CarbonSQLConf.addDefaultParams only one time in a JVM process

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #3863

23 months ago[CARBONDATA-3920] Fix compaction failure issue for SI table and metadata mismatch...
akashrn5 [Mon, 20 Jul 2020 09:20:49 +0000 (14:50 +0530)] 
[CARBONDATA-3920] Fix compaction failure issue for SI table and metadata mismatch in concurrency

Why is this PR needed?
When load and compaction are happening concurrently, in reliability test segment data will be deleted from SI table, which leads to exception/failures
pre-priming was happening for SI table segment in case of compaction before making SI segment as a success.

What changes were proposed in this PR?
remove unnecessary cleaning API call from SI flow and before compaction success segment locks were getting released for SI, handle that
do the code refactoring in case of SI load after main table compaction to handle proper pre-priming after segments were made success.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No(tested in cluster with 10 concurrency and around 1000 loads)

This closes #3854

23 months ago[CARBONDATA-3913] Support table properties: dateformat, timestampformat
Shreelekhya [Thu, 16 Jul 2020 10:25:01 +0000 (15:55 +0530)] 
[CARBONDATA-3913] Support table properties: dateformat, timestampformat

Why is this PR needed?
To support dateformat, timestamp format table level.

What changes were proposed in this PR?
Made the priority of dateformat, timestamp format as:
1. Load command options
2. carbon.options.date.format/carbon.options.timestamp.format session property
3. Table level properties
4. carbon.date.format/carbon.timestamp.format session property
Updated in DDL, DML documents.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3849

23 months ago[CARBONDATA-3918] Fix extra data in count(*) after multiple updates and index server...
akashrn5 [Mon, 20 Jul 2020 05:52:50 +0000 (11:22 +0530)] 
[CARBONDATA-3918] Fix extra data in count(*) after multiple updates and index server running

Why is this PR needed?
Select count * gives extra data after multiple updates with the index server running.
This is because, once the horizontal compaction happens, it stores the index fils to cache
and create new index and data files, so if the table is updated or deleted table, we will
exclude those splits after getting all splits. Since once the splits come from index server
since loadmetadatadetails are transient in Segment object, we will have null value for it as
the slits are serialized from index server. Because of which it won't be able to filter out
the IUD old segments. So it leads to extra data in count *.

What changes were proposed in this PR?
Once we get the splits from the index server, then from the validSegments, get the
loadmetadataDetails and readCommittedScope and set into the splits which solve this problem.

This closes #3853

23 months ago[CARBONDATA-3899] Drop materialized view when executed concurrently from 4 concurrent...
Shreelekhya [Mon, 13 Jul 2020 15:38:54 +0000 (21:08 +0530)] 
[CARBONDATA-3899] Drop materialized view when executed concurrently from 4 concurrent client fails in
all 4 clients.

Why is this PR needed?
1. drop materialized view when executed concurrently from 4 concurrent client fails in all 4 clients.
Also, materialized view when created in one session and queried on another open session will not hit MV.
2. drop mv if not exists must fail.

What changes were proposed in this PR?
1. made view manager as a single instance for all sessions, so that changes executed from one session
gets reflected in others.
2. added check for drop mv command to throw an exception if the materialized view is not present.

This closes #3841

23 months ago[CARBONDATA-3829] Support pagination in SDK reader
ajantha-bhat [Mon, 13 Apr 2020 06:22:18 +0000 (11:52 +0530)] 
[CARBONDATA-3829] Support pagination in SDK reader

Why is this PR needed?

Please refer the design document attached in the JIRA.
Carbondata SDK now currently doesn't support pagination.

What changes were proposed in this PR?

a) Support pagination from java SDK with LRU cache support.
b) Support pagination in python SDK by calling JAVA SDK.

Does this PR introduce any user interface change?

No [Added new interfaces]
Is any new testcase added?

Yes

This closes #3770

23 months ago[CARBONDATA-3900][CARBONDATA-3882][CARBONDATA-3881] Fix multiple concurrent issues...
ajantha-bhat [Fri, 26 Jun 2020 14:29:59 +0000 (19:59 +0530)] 
[CARBONDATA-3900][CARBONDATA-3882][CARBONDATA-3881] Fix multiple concurrent issues in table status lock and segment lock for SI and maintable

Why is this PR needed?
[CARBONDATA-3900] Fix maintable load failure in concurrent load and compaction scenario
Main table load flow segment lock is released before updating the table status success.
So, concurrent operation was considering this segment as stale segment (as segment lock is not present) and cleaning it. Leading to unable to get file status exception.
[CARBONDATA-3882] Fix wrong lock and missing Table status lock in some SI flows
In updateLoadMetadataWithMergeStatus, we want update SI table status, but lock is acquired on main table
triggerCompaction, updateTableStatusForIndexTables -> table status write is happening without lock
[CARBONDATA-3881] Fix concurrent main table compaction and SI load issue
Consider a scenario, where segmentX has loaded to main table but failed to load to SI table. So, while loading another segmentY, we reload failed SI segmentX. this time if the segmentX is compacted in main table and clean files executed on it. SI load will fail and segment id will not be found in segmentMap of SI and it throws exception.

What changes were proposed in this PR?
for [CARBONDATA-3900]
release segment lock after main table is updated.
for [CARBONDATA-3882]
In updateLoadMetadataWithMergeStatus, take a lock on SI table
triggerCompaction, updateTableStatusForIndexTables -> add a lock for table status write
for [CARBONDATA-3881]
just before reloading the failed SI segment. check if it is valid segment in main table.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #3810

23 months ago[CARBONDATA-3911]Fix NullPointerException in case of multiple updates and clean files
akashrn5 [Tue, 14 Jul 2020 15:29:20 +0000 (20:59 +0530)] 
[CARBONDATA-3911]Fix NullPointerException in case of multiple updates and clean files

Why is this PR needed?
when multiple load and multiple updates are performed, the segment files will be created
for each update, when clean files performed, if two segments are there, first segment will
clean other segments's segment file also which leads to nullpointer.

What changes were proposed in this PR?
Once all the segments stale segment files are collected, then delete the stale files at once.

This closes #3843

23 months ago[CARBONDATA-3853] Data load failure when loading with bucket column as DATE data...
Mahesh Raju Somalaraju [Wed, 8 Jul 2020 16:57:23 +0000 (22:27 +0530)] 
[CARBONDATA-3853] Data load failure when loading with bucket column as DATE data type

Why is this PR needed?
While loading data into a table which has bucket column as DATE data type then receiving data load failure due to class-cast exception. The class-cast exception is due to DATE data type is not going as IntegralHash type for getting the hash because of there is no case for DATE datatype and it is going for StringHash type and typecast results class-cast Exception.

What changes were proposed in this PR?
Added a OR (||) condition if data type is DATE then it will go IntegralHash getHash() method for getting the hash code.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3830

23 months ago[CARBONDATA-3910] Fix load failure in cluster when csv present in local file system...
akashrn5 [Sun, 12 Jul 2020 16:08:45 +0000 (21:38 +0530)] 
[CARBONDATA-3910] Fix load failure in cluster when csv present in local file system in case of global sort

Why is this PR needed?
when the csv file is present in local file system and we load the table in cluster, it fails with file not found.
This is because when we try to update the file path, we remove one slash in schema which causes this issue.

What changes were proposed in this PR?
Its better to check for "file:/" instead of "file:///" for local file, as getUpdatedfilePath API may remove
one slash and cause this issue.

This closes #3838

23 months ago[CARBONDATA-3902] Fix CDC delete data issue on partition table
Indhumathi27 [Wed, 15 Jul 2020 11:31:47 +0000 (17:01 +0530)] 
[CARBONDATA-3902] Fix CDC delete data issue on partition table

Why is this PR needed?
When only delete operation is executed through cdc merge command on partition table,
loadMetaEntry of segments which has deleted rows, is not updated with latest
tableupdatestatus filename. On query, will give wrong results.

What changes were proposed in this PR?
Update loadMetaEntry of segments which has deleted rows, with latest tableupdatestatus
filename, after delete operation on partition table, if loadDF.count == 0

NOTE: If merge has data to be inserted after(U & D), CarbonInsertIntoDf will update
the tableupdatestatus file name in load meta entry, during load.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3846

23 months ago[CARBONDATA-3907]Refactor to use CommonLoadUtils API's firePreLoadEvents and firePost...
Venu Reddy [Thu, 16 Jul 2020 11:07:06 +0000 (16:37 +0530)] 
[CARBONDATA-3907]Refactor to use CommonLoadUtils API's firePreLoadEvents and firePostLoadEvents to
trigger Load pre and post events

Why is this PR needed?
Currently we have 2 different ways of firing LoadTablePreExecutionEvent and LoadTablePostExecutionEvent.
We can reuse firePreLoadEvents and firePostLoadEvents methods from CommonLoadUtils to trigger
LoadTablePreExecutionEvent and LoadTablePostExecutionEvent respectively in alter table add segment
flow as well.

What changes were proposed in this PR?
Reuse firePreLoadEvents and firePostLoadEvents methods from CommonLoadUtils to trigger
LoadTablePreExecutionEvent and LoadTablePostExecutionEvent respectively in alter table add segment flow.

This closes #3850

23 months ago[CARBONDATA-3846] Data load issue for boolean column configured as BUCKET_COLUMNS
akkio-97 [Wed, 8 Jul 2020 20:22:35 +0000 (01:52 +0530)] 
[CARBONDATA-3846] Data load issue for boolean column configured as BUCKET_COLUMNS

Why is this PR needed?
During data load with bucket column, boolean values were retrieved using wrong index.
Issue occurs only when table has more than one column(including boolean type). Due to this wrong index, wrong column data was retrieved, instead of boolean, hence throwing ClassCastException and data load failure.

What changes were proposed in this PR?
Boolean values are now retrieved using the correct index.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3831

23 months ago[CARBONDATA-3843] Support merging index for streaming table
ajantha-bhat [Tue, 2 Jun 2020 14:30:38 +0000 (20:00 +0530)] 
[CARBONDATA-3843] Support merging index for streaming table

Why is this PR needed?
Merge index is not created for normal segment (created by load, insert, compaction or handoff) on streaming table.

What changes were proposed in this PR?
For a streaming table other than streaming segment (Row_V1), allow merge index creation for all kinds of segments.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes  #3785

23 months ago[CARBONDATA-3871][FOLLOW-UP] Fix memory issue of loading sort step when get data...
Manhua [Wed, 15 Jul 2020 09:08:11 +0000 (17:08 +0800)] 
[CARBONDATA-3871][FOLLOW-UP] Fix memory issue of loading sort step when get data from row page

Why is this PR needed?
PR #3804 free the row page after running in-memory intermeidate merge, but the data will still be used in final sort because that merge only acquire the memory address and row page index instead of moving the rows from here to there.

What changes were proposed in this PR?
Remove code for freeing the row page in case of in-memory intermeidate merge.
As a special case, add comment for explanation.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #3845

23 months ago[CARBONDATA-3895] Fix FileNotFound exception in query after global sort compaction
akashrn5 [Sun, 28 Jun 2020 06:30:57 +0000 (12:00 +0530)] 
[CARBONDATA-3895] Fix FileNotFound exception in query after global sort compaction

Why is this PR needed?
After global sort compaction, if we execute clean files and run the query or update delete operations, we get file not found exceptions and some data lost. This is because we form new load model for global sort compaction and facttimestamp is not set, so carbondata files are generated with a timestamp as 0.

What changes were proposed in this PR?
copy the facttimestamp from the incoming loadmodel and set it into new load model

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3812

23 months ago[CARBONDATA-3849] Push down array_contains filter for array<primitive type> column
ajantha-bhat [Thu, 21 May 2020 17:09:12 +0000 (22:39 +0530)] 
[CARBONDATA-3849] Push down array_contains filter for array<primitive type> column

Why is this PR needed?
Currently array_contains() UDF is not pushed down to carbon. So, carbon has to scan all the rows for query having this UDF. Scanning all the rows reduces the query performance. Hence need to pushdown.

What changes were proposed in this PR?
Push down array_contains() for all the array of primitive type as equalsTo filter. Having as equals to filter, we can break the scanning of elements in array once found.

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes  #3771

23 months ago[Carbondata-3883] Added filtering for the deleted rows for local dictionary fields
Nitin-Kashyap [Tue, 30 Jun 2020 15:02:24 +0000 (20:32 +0530)] 
[Carbondata-3883] Added filtering for the deleted rows for local dictionary fields

Why is this PR needed?
In Presto integration when reading records for table with string fields and local dictionary enabled gives improper result.

What changes were proposed in this PR?
Added a CarbondataColumnVectorWrapper for the dictionary vector for column for which internally create dictionary vector.
Wrapper is used to filter the deleted records.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #3818

23 months ago[CARBONDATA-3889] Cleanup typo code for carbondata-core module
QiangCai [Tue, 7 Jul 2020 12:13:11 +0000 (20:13 +0800)] 
[CARBONDATA-3889] Cleanup typo code for carbondata-core module

Why is this PR needed?
There are many typos in carbondata-core module

What changes were proposed in this PR?
Cleanup typo code for carbondata-core module

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

This closes #3828

23 months ago[CARBONDATA-3889] Cleanup code for carbondata-hadoop module
QiangCai [Tue, 7 Jul 2020 07:48:10 +0000 (15:48 +0800)] 
[CARBONDATA-3889] Cleanup code for carbondata-hadoop module

Why is this PR needed?
need cleanup code for carbondata-hadoop module

What changes were proposed in this PR?
Cleanup code for carbondata-hadoop module

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

This closes #3827

23 months ago[CARBONDATA-3889] Cleanup code for carbondata-streaming module
QiangCai [Sat, 4 Jul 2020 15:37:21 +0000 (23:37 +0800)] 
[CARBONDATA-3889] Cleanup code for carbondata-streaming module

Why is this PR needed?
need cleanup code in carbondata-streaming module

What changes were proposed in this PR?
Cleanup code in carbondata-streaming module

Does this PR introduce any user interface change?
No
Yes. (please explain the change and update document)

Is any new testcase added?
No
Yes

This closes #3826

23 months ago[CARBONDATA-3889] Cleanup code for carbondata-common module
QiangCai [Sat, 4 Jul 2020 13:55:18 +0000 (21:55 +0800)] 
[CARBONDATA-3889] Cleanup code for carbondata-common module

Why is this PR needed?
1.Field can be 'final'
2.Redundant 'if' statement
3.Empty method
4.Redundant 'throws' clause
5.Anonymous type can be replaced with lambda
6.Typo
7.Redundant String operation

What changes were proposed in this PR?
1.change field to be 'final'
2.change redundant 'if' statement
3.remove Empty method
4.remove redundant 'throws' clause
5.change anonymous type to lambda
6.fix typo
7.remove redundant String operation

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #3825

23 months ago[CARBONDATA-3909] Fix Global sort data load failure issue with Decimal value as NULL
Indhumathi27 [Thu, 16 Jul 2020 16:06:54 +0000 (21:36 +0530)] 
[CARBONDATA-3909] Fix Global sort data load failure issue with Decimal value as NULL

Why is this PR needed?
Global sort Data load having decimal value as NULL fails with NPE

What changes were proposed in this PR?
Added null check, if actual data is null for decimal types and assigned data to NULL value

Does this PR introduce any user interface change?
No

Is any new testcase added?
Yes

This closes #3851