diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java index acca49012b..236799016d 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java @@ -5000,6 +5000,7 @@ private int createTableLike(Hive db, CreateTableLikeDesc crtTbl) throws Exceptio tbl.setTableType(TableType.EXTERNAL_TABLE); } + setUserSpecifiedLocation(crtTbl, tbl); tbl.setFields(oldtbl.getCols()); tbl.setPartCols(oldtbl.getPartCols()); @@ -5041,11 +5042,7 @@ private int createTableLike(Hive db, CreateTableLikeDesc crtTbl) throws Exceptio // using old table object, hence reset the owner to current user for new table. tbl.setOwner(SessionState.getUserFromAuthenticator()); - if (crtTbl.getLocation() != null) { - tbl.setDataLocation(new Path(crtTbl.getLocation())); - } else { - tbl.unsetDataLocation(); - } + setUserSpecifiedLocation(crtTbl, tbl); Class serdeClass = oldtbl.getDeserializerClass(); @@ -5117,6 +5114,14 @@ private int createTableLike(Hive db, CreateTableLikeDesc crtTbl) throws Exceptio return 0; } + private void setUserSpecifiedLocation(CreateTableLikeDesc crtTbl, Table tbl) { + if (crtTbl.getLocation() != null) { + tbl.setDataLocation(new Path(crtTbl.getLocation())); + } else { + tbl.unsetDataLocation(); + } + } + /** * Create a new view. * diff --git a/ql/src/test/queries/clientpositive/create_table_like_stats.q b/ql/src/test/queries/clientpositive/create_table_like_stats.q index 8128d69f8a..0b20d46fe5 100644 --- a/ql/src/test/queries/clientpositive/create_table_like_stats.q +++ b/ql/src/test/queries/clientpositive/create_table_like_stats.q @@ -27,4 +27,15 @@ drop table a_n13; create table a_n13 like srcpart; desc formatted a_n13; + +CREATE TABLE emp_table (id int, name string, salary int); +insert into emp_table values(1,'aaaaa',20000); + +CREATE VIEW emp_view AS SELECT * FROM emp_table WHERE salary>10000; + +CREATE EXTERNAL TABLE emp_ext_table like emp_view STORED AS PARQUET LOCATION '${system:test.tmp.dir}/emp_ext_table'; +desc formatted emp_ext_table; + +CREATE TABLE emp_mm_table like emp_view STORED AS ORC LOCATION '${system:test.tmp.dir}/emp_mm_table'; +desc formatted emp_mm_table; diff --git a/ql/src/test/results/clientpositive/create_table_like_stats.q.out b/ql/src/test/results/clientpositive/create_table_like_stats.q.out index 4aa1b4f167..ac1dce42be 100644 --- a/ql/src/test/results/clientpositive/create_table_like_stats.q.out +++ b/ql/src/test/results/clientpositive/create_table_like_stats.q.out @@ -210,3 +210,118 @@ Bucket Columns: [] Sort Columns: [] Storage Desc Params: serialization.format 1 +PREHOOK: query: CREATE TABLE emp_table (id int, name string, salary int) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@emp_table +POSTHOOK: query: CREATE TABLE emp_table (id int, name string, salary int) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@emp_table +PREHOOK: query: insert into emp_table values(1,'aaaaa',20000) +PREHOOK: type: QUERY +PREHOOK: Input: _dummy_database@_dummy_table +PREHOOK: Output: default@emp_table +POSTHOOK: query: insert into emp_table values(1,'aaaaa',20000) +POSTHOOK: type: QUERY +POSTHOOK: Input: _dummy_database@_dummy_table +POSTHOOK: Output: default@emp_table +POSTHOOK: Lineage: emp_table.id SCRIPT [] +POSTHOOK: Lineage: emp_table.name SCRIPT [] +POSTHOOK: Lineage: emp_table.salary SCRIPT [] +PREHOOK: query: CREATE VIEW emp_view AS SELECT * FROM emp_table WHERE salary>10000 +PREHOOK: type: CREATEVIEW +PREHOOK: Input: default@emp_table +PREHOOK: Output: database:default +PREHOOK: Output: default@emp_view +POSTHOOK: query: CREATE VIEW emp_view AS SELECT * FROM emp_table WHERE salary>10000 +POSTHOOK: type: CREATEVIEW +POSTHOOK: Input: default@emp_table +POSTHOOK: Output: database:default +POSTHOOK: Output: default@emp_view +POSTHOOK: Lineage: emp_view.id SIMPLE [(emp_table)emp_table.FieldSchema(name:id, type:int, comment:null), ] +POSTHOOK: Lineage: emp_view.name SIMPLE [(emp_table)emp_table.FieldSchema(name:name, type:string, comment:null), ] +POSTHOOK: Lineage: emp_view.salary SIMPLE [(emp_table)emp_table.FieldSchema(name:salary, type:int, comment:null), ] +#### A masked pattern was here #### +PREHOOK: type: CREATETABLE +#### A masked pattern was here #### +PREHOOK: Output: database:default +PREHOOK: Output: default@emp_ext_table +#### A masked pattern was here #### +POSTHOOK: type: CREATETABLE +#### A masked pattern was here #### +POSTHOOK: Output: database:default +POSTHOOK: Output: default@emp_ext_table +PREHOOK: query: desc formatted emp_ext_table +PREHOOK: type: DESCTABLE +PREHOOK: Input: default@emp_ext_table +POSTHOOK: query: desc formatted emp_ext_table +POSTHOOK: type: DESCTABLE +POSTHOOK: Input: default@emp_ext_table +# col_name data_type comment +id int +name string +salary int + +# Detailed Table Information +Database: default +#### A masked pattern was here #### +Retention: 0 +#### A masked pattern was here #### +Table Type: EXTERNAL_TABLE +Table Parameters: + EXTERNAL TRUE + bucketing_version 2 +#### A masked pattern was here #### + +# Storage Information +SerDe Library: org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe +InputFormat: org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat +OutputFormat: org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat +Compressed: No +Num Buckets: -1 +Bucket Columns: [] +Sort Columns: [] +Storage Desc Params: + serialization.format 1 +#### A masked pattern was here #### +PREHOOK: type: CREATETABLE +#### A masked pattern was here #### +PREHOOK: Output: database:default +PREHOOK: Output: default@emp_mm_table +#### A masked pattern was here #### +POSTHOOK: type: CREATETABLE +#### A masked pattern was here #### +POSTHOOK: Output: database:default +POSTHOOK: Output: default@emp_mm_table +PREHOOK: query: desc formatted emp_mm_table +PREHOOK: type: DESCTABLE +PREHOOK: Input: default@emp_mm_table +POSTHOOK: query: desc formatted emp_mm_table +POSTHOOK: type: DESCTABLE +POSTHOOK: Input: default@emp_mm_table +# col_name data_type comment +id int +name string +salary int + +# Detailed Table Information +Database: default +#### A masked pattern was here #### +Retention: 0 +#### A masked pattern was here #### +Table Type: MANAGED_TABLE +Table Parameters: + bucketing_version 2 +#### A masked pattern was here #### + +# Storage Information +SerDe Library: org.apache.hadoop.hive.ql.io.orc.OrcSerde +InputFormat: org.apache.hadoop.hive.ql.io.orc.OrcInputFormat +OutputFormat: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat +Compressed: No +Num Buckets: -1 +Bucket Columns: [] +Sort Columns: [] +Storage Desc Params: + serialization.format 1