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

ayushsaxena 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 6dc073b673e HIVE-28130: Iceberg: Add support for Rename Branch. 
(#5138). (Ayush Saxena, reviewed by Denys Kuzmenko, Butao Zhang)
6dc073b673e is described below

commit 6dc073b673ec82900424654e5e148625020acd6d
Author: Ayush Saxena <[email protected]>
AuthorDate: Mon Mar 25 18:31:18 2024 +0530

    HIVE-28130: Iceberg: Add support for Rename Branch. (#5138). (Ayush Saxena, 
reviewed by Denys Kuzmenko, Butao Zhang)
---
 .../iceberg/mr/hive/HiveIcebergMetaHook.java       |   4 +-
 .../iceberg/mr/hive/HiveIcebergStorageHandler.java |   5 +
 .../apache/iceberg/mr/hive/IcebergBranchExec.java  |   8 ++
 .../test/queries/positive/rename_iceberg_branch.q  |  27 +++++
 .../results/positive/rename_iceberg_branch.q.out   | 109 +++++++++++++++++++++
 .../hadoop/hive/ql/parse/AlterClauseParser.g       |   8 ++
 .../org/apache/hadoop/hive/ql/parse/HiveParser.g   |   1 +
 .../hadoop/hive/ql/ddl/table/AlterTableType.java   |   1 +
 .../AlterTableRenameSnapshotRefAnalyzer.java       |  67 +++++++++++++
 .../hive/ql/parse/AlterTableSnapshotRefSpec.java   |  25 +++++
 .../apache/hadoop/hive/ql/plan/HiveOperation.java  |   1 +
 .../authorization/plugin/HiveOperationType.java    |   1 +
 .../plugin/sqlstd/Operation2Privilege.java         |   2 +
 13 files changed, 257 insertions(+), 2 deletions(-)

diff --git 
a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergMetaHook.java
 
b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergMetaHook.java
index 94aabe65d43..0703eea9dd9 100644
--- 
a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergMetaHook.java
+++ 
b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergMetaHook.java
@@ -151,8 +151,8 @@ public class HiveIcebergMetaHook implements HiveMetaHook {
       AlterTableType.ADDCOLS, AlterTableType.REPLACE_COLUMNS, 
AlterTableType.RENAME_COLUMN,
       AlterTableType.ADDPROPS, AlterTableType.DROPPROPS, 
AlterTableType.SETPARTITIONSPEC,
       AlterTableType.UPDATE_COLUMNS, AlterTableType.RENAME, 
AlterTableType.EXECUTE, AlterTableType.CREATE_BRANCH,
-      AlterTableType.CREATE_TAG, AlterTableType.DROP_BRANCH, 
AlterTableType.DROPPARTITION, AlterTableType.DROP_TAG,
-      AlterTableType.COMPACT);
+      AlterTableType.CREATE_TAG, AlterTableType.DROP_BRANCH, 
AlterTableType.RENAME_BRANCH, AlterTableType.DROPPARTITION,
+      AlterTableType.DROP_TAG, AlterTableType.COMPACT);
   private static final List<String> MIGRATION_ALLOWED_SOURCE_FORMATS = 
ImmutableList.of(
       FileFormat.PARQUET.name().toLowerCase(),
       FileFormat.ORC.name().toLowerCase(),
diff --git 
a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergStorageHandler.java
 
b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergStorageHandler.java
index 147107638ac..a71fd80a316 100644
--- 
a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergStorageHandler.java
+++ 
b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergStorageHandler.java
@@ -1002,6 +1002,11 @@ public class HiveIcebergStorageHandler implements 
HiveStoragePredicateHandler, H
             (AlterTableSnapshotRefSpec.DropSnapshotRefSpec) 
alterTableSnapshotRefSpec.getOperationParams();
         IcebergBranchExec.dropBranch(icebergTable, dropBranchSpec);
         break;
+      case RENAME_BRANCH:
+        AlterTableSnapshotRefSpec.RenameSnapshotrefSpec renameSnapshotrefSpec =
+            (AlterTableSnapshotRefSpec.RenameSnapshotrefSpec) 
alterTableSnapshotRefSpec.getOperationParams();
+        IcebergBranchExec.renameBranch(icebergTable, renameSnapshotrefSpec);
+        break;
       case DROP_TAG:
         AlterTableSnapshotRefSpec.DropSnapshotRefSpec dropTagSpec =
             (AlterTableSnapshotRefSpec.DropSnapshotRefSpec) 
alterTableSnapshotRefSpec.getOperationParams();
diff --git 
a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/IcebergBranchExec.java
 
b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/IcebergBranchExec.java
index 7425ff95c66..9370d725243 100644
--- 
a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/IcebergBranchExec.java
+++ 
b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/IcebergBranchExec.java
@@ -89,4 +89,12 @@ public class IcebergBranchExec {
       table.manageSnapshots().removeBranch(branchName).commit();
     }
   }
+
+  public static void renameBranch(Table table, 
AlterTableSnapshotRefSpec.RenameSnapshotrefSpec renameSnapshotrefSpec) {
+    String sourceBranch = renameSnapshotrefSpec.getSourceBranchName();
+    String targetBranch = renameSnapshotrefSpec.getTargetBranchName();
+
+    LOG.info("Renaming branch {} to {} on iceberg table {}", sourceBranch, 
targetBranch, table.name());
+    table.manageSnapshots().renameBranch(sourceBranch, targetBranch).commit();
+  }
 }
diff --git 
a/iceberg/iceberg-handler/src/test/queries/positive/rename_iceberg_branch.q 
b/iceberg/iceberg-handler/src/test/queries/positive/rename_iceberg_branch.q
new file mode 100644
index 00000000000..e0339bd10c1
--- /dev/null
+++ b/iceberg/iceberg-handler/src/test/queries/positive/rename_iceberg_branch.q
@@ -0,0 +1,27 @@
+-- SORT_QUERY_RESULTS
+set hive.explain.user=false;
+set hive.fetch.task.conversion=more;
+
+create external table ice01(id int) stored by iceberg stored as orc 
tblproperties ('format-version'='2');
+
+insert into ice01 values (1), (2), (3), (4);
+
+select * from ice01;
+
+-- create a branch named soruce
+alter table ice01 create branch source;
+select * from default.ice01.branch_source;
+
+-- insert some data to branch
+insert into ice01 values (5), (6);
+select * from default.ice01.branch_source;
+
+-- rename the branch
+explain alter table ice01 rename branch source to target;
+alter table ice01 rename branch source to target;
+
+select name,type from default.ice01.refs;
+
+-- read from the renamed branch
+select * from default.ice01.branch_target;
+
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/rename_iceberg_branch.q.out 
b/iceberg/iceberg-handler/src/test/results/positive/rename_iceberg_branch.q.out
new file mode 100644
index 00000000000..fde01053d5a
--- /dev/null
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/rename_iceberg_branch.q.out
@@ -0,0 +1,109 @@
+PREHOOK: query: create external table ice01(id int) stored by iceberg stored 
as orc tblproperties ('format-version'='2')
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@ice01
+POSTHOOK: query: create external table ice01(id int) stored by iceberg stored 
as orc tblproperties ('format-version'='2')
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@ice01
+PREHOOK: query: insert into ice01 values (1), (2), (3), (4)
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@ice01
+POSTHOOK: query: insert into ice01 values (1), (2), (3), (4)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@ice01
+PREHOOK: query: select * from ice01
+PREHOOK: type: QUERY
+PREHOOK: Input: default@ice01
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select * from ice01
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@ice01
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+1
+2
+3
+4
+PREHOOK: query: alter table ice01 create branch source
+PREHOOK: type: ALTERTABLE_CREATEBRANCH
+PREHOOK: Input: default@ice01
+POSTHOOK: query: alter table ice01 create branch source
+POSTHOOK: type: ALTERTABLE_CREATEBRANCH
+POSTHOOK: Input: default@ice01
+PREHOOK: query: select * from default.ice01.branch_source
+PREHOOK: type: QUERY
+PREHOOK: Input: default@ice01
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select * from default.ice01.branch_source
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@ice01
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+1
+2
+3
+4
+PREHOOK: query: insert into ice01 values (5), (6)
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@ice01
+POSTHOOK: query: insert into ice01 values (5), (6)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@ice01
+PREHOOK: query: select * from default.ice01.branch_source
+PREHOOK: type: QUERY
+PREHOOK: Input: default@ice01
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select * from default.ice01.branch_source
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@ice01
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+1
+2
+3
+4
+PREHOOK: query: explain alter table ice01 rename branch source to target
+PREHOOK: type: ALTERTABLE_RENAMEBRANCH
+PREHOOK: Input: default@ice01
+POSTHOOK: query: explain alter table ice01 rename branch source to target
+POSTHOOK: type: ALTERTABLE_RENAMEBRANCH
+POSTHOOK: Input: default@ice01
+STAGE DEPENDENCIES:
+  Stage-0 is a root stage
+
+STAGE PLANS:
+  Stage: Stage-0
+    SnapshotRef Operation
+      table name: default.ice01
+      spec: AlterTableSnapshotRefSpec{operationType=RENAME_BRANCH, 
operationParams=RenameSnapshotrefSpec{sourceBranch=source, targetBranch=target}}
+
+PREHOOK: query: alter table ice01 rename branch source to target
+PREHOOK: type: ALTERTABLE_RENAMEBRANCH
+PREHOOK: Input: default@ice01
+POSTHOOK: query: alter table ice01 rename branch source to target
+POSTHOOK: type: ALTERTABLE_RENAMEBRANCH
+POSTHOOK: Input: default@ice01
+PREHOOK: query: select name,type from default.ice01.refs
+PREHOOK: type: QUERY
+PREHOOK: Input: default@ice01
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select name,type from default.ice01.refs
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@ice01
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+main   BRANCH
+target BRANCH
+PREHOOK: query: select * from default.ice01.branch_target
+PREHOOK: type: QUERY
+PREHOOK: Input: default@ice01
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: select * from default.ice01.branch_target
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@ice01
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+1
+2
+3
+4
diff --git 
a/parser/src/java/org/apache/hadoop/hive/ql/parse/AlterClauseParser.g 
b/parser/src/java/org/apache/hadoop/hive/ql/parse/AlterClauseParser.g
index 873a28eb05c..a628c4364ed 100644
--- a/parser/src/java/org/apache/hadoop/hive/ql/parse/AlterClauseParser.g
+++ b/parser/src/java/org/apache/hadoop/hive/ql/parse/AlterClauseParser.g
@@ -80,6 +80,7 @@ alterTableStatementSuffix
     | alterStatementSuffixCreateTag
     | alterStatementSuffixDropTag
     | alterStatementSuffixConvert
+    | alterStatementSuffixRenameBranch
     ;
 
 alterTblPartitionStatementSuffix[boolean partition]
@@ -505,6 +506,13 @@ alterStatementSuffixExecute
     -> ^(TOK_ALTERTABLE_EXECUTE KW_ORPHAN_FILES $timestamp?)
     ;
 
+alterStatementSuffixRenameBranch
+@init { gParent.pushMsg("alter table rename branch", state); }
+@after { gParent.popMsg(state); }
+    : KW_RENAME KW_BRANCH sourceBranch=identifier KW_TO targetBranch=identifier
+    -> ^(TOK_ALTERTABLE_RENAME_BRANCH $sourceBranch $targetBranch)
+    ;
+
 alterStatementSuffixDropBranch
 @init { gParent.pushMsg("alter table drop branch (if exists) branchName", 
state); }
 @after { gParent.popMsg(state); }
diff --git a/parser/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g 
b/parser/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
index d9cdac0c0d1..9c2c0c6b302 100644
--- a/parser/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
+++ b/parser/src/java/org/apache/hadoop/hive/ql/parse/HiveParser.g
@@ -221,6 +221,7 @@ TOK_ALTERTABLE_SETPARTSPEC;
 TOK_ALTERTABLE_EXECUTE;
 TOK_ALTERTABLE_CREATE_BRANCH;
 TOK_ALTERTABLE_DROP_BRANCH;
+TOK_ALTERTABLE_RENAME_BRANCH;
 TOK_ALTERTABLE_CREATE_TAG;
 TOK_ALTERTABLE_DROP_TAG;
 TOK_RETAIN;
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/AlterTableType.java 
b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/AlterTableType.java
index 7da882c641b..cc78ba6317d 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/AlterTableType.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/AlterTableType.java
@@ -42,6 +42,7 @@ public enum AlterTableType {
   EXECUTE("execute"),
   CREATE_BRANCH("create branch"),
   DROP_BRANCH("drop branch"),
+  RENAME_BRANCH("rename branch"),
   CREATE_TAG("create tag"),
   DROP_TAG("drop tag"),
   // constraint
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/snapshotref/branch/rename/AlterTableRenameSnapshotRefAnalyzer.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/snapshotref/branch/rename/AlterTableRenameSnapshotRefAnalyzer.java
new file mode 100644
index 00000000000..89cc11fb0f6
--- /dev/null
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/ddl/table/snapshotref/branch/rename/AlterTableRenameSnapshotRefAnalyzer.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.hive.ql.ddl.table.snapshotref.branch.rename;
+
+import java.util.Map;
+
+import org.apache.hadoop.hive.common.TableName;
+import org.apache.hadoop.hive.ql.QueryState;
+import org.apache.hadoop.hive.ql.ddl.DDLSemanticAnalyzerFactory;
+import org.apache.hadoop.hive.ql.ddl.DDLUtils;
+import org.apache.hadoop.hive.ql.ddl.DDLWork;
+import org.apache.hadoop.hive.ql.ddl.table.AbstractAlterTableAnalyzer;
+import org.apache.hadoop.hive.ql.ddl.table.AbstractAlterTableDesc;
+import org.apache.hadoop.hive.ql.ddl.table.AlterTableType;
+import 
org.apache.hadoop.hive.ql.ddl.table.snapshotref.AlterTableSnapshotRefDesc;
+import org.apache.hadoop.hive.ql.exec.TaskFactory;
+import org.apache.hadoop.hive.ql.hooks.ReadEntity;
+import org.apache.hadoop.hive.ql.metadata.Table;
+import org.apache.hadoop.hive.ql.parse.ASTNode;
+import org.apache.hadoop.hive.ql.parse.AlterTableSnapshotRefSpec;
+import org.apache.hadoop.hive.ql.parse.HiveParser;
+import org.apache.hadoop.hive.ql.parse.SemanticException;
+
[email protected](types = 
HiveParser.TOK_ALTERTABLE_RENAME_BRANCH)
+public class AlterTableRenameSnapshotRefAnalyzer extends 
AbstractAlterTableAnalyzer {
+
+  protected AlterTableType alterTableType;
+
+  public AlterTableRenameSnapshotRefAnalyzer(QueryState queryState) throws 
SemanticException {
+    super(queryState);
+    alterTableType = AlterTableType.RENAME_BRANCH;
+  }
+
+  @Override
+  protected void analyzeCommand(TableName tableName, Map<String, String> 
partitionSpec, ASTNode command)
+      throws SemanticException {
+    Table table = getTable(tableName);
+    DDLUtils.validateTableIsIceberg(table);
+    inputs.add(new ReadEntity(table));
+    validateAlterTableType(table, alterTableType, false);
+    String sourceBranch = command.getChild(0).getText();
+    String targetBranch = command.getChild(1).getText();
+
+    AlterTableSnapshotRefSpec.RenameSnapshotrefSpec renameSnapshotrefSpec =
+        new AlterTableSnapshotRefSpec.RenameSnapshotrefSpec(sourceBranch, 
targetBranch);
+    AlterTableSnapshotRefSpec<AlterTableSnapshotRefSpec.RenameSnapshotrefSpec> 
alterTableSnapshotRefSpec =
+        new AlterTableSnapshotRefSpec(alterTableType, renameSnapshotrefSpec);
+    AbstractAlterTableDesc alterTableDesc =
+        new AlterTableSnapshotRefDesc(alterTableType, tableName, 
alterTableSnapshotRefSpec);
+    rootTasks.add(TaskFactory.get(new DDLWork(getInputs(), getOutputs(), 
alterTableDesc)));
+  }
+}
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/parse/AlterTableSnapshotRefSpec.java 
b/ql/src/java/org/apache/hadoop/hive/ql/parse/AlterTableSnapshotRefSpec.java
index 1300f5f5a1b..00408652830 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/AlterTableSnapshotRefSpec.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/AlterTableSnapshotRefSpec.java
@@ -122,4 +122,29 @@ public class AlterTableSnapshotRefSpec<T> {
       return MoreObjects.toStringHelper(this).add("refName", 
refName).add("ifExists", ifExists).toString();
     }
   }
+
+  public static class RenameSnapshotrefSpec {
+
+    private final String sourceBranch;
+    private final String targetBranch;
+
+    public String getSourceBranchName() {
+      return sourceBranch;
+    }
+
+    public String getTargetBranchName() {
+      return targetBranch;
+    }
+
+    public RenameSnapshotrefSpec(String sourceBranch, String targetBranch) {
+      this.sourceBranch = sourceBranch;
+      this.targetBranch = targetBranch;
+    }
+
+    @Override
+    public String toString() {
+      return MoreObjects.toStringHelper(this).add("sourceBranch", 
sourceBranch).add("targetBranch", targetBranch)
+          .toString();
+    }
+  }
 }
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/plan/HiveOperation.java 
b/ql/src/java/org/apache/hadoop/hive/ql/plan/HiveOperation.java
index 020453d682b..d616912659a 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/plan/HiveOperation.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/plan/HiveOperation.java
@@ -80,6 +80,7 @@ public enum HiveOperation {
   ALTERTABLE_CREATEBRANCH("ALTERTABLE_CREATEBRANCH", 
HiveParser.TOK_ALTERTABLE_CREATE_BRANCH, null, null),
   ALTERTABLE_CREATETAG("ALTERTABLE_CREATETAG", 
HiveParser.TOK_ALTERTABLE_CREATE_TAG, null, null),
   ALTERTABLE_DROPBRANCH("ALTERTABLE_DROPBRANCH", 
HiveParser.TOK_ALTERTABLE_DROP_BRANCH, null, null),
+  ALTERTABLE_RENAMEBRANCH("ALTERTABLE_RENAMEBRANCH", 
HiveParser.TOK_ALTERTABLE_RENAME_BRANCH, null, null),
   ALTERTABLE_DROPTAG("ALTERTABLE_DROPTAG", HiveParser.TOK_ALTERTABLE_DROP_TAG, 
null, null),
   ALTERTABLE_CONVERT("ALTERTABLE_CONVERT", HiveParser.TOK_ALTERTABLE_CONVERT, 
null, null),
   ALTERTABLE_SERIALIZER("ALTERTABLE_SERIALIZER", 
HiveParser.TOK_ALTERTABLE_SERIALIZER,
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/HiveOperationType.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/HiveOperationType.java
index 68d008eeda3..e09cc8c7808 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/HiveOperationType.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/HiveOperationType.java
@@ -141,6 +141,7 @@ public enum HiveOperationType {
   ALTERTABLE_UPDATECOLUMNS,
   ALTERTABLE_CREATEBRANCH,
   ALTERTABLE_DROPBRANCH,
+  ALTERTABLE_RENAMEBRANCH,
   ALTERTABLE_CREATETAG,
   ALTERTABLE_DROPTAG,
   SHOW_COMPACTIONS,
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/sqlstd/Operation2Privilege.java
 
b/ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/sqlstd/Operation2Privilege.java
index 4cb7a57cade..b200522f5a9 100644
--- 
a/ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/sqlstd/Operation2Privilege.java
+++ 
b/ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/sqlstd/Operation2Privilege.java
@@ -246,6 +246,8 @@ public class Operation2Privilege {
         PrivRequirement.newIOPrivRequirement(OWNER_PRIV_AR, OWNER_PRIV_AR));
     op2Priv.put(HiveOperationType.ALTERTABLE_DROPBRANCH,
         PrivRequirement.newIOPrivRequirement(OWNER_PRIV_AR, OWNER_PRIV_AR));
+    op2Priv.put(HiveOperationType.ALTERTABLE_RENAMEBRANCH,
+        PrivRequirement.newIOPrivRequirement(OWNER_PRIV_AR, OWNER_PRIV_AR));
     op2Priv.put(HiveOperationType.ALTERTABLE_DROPTAG,
         PrivRequirement.newIOPrivRequirement(OWNER_PRIV_AR, OWNER_PRIV_AR));
 

Reply via email to