You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@carbondata.apache.org by ja...@apache.org on 2017/12/24 13:26:01 UTC
[05/50] [abbrv] carbondata git commit: [CARBONDATA-1895] Fix issue of
create table if not exists
[CARBONDATA-1895] Fix issue of create table if not exists
Fix issue of create table if not exists
This closes #1657
Project: http://git-wip-us.apache.org/repos/asf/carbondata/repo
Commit: http://git-wip-us.apache.org/repos/asf/carbondata/commit/9f332be2
Tree: http://git-wip-us.apache.org/repos/asf/carbondata/tree/9f332be2
Diff: http://git-wip-us.apache.org/repos/asf/carbondata/diff/9f332be2
Branch: refs/heads/fgdatamap
Commit: 9f332be245598c73e4fe81495182293dc8aa6c32
Parents: 4a7fc66
Author: chenerlu <ch...@huawei.com>
Authored: Wed Dec 13 23:36:49 2017 +0800
Committer: Jacky Li <ja...@qq.com>
Committed: Sun Dec 17 10:52:19 2017 +0800
----------------------------------------------------------------------
.../TestCreateTableIfNotExists.scala | 47 ++++++++
.../table/CarbonCreateTableCommand.scala | 106 +++++++++----------
2 files changed, 100 insertions(+), 53 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/carbondata/blob/9f332be2/integration/spark-common-test/src/test/scala/org/apache/carbondata/spark/testsuite/createTable/TestCreateTableIfNotExists.scala
----------------------------------------------------------------------
diff --git a/integration/spark-common-test/src/test/scala/org/apache/carbondata/spark/testsuite/createTable/TestCreateTableIfNotExists.scala b/integration/spark-common-test/src/test/scala/org/apache/carbondata/spark/testsuite/createTable/TestCreateTableIfNotExists.scala
new file mode 100644
index 0000000..a8fcf12
--- /dev/null
+++ b/integration/spark-common-test/src/test/scala/org/apache/carbondata/spark/testsuite/createTable/TestCreateTableIfNotExists.scala
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.carbondata.spark.testsuite.createTable
+
+import org.apache.spark.sql.test.util.QueryTest
+import org.scalatest.BeforeAndAfterAll
+
+class TestCreateTableIfNotExists extends QueryTest with BeforeAndAfterAll {
+
+ override def beforeAll {
+ sql("use default")
+ sql("drop table if exists test")
+ }
+
+ test("test create table if not exists") {
+ sql("create table test(a int, b string) stored by 'carbondata'")
+ try {
+ // table creation should be successful
+ sql("create table if not exists test(a int, b string) stored by 'carbondata'")
+ assert(true)
+ } catch {
+ case ex: Exception =>
+ assert(false)
+ }
+ }
+
+ override def afterAll {
+ sql("use default")
+ sql("drop table if exists test")
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/carbondata/blob/9f332be2/integration/spark2/src/main/scala/org/apache/spark/sql/execution/command/table/CarbonCreateTableCommand.scala
----------------------------------------------------------------------
diff --git a/integration/spark2/src/main/scala/org/apache/spark/sql/execution/command/table/CarbonCreateTableCommand.scala b/integration/spark2/src/main/scala/org/apache/spark/sql/execution/command/table/CarbonCreateTableCommand.scala
index 78b9634..314e551 100644
--- a/integration/spark2/src/main/scala/org/apache/spark/sql/execution/command/table/CarbonCreateTableCommand.scala
+++ b/integration/spark2/src/main/scala/org/apache/spark/sql/execution/command/table/CarbonCreateTableCommand.scala
@@ -62,66 +62,66 @@ case class CarbonCreateTableCommand(
s"Table [$tableName] already exists under database [$dbName]")
throw new TableAlreadyExistsException(dbName, tableName)
}
- }
-
- val tablePath = tableLocation.getOrElse(
- CarbonEnv.getTablePath(Some(dbName), tableName)(sparkSession))
- tableInfo.setTablePath(tablePath)
- val tableIdentifier = AbsoluteTableIdentifier.from(tablePath, dbName, tableName)
+ } else {
+ val tablePath = tableLocation.getOrElse(
+ CarbonEnv.getTablePath(Some(dbName), tableName)(sparkSession))
+ tableInfo.setTablePath(tablePath)
+ val tableIdentifier = AbsoluteTableIdentifier.from(tablePath, dbName, tableName)
- // Add validation for sort scope when create table
- val sortScope = tableInfo.getFactTable.getTableProperties.asScala
- .getOrElse("sort_scope", CarbonCommonConstants.LOAD_SORT_SCOPE_DEFAULT)
- if (!CarbonUtil.isValidSortOption(sortScope)) {
- throw new InvalidConfigurationException(
- s"Passing invalid SORT_SCOPE '$sortScope', valid SORT_SCOPE are 'NO_SORT', 'BATCH_SORT'," +
- s" 'LOCAL_SORT' and 'GLOBAL_SORT' ")
- }
+ // Add validation for sort scope when create table
+ val sortScope = tableInfo.getFactTable.getTableProperties.asScala
+ .getOrElse("sort_scope", CarbonCommonConstants.LOAD_SORT_SCOPE_DEFAULT)
+ if (!CarbonUtil.isValidSortOption(sortScope)) {
+ throw new InvalidConfigurationException(
+ s"Passing invalid SORT_SCOPE '$sortScope', valid SORT_SCOPE are 'NO_SORT'," +
+ s" 'BATCH_SORT', 'LOCAL_SORT' and 'GLOBAL_SORT' ")
+ }
- if (tableInfo.getFactTable.getListOfColumns.size <= 0) {
- CarbonException.analysisException("Table should have at least one column.")
- }
+ if (tableInfo.getFactTable.getListOfColumns.size <= 0) {
+ CarbonException.analysisException("Table should have at least one column.")
+ }
- val operationContext = new OperationContext
- val createTablePreExecutionEvent: CreateTablePreExecutionEvent =
- CreateTablePreExecutionEvent(sparkSession, tableIdentifier, Some(tableInfo))
- OperationListenerBus.getInstance.fireEvent(createTablePreExecutionEvent, operationContext)
- val catalog = CarbonEnv.getInstance(sparkSession).carbonMetastore
- val carbonSchemaString = catalog.generateTableSchemaString(tableInfo, tableIdentifier)
- if (createDSTable) {
- try {
- val tablePath = tableIdentifier.getTablePath
- val carbonRelation = CarbonSparkUtil.createCarbonRelation(tableInfo, tablePath)
- val rawSchema = CarbonSparkUtil.getRawSchema(carbonRelation)
- sparkSession.sparkContext.setLocalProperty(EXECUTION_ID_KEY, null)
- sparkSession.sql(
- s"""CREATE TABLE $dbName.$tableName
- |(${ rawSchema })
- |USING org.apache.spark.sql.CarbonSource
- |OPTIONS (
- | tableName "$tableName",
- | dbName "$dbName",
- | tablePath "$tablePath",
- | path "$tablePath"
- | $carbonSchemaString)
+ val operationContext = new OperationContext
+ val createTablePreExecutionEvent: CreateTablePreExecutionEvent =
+ CreateTablePreExecutionEvent(sparkSession, tableIdentifier, Some(tableInfo))
+ OperationListenerBus.getInstance.fireEvent(createTablePreExecutionEvent, operationContext)
+ val catalog = CarbonEnv.getInstance(sparkSession).carbonMetastore
+ val carbonSchemaString = catalog.generateTableSchemaString(tableInfo, tableIdentifier)
+ if (createDSTable) {
+ try {
+ val tablePath = tableIdentifier.getTablePath
+ val carbonRelation = CarbonSparkUtil.createCarbonRelation(tableInfo, tablePath)
+ val rawSchema = CarbonSparkUtil.getRawSchema(carbonRelation)
+ sparkSession.sparkContext.setLocalProperty(EXECUTION_ID_KEY, null)
+ sparkSession.sql(
+ s"""CREATE TABLE $dbName.$tableName
+ |(${ rawSchema })
+ |USING org.apache.spark.sql.CarbonSource
+ |OPTIONS (
+ | tableName "$tableName",
+ | dbName "$dbName",
+ | tablePath "$tablePath",
+ | path "$tablePath"
+ | $carbonSchemaString)
""".stripMargin)
- } catch {
- case e: AnalysisException => throw e
- case e: Exception =>
- // call the drop table to delete the created table.
- CarbonEnv.getInstance(sparkSession).carbonMetastore
- .dropTable(tableIdentifier)(sparkSession)
+ } catch {
+ case e: AnalysisException => throw e
+ case e: Exception =>
+ // call the drop table to delete the created table.
+ CarbonEnv.getInstance(sparkSession).carbonMetastore
+ .dropTable(tableIdentifier)(sparkSession)
- val msg = s"Create table'$tableName' in database '$dbName' failed."
- LOGGER.audit(msg)
- LOGGER.error(e, msg)
- CarbonException.analysisException(msg)
+ val msg = s"Create table'$tableName' in database '$dbName' failed."
+ LOGGER.audit(msg)
+ LOGGER.error(e, msg)
+ CarbonException.analysisException(msg)
+ }
}
+ val createTablePostExecutionEvent: CreateTablePostExecutionEvent =
+ CreateTablePostExecutionEvent(sparkSession, tableIdentifier)
+ OperationListenerBus.getInstance.fireEvent(createTablePostExecutionEvent, operationContext)
+ LOGGER.audit(s"Table created with Database name [$dbName] and Table name [$tableName]")
}
- val createTablePostExecutionEvent: CreateTablePostExecutionEvent =
- CreateTablePostExecutionEvent(sparkSession, tableIdentifier)
- OperationListenerBus.getInstance.fireEvent(createTablePostExecutionEvent, operationContext)
- LOGGER.audit(s"Table created with Database name [$dbName] and Table name [$tableName]")
Seq.empty
}
}