This is an automated email from the ASF dual-hosted git repository.

pgaref pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/master by this push:
     new 8b20fcb  HIVE-25520 - Enable concatenate for external table.  (Harish 
Jaiprakash, reviewed by Panos Garefalakis)
8b20fcb is described below

commit 8b20fcbce030802fa4533422bda1f5194dd30949
Author: Harish Jaiprakash <[email protected]>
AuthorDate: Wed Oct 6 23:38:27 2021 +0530

    HIVE-25520 - Enable concatenate for external table.  (Harish Jaiprakash, 
reviewed by Panos Garefalakis)
---
 .../java/org/apache/hadoop/hive/conf/HiveConf.java |  3 +++
 .../concatenate/AlterTableConcatenateAnalyzer.java |  7 ++++++-
 .../external_table_concatenate_fail.q              |  2 ++
 .../clientpositive/external_table_concatenate.q    |  4 ++++
 .../external_table_concatenate_fail.q.out          |  9 ++++++++
 .../llap/external_table_concatenate.q.out          | 24 ++++++++++++++++++++++
 6 files changed, 48 insertions(+), 1 deletion(-)

diff --git a/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java 
b/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
index cf96fff..65fa491 100644
--- a/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
+++ b/common/src/java/org/apache/hadoop/hive/conf/HiveConf.java
@@ -3256,6 +3256,9 @@ public class HiveConf extends Configuration {
 
     
TRANSACTIONAL_CONCATENATE_NOBLOCK("hive.transactional.concatenate.noblock", 
false,
         "Will cause 'alter table T concatenate' to be non-blocking"),
+    CONCATENATE_EXTERNAL_TABLE("hive.concatenate.external.table", false,
+        "Enable concatenate for external tables. This allows 'alter table 
`tablename` concatenate' " +
+            "on external tables."),
 
     HIVE_COMPACTOR_COMPACT_MM("hive.compactor.compact.insert.only", true,
         "Whether the compactor should compact insert-only tables. A safety 
switch."),
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/concatenate/AlterTableConcatenateAnalyzer.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/concatenate/AlterTableConcatenateAnalyzer.java
index ce44882..8d7f5cd 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/concatenate/AlterTableConcatenateAnalyzer.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/storage/concatenate/AlterTableConcatenateAnalyzer.java
@@ -78,8 +78,13 @@ public class AlterTableConcatenateAnalyzer extends 
AbstractAlterTableAnalyzer {
       if (table.isNonNative()) {
         throw new 
SemanticException(ErrorMsg.CONCATENATE_UNSUPPORTED_TABLE_NON_NATIVE.getMsg());
       }
+
       if (table.getTableType() != TableType.MANAGED_TABLE) {
-        throw new 
SemanticException(ErrorMsg.CONCATENATE_UNSUPPORTED_TABLE_NOT_MANAGED.getMsg());
+        // Enable concatenate for external tables if config is set.
+        if (!conf.getBoolVar(ConfVars.CONCATENATE_EXTERNAL_TABLE)
+            || table.getTableType() != TableType.EXTERNAL_TABLE) {
+          throw new 
SemanticException(ErrorMsg.CONCATENATE_UNSUPPORTED_TABLE_NOT_MANAGED.getMsg());
+        }
       }
 
       if (table.isPartitioned()) {
diff --git 
a/ql/src/test/queries/clientnegative/external_table_concatenate_fail.q 
b/ql/src/test/queries/clientnegative/external_table_concatenate_fail.q
new file mode 100644
index 0000000..e6d034c
--- /dev/null
+++ b/ql/src/test/queries/clientnegative/external_table_concatenate_fail.q
@@ -0,0 +1,2 @@
+create external table test_ext_concat (i int) stored as orc;
+alter table test_ext_concat concatenate;
diff --git a/ql/src/test/queries/clientpositive/external_table_concatenate.q 
b/ql/src/test/queries/clientpositive/external_table_concatenate.q
new file mode 100644
index 0000000..66311c0
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/external_table_concatenate.q
@@ -0,0 +1,4 @@
+SET hive.concatenate.external.table=true;
+create external table test_ext_concat (i int) stored as orc;
+alter table test_ext_concat concatenate;
+drop table test_ext_concat;
diff --git 
a/ql/src/test/results/clientnegative/external_table_concatenate_fail.q.out 
b/ql/src/test/results/clientnegative/external_table_concatenate_fail.q.out
new file mode 100644
index 0000000..056bbf3
--- /dev/null
+++ b/ql/src/test/results/clientnegative/external_table_concatenate_fail.q.out
@@ -0,0 +1,9 @@
+PREHOOK: query: create external table test_ext_concat (i int) stored as orc
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@test_ext_concat
+POSTHOOK: query: create external table test_ext_concat (i int) stored as orc
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@test_ext_concat
+FAILED: SemanticException [Error 30034]: Concatenate/Merge can only be 
performed on managed tables
diff --git 
a/ql/src/test/results/clientpositive/llap/external_table_concatenate.q.out 
b/ql/src/test/results/clientpositive/llap/external_table_concatenate.q.out
new file mode 100644
index 0000000..2d767cd
--- /dev/null
+++ b/ql/src/test/results/clientpositive/llap/external_table_concatenate.q.out
@@ -0,0 +1,24 @@
+PREHOOK: query: create external table test_ext_concat (i int) stored as orc
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@test_ext_concat
+POSTHOOK: query: create external table test_ext_concat (i int) stored as orc
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@test_ext_concat
+PREHOOK: query: alter table test_ext_concat concatenate
+PREHOOK: type: ALTER_TABLE_MERGE
+PREHOOK: Input: default@test_ext_concat
+PREHOOK: Output: default@test_ext_concat
+POSTHOOK: query: alter table test_ext_concat concatenate
+POSTHOOK: type: ALTER_TABLE_MERGE
+POSTHOOK: Input: default@test_ext_concat
+POSTHOOK: Output: default@test_ext_concat
+PREHOOK: query: drop table test_ext_concat
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@test_ext_concat
+PREHOOK: Output: default@test_ext_concat
+POSTHOOK: query: drop table test_ext_concat
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@test_ext_concat
+POSTHOOK: Output: default@test_ext_concat

Reply via email to