Repository: hive
Updated Branches:
  refs/heads/master 674138a65 -> db24ce722


HIVE-16372: Enable DDL statement for non-native tables (add/remove table 
properties) (Pengcheng Xiong, reviewed by Thejas M Nair)


Project: http://git-wip-us.apache.org/repos/asf/hive/repo
Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/db24ce72
Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/db24ce72
Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/db24ce72

Branch: refs/heads/master
Commit: db24ce7224758a3c6bde4be2e796675ce4265e1f
Parents: 674138a
Author: Pengcheng Xiong <pxi...@hortonworks.com>
Authored: Wed Apr 5 16:39:08 2017 -0700
Committer: Pengcheng Xiong <pxi...@hortonworks.com>
Committed: Wed Apr 5 16:39:08 2017 -0700

----------------------------------------------------------------------
 .../src/test/queries/negative/hbase_ddl.q       |   9 +
 .../src/test/queries/positive/hbase_ddl.q       |  20 ++
 .../src/test/results/negative/hbase_ddl.q.out   |  29 +++
 .../src/test/results/positive/hbase_ddl.q.out   | 186 +++++++++++++++++++
 .../org/apache/hadoop/hive/ql/ErrorMsg.java     |   4 +-
 .../hive/ql/parse/DDLSemanticAnalyzer.java      |   2 +-
 .../hadoop/hive/ql/plan/AlterTableDesc.java     |   6 +
 .../clientnegative/alter_non_native.q.out       |   2 +-
 8 files changed, 255 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hive/blob/db24ce72/hbase-handler/src/test/queries/negative/hbase_ddl.q
----------------------------------------------------------------------
diff --git a/hbase-handler/src/test/queries/negative/hbase_ddl.q 
b/hbase-handler/src/test/queries/negative/hbase_ddl.q
new file mode 100644
index 0000000..2913bcd
--- /dev/null
+++ b/hbase-handler/src/test/queries/negative/hbase_ddl.q
@@ -0,0 +1,9 @@
+DROP TABLE hbase_table_1;
+CREATE TABLE hbase_table_1(key int comment 'It is a column key', value string 
comment 'It is the column string value')
+STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
+WITH SERDEPROPERTIES ("hbase.columns.mapping" = "cf:string")
+TBLPROPERTIES ("hbase.table.name" = "hbase_table_0");
+
+DESCRIBE EXTENDED hbase_table_1;
+
+alter table hbase_table_1 change column key newkey string;

http://git-wip-us.apache.org/repos/asf/hive/blob/db24ce72/hbase-handler/src/test/queries/positive/hbase_ddl.q
----------------------------------------------------------------------
diff --git a/hbase-handler/src/test/queries/positive/hbase_ddl.q 
b/hbase-handler/src/test/queries/positive/hbase_ddl.q
new file mode 100644
index 0000000..a8bae75
--- /dev/null
+++ b/hbase-handler/src/test/queries/positive/hbase_ddl.q
@@ -0,0 +1,20 @@
+DROP TABLE hbase_table_1;
+CREATE TABLE hbase_table_1(key int comment 'It is a column key', value string 
comment 'It is the column string value')
+STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
+WITH SERDEPROPERTIES ("hbase.columns.mapping" = "cf:string")
+TBLPROPERTIES ("hbase.table.name" = "hbase_table_0");
+
+DESCRIBE EXTENDED hbase_table_1;
+
+select * from hbase_table_1;
+
+EXPLAIN FROM src INSERT OVERWRITE TABLE hbase_table_1 SELECT * WHERE (key%2)=0;
+FROM src INSERT OVERWRITE TABLE hbase_table_1 SELECT * WHERE (key%2)=0;
+
+ALTER TABLE hbase_table_1 SET 
TBLPROPERTIES('hbase.mapred.output.outputtable'='kkk');
+
+desc formatted hbase_table_1;
+
+ALTER TABLE hbase_table_1 unset 
TBLPROPERTIES('hbase.mapred.output.outputtable');
+
+desc formatted hbase_table_1;

http://git-wip-us.apache.org/repos/asf/hive/blob/db24ce72/hbase-handler/src/test/results/negative/hbase_ddl.q.out
----------------------------------------------------------------------
diff --git a/hbase-handler/src/test/results/negative/hbase_ddl.q.out 
b/hbase-handler/src/test/results/negative/hbase_ddl.q.out
new file mode 100644
index 0000000..b5aad70
--- /dev/null
+++ b/hbase-handler/src/test/results/negative/hbase_ddl.q.out
@@ -0,0 +1,29 @@
+PREHOOK: query: DROP TABLE hbase_table_1
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: DROP TABLE hbase_table_1
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: CREATE TABLE hbase_table_1(key int comment 'It is a column 
key', value string comment 'It is the column string value')
+STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
+WITH SERDEPROPERTIES ("hbase.columns.mapping" = "cf:string")
+TBLPROPERTIES ("hbase.table.name" = "hbase_table_0")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@hbase_table_1
+POSTHOOK: query: CREATE TABLE hbase_table_1(key int comment 'It is a column 
key', value string comment 'It is the column string value')
+STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
+WITH SERDEPROPERTIES ("hbase.columns.mapping" = "cf:string")
+TBLPROPERTIES ("hbase.table.name" = "hbase_table_0")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@hbase_table_1
+PREHOOK: query: DESCRIBE EXTENDED hbase_table_1
+PREHOOK: type: DESCTABLE
+PREHOOK: Input: default@hbase_table_1
+POSTHOOK: query: DESCRIBE EXTENDED hbase_table_1
+POSTHOOK: type: DESCTABLE
+POSTHOOK: Input: default@hbase_table_1
+key                    int                     It is a column key  
+value                  string                  It is the column string value
+                
+#### A masked pattern was here ####
+FAILED: SemanticException [Error 10134]: ALTER TABLE can only be used for 
[ADDPROPS, DROPPROPS] to a non-native table  hbase_table_1

http://git-wip-us.apache.org/repos/asf/hive/blob/db24ce72/hbase-handler/src/test/results/positive/hbase_ddl.q.out
----------------------------------------------------------------------
diff --git a/hbase-handler/src/test/results/positive/hbase_ddl.q.out 
b/hbase-handler/src/test/results/positive/hbase_ddl.q.out
new file mode 100644
index 0000000..8cb88ed
--- /dev/null
+++ b/hbase-handler/src/test/results/positive/hbase_ddl.q.out
@@ -0,0 +1,186 @@
+PREHOOK: query: DROP TABLE hbase_table_1
+PREHOOK: type: DROPTABLE
+POSTHOOK: query: DROP TABLE hbase_table_1
+POSTHOOK: type: DROPTABLE
+PREHOOK: query: CREATE TABLE hbase_table_1(key int comment 'It is a column 
key', value string comment 'It is the column string value')
+STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
+WITH SERDEPROPERTIES ("hbase.columns.mapping" = "cf:string")
+TBLPROPERTIES ("hbase.table.name" = "hbase_table_0")
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@hbase_table_1
+POSTHOOK: query: CREATE TABLE hbase_table_1(key int comment 'It is a column 
key', value string comment 'It is the column string value')
+STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
+WITH SERDEPROPERTIES ("hbase.columns.mapping" = "cf:string")
+TBLPROPERTIES ("hbase.table.name" = "hbase_table_0")
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@hbase_table_1
+PREHOOK: query: DESCRIBE EXTENDED hbase_table_1
+PREHOOK: type: DESCTABLE
+PREHOOK: Input: default@hbase_table_1
+POSTHOOK: query: DESCRIBE EXTENDED hbase_table_1
+POSTHOOK: type: DESCTABLE
+POSTHOOK: Input: default@hbase_table_1
+key                    int                     It is a column key  
+value                  string                  It is the column string value
+                
+#### A masked pattern was here ####
+PREHOOK: query: select * from hbase_table_1
+PREHOOK: type: QUERY
+PREHOOK: Input: default@hbase_table_1
+#### A masked pattern was here ####
+POSTHOOK: query: select * from hbase_table_1
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@hbase_table_1
+#### A masked pattern was here ####
+PREHOOK: query: EXPLAIN FROM src INSERT OVERWRITE TABLE hbase_table_1 SELECT * 
WHERE (key%2)=0
+PREHOOK: type: QUERY
+POSTHOOK: query: EXPLAIN FROM src INSERT OVERWRITE TABLE hbase_table_1 SELECT 
* WHERE (key%2)=0
+POSTHOOK: type: QUERY
+STAGE DEPENDENCIES:
+  Stage-0 is a root stage
+  Stage-2
+  Stage-1 is a root stage
+  Stage-3 is a root stage
+
+STAGE PLANS:
+  Stage: Stage-0
+      Alter Table Operator:
+        Alter Table
+          type: drop props
+          old name: default.hbase_table_1
+          properties:
+            COLUMN_STATS_ACCURATE 
+
+  Stage: Stage-2
+      Insert operator:
+        Insert
+
+  Stage: Stage-1
+      Pre Insert operator:
+        Pre-Insert task
+
+  Stage: Stage-3
+    Map Reduce
+      Map Operator Tree:
+          TableScan
+            alias: src
+            Statistics: Num rows: 500 Data size: 5312 Basic stats: COMPLETE 
Column stats: NONE
+            Filter Operator
+              predicate: ((UDFToDouble(key) % 2.0) = 0.0) (type: boolean)
+              Statistics: Num rows: 250 Data size: 2656 Basic stats: COMPLETE 
Column stats: NONE
+              Select Operator
+                expressions: UDFToInteger(key) (type: int), value (type: 
string)
+                outputColumnNames: _col0, _col1
+                Statistics: Num rows: 250 Data size: 2656 Basic stats: 
COMPLETE Column stats: NONE
+                File Output Operator
+                  compressed: false
+                  Statistics: Num rows: 250 Data size: 2656 Basic stats: 
COMPLETE Column stats: NONE
+                  table:
+                      input format: 
org.apache.hadoop.hive.hbase.HiveHBaseTableInputFormat
+                      output format: 
org.apache.hadoop.hive.hbase.HiveHBaseTableOutputFormat
+                      serde: org.apache.hadoop.hive.hbase.HBaseSerDe
+                      name: default.hbase_table_1
+
+PREHOOK: query: FROM src INSERT OVERWRITE TABLE hbase_table_1 SELECT * WHERE 
(key%2)=0
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: default@hbase_table_1
+POSTHOOK: query: FROM src INSERT OVERWRITE TABLE hbase_table_1 SELECT * WHERE 
(key%2)=0
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: default@hbase_table_1
+PREHOOK: query: ALTER TABLE hbase_table_1 SET 
TBLPROPERTIES('hbase.mapred.output.outputtable'='kkk')
+PREHOOK: type: ALTERTABLE_PROPERTIES
+PREHOOK: Input: default@hbase_table_1
+PREHOOK: Output: default@hbase_table_1
+POSTHOOK: query: ALTER TABLE hbase_table_1 SET 
TBLPROPERTIES('hbase.mapred.output.outputtable'='kkk')
+POSTHOOK: type: ALTERTABLE_PROPERTIES
+POSTHOOK: Input: default@hbase_table_1
+POSTHOOK: Output: default@hbase_table_1
+PREHOOK: query: desc formatted hbase_table_1
+PREHOOK: type: DESCTABLE
+PREHOOK: Input: default@hbase_table_1
+POSTHOOK: query: desc formatted hbase_table_1
+POSTHOOK: type: DESCTABLE
+POSTHOOK: Input: default@hbase_table_1
+# col_name             data_type               comment             
+                
+key                    int                     It is a column key  
+value                  string                  It is the column string value
+                
+# Detailed Table Information            
+Database:              default                  
+#### A masked pattern was here ####
+Retention:             0                        
+#### A masked pattern was here ####
+Table Type:            MANAGED_TABLE            
+Table Parameters:               
+       hbase.mapred.output.outputtable kkk                 
+       hbase.table.name        hbase_table_0       
+#### A masked pattern was here ####
+       numFiles                0                   
+       numRows                 0                   
+       rawDataSize             0                   
+       storage_handler         org.apache.hadoop.hive.hbase.HBaseStorageHandler
+       totalSize               0                   
+#### A masked pattern was here ####
+                
+# Storage Information           
+SerDe Library:         org.apache.hadoop.hive.hbase.HBaseSerDe  
+InputFormat:           null                     
+OutputFormat:          null                     
+Compressed:            No                       
+Num Buckets:           -1                       
+Bucket Columns:        []                       
+Sort Columns:          []                       
+Storage Desc Params:            
+       hbase.columns.mapping   cf:string           
+       serialization.format    1                   
+PREHOOK: query: ALTER TABLE hbase_table_1 unset 
TBLPROPERTIES('hbase.mapred.output.outputtable')
+PREHOOK: type: ALTERTABLE_PROPERTIES
+PREHOOK: Input: default@hbase_table_1
+PREHOOK: Output: default@hbase_table_1
+POSTHOOK: query: ALTER TABLE hbase_table_1 unset 
TBLPROPERTIES('hbase.mapred.output.outputtable')
+POSTHOOK: type: ALTERTABLE_PROPERTIES
+POSTHOOK: Input: default@hbase_table_1
+POSTHOOK: Output: default@hbase_table_1
+PREHOOK: query: desc formatted hbase_table_1
+PREHOOK: type: DESCTABLE
+PREHOOK: Input: default@hbase_table_1
+POSTHOOK: query: desc formatted hbase_table_1
+POSTHOOK: type: DESCTABLE
+POSTHOOK: Input: default@hbase_table_1
+# col_name             data_type               comment             
+                
+key                    int                     It is a column key  
+value                  string                  It is the column string value
+                
+# Detailed Table Information            
+Database:              default                  
+#### A masked pattern was here ####
+Retention:             0                        
+#### A masked pattern was here ####
+Table Type:            MANAGED_TABLE            
+Table Parameters:               
+       hbase.table.name        hbase_table_0       
+#### A masked pattern was here ####
+       numFiles                0                   
+       numRows                 0                   
+       rawDataSize             0                   
+       storage_handler         org.apache.hadoop.hive.hbase.HBaseStorageHandler
+       totalSize               0                   
+#### A masked pattern was here ####
+                
+# Storage Information           
+SerDe Library:         org.apache.hadoop.hive.hbase.HBaseSerDe  
+InputFormat:           null                     
+OutputFormat:          null                     
+Compressed:            No                       
+Num Buckets:           -1                       
+Bucket Columns:        []                       
+Sort Columns:          []                       
+Storage Desc Params:            
+       hbase.columns.mapping   cf:string           
+       serialization.format    1                   

http://git-wip-us.apache.org/repos/asf/hive/blob/db24ce72/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java 
b/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java
index 6a43385..746c199 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java
@@ -19,6 +19,7 @@
 package org.apache.hadoop.hive.ql;
 
 import java.text.MessageFormat;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.regex.Matcher;
@@ -27,6 +28,7 @@ import java.util.regex.Pattern;
 import org.antlr.runtime.tree.Tree;
 import org.apache.hadoop.hive.ql.parse.ASTNode;
 import org.apache.hadoop.hive.ql.parse.ASTNodeOrigin;
+import org.apache.hadoop.hive.ql.plan.AlterTableDesc.AlterTableTypes;
 
 /**
  * List of all error messages.
@@ -217,7 +219,7 @@ public enum ErrorMsg {
   ALTER_COMMAND_FOR_VIEWS(10131, "To alter a view you need to use the ALTER 
VIEW command."),
   ALTER_COMMAND_FOR_TABLES(10132, "To alter a base table you need to use the 
ALTER TABLE command."),
   ALTER_VIEW_DISALLOWED_OP(10133, "Cannot use this form of ALTER on a view"),
-  ALTER_TABLE_NON_NATIVE(10134, "ALTER TABLE cannot be used for a non-native 
table"),
+  ALTER_TABLE_NON_NATIVE(10134, "ALTER TABLE can only be used for " + 
AlterTableTypes.nonNativeTableAllowedTypes + " to a non-native table "),
   SORTMERGE_MAPJOIN_FAILED(10135,
       "Sort merge bucketed join could not be performed. " +
       "If you really want to perform the operation, either set " +

http://git-wip-us.apache.org/repos/asf/hive/blob/db24ce72/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
----------------------------------------------------------------------
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java 
b/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
index 6e72d07..0cf9205 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
@@ -1350,7 +1350,7 @@ public class DDLSemanticAnalyzer extends 
BaseSemanticAnalyzer {
         throw new 
SemanticException(ErrorMsg.ALTER_COMMAND_FOR_TABLES.getMsg());
       }
     }
-    if (tbl.isNonNative()) {
+    if (tbl.isNonNative() && 
!AlterTableTypes.nonNativeTableAllowedTypes.contains(op)) {
       throw new 
SemanticException(ErrorMsg.ALTER_TABLE_NON_NATIVE.getMsg(tbl.getTableName()));
     }
   }

http://git-wip-us.apache.org/repos/asf/hive/blob/db24ce72/ql/src/java/org/apache/hadoop/hive/ql/plan/AlterTableDesc.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/AlterTableDesc.java 
b/ql/src/java/org/apache/hadoop/hive/ql/plan/AlterTableDesc.java
index b83c16d..d5a6679 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/AlterTableDesc.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/AlterTableDesc.java
@@ -29,8 +29,11 @@ import org.apache.hadoop.hive.ql.parse.ParseUtils;
 import org.apache.hadoop.hive.ql.parse.SemanticException;
 import org.apache.hadoop.hive.ql.plan.Explain.Level;
 
+import com.google.common.collect.ImmutableList;
+
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -64,6 +67,9 @@ public class AlterTableDesc extends DDLDesc implements 
Serializable {
     private final String name;
     private AlterTableTypes(String name) { this.name = name; }
     public String getName() { return name; }
+
+    public static final List<AlterTableTypes> nonNativeTableAllowedTypes = 
+        ImmutableList.of(ADDPROPS, DROPPROPS); 
   }
 
   public static enum ProtectModeType {

http://git-wip-us.apache.org/repos/asf/hive/blob/db24ce72/ql/src/test/results/clientnegative/alter_non_native.q.out
----------------------------------------------------------------------
diff --git a/ql/src/test/results/clientnegative/alter_non_native.q.out 
b/ql/src/test/results/clientnegative/alter_non_native.q.out
index 64c4cee..0a32067 100644
--- a/ql/src/test/results/clientnegative/alter_non_native.q.out
+++ b/ql/src/test/results/clientnegative/alter_non_native.q.out
@@ -8,4 +8,4 @@ STORED BY 
'org.apache.hadoop.hive.ql.metadata.DefaultStorageHandler'
 POSTHOOK: type: CREATETABLE
 POSTHOOK: Output: database:default
 POSTHOOK: Output: default@non_native1
-FAILED: SemanticException [Error 10134]: ALTER TABLE cannot be used for a 
non-native table non_native1
+FAILED: SemanticException [Error 10134]: ALTER TABLE can only be used for 
[ADDPROPS, DROPPROPS] to a non-native table  non_native1

Reply via email to