Index: conf/hive-default.xml.template
===================================================================
--- conf/hive-default.xml.template (revision 1369952)
+++ conf/hive-default.xml.template (working copy)
@@ -1104,6 +1104,12 @@
+ hive.ddl.createtablelike.properties.whitelist
+
+ Table Properties to copy over when executing a Create Table Like.
+
+
+
hive.variable.substitute
true
This enables substitution using syntax like ${var} ${system:var} and ${env:var}.
Index: common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
===================================================================
--- common/src/java/org/apache/hadoop/hive/conf/HiveConf.java (revision 1369952)
+++ common/src/java/org/apache/hadoop/hive/conf/HiveConf.java (working copy)
@@ -311,6 +311,8 @@
// Default parameters for creating tables
NEWTABLEDEFAULTPARA("hive.table.parameters.default", ""),
+ // Parameters to copy over when creating a table with Create Table Like.
+ DDL_CTL_PARAMETERS_WHITELIST("hive.ddl.createtablelike.properties.whitelist", ""),
METASTORE_RAW_STORE_IMPL("hive.metastore.rawstore.impl",
"org.apache.hadoop.hive.metastore.ObjectStore"),
METASTORE_CONNECTION_DRIVER("javax.jdo.option.ConnectionDriverName",
Index: ql/src/test/results/clientpositive/create_like2.q.out
===================================================================
--- ql/src/test/results/clientpositive/create_like2.q.out (revision 0)
+++ ql/src/test/results/clientpositive/create_like2.q.out (working copy)
@@ -0,0 +1,55 @@
+PREHOOK: query: -- Tests the copying over of Table Parameters according to a HiveConf setting
+-- when doing a CREATE TABLE LIKE.
+
+CREATE TABLE table1(a INT, b STRING)
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: -- Tests the copying over of Table Parameters according to a HiveConf setting
+-- when doing a CREATE TABLE LIKE.
+
+CREATE TABLE table1(a INT, b STRING)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@table1
+PREHOOK: query: ALTER TABLE table1 SET TBLPROPERTIES ('a'='1', 'b'='2', 'c'='3', 'd' = '4')
+PREHOOK: type: ALTERTABLE_PROPERTIES
+PREHOOK: Input: default@table1
+PREHOOK: Output: default@table1
+POSTHOOK: query: ALTER TABLE table1 SET TBLPROPERTIES ('a'='1', 'b'='2', 'c'='3', 'd' = '4')
+POSTHOOK: type: ALTERTABLE_PROPERTIES
+POSTHOOK: Input: default@table1
+POSTHOOK: Output: default@table1
+PREHOOK: query: CREATE TABLE table2 LIKE table1
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: CREATE TABLE table2 LIKE table1
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@table2
+PREHOOK: query: DESC FORMATTED table2
+PREHOOK: type: DESCTABLE
+POSTHOOK: query: DESC FORMATTED table2
+POSTHOOK: type: DESCTABLE
+# col_name data_type comment
+
+a int None
+b string None
+
+# Detailed Table Information
+Database: default
+#### A masked pattern was here ####
+Protect Mode: None
+Retention: 0
+#### A masked pattern was here ####
+Table Type: MANAGED_TABLE
+Table Parameters:
+ a 1
+ c 3
+#### A masked pattern was here ####
+
+# Storage Information
+SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
+InputFormat: org.apache.hadoop.mapred.TextInputFormat
+OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
+Compressed: No
+Num Buckets: -1
+Bucket Columns: []
+Sort Columns: []
+Storage Desc Params:
+ serialization.format 1
Index: ql/src/test/queries/clientpositive/create_like2.q
===================================================================
--- ql/src/test/queries/clientpositive/create_like2.q (revision 0)
+++ ql/src/test/queries/clientpositive/create_like2.q (working copy)
@@ -0,0 +1,9 @@
+-- Tests the copying over of Table Parameters according to a HiveConf setting
+-- when doing a CREATE TABLE LIKE.
+
+CREATE TABLE table1(a INT, b STRING);
+ALTER TABLE table1 SET TBLPROPERTIES ('a'='1', 'b'='2', 'c'='3', 'd' = '4');
+
+SET hive.ddl.createtablelike.properties.whitelist=a,c,D;
+CREATE TABLE table2 LIKE table1;
+DESC FORMATTED table2;
Index: ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
===================================================================
--- ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java (revision 1369952)
+++ ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java (working copy)
@@ -32,6 +32,7 @@
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
@@ -3453,9 +3454,15 @@
tbl.unsetDataLocation();
}
- // we should reset table specific parameters including (stats, lastDDLTime etc.)
Map params = tbl.getParameters();
- params.clear();
+ // We should copy only those table parameters that are specified in the config.
+ String paramsStr = HiveConf.getVar(conf, HiveConf.ConfVars.DDL_CTL_PARAMETERS_WHITELIST);
+ if (paramsStr != null) {
+ List paramsList = Arrays.asList(paramsStr.split(","));
+ params.keySet().retainAll(paramsList);
+ } else {
+ params.clear();
+ }
if (crtTbl.isExternal()) {
tbl.setProperty("EXTERNAL", "TRUE");