Repository: carbondata Updated Branches: refs/heads/master 12ccf708f -> a597c2f9b
[CARBONDATA-2016] Exception displays while executing compaction with alter query Reason: When we apply the alter table command to add column with default value it is always storing it as long object for all measures,it is wrongly written in restructure util we should return the value as the same type as that of the measure,it was causing the compaction to fail with class cast exception because the data type and its corresponding value does not have same data type Solution: Correct the wrong logic in restructure util the type of returning value object should be same as that of measure This closes #1839 Project: http://git-wip-us.apache.org/repos/asf/carbondata/repo Commit: http://git-wip-us.apache.org/repos/asf/carbondata/commit/a597c2f9 Tree: http://git-wip-us.apache.org/repos/asf/carbondata/tree/a597c2f9 Diff: http://git-wip-us.apache.org/repos/asf/carbondata/diff/a597c2f9 Branch: refs/heads/master Commit: a597c2f9ba5213afd17fec223b5b5a4609c564bf Parents: 12ccf70 Author: anubhav100 <[email protected]> Authored: Fri Jan 19 21:31:14 2018 +0530 Committer: manishgupta88 <[email protected]> Committed: Mon Jan 29 14:14:03 2018 +0530 ---------------------------------------------------------------------- .../scan/executor/util/RestructureUtil.java | 13 +++++--- .../iud/HorizontalCompactionTestCase.scala | 32 ++++++++++++++++++++ 2 files changed, 41 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/carbondata/blob/a597c2f9/core/src/main/java/org/apache/carbondata/core/scan/executor/util/RestructureUtil.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/core/scan/executor/util/RestructureUtil.java b/core/src/main/java/org/apache/carbondata/core/scan/executor/util/RestructureUtil.java index 572400d..288aea7 100644 --- a/core/src/main/java/org/apache/carbondata/core/scan/executor/util/RestructureUtil.java +++ b/core/src/main/java/org/apache/carbondata/core/scan/executor/util/RestructureUtil.java @@ -178,8 +178,7 @@ public class RestructureUtil { if (isDefaultValueNull(defaultValue)) { dictionaryDefaultValue = CarbonCommonConstants.MEMBER_DEFAULT_VAL_SURROGATE_KEY; } else { - dictionaryDefaultValue = - CarbonCommonConstants.MEMBER_DEFAULT_VAL_SURROGATE_KEY + 1; + dictionaryDefaultValue = CarbonCommonConstants.MEMBER_DEFAULT_VAL_SURROGATE_KEY + 1; } return dictionaryDefaultValue; } @@ -285,11 +284,17 @@ public class RestructureUtil { public static Object getMeasureDefaultValue(ColumnSchema columnSchema, byte[] defaultValue) { Object measureDefaultValue = null; if (!isDefaultValueNull(defaultValue)) { - String value = null; + String value; DataType dataType = columnSchema.getDataType(); - if (dataType == DataTypes.SHORT || dataType == DataTypes.INT || dataType == DataTypes.LONG) { + if (dataType == DataTypes.SHORT) { + value = new String(defaultValue, Charset.forName(CarbonCommonConstants.DEFAULT_CHARSET)); + measureDefaultValue = Short.valueOf(value); + } else if (dataType == DataTypes.LONG) { value = new String(defaultValue, Charset.forName(CarbonCommonConstants.DEFAULT_CHARSET)); measureDefaultValue = Long.parseLong(value); + } else if (dataType == DataTypes.INT) { + value = new String(defaultValue, Charset.forName(CarbonCommonConstants.DEFAULT_CHARSET)); + measureDefaultValue = Integer.parseInt(value); } else if (DataTypes.isDecimal(dataType)) { BigDecimal decimal = DataTypeUtil.byteToBigDecimal(defaultValue); if (columnSchema.getScale() > decimal.scale()) { http://git-wip-us.apache.org/repos/asf/carbondata/blob/a597c2f9/integration/spark-common-test/src/test/scala/org/apache/carbondata/spark/testsuite/iud/HorizontalCompactionTestCase.scala ---------------------------------------------------------------------- diff --git a/integration/spark-common-test/src/test/scala/org/apache/carbondata/spark/testsuite/iud/HorizontalCompactionTestCase.scala b/integration/spark-common-test/src/test/scala/org/apache/carbondata/spark/testsuite/iud/HorizontalCompactionTestCase.scala index 9d4b708..af1846b 100644 --- a/integration/spark-common-test/src/test/scala/org/apache/carbondata/spark/testsuite/iud/HorizontalCompactionTestCase.scala +++ b/integration/spark-common-test/src/test/scala/org/apache/carbondata/spark/testsuite/iud/HorizontalCompactionTestCase.scala @@ -350,8 +350,39 @@ class HorizontalCompactionTestCase extends QueryTest with BeforeAndAfterAll { ) sql("""drop table dest2""") } + test("test the compaction after alter command") // As per bug Carbondata-2016 + { + sql( + "CREATE TABLE CUSTOMER1 ( C_CUSTKEY INT , C_NAME STRING , C_ADDRESS STRING , C_NATIONKEY INT , C_PHONE STRING , C_ACCTBAL DECIMAL(15,2) , C_MKTSEGMENT STRING , C_COMMENT STRING) stored by 'carbondata'") + sql( + "insert into customer1 values(1,'vandana','noida',1,'123456789',45987.78,'hello','comment')") + sql( + "insert into customer1 values(2,'vandana','noida',2,'123456789',487.78,'hello','comment')") + + sql( + " insert into customer1 values(3,'geetika','delhi',3,'123456789',487897.78,'hello','comment')") + + sql( + "insert into customer1 values(4,'sangeeta','delhi',3,'123456789',48789.78,'hello','comment')") + + sql( + "alter table customer1 add columns (shortfield short) TBLPROPERTIES ('DEFAULT.VALUE.shortfield'='32767')") + + sql( + "alter table customer1 add columns (intfield int) TBLPROPERTIES ('DEFAULT.VALUE.intfield'='2147483647')") + + sql( + "alter table customer1 add columns (longfield bigint) TBLPROPERTIES ('DEFAULT.VALUE.longfield'='9223372036854775807')") + + sql("alter table customer1 compact 'minor' ").show() + + checkAnswer(sql("select shortfield from customer1"),Seq(Row(32767),Row(32767),Row(32767),Row(32767))) + checkAnswer(sql("select intfield from customer1"),Seq(Row(2147483647),Row(2147483647),Row(2147483647),Row(2147483647))) + checkAnswer(sql("select longfield from customer1"),Seq(Row(9223372036854775807L),Row(9223372036854775807L),Row(9223372036854775807L),Row(9223372036854775807L))) + + } override def afterAll { CarbonProperties.getInstance() .addProperty(CarbonCommonConstants.ENABLE_VECTOR_READER , "true") @@ -360,6 +391,7 @@ class HorizontalCompactionTestCase extends QueryTest with BeforeAndAfterAll { CarbonProperties.getInstance() .addProperty(CarbonCommonConstants.isHorizontalCompactionEnabled , "true") sql("""drop table if exists t_carbn01""") + sql("""drop table if exists customer1""") } }
