You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ng...@apache.org on 2020/07/22 05:18:15 UTC
[hive] branch master updated: HIVE-23717: Support session config to
create external purge table by default and MANAGED keyword in create
table(Xiaomeng Zhang reviewed by Naveen Gangam)
This is an automated email from the ASF dual-hosted git repository.
ngangam pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push:
new 5e31886 HIVE-23717: Support session config to create external purge table by default and MANAGED keyword in create table(Xiaomeng Zhang reviewed by Naveen Gangam)
5e31886 is described below
commit 5e31886986ed074d8a5ac9016e1ef7bd851e8ce1
Author: xiaomeng@cloudera.com <xi...@cloudera.com>
AuthorDate: Fri Jun 12 15:45:11 2020 -0700
HIVE-23717: Support session config to create external purge table by default and MANAGED keyword in create table(Xiaomeng Zhang reviewed by Naveen Gangam)
Change-Id: I3b1adc3eb63596ebc1955d116498745fa9356547
---
.../java/org/apache/hadoop/hive/conf/HiveConf.java | 19 ++++
.../java/org/apache/hive/jdbc/TestJdbcDriver2.java | 15 +++
.../org/apache/hive/jdbc/TestRestrictedList.java | 17 +++-
.../java/org/apache/hive/jdbc/HiveConnection.java | 12 ++-
jdbc/src/java/org/apache/hive/jdbc/Utils.java | 2 +
.../apache/hadoop/hive/ql/parse/CreateDDLParser.g | 110 +++++++++++++++++++++
.../apache/hadoop/hive/ql/parse/HiveLexerParent.g | 1 +
.../org/apache/hadoop/hive/ql/parse/HiveParser.g | 39 +-------
.../hadoop/hive/ql/parse/IdentifiersParser.g | 2 +-
.../hadoop/hive/ql/parse/SemanticAnalyzer.java | 23 ++++-
.../hadoop/hive/ql/processors/SetProcessor.java | 4 +
11 files changed, 196 insertions(+), 48 deletions(-)
diff --git a/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java b/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
index 2f3ee46..2a32d89 100644
--- a/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
+++ b/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
@@ -4219,6 +4219,17 @@ public class HiveConf extends Configuration {
+ "When it is set to false, only [a-zA-Z_0-9]+ are supported.\n"
+ "The supported special characters are %&'()*+,-./:;<=>?[]_|{}$^!~#@ and space. This flag applies only to"
+ " quoted table names.\nThe default value is true."),
+ // This config is temporary and will be deprecated later
+ CREATE_TABLE_AS_EXTERNAL("hive.create.as.external.legacy", false,
+ "When this flag set to true. it will ignore hive.create.as.acid and hive.create.as.insert.only,"
+ + "create external purge table by default."),
+ /**
+ * Expose MetastoreConf.CREATE_TABLES_AS_ACID in HiveConf
+ * so user can set hive.create.as.acid in session level
+ */
+ CREATE_TABLES_AS_ACID("hive.create.as.acid", false,
+ "Whether the eligible tables should be created as full ACID by default. Does \n" +
+ "not apply to external tables, the ones using storage handlers, etc."),
HIVE_CREATE_TABLES_AS_INSERT_ONLY("hive.create.as.insert.only", false,
"Whether the eligible tables should be created as ACID insert-only by default. Does \n" +
"not apply to external tables, the ones using storage handlers, etc."),
@@ -6089,6 +6100,8 @@ public class HiveConf extends Configuration {
ConfVars.AGGR_JOIN_TRANSPOSE.varname,
ConfVars.BYTESPERREDUCER.varname,
ConfVars.CLIENT_STATS_COUNTERS.varname,
+ ConfVars.CREATE_TABLES_AS_ACID.varname,
+ ConfVars.CREATE_TABLE_AS_EXTERNAL.varname,
ConfVars.DEFAULTPARTITIONNAME.varname,
ConfVars.DROP_IGNORES_NON_EXISTENT.varname,
ConfVars.HIVECOUNTERGROUP.varname,
@@ -6112,6 +6125,7 @@ public class HiveConf extends Configuration {
ConfVars.HIVE_CHECK_CROSS_PRODUCT.varname,
ConfVars.HIVE_CLI_TEZ_SESSION_ASYNC.varname,
ConfVars.HIVE_COMPAT.varname,
+ ConfVars.HIVE_CREATE_TABLES_AS_INSERT_ONLY.varname,
ConfVars.HIVE_DISPLAY_PARTITION_COLUMNS_SEPARATELY.varname,
ConfVars.HIVE_ERROR_ON_EMPTY_PARTITION.varname,
ConfVars.HIVE_EXECUTION_ENGINE.varname,
@@ -6577,6 +6591,11 @@ public class HiveConf extends Configuration {
+ ") or using Hive 1.X releases.";
}
+ public static String generateDeprecationWarning() {
+ return "This config will be deprecated and may not be available in the future "
+ + "versions. Please adjust DDL towards the new semantics.";
+ }
+
private static final Object reverseMapLock = new Object();
private static HashMap<String, ConfVars> reverseMap = null;
diff --git a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java b/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java
index b4a8bad..fb38b8c 100644
--- a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java
+++ b/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java
@@ -296,6 +296,21 @@ public class TestJdbcDriver2 {
@Test
/**
+ * Test setting create external purge table by default in jdbc config
+ * @throws SQLException
+ */
+ public void testCreateTableAsExternal() throws SQLException {
+ Connection con = getConnection(testDbName + ";hiveCreateAsExternalLegacy=true");
+ Statement stmt = con.createStatement();
+ ResultSet res = stmt.executeQuery("set hive.create.as.external.legacy");
+ assertTrue("ResultSet is empty", res.next());
+ assertEquals("hive.create.as.external.legacy=true", res.getObject(1));
+ stmt.close();
+ con.close();
+ }
+
+ @Test
+ /**
* Test running parallel queries (with parallel queries disabled).
* Should be serialized in the order of execution.
* @throws Exception
diff --git a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestRestrictedList.java b/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestRestrictedList.java
index d5641d9..272a355 100644
--- a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestRestrictedList.java
+++ b/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestRestrictedList.java
@@ -16,6 +16,7 @@
package org.apache.hive.jdbc;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -114,6 +115,8 @@ public class TestRestrictedList {
addToExpectedRestrictedMap("hive.zookeeper.ssl.keystore.password");
addToExpectedRestrictedMap("hive.zookeeper.ssl.truststore.location");
addToExpectedRestrictedMap("hive.zookeeper.ssl.truststore.password");
+
+ checkRestrictedListMatch();
}
@AfterClass
@@ -130,8 +133,6 @@ public class TestRestrictedList {
assertTrue("Test setup failed. MiniHS2 is not initialized",
miniHS2 != null && miniHS2.isStarted());
- checkRestrictedListMatch();
-
try (Connection hs2Conn = DriverManager.getConnection(miniHS2.getJdbcURL(), "hive", "hive");
Statement stmt = hs2Conn.createStatement();) {
for (Map.Entry<String, String> entry : expectedRestrictedMap.entrySet()) {
@@ -151,8 +152,18 @@ public class TestRestrictedList {
}
}
+ @Test
+ public void testNotInRestrictedList() throws Exception {
+ assertFalse("Config hive.create.as.acid should not in RestrictedList",
+ expectedRestrictedMap.containsKey("hive.create.as.acid"));
+ assertFalse("Config hive.create.as.insert.only should not in RestrictedList",
+ expectedRestrictedMap.containsKey("hive.create.as.insert.only"));
+ assertFalse("Config hive.create.as.external.legacy should not in RestrictedList",
+ expectedRestrictedMap.containsKey("hive.create.as.external.legacy"));
+ }
+
// This test will make sure that every entry in hive.conf.restricted.list, has a test here
- private void checkRestrictedListMatch(){
+ private static void checkRestrictedListMatch(){
HiveConf.ConfVars restrictedConfVar = HiveConf.getConfVars("hive.conf.restricted.list");
String definedRestrictedListString = HiveConf.getVar(hiveConf, restrictedConfVar);
Set<String> definedRestrictedSet = new HashSet<String>();
diff --git a/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java b/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java
index 56f1bd5..fd0f569 100644
--- a/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java
+++ b/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java
@@ -844,11 +844,17 @@ public class HiveConnection implements java.sql.Connection {
}
// set the session configuration
- Map<String, String> sessVars = connParams.getSessionVars();
- if (sessVars.containsKey(HiveAuthConstants.HS2_PROXY_USER)) {
+ if (sessConfMap.containsKey(HiveAuthConstants.HS2_PROXY_USER)) {
openConf.put(HiveAuthConstants.HS2_PROXY_USER,
- sessVars.get(HiveAuthConstants.HS2_PROXY_USER));
+ sessConfMap.get(HiveAuthConstants.HS2_PROXY_USER));
}
+
+ // set create external purge table by default
+ if (sessConfMap.containsKey(JdbcConnectionParams.CREATE_TABLE_AS_EXTERNAL)) {
+ openConf.put("set:hiveconf:hive.create.as.external.legacy",
+ sessConfMap.get(JdbcConnectionParams.CREATE_TABLE_AS_EXTERNAL).toLowerCase());
+ }
+
openReq.setConfiguration(openConf);
// Store the user name in the open request in case no non-sasl authentication
diff --git a/jdbc/src/java/org/apache/hive/jdbc/Utils.java b/jdbc/src/java/org/apache/hive/jdbc/Utils.java
index eb7c0c7..90412e4 100644
--- a/jdbc/src/java/org/apache/hive/jdbc/Utils.java
+++ b/jdbc/src/java/org/apache/hive/jdbc/Utils.java
@@ -142,6 +142,8 @@ public class Utils {
static final String WM_POOL = "wmPool";
// Cookie prefix
static final String HTTP_COOKIE_PREFIX = "http.cookie.";
+ // Create external purge table by default
+ static final String CREATE_TABLE_AS_EXTERNAL = "hiveCreateAsExternalLegacy";
// We support ways to specify application name modeled after some existing DBs, since
// there's no standard approach.
diff --git a/parser/src/java/org/apache/hadoop/hive/ql/parse/CreateDDLParser.g b/parser/src/java/org/apache/hadoop/hive/ql/parse/CreateDDLParser.g
new file mode 100644
index 0000000..ce01aea
--- /dev/null
+++ b/parser/src/java/org/apache/hadoop/hive/ql/parse/CreateDDLParser.g
@@ -0,0 +1,110 @@
+/**
+ 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.
+*/
+parser grammar CreateDDLParser;
+
+options
+{
+output=AST;
+ASTLabelType=ASTNode;
+backtrack=false;
+k=3;
+}
+
+@members {
+ @Override
+ public Object recoverFromMismatchedSet(IntStream input,
+ RecognitionException re, BitSet follow) throws RecognitionException {
+ throw re;
+ }
+ @Override
+ public void displayRecognitionError(String[] tokenNames,
+ RecognitionException e) {
+ gParent.errors.add(new ParseError(gParent, e, tokenNames));
+ }
+}
+
+@rulecatch {
+catch (RecognitionException e) {
+ throw e;
+}
+}
+
+//----------------------- Rules for parsing createtable -----------------------------
+createTableStatement
+@init { gParent.pushMsg("create table statement", state); }
+@after { gParent.popMsg(state); }
+ : KW_CREATE (temp=KW_TEMPORARY)? (trans=KW_TRANSACTIONAL)? (ext=KW_EXTERNAL)? KW_TABLE ifNotExists? name=tableName
+ ( like=KW_LIKE likeName=tableName
+ tableRowFormat?
+ tableFileFormat?
+ tableLocation?
+ tablePropertiesPrefixed?
+ | (LPAREN columnNameTypeOrConstraintList RPAREN)?
+ tableComment?
+ createTablePartitionSpec?
+ tableBuckets?
+ tableSkewed?
+ tableRowFormat?
+ tableFileFormat?
+ tableLocation?
+ tablePropertiesPrefixed?
+ (KW_AS selectStatementWithCTE)?
+ )
+ -> ^(TOK_CREATETABLE $name $temp? $trans? $ext? ifNotExists?
+ ^(TOK_LIKETABLE $likeName?)
+ columnNameTypeOrConstraintList?
+ tableComment?
+ createTablePartitionSpec?
+ tableBuckets?
+ tableSkewed?
+ tableRowFormat?
+ tableFileFormat?
+ tableLocation?
+ tablePropertiesPrefixed?
+ selectStatementWithCTE?
+ )
+ | KW_CREATE mgd=KW_MANAGED KW_TABLE ifNotExists? name=tableName
+ ( like=KW_LIKE likeName=tableName
+ tableRowFormat?
+ tableFileFormat?
+ tableLocation?
+ tablePropertiesPrefixed?
+ | (LPAREN columnNameTypeOrConstraintList RPAREN)?
+ tableComment?
+ createTablePartitionSpec?
+ tableBuckets?
+ tableSkewed?
+ tableRowFormat?
+ tableFileFormat?
+ tableLocation?
+ tablePropertiesPrefixed?
+ (KW_AS selectStatementWithCTE)?
+ )
+ -> ^(TOK_CREATETABLE $name $mgd ifNotExists?
+ ^(TOK_LIKETABLE $likeName?)
+ columnNameTypeOrConstraintList?
+ tableComment?
+ createTablePartitionSpec?
+ tableBuckets?
+ tableSkewed?
+ tableRowFormat?
+ tableFileFormat?
+ tableLocation?
+ tablePropertiesPrefixed?
+ selectStatementWithCTE?
+ )
+ ;
diff --git a/parser/src/java/org/apache/hadoop/hive/ql/parse/HiveLexerParent.g b/parser/src/java/org/apache/hadoop/hive/ql/parse/HiveLexerParent.g
index 5bd831d..8bd87db 100644
--- a/parser/src/java/org/apache/hadoop/hive/ql/parse/HiveLexerParent.g
+++ b/parser/src/java/org/apache/hadoop/hive/ql/parse/HiveLexerParent.g
@@ -153,6 +153,7 @@ KW_DISABLE: 'DISABLE' | 'DISABLED';
KW_EXECUTED: 'EXECUTED';
KW_EXECUTE: 'EXECUTE';
KW_LOCATION: 'LOCATION';
+KW_MANAGED: 'MANAGED';
KW_MANAGEDLOCATION: 'MANAGEDLOCATION';
KW_TABLESAMPLE: 'TABLESAMPLE';
KW_BUCKET: 'BUCKET';
diff --git a/parser/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g b/parser/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
index daf2d65..a98cae3 100644
--- a/parser/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
+++ b/parser/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
@@ -24,7 +24,8 @@ ASTLabelType=ASTNode;
backtrack=false;
k=3;
}
-import AlterClauseParser, SelectClauseParser, FromClauseParser, IdentifiersParser, ResourcePlanParser;
+
+import AlterClauseParser, SelectClauseParser, FromClauseParser, IdentifiersParser, ResourcePlanParser, CreateDDLParser;
tokens {
TOK_INSERT;
@@ -656,6 +657,7 @@ import org.apache.hadoop.hive.conf.HiveConf;
xlateMap.put("KW_PATH", "PATH");
xlateMap.put("KW_AST", "AST");
xlateMap.put("KW_TRANSACTIONAL", "TRANSACTIONAL");
+ xlateMap.put("KW_MANAGED", "MANAGED");
// Operators
xlateMap.put("DOT", ".");
@@ -1150,41 +1152,6 @@ databaseComment
-> ^(TOK_DATABASECOMMENT $comment)
;
-createTableStatement
-@init { pushMsg("create table statement", state); }
-@after { popMsg(state); }
- : KW_CREATE (temp=KW_TEMPORARY)? (trans=KW_TRANSACTIONAL)? (ext=KW_EXTERNAL)? KW_TABLE ifNotExists? name=tableName
- ( like=KW_LIKE likeName=tableName
- tableRowFormat?
- tableFileFormat?
- tableLocation?
- tablePropertiesPrefixed?
- | (LPAREN columnNameTypeOrConstraintList RPAREN)?
- tableComment?
- createTablePartitionSpec?
- tableBuckets?
- tableSkewed?
- tableRowFormat?
- tableFileFormat?
- tableLocation?
- tablePropertiesPrefixed?
- (KW_AS selectStatementWithCTE)?
- )
- -> ^(TOK_CREATETABLE $name $temp? $trans? $ext? ifNotExists?
- ^(TOK_LIKETABLE $likeName?)
- columnNameTypeOrConstraintList?
- tableComment?
- createTablePartitionSpec?
- tableBuckets?
- tableSkewed?
- tableRowFormat?
- tableFileFormat?
- tableLocation?
- tablePropertiesPrefixed?
- selectStatementWithCTE?
- )
- ;
-
truncateTableStatement
@init { pushMsg("truncate table statement", state); }
@after { popMsg(state); }
diff --git a/parser/src/java/org/apache/hadoop/hive/ql/parse/IdentifiersParser.g b/parser/src/java/org/apache/hadoop/hive/ql/parse/IdentifiersParser.g
index 783846a..4e8cf19 100644
--- a/parser/src/java/org/apache/hadoop/hive/ql/parse/IdentifiersParser.g
+++ b/parser/src/java/org/apache/hadoop/hive/ql/parse/IdentifiersParser.g
@@ -833,7 +833,7 @@ nonReserved
| KW_ENABLE | KW_ENFORCED | KW_ESCAPED | KW_EXCLUSIVE | KW_EXPLAIN | KW_EXPORT | KW_FIELDS | KW_FILE | KW_FILEFORMAT
| KW_FIRST | KW_FORMAT | KW_FORMATTED | KW_FUNCTIONS | KW_HOLD_DDLTIME | KW_HOUR | KW_IDXPROPERTIES | KW_IGNORE
| KW_INDEX | KW_INDEXES | KW_INPATH | KW_INPUTDRIVER | KW_INPUTFORMAT | KW_ITEMS | KW_JAR | KW_JOINCOST | KW_KILL
- | KW_KEYS | KW_KEY_TYPE | KW_LAST | KW_LIMIT | KW_OFFSET | KW_LINES | KW_LOAD | KW_LOCATION | KW_LOCK | KW_LOCKS | KW_LOGICAL | KW_LONG
+ | KW_KEYS | KW_KEY_TYPE | KW_LAST | KW_LIMIT | KW_OFFSET | KW_LINES | KW_LOAD | KW_LOCATION | KW_LOCK | KW_LOCKS | KW_LOGICAL | KW_LONG | KW_MANAGED
| KW_MANAGEDLOCATION | KW_MAPJOIN | KW_MATERIALIZED | KW_METADATA | KW_MINUTE | KW_MONTH | KW_MSCK | KW_NOSCAN | KW_NO_DROP | KW_NULLS | KW_OFFLINE
| KW_OPTION | KW_OUTPUTDRIVER | KW_OUTPUTFORMAT | KW_OVERWRITE | KW_OWNER | KW_PARTITIONED | KW_PARTITIONS | KW_PLUS
| KW_PRINCIPALS | KW_PROTECTION | KW_PURGE | KW_QUERY | KW_QUARTER | KW_READ | KW_READONLY | KW_REBUILD | KW_RECORDREADER | KW_RECORDWRITER
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
index 3c1741f..1cbe014 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
@@ -13092,7 +13092,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
private Map<String, String> validateAndAddDefaultProperties(
Map<String, String> tblProp, boolean isExt, StorageFormat storageFormat,
String qualifiedTableName, List<Order> sortCols, boolean isMaterialization,
- boolean isTemporaryTable, boolean isTransactional) throws SemanticException {
+ boolean isTemporaryTable, boolean isTransactional, boolean isManaged) throws SemanticException {
Map<String, String> retValue = Optional.ofNullable(tblProp).orElseGet(HashMap::new);
String paraString = HiveConf.getVar(conf, ConfVars.NEWTABLEDEFAULTPARA);
@@ -13123,6 +13123,12 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
boolean makeInsertOnly = !isTemporaryTable && HiveConf.getBoolVar(
conf, ConfVars.HIVE_CREATE_TABLES_AS_INSERT_ONLY);
boolean makeAcid = !isTemporaryTable && makeAcid();
+ // if not specify managed table and create.table.as.external is true
+ // ignore makeInsertOnly and makeAcid.
+ if (!isManaged && HiveConf.getBoolVar(conf, ConfVars.CREATE_TABLE_AS_EXTERNAL)) {
+ makeInsertOnly = false;
+ makeAcid = false;
+ }
if ((makeInsertOnly || makeAcid || isTransactional)
&& !isExt && !isMaterialization && StringUtils.isBlank(storageFormat.getStorageHandler())
//don't overwrite user choice if transactional attribute is explicitly set
@@ -13232,6 +13238,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
boolean ifNotExists = false;
boolean isExt = false;
boolean isTemporary = false;
+ boolean isManaged = false;
boolean isMaterialization = false;
boolean isTransactional = false;
ASTNode selectStmt = null;
@@ -13271,6 +13278,9 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
case HiveParser.KW_EXTERNAL:
isExt = true;
break;
+ case HiveParser.KW_MANAGED:
+ isManaged = true;
+ break;
case HiveParser.KW_TEMPORARY:
isTemporary = true;
isMaterialization = MATERIALIZATION_MARKER.equals(child.getText());
@@ -13448,7 +13458,8 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
"Partition columns can only declared using their name and types in regular CREATE TABLE statements");
}
tblProps = validateAndAddDefaultProperties(
- tblProps, isExt, storageFormat, dbDotTab, sortCols, isMaterialization, isTemporary, isTransactional);
+ tblProps, isExt, storageFormat, dbDotTab, sortCols, isMaterialization, isTemporary,
+ isTransactional, isManaged);
addDbAndTabToOutputs(new String[] {qualifiedTabName.getDb(), qualifiedTabName.getTable()},
TableType.MANAGED_TABLE, isTemporary, tblProps);
@@ -13476,7 +13487,7 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
qualifiedTabName.getTable() + " cannot be declared transactional because it's an external table");
}
tblProps = validateAndAddDefaultProperties(tblProps, isExt, storageFormat, dbDotTab, sortCols, isMaterialization,
- isTemporary, isTransactional);
+ isTemporary, isTransactional, isManaged);
addDbAndTabToOutputs(new String[] {qualifiedTabName.getDb(), qualifiedTabName.getTable()},
TableType.MANAGED_TABLE, false, tblProps);
@@ -13499,7 +13510,8 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
case CTLT: // create table like <tbl_name>
tblProps = validateAndAddDefaultProperties(
- tblProps, isExt, storageFormat, dbDotTab, sortCols, isMaterialization, isTemporary, isTransactional);
+ tblProps, isExt, storageFormat, dbDotTab, sortCols, isMaterialization, isTemporary,
+ isTransactional, isManaged);
addDbAndTabToOutputs(new String[] {qualifiedTabName.getDb(), qualifiedTabName.getTable()},
TableType.MANAGED_TABLE, isTemporary, tblProps);
@@ -13584,7 +13596,8 @@ public class SemanticAnalyzer extends BaseSemanticAnalyzer {
}
tblProps = validateAndAddDefaultProperties(
- tblProps, isExt, storageFormat, dbDotTab, sortCols, isMaterialization, isTemporary, isTransactional);
+ tblProps, isExt, storageFormat, dbDotTab, sortCols, isMaterialization, isTemporary,
+ isTransactional, isManaged);
addDbAndTabToOutputs(new String[] {qualifiedTabName.getDb(), qualifiedTabName.getTable()},
TableType.MANAGED_TABLE, isTemporary, tblProps);
tableDesc = new CreateTableDesc(qualifiedTabName, isExt, isTemporary, cols,
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/processors/SetProcessor.java b/ql/src/java/org/apache/hadoop/hive/ql/processors/SetProcessor.java
index 82d275e..b4fbd8f 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/processors/SetProcessor.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/processors/SetProcessor.java
@@ -264,6 +264,10 @@ public class SetProcessor implements CommandProcessor {
LOG.warn(result);
}
}
+ if (HiveConf.ConfVars.CREATE_TABLE_AS_EXTERNAL.varname.equals(key)) {
+ result = HiveConf.generateDeprecationWarning();
+ LOG.warn(result);
+ }
if (register) {
ss.getOverriddenConfigurations().put(key, value);
}