You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by jv...@apache.org on 2011/07/11 09:18:54 UTC

svn commit: r1145048 - in /hive/trunk: metastore/src/java/org/apache/hadoop/hive/metastore/ ql/src/java/org/apache/hadoop/hive/ql/exec/ ql/src/java/org/apache/hadoop/hive/ql/parse/ ql/src/java/org/apache/hadoop/hive/ql/plan/ ql/src/test/queries/clientn...

Author: jvs
Date: Mon Jul 11 07:18:53 2011
New Revision: 1145048

URL: http://svn.apache.org/viewvc?rev=1145048&view=rev
Log:
HIVE-2210. ALTER VIEW RENAME (Charles Chen via jvs)


Added:
    hive/trunk/ql/src/test/queries/clientnegative/alter_view_failure8.q
    hive/trunk/ql/src/test/queries/clientnegative/alter_view_failure9.q
    hive/trunk/ql/src/test/queries/clientpositive/alter_view_rename.q
    hive/trunk/ql/src/test/results/clientnegative/alter_view_failure8.q.out
    hive/trunk/ql/src/test/results/clientnegative/alter_view_failure9.q.out
    hive/trunk/ql/src/test/results/clientpositive/alter_view_rename.q.out
Modified:
    hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzerFactory.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/AlterTableDesc.java

Modified: hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java?rev=1145048&r1=1145047&r2=1145048&view=diff
==============================================================================
--- hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java (original)
+++ hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveAlterHandler.java Mon Jul 11 07:18:53 2011
@@ -103,11 +103,12 @@ public class HiveAlterHandler implements
             "partition keys can not be changed.");
       }
 
-      // if this alter is a rename, and user didn't change the
-      // default location (or new location is empty), and table is
-      // not an external table, that means user is asking metastore
-      // to move data to new location corresponding to the new name
+      // if this alter is a rename, the table is not a virtual view, the user
+      // didn't change the default location (or new location is empty), and
+      // table is not an external table, that means useris asking metastore to
+      // move data to the new location corresponding to the new name
       if (rename
+          && !oldt.getTableType().equals(TableType.VIRTUAL_VIEW.toString())
           && (oldt.getSd().getLocation().compareTo(newt.getSd().getLocation()) == 0
             || StringUtils.isEmpty(newt.getSd().getLocation()))
           && !MetaStoreUtils.isExternalTable(oldt)) {

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java?rev=1145048&r1=1145047&r2=1145048&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/exec/DDLTask.java Mon Jul 11 07:18:53 2011
@@ -1458,6 +1458,7 @@ public class DDLTask extends Task<DDLWor
       case ADDPARTITION:
       case DROPPARTITION:
       case ADDPROPS:
+      case RENAME:
         // allow this form
         break;
       default:

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java?rev=1145048&r1=1145047&r2=1145048&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java Mon Jul 11 07:18:53 2011
@@ -260,8 +260,13 @@ public class DDLSemanticAnalyzer extends
       // view from table; unwrap it now
       analyzeAlterTableDropParts((ASTNode) ast.getChild(0), true);
       break;
+    case HiveParser.TOK_ALTERVIEW_RENAME:
+      // for ALTER VIEW RENAME, we wrapped the RENAME to discriminate
+      // view from table; unwrap it now
+      analyzeAlterTableRename(((ASTNode) ast.getChild(0)), true);
+      break;
     case HiveParser.TOK_ALTERTABLE_RENAME:
-      analyzeAlterTableRename(ast);
+      analyzeAlterTableRename(ast, false);
       break;
     case HiveParser.TOK_ALTERTABLE_TOUCH:
       analyzeAlterTableTouch(ast);
@@ -1619,10 +1624,10 @@ public class DDLSemanticAnalyzer extends
   }
 
 
-  private void analyzeAlterTableRename(ASTNode ast) throws SemanticException {
+  private void analyzeAlterTableRename(ASTNode ast, boolean expectView) throws SemanticException {
     String tblName = getUnescapedName((ASTNode)ast.getChild(0));
     AlterTableDesc alterTblDesc = new AlterTableDesc(tblName,
-        getUnescapedName((ASTNode)ast.getChild(1)));
+        getUnescapedName((ASTNode)ast.getChild(1)), expectView);
     try {
       Table tab = db.getTable(db.getCurrentDatabase(), tblName, false);
       if (tab != null) {

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g?rev=1145048&r1=1145047&r2=1145048&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g Mon Jul 11 07:18:53 2011
@@ -186,6 +186,7 @@ TOK_DROPVIEW;
 TOK_ALTERVIEW_PROPERTIES;
 TOK_ALTERVIEW_ADDPARTS;
 TOK_ALTERVIEW_DROPPARTS;
+TOK_ALTERVIEW_RENAME;
 TOK_VIEWPARTCOLS;
 TOK_EXPLAIN;
 TOK_TABLESERIALIZER;
@@ -561,6 +562,8 @@ alterViewStatementSuffix
 @init { msgs.push("alter view statement"); }
 @after { msgs.pop(); }
     : alterViewSuffixProperties
+    | alterStatementSuffixRename
+        -> ^(TOK_ALTERVIEW_RENAME alterStatementSuffixRename)
     | alterStatementSuffixAddPartitions
         -> ^(TOK_ALTERVIEW_ADDPARTS alterStatementSuffixAddPartitions)
     | alterStatementSuffixDropPartitions

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzerFactory.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzerFactory.java?rev=1145048&r1=1145047&r2=1145048&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzerFactory.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzerFactory.java Mon Jul 11 07:18:53 2011
@@ -31,7 +31,7 @@ import org.apache.hadoop.hive.ql.session
 public final class SemanticAnalyzerFactory {
 
   static HashMap<Integer, HiveOperation> commandType = new HashMap<Integer, HiveOperation>();
-  static HashMap<Integer, HiveOperation[]> tablePartitionCommandType = new HashMap<Integer, HiveOperation[]>(); 
+  static HashMap<Integer, HiveOperation[]> tablePartitionCommandType = new HashMap<Integer, HiveOperation[]>();
 
   static {
     commandType.put(HiveParser.TOK_EXPLAIN, HiveOperation.EXPLAIN);
@@ -147,6 +147,7 @@ public final class SemanticAnalyzerFacto
       case HiveParser.TOK_ALTERVIEW_PROPERTIES:
       case HiveParser.TOK_ALTERVIEW_ADDPARTS:
       case HiveParser.TOK_ALTERVIEW_DROPPARTS:
+      case HiveParser.TOK_ALTERVIEW_RENAME:
       case HiveParser.TOK_SHOWDATABASES:
       case HiveParser.TOK_SHOWTABLES:
       case HiveParser.TOK_SHOW_TABLESTATUS:

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/AlterTableDesc.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/AlterTableDesc.java?rev=1145048&r1=1145047&r2=1145048&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/AlterTableDesc.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/plan/AlterTableDesc.java Mon Jul 11 07:18:53 2011
@@ -108,10 +108,11 @@ public class AlterTableDesc extends DDLD
    * @param newName
    *          new name of the table
    */
-  public AlterTableDesc(String oldName, String newName) {
+  public AlterTableDesc(String oldName, String newName, boolean expectView) {
     op = AlterTableTypes.RENAME;
     this.oldName = oldName;
     this.newName = newName;
+    this.expectView = expectView;
   }
 
   /**
@@ -152,7 +153,7 @@ public class AlterTableDesc extends DDLD
    *          new table input format
    * @param outputFormat
    *          new table output format
-   * @param partSpec 
+   * @param partSpec
    */
   public AlterTableDesc(String name, String inputFormat, String outputFormat,
       String serdeName, String storageHandler, HashMap<String, String> partSpec) {

Added: hive/trunk/ql/src/test/queries/clientnegative/alter_view_failure8.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientnegative/alter_view_failure8.q?rev=1145048&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientnegative/alter_view_failure8.q (added)
+++ hive/trunk/ql/src/test/queries/clientnegative/alter_view_failure8.q Mon Jul 11 07:18:53 2011
@@ -0,0 +1,3 @@
+-- should fail:  can't use ALTER VIEW on a table
+CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);
+ALTER VIEW invites RENAME TO invites2;

Added: hive/trunk/ql/src/test/queries/clientnegative/alter_view_failure9.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientnegative/alter_view_failure9.q?rev=1145048&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientnegative/alter_view_failure9.q (added)
+++ hive/trunk/ql/src/test/queries/clientnegative/alter_view_failure9.q Mon Jul 11 07:18:53 2011
@@ -0,0 +1,7 @@
+DROP VIEW xxx4;
+CREATE VIEW xxx4 
+AS 
+SELECT * FROM src;
+
+-- should fail:  need to use ALTER VIEW, not ALTER TABLE
+ALTER TABLE xxx4 RENAME TO xxx4a;

Added: hive/trunk/ql/src/test/queries/clientpositive/alter_view_rename.q
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/queries/clientpositive/alter_view_rename.q?rev=1145048&view=auto
==============================================================================
--- hive/trunk/ql/src/test/queries/clientpositive/alter_view_rename.q (added)
+++ hive/trunk/ql/src/test/queries/clientpositive/alter_view_rename.q Mon Jul 11 07:18:53 2011
@@ -0,0 +1,10 @@
+CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);
+CREATE VIEW view1 as SELECT * FROM invites;
+DESCRIBE EXTENDED view1;
+
+ALTER VIEW view1 RENAME TO view2;
+DESCRIBE EXTENDED view2;
+SELECT * FROM view2;
+
+DROP TABLE invites;
+DROP VIEW view2;
\ No newline at end of file

Added: hive/trunk/ql/src/test/results/clientnegative/alter_view_failure8.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientnegative/alter_view_failure8.q.out?rev=1145048&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientnegative/alter_view_failure8.q.out (added)
+++ hive/trunk/ql/src/test/results/clientnegative/alter_view_failure8.q.out Mon Jul 11 07:18:53 2011
@@ -0,0 +1,13 @@
+PREHOOK: query: -- should fail:  can't use ALTER VIEW on a table
+CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING)
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: -- should fail:  can't use ALTER VIEW on a table
+CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@invites
+PREHOOK: query: ALTER VIEW invites RENAME TO invites2
+PREHOOK: type: null
+PREHOOK: Input: default@invites
+PREHOOK: Output: default@invites
+FAILED: Error in metadata: Cannot alter a base table with ALTER VIEW
+FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

Added: hive/trunk/ql/src/test/results/clientnegative/alter_view_failure9.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientnegative/alter_view_failure9.q.out?rev=1145048&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientnegative/alter_view_failure9.q.out (added)
+++ hive/trunk/ql/src/test/results/clientnegative/alter_view_failure9.q.out Mon Jul 11 07:18:53 2011
@@ -0,0 +1,22 @@
+PREHOOK: query: DROP VIEW xxx4
+PREHOOK: type: DROPVIEW
+POSTHOOK: query: DROP VIEW xxx4
+POSTHOOK: type: DROPVIEW
+PREHOOK: query: CREATE VIEW xxx4 
+AS 
+SELECT * FROM src
+PREHOOK: type: CREATEVIEW
+PREHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-07_12-15-48_683_5899334144357618678/-mr-10000
+POSTHOOK: query: CREATE VIEW xxx4 
+AS 
+SELECT * FROM src
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Output: default@xxx4
+POSTHOOK: Output: file:/var/folders/fe/fefl-ow3ElaEd1ns0G7jB0uewEQ/-Tmp-/charleschen/hive_2011-07-07_12-15-48_683_5899334144357618678/-mr-10000
+PREHOOK: query: -- should fail:  need to use ALTER VIEW, not ALTER TABLE
+ALTER TABLE xxx4 RENAME TO xxx4a
+PREHOOK: type: ALTERTABLE_RENAME
+PREHOOK: Input: default@xxx4
+PREHOOK: Output: default@xxx4
+FAILED: Error in metadata: Cannot alter a view with ALTER TABLE
+FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

Added: hive/trunk/ql/src/test/results/clientpositive/alter_view_rename.q.out
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/test/results/clientpositive/alter_view_rename.q.out?rev=1145048&view=auto
==============================================================================
--- hive/trunk/ql/src/test/results/clientpositive/alter_view_rename.q.out (added)
+++ hive/trunk/ql/src/test/results/clientpositive/alter_view_rename.q.out Mon Jul 11 07:18:53 2011
@@ -0,0 +1,61 @@
+PREHOOK: query: CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING)
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@invites
+PREHOOK: query: CREATE VIEW view1 as SELECT * FROM invites
+PREHOOK: type: CREATEVIEW
+PREHOOK: Output: file:/var/folders/Qf/QfKIM3uNGnOkRTnqDyLPXU+++TI/-Tmp-/ccy/hive_2011-07-08_08-17-02_744_6543104997331484125/-mr-10000
+POSTHOOK: query: CREATE VIEW view1 as SELECT * FROM invites
+POSTHOOK: type: CREATEVIEW
+POSTHOOK: Output: default@view1
+POSTHOOK: Output: file:/var/folders/Qf/QfKIM3uNGnOkRTnqDyLPXU+++TI/-Tmp-/ccy/hive_2011-07-08_08-17-02_744_6543104997331484125/-mr-10000
+PREHOOK: query: DESCRIBE EXTENDED view1
+PREHOOK: type: DESCTABLE
+POSTHOOK: query: DESCRIBE EXTENDED view1
+POSTHOOK: type: DESCTABLE
+foo	int	
+bar	string	
+ds	string	
+	 	 
+Detailed Table Information	Table(tableName:view1, dbName:default, owner:ccy, createTime:1310138222, lastAccessTime:0, retention:0, sd:StorageDescriptor(cols:[FieldSchema(name:foo, type:int, comment:null), FieldSchema(name:bar, type:string, comment:null), FieldSchema(name:ds, type:string, comment:null)], location:null, inputFormat:org.apache.hadoop.mapred.SequenceFileInputFormat, outputFormat:org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat, compressed:false, numBuckets:-1, serdeInfo:SerDeInfo(name:null, serializationLib:null, parameters:{}), bucketCols:[], sortCols:[], parameters:{}), partitionKeys:[], parameters:{transient_lastDdlTime=1310138222}, viewOriginalText:SELECT * FROM invites, viewExpandedText:SELECT `invites`.`foo`, `invites`.`bar`, `invites`.`ds` FROM `invites`, tableType:VIRTUAL_VIEW)	
+PREHOOK: query: ALTER VIEW view1 RENAME TO view2
+PREHOOK: type: null
+PREHOOK: Input: default@view1
+PREHOOK: Output: default@view1
+POSTHOOK: query: ALTER VIEW view1 RENAME TO view2
+POSTHOOK: type: null
+POSTHOOK: Input: default@view1
+POSTHOOK: Output: default@view1
+POSTHOOK: Output: default@view2
+PREHOOK: query: DESCRIBE EXTENDED view2
+PREHOOK: type: DESCTABLE
+POSTHOOK: query: DESCRIBE EXTENDED view2
+POSTHOOK: type: DESCTABLE
+foo	int	
+bar	string	
+ds	string	
+	 	 
+Detailed Table Information	Table(tableName:view2, dbName:default, owner:ccy, createTime:1310138222, lastAccessTime:0, retention:0, sd:StorageDescriptor(cols:[FieldSchema(name:foo, type:int, comment:null), FieldSchema(name:bar, type:string, comment:null), FieldSchema(name:ds, type:string, comment:null)], location:null, inputFormat:org.apache.hadoop.mapred.SequenceFileInputFormat, outputFormat:org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat, compressed:false, numBuckets:-1, serdeInfo:SerDeInfo(name:null, serializationLib:null, parameters:{}), bucketCols:[], sortCols:[], parameters:{}), partitionKeys:[], parameters:{last_modified_by=ccy, last_modified_time=1310138222, transient_lastDdlTime=1310138222}, viewOriginalText:SELECT * FROM invites, viewExpandedText:SELECT `invites`.`foo`, `invites`.`bar`, `invites`.`ds` FROM `invites`, tableType:VIRTUAL_VIEW)	
+PREHOOK: query: SELECT * FROM view2
+PREHOOK: type: QUERY
+PREHOOK: Output: file:/var/folders/Qf/QfKIM3uNGnOkRTnqDyLPXU+++TI/-Tmp-/ccy/hive_2011-07-08_08-17-03_123_5668598932827588963/-mr-10000
+POSTHOOK: query: SELECT * FROM view2
+POSTHOOK: type: QUERY
+POSTHOOK: Output: file:/var/folders/Qf/QfKIM3uNGnOkRTnqDyLPXU+++TI/-Tmp-/ccy/hive_2011-07-08_08-17-03_123_5668598932827588963/-mr-10000
+PREHOOK: query: DROP TABLE invites
+PREHOOK: type: DROPTABLE
+PREHOOK: Input: default@invites
+PREHOOK: Output: default@invites
+POSTHOOK: query: DROP TABLE invites
+POSTHOOK: type: DROPTABLE
+POSTHOOK: Input: default@invites
+POSTHOOK: Output: default@invites
+PREHOOK: query: DROP VIEW view2
+PREHOOK: type: DROPVIEW
+PREHOOK: Input: default@view2
+PREHOOK: Output: default@view2
+POSTHOOK: query: DROP VIEW view2
+POSTHOOK: type: DROPVIEW
+POSTHOOK: Input: default@view2
+POSTHOOK: Output: default@view2