From 0fc396903a844c0df120fe22324528d3aef2728b Mon Sep 17 00:00:00 2001 From: Naresh P R Date: Thu, 18 Jul 2019 22:19:33 +0530 Subject: [PATCH] HIVE-22009 - CTLV with user specified location is not honoured --- .../creation/CreateTableLikeOperation.java | 16 ++- .../clientpositive/create_table_like_stats.q | 12 +- .../create_table_like_stats.q.out | 115 ++++++++++++++++++ 3 files changed, 137 insertions(+), 6 deletions(-) diff --git a/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/creation/CreateTableLikeOperation.java b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/creation/CreateTableLikeOperation.java index 4837d4405f..8a112619d3 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/creation/CreateTableLikeOperation.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/creation/CreateTableLikeOperation.java @@ -94,6 +94,8 @@ private Table createViewLikeTable(Table oldTable) throws HiveException { setExternalProperties(table); } + setUserSpecifiedLocation(table); + table.setFields(oldTable.getCols()); table.setPartCols(oldTable.getPartCols()); @@ -114,11 +116,7 @@ private Table createTableLikeTable(Table table) throws SemanticException, HiveEx table.setTableName(names[1]); table.setOwner(SessionState.getUserFromAuthenticator()); - if (desc.getLocation() != null) { - table.setDataLocation(new Path(desc.getLocation())); - } else { - table.unsetDataLocation(); - } + setUserSpecifiedLocation(table); setTableParameters(table); @@ -138,6 +136,14 @@ private Table createTableLikeTable(Table table) throws SemanticException, HiveEx return table; } + private void setUserSpecifiedLocation(Table table) { + if (desc.getLocation() != null) { + table.setDataLocation(new Path(desc.getLocation())); + } else { + table.unsetDataLocation(); + } + } + private void setTableParameters(Table tbl) throws HiveException { Set retainer = new HashSet(); 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 65c48164c8..b6f0ef8187 100644 --- a/ql/src/test/queries/clientpositive/create_table_like_stats.q +++ b/ql/src/test/queries/clientpositive/create_table_like_stats.q @@ -29,4 +29,14 @@ 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 7a1b578253..feb31fc500 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 @@ -213,3 +213,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 -- 2.18.0