[CARBONDATA-3116] Support set carbon.query.directQueryOnDataMap.enabled=true
This PR fix the errorï¼User can query on dataMap after set carbon.query.directQueryOnDataMap.enabled=true. This closes #2940 Project: http://git-wip-us.apache.org/repos/asf/carbondata/repo Commit: http://git-wip-us.apache.org/repos/asf/carbondata/commit/26a58508 Tree: http://git-wip-us.apache.org/repos/asf/carbondata/tree/26a58508 Diff: http://git-wip-us.apache.org/repos/asf/carbondata/diff/26a58508 Branch: refs/heads/branch-1.5 Commit: 26a585083fb7887d66c85c3ee27fcae205595742 Parents: 7d7d547 Author: xubo245 <[email protected]> Authored: Thu Nov 22 00:32:13 2018 +0800 Committer: Raghunandan S <[email protected]> Committed: Mon Dec 17 18:58:33 2018 +0530 ---------------------------------------------------------------------- .../preaggregate/TestPreAggCreateCommand.scala | 43 ++++++++++++++++++++ .../sql/optimizer/CarbonLateDecodeRule.scala | 8 ++-- 2 files changed, 48 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/carbondata/blob/26a58508/integration/spark-common-test/src/test/scala/org/apache/carbondata/integration/spark/testsuite/preaggregate/TestPreAggCreateCommand.scala ---------------------------------------------------------------------- diff --git a/integration/spark-common-test/src/test/scala/org/apache/carbondata/integration/spark/testsuite/preaggregate/TestPreAggCreateCommand.scala b/integration/spark-common-test/src/test/scala/org/apache/carbondata/integration/spark/testsuite/preaggregate/TestPreAggCreateCommand.scala index 7851bd1..f07c417 100644 --- a/integration/spark-common-test/src/test/scala/org/apache/carbondata/integration/spark/testsuite/preaggregate/TestPreAggCreateCommand.scala +++ b/integration/spark-common-test/src/test/scala/org/apache/carbondata/integration/spark/testsuite/preaggregate/TestPreAggCreateCommand.scala @@ -17,6 +17,7 @@ package org.apache.carbondata.integration.spark.testsuite.preaggregate +import java.io.File import java.util import java.util.concurrent.{Callable, ExecutorService, Executors, TimeUnit} @@ -486,6 +487,48 @@ class TestPreAggCreateCommand extends QueryTest with BeforeAndAfterAll { executorService.shutdown() } + test("support set carbon.query.directQueryOnDataMap.enabled=true") { + val rootPath = new File(this.getClass.getResource("/").getPath + + "../../../..").getCanonicalPath + val testData = s"$rootPath/integration/spark-common-test/src/test/resources/sample.csv" + sql("drop table if exists mainTable") + sql( + s""" + | CREATE TABLE mainTable + | (id Int, + | name String, + | city String, + | age Int) + | STORED BY 'org.apache.carbondata.format' + """.stripMargin) + + sql( + s""" + | LOAD DATA LOCAL INPATH '$testData' + | into table mainTable + """.stripMargin) + + sql( + s""" + | create datamap preagg_sum on table mainTable + | using 'preaggregate' + | as select id,sum(age) from mainTable group by id + """.stripMargin) + + CarbonProperties.getInstance() + .addProperty(CarbonCommonConstants.VALIDATE_DIRECT_QUERY_ON_DATAMAP, "true") + + sql("set carbon.query.directQueryOnDataMap.enabled=true") + checkAnswer(sql("select count(*) from maintable_preagg_sum"), Row(4)) + sql("set carbon.query.directQueryOnDataMap.enabled=false") + val exception: Exception = intercept[AnalysisException] { + sql("select count(*) from maintable_preagg_sum").collect() + } + assert(exception.getMessage.contains("Query On DataMap not supported")) + CarbonProperties.getInstance() + .addProperty(CarbonCommonConstants.VALIDATE_DIRECT_QUERY_ON_DATAMAP, "false") + } + class QueryTask(query: String) extends Callable[String] { override def call(): String = { var result = "SUCCESS" http://git-wip-us.apache.org/repos/asf/carbondata/blob/26a58508/integration/spark2/src/main/scala/org/apache/spark/sql/optimizer/CarbonLateDecodeRule.scala ---------------------------------------------------------------------- diff --git a/integration/spark2/src/main/scala/org/apache/spark/sql/optimizer/CarbonLateDecodeRule.scala b/integration/spark2/src/main/scala/org/apache/spark/sql/optimizer/CarbonLateDecodeRule.scala index 48c6377..36eb9ce 100644 --- a/integration/spark2/src/main/scala/org/apache/spark/sql/optimizer/CarbonLateDecodeRule.scala +++ b/integration/spark2/src/main/scala/org/apache/spark/sql/optimizer/CarbonLateDecodeRule.scala @@ -119,7 +119,7 @@ class CarbonLateDecodeRule extends Rule[LogicalPlan] with PredicateHelper { if (validateQuery && isPreAggDataMapExists) { val carbonSessionInfo = ThreadLocalSessionInfo.getCarbonSessionInfo if (null != carbonSessionInfo) { - val supportQueryOnDataMap = CarbonEnv.getThreadParam( + val supportQueryOnDataMap = CarbonProperties.getInstance.getProperty( CarbonCommonConstants.SUPPORT_DIRECT_QUERY_ON_DATAMAP, CarbonCommonConstants.SUPPORT_DIRECT_QUERY_ON_DATAMAP_DEFAULTVALUE).toBoolean if (!supportQueryOnDataMap) { @@ -127,8 +127,10 @@ class CarbonLateDecodeRule extends Rule[LogicalPlan] with PredicateHelper { } } } - if(isThrowException) { - throw new AnalysisException("Query On DataMap not supported") + if (isThrowException) { + throw new AnalysisException("Query On DataMap not supported because " + + CarbonCommonConstants.SUPPORT_DIRECT_QUERY_ON_DATAMAP + " is false. " + + "Please change the value to true by set command or other if you want to query on DataMap.") } }
