[CARBONDATA-2112] Fixed bug for select operation on datamap with avg and a column name
Problem: When applying select operation(having a column name and an aggregate function) on a table having a datamap, the data was coming out to be wrong as the group by expression and aggregate expression were created incorrectly. Solution: While creating the aggregate and group by expression, we were getting the child column related to parent column name which was coming out to be wrong so added a new check there to get the correct child column. This closes #1910 Project: http://git-wip-us.apache.org/repos/asf/carbondata/repo Commit: http://git-wip-us.apache.org/repos/asf/carbondata/commit/91911af2 Tree: http://git-wip-us.apache.org/repos/asf/carbondata/tree/91911af2 Diff: http://git-wip-us.apache.org/repos/asf/carbondata/diff/91911af2 Branch: refs/heads/branch-1.3 Commit: 91911af231583b9e2b210dd685770836b358bcd0 Parents: 44e70d0 Author: Geetika Gupta <[email protected]> Authored: Fri Feb 2 14:02:38 2018 +0530 Committer: kunal642 <[email protected]> Committed: Sat Feb 3 16:25:30 2018 +0530 ---------------------------------------------------------------------- .../metadata/schema/table/AggregationDataMapSchema.java | 3 ++- .../testsuite/preaggregate/TestPreAggregateLoad.scala | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/carbondata/blob/91911af2/core/src/main/java/org/apache/carbondata/core/metadata/schema/table/AggregationDataMapSchema.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/core/metadata/schema/table/AggregationDataMapSchema.java b/core/src/main/java/org/apache/carbondata/core/metadata/schema/table/AggregationDataMapSchema.java index e061812..2a16e1f 100644 --- a/core/src/main/java/org/apache/carbondata/core/metadata/schema/table/AggregationDataMapSchema.java +++ b/core/src/main/java/org/apache/carbondata/core/metadata/schema/table/AggregationDataMapSchema.java @@ -151,7 +151,8 @@ public class AggregationDataMapSchema extends DataMapSchema { List<ParentColumnTableRelation> parentColumnTableRelations = columnSchema.getParentColumnTableRelations(); if (null != parentColumnTableRelations && parentColumnTableRelations.size() == 1 - && parentColumnTableRelations.get(0).getColumnName().equals(columName)) { + && parentColumnTableRelations.get(0).getColumnName().equals(columName) && + columnSchema.getColumnName().endsWith(columName)) { return columnSchema; } } http://git-wip-us.apache.org/repos/asf/carbondata/blob/91911af2/integration/spark-common-test/src/test/scala/org/apache/carbondata/integration/spark/testsuite/preaggregate/TestPreAggregateLoad.scala ---------------------------------------------------------------------- diff --git a/integration/spark-common-test/src/test/scala/org/apache/carbondata/integration/spark/testsuite/preaggregate/TestPreAggregateLoad.scala b/integration/spark-common-test/src/test/scala/org/apache/carbondata/integration/spark/testsuite/preaggregate/TestPreAggregateLoad.scala index b6b7a17..da1ffb5 100644 --- a/integration/spark-common-test/src/test/scala/org/apache/carbondata/integration/spark/testsuite/preaggregate/TestPreAggregateLoad.scala +++ b/integration/spark-common-test/src/test/scala/org/apache/carbondata/integration/spark/testsuite/preaggregate/TestPreAggregateLoad.scala @@ -405,4 +405,15 @@ test("check load and select for avg double datatype") { sql("drop table if exists maintable") } + test("check load and select for avg int datatype and group by") { + sql("drop table if exists maintable ") + sql("CREATE TABLE maintable(id int, city string, age int) stored by 'carbondata'") + sql(s"LOAD DATA LOCAL INPATH '$testData' into table maintable") + sql(s"LOAD DATA LOCAL INPATH '$testData' into table maintable") + sql(s"LOAD DATA LOCAL INPATH '$testData' into table maintable") + val rows = sql("select age,avg(age) from maintable group by age").collect() + sql("create datamap maintbl_douoble on table maintable using 'preaggregate' as select avg(age) from maintable group by age") + checkAnswer(sql("select age,avg(age) from maintable group by age"), rows) + } + }
