diff --git data/files/test2.dat data/files/test2.dat new file mode 100644 index 0000000..4b284c1 --- /dev/null +++ data/files/test2.dat @@ -0,0 +1,6 @@ +101 +202 +303 +404 +505 +606 \ No newline at end of file diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java index 3001575..5a8118c 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/ImportSemanticAnalyzer.java @@ -309,7 +309,8 @@ public class ImportSemanticAnalyzer extends BaseSemanticAnalyzer { Warehouse.makePartPath(addPartitionDesc.getPartSpec())); } } else { - tgtPath = new Path(tblDesc.getLocation()); + tgtPath = new Path(tblDesc.getLocation(), + Warehouse.makePartPath(addPartitionDesc.getPartSpec())); } checkTargetLocationEmpty(fs, tgtPath); addPartitionDesc.setLocation(tgtPath.toString()); diff --git ql/src/test/queries/clientpositive/exim_19_00_part_external_location.q ql/src/test/queries/clientpositive/exim_19_00_part_external_location.q new file mode 100644 index 0000000..defc118 --- /dev/null +++ ql/src/test/queries/clientpositive/exim_19_00_part_external_location.q @@ -0,0 +1,36 @@ +set hive.test.mode=true; +set hive.test.mode.prefix=; +set hive.test.mode.nosamplelist=exim_department,exim_employee; + +create table exim_employee ( emp_id int comment "employee id") + comment "employee table" + partitioned by (emp_country string comment "two char iso code", emp_state string comment "free text") + stored as textfile + tblproperties("creator"="krishna"); +load data local inpath "../data/files/test.dat" + into table exim_employee partition (emp_country="in", emp_state="tn"); +load data local inpath "../data/files/test2.dat" + into table exim_employee partition (emp_country="in", emp_state="ka"); +!rm -rf ../build/ql/test/data/exports/exim_employee; +export table exim_employee to 'ql/test/data/exports/exim_employee'; +drop table exim_employee; + +create database importer; +use importer; + +!rm -rf ../build/ql/test/data/tablestore/exim_employee; + +import external table exim_employee + from 'ql/test/data/exports/exim_employee' + location 'ql/test/data/tablestore/exim_employee'; +describe extended exim_employee; +show table extended like exim_employee; +show table extended like exim_employee partition (emp_country="in", emp_state="tn"); +show table extended like exim_employee partition (emp_country="in", emp_state="ka"); +!rm -rf ../build/ql/test/data/exports/exim_employee; +select * from exim_employee; +!rm -rf ../build/ql/test/data/tablestore/exim_employee; +select * from exim_employee; +drop table exim_employee; + +drop database importer; diff --git ql/src/test/results/clientpositive/exim_19_00_part_external_location.q.out ql/src/test/results/clientpositive/exim_19_00_part_external_location.q.out new file mode 100644 index 0000000..34465d9 --- /dev/null +++ ql/src/test/results/clientpositive/exim_19_00_part_external_location.q.out @@ -0,0 +1,178 @@ +PREHOOK: query: create table exim_employee ( emp_id int comment "employee id") + comment "employee table" + partitioned by (emp_country string comment "two char iso code", emp_state string comment "free text") + stored as textfile + tblproperties("creator"="krishna") +PREHOOK: type: CREATETABLE +POSTHOOK: query: create table exim_employee ( emp_id int comment "employee id") + comment "employee table" + partitioned by (emp_country string comment "two char iso code", emp_state string comment "free text") + stored as textfile + tblproperties("creator"="krishna") +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@exim_employee +PREHOOK: query: load data local inpath "../data/files/test.dat" + into table exim_employee partition (emp_country="in", emp_state="tn") +PREHOOK: type: LOAD +PREHOOK: Output: default@exim_employee +POSTHOOK: query: load data local inpath "../data/files/test.dat" + into table exim_employee partition (emp_country="in", emp_state="tn") +POSTHOOK: type: LOAD +POSTHOOK: Output: default@exim_employee +POSTHOOK: Output: default@exim_employee@emp_country=in/emp_state=tn +PREHOOK: query: load data local inpath "../data/files/test2.dat" + into table exim_employee partition (emp_country="in", emp_state="ka") +PREHOOK: type: LOAD +PREHOOK: Output: default@exim_employee +POSTHOOK: query: load data local inpath "../data/files/test2.dat" + into table exim_employee partition (emp_country="in", emp_state="ka") +POSTHOOK: type: LOAD +POSTHOOK: Output: default@exim_employee +POSTHOOK: Output: default@exim_employee@emp_country=in/emp_state=ka +PREHOOK: query: export table exim_employee to 'ql/test/data/exports/exim_employee' +PREHOOK: type: EXPORT +PREHOOK: Input: default@exim_employee@emp_country=in/emp_state=ka +PREHOOK: Input: default@exim_employee@emp_country=in/emp_state=tn +PREHOOK: Output: pfile:/Users/krishnak/Projects/hdp/sources/hive-git-apache/build/ql/test/data/exports/exim_employee +POSTHOOK: query: export table exim_employee to 'ql/test/data/exports/exim_employee' +POSTHOOK: type: EXPORT +POSTHOOK: Input: default@exim_employee@emp_country=in/emp_state=ka +POSTHOOK: Input: default@exim_employee@emp_country=in/emp_state=tn +POSTHOOK: Output: pfile:/Users/krishnak/Projects/hdp/sources/hive-git-apache/build/ql/test/data/exports/exim_employee +PREHOOK: query: drop table exim_employee +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@exim_employee +PREHOOK: Output: default@exim_employee +POSTHOOK: query: drop table exim_employee +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@exim_employee +POSTHOOK: Output: default@exim_employee +PREHOOK: query: create database importer +PREHOOK: type: CREATEDATABASE +POSTHOOK: query: create database importer +POSTHOOK: type: CREATEDATABASE +PREHOOK: query: use importer +PREHOOK: type: SWITCHDATABASE +POSTHOOK: query: use importer +POSTHOOK: type: SWITCHDATABASE +PREHOOK: query: import external table exim_employee + from 'ql/test/data/exports/exim_employee' + location 'ql/test/data/tablestore/exim_employee' +PREHOOK: type: IMPORT +POSTHOOK: query: import external table exim_employee + from 'ql/test/data/exports/exim_employee' + location 'ql/test/data/tablestore/exim_employee' +POSTHOOK: type: IMPORT +POSTHOOK: Output: importer@exim_employee +POSTHOOK: Output: importer@exim_employee@emp_country=in/emp_state=ka +POSTHOOK: Output: importer@exim_employee@emp_country=in/emp_state=tn +PREHOOK: query: describe extended exim_employee +PREHOOK: type: DESCTABLE +POSTHOOK: query: describe extended exim_employee +POSTHOOK: type: DESCTABLE +emp_id int employee id +emp_country string two char iso code +emp_state string free text + +Detailed Table Information Table(tableName:exim_employee, dbName:importer, owner:krishnak, createTime:1313569893, lastAccessTime:0, retention:0, sd:StorageDescriptor(cols:[FieldSchema(name:emp_id, type:int, comment:employee id), FieldSchema(name:emp_country, type:string, comment:two char iso code), FieldSchema(name:emp_state, type:string, comment:free text)], location:pfile:/Users/krishnak/Projects/hdp/sources/hive-git-apache/build/ql/test/data/tablestore/exim_employee, inputFormat:org.apache.hadoop.mapred.TextInputFormat, outputFormat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat, compressed:false, numBuckets:-1, serdeInfo:SerDeInfo(name:null, serializationLib:org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, parameters:{serialization.format=1}), bucketCols:[], sortCols:[], parameters:{}), partitionKeys:[FieldSchema(name:emp_country, type:string, comment:two char iso code), FieldSchema(name:emp_state, type:string, comment:free text)], parameters:{EXTERNAL=TRUE, transient_lastDdlTime=1313569893, comment=employee table, creator=krishna}, viewOriginalText:null, viewExpandedText:null, tableType:EXTERNAL_TABLE) +PREHOOK: query: show table extended like exim_employee +PREHOOK: type: SHOW_TABLESTATUS +POSTHOOK: query: show table extended like exim_employee +POSTHOOK: type: SHOW_TABLESTATUS +tableName:exim_employee +owner:krishnak +location:pfile:/Users/krishnak/Projects/hdp/sources/hive-git-apache/build/ql/test/data/tablestore/exim_employee +inputformat:org.apache.hadoop.mapred.TextInputFormat +outputformat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat +columns:struct columns { i32 emp_id} +partitioned:true +partitionColumns:struct partition_columns { string emp_country, string emp_state} +totalNumberFiles:2 +totalFileSize:34 +maxFileSize:23 +minFileSize:11 +lastAccessTime:0 +lastUpdateTime:1313569893000 + +PREHOOK: query: show table extended like exim_employee partition (emp_country="in", emp_state="tn") +PREHOOK: type: SHOW_TABLESTATUS +POSTHOOK: query: show table extended like exim_employee partition (emp_country="in", emp_state="tn") +POSTHOOK: type: SHOW_TABLESTATUS +tableName:exim_employee +owner:krishnak +location:pfile:/Users/krishnak/Projects/hdp/sources/hive-git-apache/build/ql/test/data/tablestore/exim_employee/emp_country=in/emp_state=tn +inputformat:org.apache.hadoop.mapred.TextInputFormat +outputformat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat +columns:struct columns { i32 emp_id} +partitioned:true +partitionColumns:struct partition_columns { string emp_country, string emp_state} +totalNumberFiles:1 +totalFileSize:11 +maxFileSize:11 +minFileSize:11 +lastAccessTime:0 +lastUpdateTime:1313569893000 + +PREHOOK: query: show table extended like exim_employee partition (emp_country="in", emp_state="ka") +PREHOOK: type: SHOW_TABLESTATUS +POSTHOOK: query: show table extended like exim_employee partition (emp_country="in", emp_state="ka") +POSTHOOK: type: SHOW_TABLESTATUS +tableName:exim_employee +owner:krishnak +location:pfile:/Users/krishnak/Projects/hdp/sources/hive-git-apache/build/ql/test/data/tablestore/exim_employee/emp_country=in/emp_state=ka +inputformat:org.apache.hadoop.mapred.TextInputFormat +outputformat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat +columns:struct columns { i32 emp_id} +partitioned:true +partitionColumns:struct partition_columns { string emp_country, string emp_state} +totalNumberFiles:1 +totalFileSize:23 +maxFileSize:23 +minFileSize:23 +lastAccessTime:0 +lastUpdateTime:1313569893000 + +PREHOOK: query: select * from exim_employee +PREHOOK: type: QUERY +PREHOOK: Input: importer@exim_employee@emp_country=in/emp_state=ka +PREHOOK: Input: importer@exim_employee@emp_country=in/emp_state=tn +PREHOOK: Output: file:/var/folders/67/67R3POPtF90VG63KSmCbcU++F0U/-Tmp-/krishnak/hive_2011-08-17_01-31-36_679_7845969666559300040/-mr-10000 +POSTHOOK: query: select * from exim_employee +POSTHOOK: type: QUERY +POSTHOOK: Input: importer@exim_employee@emp_country=in/emp_state=ka +POSTHOOK: Input: importer@exim_employee@emp_country=in/emp_state=tn +POSTHOOK: Output: file:/var/folders/67/67R3POPtF90VG63KSmCbcU++F0U/-Tmp-/krishnak/hive_2011-08-17_01-31-36_679_7845969666559300040/-mr-10000 +101 in ka +202 in ka +303 in ka +404 in ka +505 in ka +606 in ka +1 in tn +2 in tn +3 in tn +4 in tn +5 in tn +6 in tn +PREHOOK: query: select * from exim_employee +PREHOOK: type: QUERY +PREHOOK: Input: importer@exim_employee@emp_country=in/emp_state=ka +PREHOOK: Input: importer@exim_employee@emp_country=in/emp_state=tn +PREHOOK: Output: file:/var/folders/67/67R3POPtF90VG63KSmCbcU++F0U/-Tmp-/krishnak/hive_2011-08-17_01-31-37_400_8599999083947155620/-mr-10000 +POSTHOOK: query: select * from exim_employee +POSTHOOK: type: QUERY +POSTHOOK: Input: importer@exim_employee@emp_country=in/emp_state=ka +POSTHOOK: Input: importer@exim_employee@emp_country=in/emp_state=tn +POSTHOOK: Output: file:/var/folders/67/67R3POPtF90VG63KSmCbcU++F0U/-Tmp-/krishnak/hive_2011-08-17_01-31-37_400_8599999083947155620/-mr-10000 +PREHOOK: query: drop table exim_employee +PREHOOK: type: DROPTABLE +PREHOOK: Input: importer@exim_employee +PREHOOK: Output: importer@exim_employee +POSTHOOK: query: drop table exim_employee +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: importer@exim_employee +POSTHOOK: Output: importer@exim_employee +PREHOOK: query: drop database importer +PREHOOK: type: DROPDATABASE +POSTHOOK: query: drop database importer +POSTHOOK: type: DROPDATABASE