Repository: carbondata Updated Branches: refs/heads/branch-1.3 b9a6b6865 -> 660190fb5
[CARBONDATA-2103]Make show datamaps configurable in show tables command Make the show datamaps in show tables configurable: a new carbon property is added called carbon.query.show.datamaps, by default is it true, show show tables will list all the table including main table and datamaps. if we want to filter datamaps in show tables, configure this as false This closes #2015 Project: http://git-wip-us.apache.org/repos/asf/carbondata/repo Commit: http://git-wip-us.apache.org/repos/asf/carbondata/commit/660190fb Tree: http://git-wip-us.apache.org/repos/asf/carbondata/tree/660190fb Diff: http://git-wip-us.apache.org/repos/asf/carbondata/diff/660190fb Branch: refs/heads/branch-1.3 Commit: 660190fb544e338acd131e7cc30de171e7600df6 Parents: b9a6b68 Author: akashrn5 <akashnilu...@gmail.com> Authored: Wed Feb 28 17:38:50 2018 +0530 Committer: ravipesala <ravi.pes...@gmail.com> Committed: Fri Mar 2 20:15:23 2018 +0530 ---------------------------------------------------------------------- .../core/constants/CarbonCommonConstants.java | 17 ++++++++++++++++ .../preaggregate/TestPreAggCreateCommand.scala | 21 ++++++++++++++++---- .../command/table/CarbonShowTablesCommand.scala | 20 ++++++++++++++----- .../spark/sql/hive/CarbonSessionState.scala | 17 ++++++++++++---- .../spark/sql/hive/CarbonSessionState.scala | 17 ++++++++++++---- 5 files changed, 75 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/carbondata/blob/660190fb/core/src/main/java/org/apache/carbondata/core/constants/CarbonCommonConstants.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/carbondata/core/constants/CarbonCommonConstants.java b/core/src/main/java/org/apache/carbondata/core/constants/CarbonCommonConstants.java index 6e6482d..fa2b7d8 100644 --- a/core/src/main/java/org/apache/carbondata/core/constants/CarbonCommonConstants.java +++ b/core/src/main/java/org/apache/carbondata/core/constants/CarbonCommonConstants.java @@ -1598,6 +1598,23 @@ public final class CarbonCommonConstants { "carbon.query.validate.directqueryondatamap"; public static final String VALIDATE_DIRECT_QUERY_ON_DATAMAP_DEFAULTVALUE = "true"; + /** + * If the heap memory allocations of the given size is greater or equal than this value, + * it should go through the pooling mechanism. + * But if set this size to -1, it should not go through the pooling mechanism. + * Default value is 1048576(1MB, the same as Spark). + * Unit: byte. + */ + @CarbonProperty + public static final String CARBON_HEAP_MEMORY_POOLING_THRESHOLD_BYTES = + "carbon.heap.memory.pooling.threshold.bytes"; + public static final String CARBON_HEAP_MEMORY_POOLING_THRESHOLD_BYTES_DEFAULT = "1048576"; + + @CarbonProperty + public static final String CARBON_SHOW_DATAMAPS = "carbon.query.show.datamaps"; + + public static final String CARBON_SHOW_DATAMAPS_DEFAULT = "true"; + private CarbonCommonConstants() { } } http://git-wip-us.apache.org/repos/asf/carbondata/blob/660190fb/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 8b71a31..5b7c310 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 @@ -19,16 +19,18 @@ package org.apache.carbondata.integration.spark.testsuite.preaggregate import scala.collection.JavaConverters._ -import org.apache.spark.sql.{AnalysisException, CarbonDatasourceHadoopRelation} +import org.apache.spark.sql.{AnalysisException, CarbonDatasourceHadoopRelation, Row} import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan import org.apache.spark.sql.execution.datasources.LogicalRelation import org.apache.spark.sql.hive.CarbonRelation import org.apache.spark.sql.test.util.QueryTest import org.scalatest.BeforeAndAfterAll +import org.apache.carbondata.core.constants.CarbonCommonConstants import org.apache.carbondata.core.metadata.encoder.Encoding import org.apache.carbondata.core.metadata.schema.table.CarbonTable import org.apache.carbondata.core.metadata.schema.datamap.DataMapProvider.TIMESERIES +import org.apache.carbondata.core.util.CarbonProperties import org.apache.carbondata.spark.exception.{MalformedCarbonCommandException, MalformedDataMapCommandException} class TestPreAggCreateCommand extends QueryTest with BeforeAndAfterAll { @@ -237,6 +239,7 @@ class TestPreAggCreateCommand extends QueryTest with BeforeAndAfterAll { val timeSeries = TIMESERIES.toString test("remove agg tables from show table command") { + CarbonProperties.getInstance().addProperty(CarbonCommonConstants.CARBON_SHOW_DATAMAPS,"false") sql("DROP TABLE IF EXISTS tbl_1") sql("DROP TABLE IF EXISTS sparktable") sql("create table if not exists tbl_1(imei string,age int,mac string ,prodate timestamp,update timestamp,gamepoint double,contrid double) stored by 'carbondata' ") @@ -249,6 +252,7 @@ class TestPreAggCreateCommand extends QueryTest with BeforeAndAfterAll { ".eventTime'='prodate', 'timeseries.hierarchy'='hour=1,day=1,month=1,year=1') as select prodate," + "mac from tbl_1 group by prodate,mac") checkExistence(sql("show tables"), false, "tbl_1_preagg_sum","tbl_1_agg2_day","tbl_1_agg2_hour","tbl_1_agg2_month","tbl_1_agg2_year") + CarbonProperties.getInstance().addProperty(CarbonCommonConstants.CARBON_SHOW_DATAMAPS,CarbonCommonConstants.CARBON_SHOW_DATAMAPS_DEFAULT) } test("test pre agg create table 21: create with preaggregate and hierarchy") { @@ -305,12 +309,14 @@ class TestPreAggCreateCommand extends QueryTest with BeforeAndAfterAll { } test("remove agg tables from show table command") { + CarbonProperties.getInstance().addProperty(CarbonCommonConstants.CARBON_SHOW_DATAMAPS,"false") sql("DROP TABLE IF EXISTS tbl_1") sql("create table if not exists tbl_1(imei string,age int,mac string ,prodate timestamp,update timestamp,gamepoint double,contrid double) stored by 'carbondata' ") sql("create datamap agg1 on table tbl_1 using 'preaggregate' as select mac, sum(age) from tbl_1 group by mac") sql("create table if not exists sparktable(imei string,age int,mac string ,prodate timestamp,update timestamp,gamepoint double,contrid double) ") checkExistence(sql("show tables"), false, "tbl_1_agg1") checkExistence(sql("show tables"), true, "sparktable","tbl_1") + CarbonProperties.getInstance().addProperty(CarbonCommonConstants.CARBON_SHOW_DATAMAPS, CarbonCommonConstants.CARBON_SHOW_DATAMAPS_DEFAULT) } @@ -380,10 +386,14 @@ class TestPreAggCreateCommand extends QueryTest with BeforeAndAfterAll { } test("test show tables filterted with datamaps") { + CarbonProperties.getInstance().addProperty(CarbonCommonConstants.CARBON_SHOW_DATAMAPS,"false") sql("create table showTables(name string, age int) stored by 'carbondata'") - sql("create datamap preAgg on table showTables using 'preaggregate' as select sum(age) from showTables") + sql( + "create datamap preAgg on table showTables using 'preaggregate' as select sum(age) from showTables") sql("show tables").show() - assert(!sql("show tables").collect().contains("showTables_preagg")) + checkExistence(sql("show tables"), false, "showtables_preagg") + CarbonProperties.getInstance().addProperty(CarbonCommonConstants.CARBON_SHOW_DATAMAPS,CarbonCommonConstants.CARBON_SHOW_DATAMAPS_DEFAULT) + checkExistence(sql("show tables"), true, "showtables_preagg") } test("test create main and preagg table of same name in two database") { @@ -426,7 +436,10 @@ class TestPreAggCreateCommand extends QueryTest with BeforeAndAfterAll { carbonTable } - override def afterAll { + override def afterAll { + CarbonProperties.getInstance() + .addProperty(CarbonCommonConstants.CARBON_SHOW_DATAMAPS, + CarbonCommonConstants.CARBON_SHOW_DATAMAPS_DEFAULT) sql("drop database if exists otherDB cascade") sql("drop table if exists maintable") sql("drop table if exists PreAggMain") http://git-wip-us.apache.org/repos/asf/carbondata/blob/660190fb/integration/spark2/src/main/scala/org/apache/spark/sql/execution/command/table/CarbonShowTablesCommand.scala ---------------------------------------------------------------------- diff --git a/integration/spark2/src/main/scala/org/apache/spark/sql/execution/command/table/CarbonShowTablesCommand.scala b/integration/spark2/src/main/scala/org/apache/spark/sql/execution/command/table/CarbonShowTablesCommand.scala index e3c4e97..534703d 100644 --- a/integration/spark2/src/main/scala/org/apache/spark/sql/execution/command/table/CarbonShowTablesCommand.scala +++ b/integration/spark2/src/main/scala/org/apache/spark/sql/execution/command/table/CarbonShowTablesCommand.scala @@ -17,9 +17,7 @@ package org.apache.spark.sql.execution.command.table -import scala.collection.JavaConverters._ - -import org.apache.spark.sql.{CarbonEnv, Row, SparkSession} +import org.apache.spark.sql.{Row, SparkSession} import org.apache.spark.sql.catalyst.TableIdentifier import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference} import org.apache.spark.sql.execution.command.MetadataCommand @@ -44,13 +42,25 @@ private[sql] case class CarbonShowTablesCommand ( databaseName: Option[String], var tables = tableIdentifierPattern.map(catalog.listTables(db, _)).getOrElse(catalog.listTables(db)) val externalCatalog = sparkSession.sharedState.externalCatalog + // this method checks whether the table is mainTable or datamap based on property "isVisible" + def isMainTable(tableIdent: TableIdentifier) = { + var isMainTable = true + try { + isMainTable = externalCatalog.getTable(db, tableIdent.table).storage.properties + .getOrElse("isVisible", true).toString.toBoolean + } catch { + case ex: Throwable => + // ignore the exception for show tables + } + isMainTable + } // tables will be filtered for all the dataMaps to show only main tables tables.collect { - case tableIdent if externalCatalog.getTable(db, tableIdent.table).storage.properties - .getOrElse("isVisible", true).toString.toBoolean => + case tableIdent if isMainTable(tableIdent) => val isTemp = catalog.isTemporaryTable(tableIdent) Row(tableIdent.database.getOrElse("default"), tableIdent.table, isTemp) } + } } http://git-wip-us.apache.org/repos/asf/carbondata/blob/660190fb/integration/spark2/src/main/spark2.1/org/apache/spark/sql/hive/CarbonSessionState.scala ---------------------------------------------------------------------- diff --git a/integration/spark2/src/main/spark2.1/org/apache/spark/sql/hive/CarbonSessionState.scala b/integration/spark2/src/main/spark2.1/org/apache/spark/sql/hive/CarbonSessionState.scala index d45020b..1b7f0cb 100644 --- a/integration/spark2/src/main/spark2.1/org/apache/spark/sql/hive/CarbonSessionState.scala +++ b/integration/spark2/src/main/spark2.1/org/apache/spark/sql/hive/CarbonSessionState.scala @@ -36,6 +36,7 @@ import org.apache.spark.sql.optimizer.{CarbonIUDRule, CarbonLateDecodeRule, Carb import org.apache.spark.sql.parser.{CarbonHelperSqlAstBuilder, CarbonSpark2SqlParser, CarbonSparkSqlParser} import org.apache.spark.sql.{CarbonDatasourceHadoopRelation, CarbonEnv, ExperimentalMethods, SparkSession, Strategy} +import org.apache.carbondata.core.constants.CarbonCommonConstants import org.apache.carbondata.core.datamap.DataMapStoreManager import org.apache.carbondata.core.metadata.AbsoluteTableIdentifier import org.apache.carbondata.core.util.CarbonProperties @@ -332,9 +333,17 @@ class CarbonSqlAstBuilder(conf: SQLConf, parser: CarbonSpark2SqlParser, sparkSes } } - override def visitShowTables(ctx: ShowTablesContext): LogicalPlan = withOrigin(ctx) { - CarbonShowTablesCommand( - Option(ctx.db).map(_.getText), - Option(ctx.pattern).map(string)) + override def visitShowTables(ctx: ShowTablesContext): LogicalPlan = { + withOrigin(ctx) { + if (CarbonProperties.getInstance() + .getProperty(CarbonCommonConstants.CARBON_SHOW_DATAMAPS, + CarbonCommonConstants.CARBON_SHOW_DATAMAPS_DEFAULT).toBoolean) { + super.visitShowTables(ctx) + } else { + CarbonShowTablesCommand( + Option(ctx.db).map(_.getText), + Option(ctx.pattern).map(string)) + } + } } } http://git-wip-us.apache.org/repos/asf/carbondata/blob/660190fb/integration/spark2/src/main/spark2.2/org/apache/spark/sql/hive/CarbonSessionState.scala ---------------------------------------------------------------------- diff --git a/integration/spark2/src/main/spark2.2/org/apache/spark/sql/hive/CarbonSessionState.scala b/integration/spark2/src/main/spark2.2/org/apache/spark/sql/hive/CarbonSessionState.scala index b9425d6..a119bda 100644 --- a/integration/spark2/src/main/spark2.2/org/apache/spark/sql/hive/CarbonSessionState.scala +++ b/integration/spark2/src/main/spark2.2/org/apache/spark/sql/hive/CarbonSessionState.scala @@ -44,6 +44,7 @@ import org.apache.spark.sql.parser.{CarbonHelperSqlAstBuilder, CarbonSpark2SqlPa import org.apache.spark.sql.types.DecimalType import org.apache.spark.util.CarbonReflectionUtils +import org.apache.carbondata.core.constants.CarbonCommonConstants import org.apache.carbondata.core.datamap.DataMapStoreManager import org.apache.carbondata.core.metadata.AbsoluteTableIdentifier import org.apache.carbondata.core.util.CarbonProperties @@ -391,9 +392,17 @@ class CarbonSqlAstBuilder(conf: SQLConf, parser: CarbonSpark2SqlParser, sparkSes super.visitCreateTable(ctx) } - override def visitShowTables(ctx: ShowTablesContext): LogicalPlan = withOrigin(ctx) { - CarbonShowTablesCommand( - Option(ctx.db).map(_.getText), - Option(ctx.pattern).map(string)) + override def visitShowTables(ctx: ShowTablesContext): LogicalPlan = { + withOrigin(ctx) { + if (CarbonProperties.getInstance() + .getProperty(CarbonCommonConstants.CARBON_SHOW_DATAMAPS, + CarbonCommonConstants.CARBON_SHOW_DATAMAPS_DEFAULT).toBoolean) { + super.visitShowTables(ctx) + } else { + CarbonShowTablesCommand( + Option(ctx.db).map(_.getText), + Option(ctx.pattern).map(string)) + } + } } }