diff --git a/itests/src/test/resources/testconfiguration.properties b/itests/src/test/resources/testconfiguration.properties index 6528ec6db0..96eeb0f892 100644 --- a/itests/src/test/resources/testconfiguration.properties +++ b/itests/src/test/resources/testconfiguration.properties @@ -433,6 +433,7 @@ minillap.query.files=acid_bucket_pruning.q,\ minillaplocal.query.files=\ dp_counter_non_mm.q,\ dp_counter_mm.q,\ + acid_export.q,\ acid_no_buckets.q, \ acid_globallimit.q,\ acid_vectorization_missing_cols.q,\ diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/UpdateDeleteSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/UpdateDeleteSemanticAnalyzer.java index 512f1ff3da..2e4825971a 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/UpdateDeleteSemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/UpdateDeleteSemanticAnalyzer.java @@ -288,7 +288,7 @@ private StringBuilder generateExportQuery(List partCols, whereClause.append(" AND "); } whereClause.append(HiveUtils.unparseIdentifier(ent.getKey(), conf)) - .append(" = ").append(ent.getValue()); + .append(" = ").append("'" + ent.getValue() + "'"); } if(whereClause != null) { rewrittenQueryStr.append(whereClause); diff --git a/ql/src/test/queries/clientpositive/acid_export.q b/ql/src/test/queries/clientpositive/acid_export.q new file mode 100644 index 0000000000..efe86a7c93 --- /dev/null +++ b/ql/src/test/queries/clientpositive/acid_export.q @@ -0,0 +1,18 @@ +set hive.support.concurrency=true; +set hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager; + +create table exportPartitionTable(id int, name string) partitioned by(country string) + clustered by (id) into 2 buckets stored as orc tblproperties ("transactional"="true"); + +export table exportPartitionTable PARTITION (country='india') to '${system:test.tmp.dir}/exportDataStore'; + +drop table exportPartitionTable; + + +--non-partitioned table +create table exportTable(id int, name string) + clustered by (id) into 2 buckets stored as orc tblproperties ("transactional"="true"); + +export table exportTable to '${system:test.tmp.dir}/exportTableStore'; +drop table exportTable; + diff --git a/ql/src/test/results/clientpositive/llap/acid_export.q.out b/ql/src/test/results/clientpositive/llap/acid_export.q.out new file mode 100644 index 0000000000..b17e8a3ba4 --- /dev/null +++ b/ql/src/test/results/clientpositive/llap/acid_export.q.out @@ -0,0 +1,59 @@ +PREHOOK: query: create table exportPartitionTable(id int, name string) partitioned by(country string) + clustered by (id) into 2 buckets stored as orc tblproperties ("transactional"="true") +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@exportPartitionTable +POSTHOOK: query: create table exportPartitionTable(id int, name string) partitioned by(country string) + clustered by (id) into 2 buckets stored as orc tblproperties ("transactional"="true") +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@exportPartitionTable +#### A masked pattern was here #### +PREHOOK: type: QUERY +PREHOOK: Input: database:default +PREHOOK: Input: default@exportpartitiontable +PREHOOK: Output: default@exportpartitiontable_cd52cc73_e905_47ec_9c86_d2b9b7dc0efa +#### A masked pattern was here #### +POSTHOOK: type: QUERY +POSTHOOK: Input: database:default +POSTHOOK: Input: default@exportpartitiontable +#### A masked pattern was here #### +PREHOOK: query: drop table exportPartitionTable +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@exportpartitiontable +PREHOOK: Output: default@exportpartitiontable +POSTHOOK: query: drop table exportPartitionTable +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@exportpartitiontable +POSTHOOK: Output: default@exportpartitiontable +PREHOOK: query: create table exportTable(id int, name string) + clustered by (id) into 2 buckets stored as orc tblproperties ("transactional"="true") +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@exportTable +POSTHOOK: query: create table exportTable(id int, name string) + clustered by (id) into 2 buckets stored as orc tblproperties ("transactional"="true") +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@exportTable +#### A masked pattern was here #### +PREHOOK: type: QUERY +PREHOOK: Input: database:default +PREHOOK: Input: default@exporttable +PREHOOK: Output: default@exporttable_74942c06_4bac_463e_9110_333e62559735 +#### A masked pattern was here #### +POSTHOOK: type: QUERY +POSTHOOK: Input: database:default +POSTHOOK: Input: default@exporttable +POSTHOOK: Output: default@exporttable_74942c06_4bac_463e_9110_333e62559735 +#### A masked pattern was here #### +POSTHOOK: Lineage: exporttable_74942c06_4bac_463e_9110_333e62559735.id SIMPLE [(exporttable)exporttable.FieldSchema(name:id, type:int, comment:null), ] +POSTHOOK: Lineage: exporttable_74942c06_4bac_463e_9110_333e62559735.name SIMPLE [(exporttable)exporttable.FieldSchema(name:name, type:string, comment:null), ] +PREHOOK: query: drop table exportTable +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@exporttable +PREHOOK: Output: default@exporttable +POSTHOOK: query: drop table exportTable +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@exporttable +POSTHOOK: Output: default@exporttable