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 1dcce08f409 HIVE-29509: Iceberg: Incorrect results if more than one 
snapshot (branch/tag/current) is involved in a query (#6363)
1dcce08f409 is described below

commit 1dcce08f40971931b56664141ef2d5281b65b5b8
Author: Ayush Saxena <[email protected]>
AuthorDate: Mon Mar 16 12:40:24 2026 +0530

    HIVE-29509: Iceberg: Incorrect results if more than one snapshot 
(branch/tag/current) is involved in a query (#6363)
---
 .../queries/positive/iceberg_branch_with_table.q   |  43 +++++++
 .../fastforward_iceberg_branch_conflict.q.out      |   8 +-
 .../positive/alter_table_create_branch.q.out       |   4 +-
 .../results/positive/alter_table_create_tag.q.out  |   4 +-
 .../positive/fastforward_iceberg_branch.q.out      |  20 +--
 .../positive/iceberg_branch_with_table.q.out       | 141 +++++++++++++++++++++
 .../positive/iceberg_branches_and_tags.q.out       |  20 +--
 ...berg_major_compaction_partition_evolution.q.out |  32 ++---
 .../llap/puffin_col_stats_with_time_travel.q.out   |   8 +-
 .../test/results/positive/metadata_delete.q.out    |   8 +-
 .../test/results/positive/query_iceberg_tag.q.out  |  16 +--
 .../results/positive/rename_iceberg_branch.q.out   |  12 +-
 .../results/positive/replace_iceberg_branch.q.out  |  44 +++----
 .../results/positive/truncate_iceberg_branch.q.out |  32 ++---
 .../results/positive/write_iceberg_branch.q.out    | 116 ++++++++---------
 .../org/apache/hadoop/hive/ql/hooks/Entity.java    |   2 +-
 .../org/apache/hadoop/hive/ql/metadata/Table.java  |  27 +---
 .../hive/ql/optimizer/SharedWorkOptimizer.java     |   6 +
 .../hadoop/hive/ql/parse/CalcitePlanner.java       |   3 +
 .../org/apache/hadoop/hive/common/TableName.java   |   4 +-
 20 files changed, 364 insertions(+), 186 deletions(-)

diff --git 
a/iceberg/iceberg-handler/src/test/queries/positive/iceberg_branch_with_table.q 
b/iceberg/iceberg-handler/src/test/queries/positive/iceberg_branch_with_table.q
new file mode 100644
index 00000000000..7b79b532224
--- /dev/null
+++ 
b/iceberg/iceberg-handler/src/test/queries/positive/iceberg_branch_with_table.q
@@ -0,0 +1,43 @@
+CREATE EXTERNAL TABLE default.hive_branch_bug
+( foo BIGINT )
+STORED BY ICEBERG;
+
+ALTER TABLE default.hive_branch_bug CREATE BRANCH empty;
+
+INSERT INTO default.hive_branch_bug (foo) VALUES (1), (2), (3), (4);
+
+SELECT COUNT(*)
+FROM default.hive_branch_bug
+UNION ALL
+SELECT COUNT(*)
+FROM default.hive_branch_bug.branch_empty;
+
+SELECT COUNT(*)
+FROM default.hive_branch_bug.branch_empty
+UNION ALL
+SELECT COUNT(*)
+FROM default.hive_branch_bug;
+
+SELECT
+(SELECT COUNT(*) FROM default.hive_branch_bug),
+(SELECT COUNT(*) FROM default.hive_branch_bug.branch_empty);
+
+ SELECT COUNT(*)
+FROM default.hive_branch_bug
+WHERE foo > 0
+UNION ALL
+SELECT COUNT(*)
+FROM default.hive_branch_bug.branch_empty
+WHERE foo > 0;
+
+SELECT *
+FROM (
+SELECT COUNT(*) c
+FROM default.hive_branch_bug
+) a
+UNION ALL
+SELECT *
+FROM (
+SELECT COUNT(*) c
+FROM default.hive_branch_bug.branch_empty
+) b;
diff --git 
a/iceberg/iceberg-handler/src/test/results/negative/fastforward_iceberg_branch_conflict.q.out
 
b/iceberg/iceberg-handler/src/test/results/negative/fastforward_iceberg_branch_conflict.q.out
index 65e418f0668..c2c28ac7b7f 100644
--- 
a/iceberg/iceberg-handler/src/test/results/negative/fastforward_iceberg_branch_conflict.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/negative/fastforward_iceberg_branch_conflict.q.out
@@ -33,11 +33,11 @@ POSTHOOK: type: ALTERTABLE_CREATEBRANCH
 POSTHOOK: Input: default@ice01
 PREHOOK: query: select * from default.ice01.branch_test1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_test1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.branch_test1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_test1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1      one     50
 111    one     55
@@ -67,11 +67,11 @@ POSTHOOK: Output: hdfs://### HDFS PATH ###
 PREHOOK: query: insert into default.ice01.branch_test1 values(15, 'five', 89)
 PREHOOK: type: QUERY
 PREHOOK: Input: _dummy_database@_dummy_table
-PREHOOK: Output: default@ice01
+PREHOOK: Output: default@ice01@branch_test1
 POSTHOOK: query: insert into default.ice01.branch_test1 values(15, 'five', 89)
 POSTHOOK: type: QUERY
 POSTHOOK: Input: _dummy_database@_dummy_table
-POSTHOOK: Output: default@ice01
+POSTHOOK: Output: default@ice01@branch_test1
 PREHOOK: query: select * from ice01
 PREHOOK: type: QUERY
 PREHOOK: Input: default@ice01
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/alter_table_create_branch.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/alter_table_create_branch.q.out
index 9aa8e112c4c..79f2ef73122 100644
--- 
a/iceberg/iceberg-handler/src/test/results/positive/alter_table_create_branch.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/alter_table_create_branch.q.out
@@ -256,11 +256,11 @@ POSTHOOK: type: ALTERTABLE_CREATEBRANCH
 POSTHOOK: Input: default@icetbl
 PREHOOK: query: select * from default.iceTbl.branch_test_branch_1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@icetbl
+PREHOOK: Input: default@icetbl@branch_test_branch_1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.iceTbl.branch_test_branch_1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@icetbl
+POSTHOOK: Input: default@icetbl@branch_test_branch_1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1      jack
 2      bob
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/alter_table_create_tag.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/alter_table_create_tag.q.out
index c4bc404b5e5..a3bb36b1d59 100644
--- 
a/iceberg/iceberg-handler/src/test/results/positive/alter_table_create_tag.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/alter_table_create_tag.q.out
@@ -127,11 +127,11 @@ POSTHOOK: type: ALTERTABLE_CREATETAG
 POSTHOOK: Input: default@icetbl
 PREHOOK: query: select * from default.iceTbl.tag_test_tag_1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@icetbl
+PREHOOK: Input: default@icetbl@tag_test_tag_1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.iceTbl.tag_test_tag_1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@icetbl
+POSTHOOK: Input: default@icetbl@tag_test_tag_1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1      jack
 2      bob
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/fastforward_iceberg_branch.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/fastforward_iceberg_branch.q.out
index be23fc71460..3b123ddd0bd 100644
--- 
a/iceberg/iceberg-handler/src/test/results/positive/fastforward_iceberg_branch.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/fastforward_iceberg_branch.q.out
@@ -34,11 +34,11 @@ POSTHOOK: type: ALTERTABLE_CREATEBRANCH
 POSTHOOK: Input: default@ice01
 PREHOOK: query: select * from default.ice01.branch_test1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_test1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.branch_test1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_test1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1
 2
@@ -53,18 +53,18 @@ POSTHOOK: Input: default@ice01
 PREHOOK: query: insert into default.ice01.branch_test1 values (11), (21), 
(31), (41)
 PREHOOK: type: QUERY
 PREHOOK: Input: _dummy_database@_dummy_table
-PREHOOK: Output: default@ice01
+PREHOOK: Output: default@ice01@branch_test1
 POSTHOOK: query: insert into default.ice01.branch_test1 values (11), (21), 
(31), (41)
 POSTHOOK: type: QUERY
 POSTHOOK: Input: _dummy_database@_dummy_table
-POSTHOOK: Output: default@ice01
+POSTHOOK: Output: default@ice01@branch_test1
 PREHOOK: query: select * from default.ice01.branch_test1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_test1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.branch_test1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_test1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1
 11
@@ -134,11 +134,11 @@ POSTHOOK: type: ALTERTABLE_EXECUTE
 POSTHOOK: Input: default@ice01
 PREHOOK: query: select * from default.ice01.branch_test01
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_test01
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.branch_test01
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_test01
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1
 11
@@ -157,11 +157,11 @@ POSTHOOK: Input: default@ice01
 PREHOOK: query: insert into default.ice01.branch_test2 values (12), (22), 
(32), (42)
 PREHOOK: type: QUERY
 PREHOOK: Input: _dummy_database@_dummy_table
-PREHOOK: Output: default@ice01
+PREHOOK: Output: default@ice01@branch_test2
 POSTHOOK: query: insert into default.ice01.branch_test2 values (12), (22), 
(32), (42)
 POSTHOOK: type: QUERY
 POSTHOOK: Input: _dummy_database@_dummy_table
-POSTHOOK: Output: default@ice01
+POSTHOOK: Output: default@ice01@branch_test2
 PREHOOK: query: alter table ice01 execute fast-forward 'main' 'test2'
 PREHOOK: type: ALTERTABLE_EXECUTE
 PREHOOK: Input: default@ice01
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/iceberg_branch_with_table.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/iceberg_branch_with_table.q.out
new file mode 100644
index 00000000000..266ded3a538
--- /dev/null
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/iceberg_branch_with_table.q.out
@@ -0,0 +1,141 @@
+PREHOOK: query: CREATE EXTERNAL TABLE default.hive_branch_bug
+( foo BIGINT )
+STORED BY ICEBERG
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@hive_branch_bug
+POSTHOOK: query: CREATE EXTERNAL TABLE default.hive_branch_bug
+( foo BIGINT )
+STORED BY ICEBERG
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@hive_branch_bug
+PREHOOK: query: ALTER TABLE default.hive_branch_bug CREATE BRANCH empty
+PREHOOK: type: ALTERTABLE_CREATEBRANCH
+PREHOOK: Input: default@hive_branch_bug
+POSTHOOK: query: ALTER TABLE default.hive_branch_bug CREATE BRANCH empty
+POSTHOOK: type: ALTERTABLE_CREATEBRANCH
+POSTHOOK: Input: default@hive_branch_bug
+PREHOOK: query: INSERT INTO default.hive_branch_bug (foo) VALUES (1), (2), 
(3), (4)
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@hive_branch_bug
+POSTHOOK: query: INSERT INTO default.hive_branch_bug (foo) VALUES (1), (2), 
(3), (4)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@hive_branch_bug
+PREHOOK: query: SELECT COUNT(*)
+FROM default.hive_branch_bug
+UNION ALL
+SELECT COUNT(*)
+FROM default.hive_branch_bug.branch_empty
+PREHOOK: type: QUERY
+PREHOOK: Input: default@hive_branch_bug
+PREHOOK: Input: default@hive_branch_bug@branch_empty
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: SELECT COUNT(*)
+FROM default.hive_branch_bug
+UNION ALL
+SELECT COUNT(*)
+FROM default.hive_branch_bug.branch_empty
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@hive_branch_bug
+POSTHOOK: Input: default@hive_branch_bug@branch_empty
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+4
+0
+PREHOOK: query: SELECT COUNT(*)
+FROM default.hive_branch_bug.branch_empty
+UNION ALL
+SELECT COUNT(*)
+FROM default.hive_branch_bug
+PREHOOK: type: QUERY
+PREHOOK: Input: default@hive_branch_bug
+PREHOOK: Input: default@hive_branch_bug@branch_empty
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: SELECT COUNT(*)
+FROM default.hive_branch_bug.branch_empty
+UNION ALL
+SELECT COUNT(*)
+FROM default.hive_branch_bug
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@hive_branch_bug
+POSTHOOK: Input: default@hive_branch_bug@branch_empty
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+0
+4
+Warning: Shuffle Join MERGEJOIN[22][tables = [$hdt$_0, $hdt$_1]] in Stage 
'Reducer 2' is a cross product
+Warning: Shuffle Join MERGEJOIN[23][tables = [$hdt$_0, $hdt$_1, $hdt$_2]] in 
Stage 'Reducer 3' is a cross product
+PREHOOK: query: SELECT
+(SELECT COUNT(*) FROM default.hive_branch_bug),
+(SELECT COUNT(*) FROM default.hive_branch_bug.branch_empty)
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Input: default@hive_branch_bug
+PREHOOK: Input: default@hive_branch_bug@branch_empty
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: SELECT
+(SELECT COUNT(*) FROM default.hive_branch_bug),
+(SELECT COUNT(*) FROM default.hive_branch_bug.branch_empty)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Input: default@hive_branch_bug
+POSTHOOK: Input: default@hive_branch_bug@branch_empty
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+4      0
+PREHOOK: query: SELECT COUNT(*)
+FROM default.hive_branch_bug
+WHERE foo > 0
+UNION ALL
+SELECT COUNT(*)
+FROM default.hive_branch_bug.branch_empty
+WHERE foo > 0
+PREHOOK: type: QUERY
+PREHOOK: Input: default@hive_branch_bug
+PREHOOK: Input: default@hive_branch_bug@branch_empty
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: SELECT COUNT(*)
+FROM default.hive_branch_bug
+WHERE foo > 0
+UNION ALL
+SELECT COUNT(*)
+FROM default.hive_branch_bug.branch_empty
+WHERE foo > 0
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@hive_branch_bug
+POSTHOOK: Input: default@hive_branch_bug@branch_empty
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+4
+0
+PREHOOK: query: SELECT *
+FROM (
+SELECT COUNT(*) c
+FROM default.hive_branch_bug
+) a
+UNION ALL
+SELECT *
+FROM (
+SELECT COUNT(*) c
+FROM default.hive_branch_bug.branch_empty
+) b
+PREHOOK: type: QUERY
+PREHOOK: Input: default@hive_branch_bug
+PREHOOK: Input: default@hive_branch_bug@branch_empty
+PREHOOK: Output: hdfs://### HDFS PATH ###
+POSTHOOK: query: SELECT *
+FROM (
+SELECT COUNT(*) c
+FROM default.hive_branch_bug
+) a
+UNION ALL
+SELECT *
+FROM (
+SELECT COUNT(*) c
+FROM default.hive_branch_bug.branch_empty
+) b
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@hive_branch_bug
+POSTHOOK: Input: default@hive_branch_bug@branch_empty
+POSTHOOK: Output: hdfs://### HDFS PATH ###
+4
+0
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/iceberg_branches_and_tags.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/iceberg_branches_and_tags.q.out
index 3f7ab8698bb..5ac757ad0bd 100644
--- 
a/iceberg/iceberg-handler/src/test/results/positive/iceberg_branches_and_tags.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/iceberg_branches_and_tags.q.out
@@ -23,18 +23,18 @@ POSTHOOK: Input: default@ice01
 PREHOOK: query: insert into default.ice01.branch_branch1 values (5), (6)
 PREHOOK: type: QUERY
 PREHOOK: Input: _dummy_database@_dummy_table
-PREHOOK: Output: default@ice01
+PREHOOK: Output: default@ice01@branch_branch1
 POSTHOOK: query: insert into default.ice01.branch_branch1 values (5), (6)
 POSTHOOK: type: QUERY
 POSTHOOK: Input: _dummy_database@_dummy_table
-POSTHOOK: Output: default@ice01
+POSTHOOK: Output: default@ice01@branch_branch1
 PREHOOK: query: select * from default.ice01.branch_branch1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_branch1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.branch_branch1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_branch1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1
 2
@@ -50,11 +50,11 @@ POSTHOOK: type: ALTERTABLE_CREATEBRANCH
 POSTHOOK: Input: default@ice01
 PREHOOK: query: select * from default.ice01.branch_branch1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_branch1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.branch_branch1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_branch1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1
 2
@@ -76,11 +76,11 @@ POSTHOOK: type: ALTERTABLE_CREATETAG
 POSTHOOK: Input: default@ice01
 PREHOOK: query: select * from default.ice01.tag_tag1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@tag_tag1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.tag_tag1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@tag_tag1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1
 2
@@ -102,11 +102,11 @@ POSTHOOK: type: ALTERTABLE_CREATETAG
 POSTHOOK: Input: default@ice01
 PREHOOK: query: select * from default.ice01.tag_tag1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@tag_tag1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.tag_tag1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@tag_tag1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1
 3
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partition_evolution.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partition_evolution.q.out
index ca1ff16f65a..5f6cb0fd48c 100644
--- 
a/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partition_evolution.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/llap/iceberg_major_compaction_partition_evolution.q.out
@@ -366,11 +366,11 @@ POSTHOOK: Input: default@ice_orc
 {"company_id":null,"dept_id":null,"team_id":null}      2       0       1
 PREHOOK: query: explain select * from default.ice_orc.tag_v1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice_orc
+PREHOOK: Input: default@ice_orc@tag_v1
 #### A masked pattern was here ####
 POSTHOOK: query: explain select * from default.ice_orc.tag_v1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice_orc
+POSTHOOK: Input: default@ice_orc@tag_v1
 #### A masked pattern was here ####
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
@@ -409,11 +409,11 @@ STAGE PLANS:
 
 PREHOOK: query: explain select * from default.ice_orc.tag_v2
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice_orc
+PREHOOK: Input: default@ice_orc@tag_v2
 #### A masked pattern was here ####
 POSTHOOK: query: explain select * from default.ice_orc.tag_v2
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice_orc
+POSTHOOK: Input: default@ice_orc@tag_v2
 #### A masked pattern was here ####
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
@@ -452,11 +452,11 @@ STAGE PLANS:
 
 PREHOOK: query: explain select * from default.ice_orc.tag_v3
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice_orc
+PREHOOK: Input: default@ice_orc@tag_v3
 #### A masked pattern was here ####
 POSTHOOK: query: explain select * from default.ice_orc.tag_v3
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice_orc
+POSTHOOK: Input: default@ice_orc@tag_v3
 #### A masked pattern was here ####
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
@@ -495,11 +495,11 @@ STAGE PLANS:
 
 PREHOOK: query: explain select * from default.ice_orc.tag_v4
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice_orc
+PREHOOK: Input: default@ice_orc@tag_v4
 #### A masked pattern was here ####
 POSTHOOK: query: explain select * from default.ice_orc.tag_v4
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice_orc
+POSTHOOK: Input: default@ice_orc@tag_v4
 #### A masked pattern was here ####
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
@@ -580,11 +580,11 @@ STAGE PLANS:
 
 PREHOOK: query: explain select * from default.ice_orc.tag_v1 where company_id 
is not null
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice_orc
+PREHOOK: Input: default@ice_orc@tag_v1
 #### A masked pattern was here ####
 POSTHOOK: query: explain select * from default.ice_orc.tag_v1 where company_id 
is not null
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice_orc
+POSTHOOK: Input: default@ice_orc@tag_v1
 #### A masked pattern was here ####
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
@@ -627,11 +627,11 @@ STAGE PLANS:
 
 PREHOOK: query: explain select * from default.ice_orc.tag_v2 where company_id 
is not null
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice_orc
+PREHOOK: Input: default@ice_orc@tag_v2
 #### A masked pattern was here ####
 POSTHOOK: query: explain select * from default.ice_orc.tag_v2 where company_id 
is not null
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice_orc
+POSTHOOK: Input: default@ice_orc@tag_v2
 #### A masked pattern was here ####
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
@@ -674,11 +674,11 @@ STAGE PLANS:
 
 PREHOOK: query: explain select * from default.ice_orc.tag_v3 where company_id 
is not null
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice_orc
+PREHOOK: Input: default@ice_orc@tag_v3
 #### A masked pattern was here ####
 POSTHOOK: query: explain select * from default.ice_orc.tag_v3 where company_id 
is not null
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice_orc
+POSTHOOK: Input: default@ice_orc@tag_v3
 #### A masked pattern was here ####
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
@@ -721,11 +721,11 @@ STAGE PLANS:
 
 PREHOOK: query: explain select * from default.ice_orc.tag_v4 where company_id 
is not null
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice_orc
+PREHOOK: Input: default@ice_orc@tag_v4
 #### A masked pattern was here ####
 POSTHOOK: query: explain select * from default.ice_orc.tag_v4 where company_id 
is not null
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice_orc
+POSTHOOK: Input: default@ice_orc@tag_v4
 #### A masked pattern was here ####
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/llap/puffin_col_stats_with_time_travel.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/llap/puffin_col_stats_with_time_travel.q.out
index 651ee8c48c3..bf0ec56f24e 100644
--- 
a/iceberg/iceberg-handler/src/test/results/positive/llap/puffin_col_stats_with_time_travel.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/llap/puffin_col_stats_with_time_travel.q.out
@@ -76,11 +76,11 @@ STAGE PLANS:
 
 PREHOOK: query: explain select * from 
default.tbl_ice_puffin_time_travel.tag_checkpoint
 PREHOOK: type: QUERY
-PREHOOK: Input: default@tbl_ice_puffin_time_travel
+PREHOOK: Input: default@tbl_ice_puffin_time_travel@tag_checkpoint
 #### A masked pattern was here ####
 POSTHOOK: query: explain select * from 
default.tbl_ice_puffin_time_travel.tag_checkpoint
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@tbl_ice_puffin_time_travel
+POSTHOOK: Input: default@tbl_ice_puffin_time_travel@tag_checkpoint
 #### A masked pattern was here ####
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
@@ -193,11 +193,11 @@ STAGE PLANS:
 
 PREHOOK: query: explain select * from 
default.tbl_ice_puffin_time_travel.tag_checkpoint
 PREHOOK: type: QUERY
-PREHOOK: Input: default@tbl_ice_puffin_time_travel
+PREHOOK: Input: default@tbl_ice_puffin_time_travel@tag_checkpoint
 #### A masked pattern was here ####
 POSTHOOK: query: explain select * from 
default.tbl_ice_puffin_time_travel.tag_checkpoint
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@tbl_ice_puffin_time_travel
+POSTHOOK: Input: default@tbl_ice_puffin_time_travel@tag_checkpoint
 #### A masked pattern was here ####
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/metadata_delete.q.out 
b/iceberg/iceberg-handler/src/test/results/positive/metadata_delete.q.out
index 6f4f582d221..330d08b517b 100644
--- a/iceberg/iceberg-handler/src/test/results/positive/metadata_delete.q.out
+++ b/iceberg/iceberg-handler/src/test/results/positive/metadata_delete.q.out
@@ -218,19 +218,19 @@ POSTHOOK: type: ALTERTABLE_CREATEBRANCH
 POSTHOOK: Input: default@ice_branch_metadata_delete
 PREHOOK: query: delete from default.ice_branch_metadata_delete.branch_test01 
where a = 1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice_branch_metadata_delete
+PREHOOK: Input: default@ice_branch_metadata_delete@branch_test01
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: delete from default.ice_branch_metadata_delete.branch_test01 
where a = 1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice_branch_metadata_delete
+POSTHOOK: Input: default@ice_branch_metadata_delete@branch_test01
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 PREHOOK: query: select * from default.ice_branch_metadata_delete.branch_test01
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice_branch_metadata_delete
+PREHOOK: Input: default@ice_branch_metadata_delete@branch_test01
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice_branch_metadata_delete.branch_test01
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice_branch_metadata_delete
+POSTHOOK: Input: default@ice_branch_metadata_delete@branch_test01
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 2      DEF
 3      GHI
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/query_iceberg_tag.q.out 
b/iceberg/iceberg-handler/src/test/results/positive/query_iceberg_tag.q.out
index 12bf11b23ae..7e5f0ed9373 100644
--- a/iceberg/iceberg-handler/src/test/results/positive/query_iceberg_tag.q.out
+++ b/iceberg/iceberg-handler/src/test/results/positive/query_iceberg_tag.q.out
@@ -22,11 +22,11 @@ POSTHOOK: type: ALTERTABLE_CREATETAG
 POSTHOOK: Input: default@ice01
 PREHOOK: query: explain select * from default.ice01.tag_test1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@tag_test1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: explain select * from default.ice01.tag_test1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@tag_test1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 STAGE DEPENDENCIES:
   Stage-0 is a root stage
@@ -46,22 +46,22 @@ STAGE PLANS:
 
 PREHOOK: query: select * from default.ice01.tag_test1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@tag_test1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.tag_test1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@tag_test1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1      one     50
 111    one     55
 2      two     51
 PREHOOK: query: explain select * from default.ice01.tag_test1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@tag_test1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: explain select * from default.ice01.tag_test1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@tag_test1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
@@ -99,11 +99,11 @@ STAGE PLANS:
 
 PREHOOK: query: select * from default.ice01.tag_test1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@tag_test1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.tag_test1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@tag_test1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1      one     50
 111    one     55
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
index fde01053d5a..8075bf7099d 100644
--- 
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
@@ -34,11 +34,11 @@ POSTHOOK: type: ALTERTABLE_CREATEBRANCH
 POSTHOOK: Input: default@ice01
 PREHOOK: query: select * from default.ice01.branch_source
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_source
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.branch_source
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_source
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1
 2
@@ -54,11 +54,11 @@ 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: Input: default@ice01@branch_source
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.branch_source
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_source
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1
 2
@@ -97,11 +97,11 @@ main        BRANCH
 target BRANCH
 PREHOOK: query: select * from default.ice01.branch_target
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_target
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.branch_target
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_target
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1
 2
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/replace_iceberg_branch.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/replace_iceberg_branch.q.out
index 6b2173d3c93..0656246abc9 100644
--- 
a/iceberg/iceberg-handler/src/test/results/positive/replace_iceberg_branch.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/replace_iceberg_branch.q.out
@@ -35,18 +35,18 @@ POSTHOOK: Input: default@ice01
 PREHOOK: query: insert into default.ice01.branch_branch1 values (5), (6)
 PREHOOK: type: QUERY
 PREHOOK: Input: _dummy_database@_dummy_table
-PREHOOK: Output: default@ice01
+PREHOOK: Output: default@ice01@branch_branch1
 POSTHOOK: query: insert into default.ice01.branch_branch1 values (5), (6)
 POSTHOOK: type: QUERY
 POSTHOOK: Input: _dummy_database@_dummy_table
-POSTHOOK: Output: default@ice01
+POSTHOOK: Output: default@ice01@branch_branch1
 PREHOOK: query: select * from default.ice01.branch_branch1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_branch1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.branch_branch1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_branch1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1
 2
@@ -63,26 +63,26 @@ POSTHOOK: Input: default@ice01
 PREHOOK: query: insert into default.ice01.branch_branch2 values (22), (44)
 PREHOOK: type: QUERY
 PREHOOK: Input: _dummy_database@_dummy_table
-PREHOOK: Output: default@ice01
+PREHOOK: Output: default@ice01@branch_branch2
 POSTHOOK: query: insert into default.ice01.branch_branch2 values (22), (44)
 POSTHOOK: type: QUERY
 POSTHOOK: Input: _dummy_database@_dummy_table
-POSTHOOK: Output: default@ice01
+POSTHOOK: Output: default@ice01@branch_branch2
 PREHOOK: query: delete from default.ice01.branch_branch2 where id=2
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
-PREHOOK: Output: default@ice01
+PREHOOK: Input: default@ice01@branch_branch2
+PREHOOK: Output: default@ice01@branch_branch2
 POSTHOOK: query: delete from default.ice01.branch_branch2 where id=2
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
-POSTHOOK: Output: default@ice01
+POSTHOOK: Input: default@ice01@branch_branch2
+POSTHOOK: Output: default@ice01@branch_branch2
 PREHOOK: query: select * from default.ice01.branch_branch2
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_branch2
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.branch_branch2
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_branch2
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1
 22
@@ -112,11 +112,11 @@ POSTHOOK: type: ALTERTABLE_REPLACESNAPSHOTREF
 POSTHOOK: Input: default@ice01
 PREHOOK: query: select * from default.ice01.branch_branch1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_branch1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.branch_branch1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_branch1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1
 22
@@ -132,11 +132,11 @@ POSTHOOK: Input: default@ice01
 PREHOOK: query: insert into default.ice01.branch_branch3 values (45), (32)
 PREHOOK: type: QUERY
 PREHOOK: Input: _dummy_database@_dummy_table
-PREHOOK: Output: default@ice01
+PREHOOK: Output: default@ice01@branch_branch3
 POSTHOOK: query: insert into default.ice01.branch_branch3 values (45), (32)
 POSTHOOK: type: QUERY
 POSTHOOK: Input: _dummy_database@_dummy_table
-POSTHOOK: Output: default@ice01
+POSTHOOK: Output: default@ice01@branch_branch3
 PREHOOK: query: explain alter table ice01 replace branch branch1 as of branch 
branch3 retain 5 days
 PREHOOK: type: ALTERTABLE_REPLACESNAPSHOTREF
 PREHOOK: Input: default@ice01
@@ -160,11 +160,11 @@ POSTHOOK: type: ALTERTABLE_REPLACESNAPSHOTREF
 POSTHOOK: Input: default@ice01
 PREHOOK: query: select * from default.ice01.branch_branch1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_branch1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.branch_branch1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_branch1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1
 2
@@ -181,11 +181,11 @@ POSTHOOK: Input: default@ice01
 PREHOOK: query: insert into default.ice01.branch_branch4 values (11), (78)
 PREHOOK: type: QUERY
 PREHOOK: Input: _dummy_database@_dummy_table
-PREHOOK: Output: default@ice01
+PREHOOK: Output: default@ice01@branch_branch4
 POSTHOOK: query: insert into default.ice01.branch_branch4 values (11), (78)
 POSTHOOK: type: QUERY
 POSTHOOK: Input: _dummy_database@_dummy_table
-POSTHOOK: Output: default@ice01
+POSTHOOK: Output: default@ice01@branch_branch4
 PREHOOK: query: explain alter table ice01 replace branch branch1 as of branch 
branch4 with snapshot retention 5 snapshots 6 days
 PREHOOK: type: ALTERTABLE_REPLACESNAPSHOTREF
 PREHOOK: Input: default@ice01
@@ -209,11 +209,11 @@ POSTHOOK: type: ALTERTABLE_REPLACESNAPSHOTREF
 POSTHOOK: Input: default@ice01
 PREHOOK: query: select * from default.ice01.branch_branch1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_branch1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.branch_branch1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_branch1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1
 11
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/truncate_iceberg_branch.q.out
 
b/iceberg/iceberg-handler/src/test/results/positive/truncate_iceberg_branch.q.out
index eda1d52ea49..fba246c4e54 100644
--- 
a/iceberg/iceberg-handler/src/test/results/positive/truncate_iceberg_branch.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/truncate_iceberg_branch.q.out
@@ -34,11 +34,11 @@ POSTHOOK: type: ALTERTABLE_CREATEBRANCH
 POSTHOOK: Input: default@ice01
 PREHOOK: query: select * from default.ice01.branch_branch1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_branch1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.branch_branch1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_branch1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1
 2
@@ -54,11 +54,11 @@ POSTHOOK: Input: _dummy_database@_dummy_table
 POSTHOOK: Output: default@ice01
 PREHOOK: query: select * from default.ice01.branch_branch1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_branch1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.branch_branch1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_branch1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1
 2
@@ -66,17 +66,17 @@ POSTHOOK: Output: hdfs://### HDFS PATH ###
 4
 PREHOOK: query: truncate table default.ice01.branch_branch1
 PREHOOK: type: TRUNCATETABLE
-PREHOOK: Output: default@ice01
+PREHOOK: Output: default@ice01@branch_branch1
 POSTHOOK: query: truncate table default.ice01.branch_branch1
 POSTHOOK: type: TRUNCATETABLE
-POSTHOOK: Output: default@ice01
+POSTHOOK: Output: default@ice01@branch_branch1
 PREHOOK: query: select * from default.ice01.branch_branch1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_branch1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.branch_branch1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_branch1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 PREHOOK: query: create external table ice02(id int) partitioned by (name 
string) stored by iceberg stored as orc tblproperties ('format-version'='2')
 PREHOOK: type: CREATETABLE
@@ -115,18 +115,18 @@ POSTHOOK: Input: default@ice02
 PREHOOK: query: insert into default.ice02.branch_branch1 values (5, 'A'), (6, 
'C')
 PREHOOK: type: QUERY
 PREHOOK: Input: _dummy_database@_dummy_table
-PREHOOK: Output: default@ice02
+PREHOOK: Output: default@ice02@branch_branch1
 POSTHOOK: query: insert into default.ice02.branch_branch1 values (5, 'A'), (6, 
'C')
 POSTHOOK: type: QUERY
 POSTHOOK: Input: _dummy_database@_dummy_table
-POSTHOOK: Output: default@ice02
+POSTHOOK: Output: default@ice02@branch_branch1
 PREHOOK: query: select * from default.ice02.branch_branch1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice02
+PREHOOK: Input: default@ice02@branch_branch1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice02.branch_branch1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice02
+POSTHOOK: Input: default@ice02@branch_branch1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1      A
 2      B
@@ -142,11 +142,11 @@ POSTHOOK: type: TRUNCATETABLE
 POSTHOOK: Output: default@ice02@name=A
 PREHOOK: query: select * from default.ice02.branch_branch1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice02
+PREHOOK: Input: default@ice02@branch_branch1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice02.branch_branch1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice02
+POSTHOOK: Input: default@ice02@branch_branch1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 2      B
 4      B
@@ -178,11 +178,11 @@ POSTHOOK: type: QUERY
 POSTHOOK: Output: default@ice02@name=C
 PREHOOK: query: select * from default.ice02.branch_branch1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice02
+PREHOOK: Input: default@ice02@branch_branch1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice02.branch_branch1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice02
+POSTHOOK: Input: default@ice02@branch_branch1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 2      B
 4      B
diff --git 
a/iceberg/iceberg-handler/src/test/results/positive/write_iceberg_branch.q.out 
b/iceberg/iceberg-handler/src/test/results/positive/write_iceberg_branch.q.out
index 56a158528de..9c80024e09b 100644
--- 
a/iceberg/iceberg-handler/src/test/results/positive/write_iceberg_branch.q.out
+++ 
b/iceberg/iceberg-handler/src/test/results/positive/write_iceberg_branch.q.out
@@ -41,11 +41,11 @@ POSTHOOK: type: ALTERTABLE_CREATEBRANCH
 POSTHOOK: Input: default@ice01
 PREHOOK: query: explain select * from default.ice01.branch_test1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_test1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: explain select * from default.ice01.branch_test1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_test1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 STAGE DEPENDENCIES:
   Stage-0 is a root stage
@@ -65,11 +65,11 @@ STAGE PLANS:
 
 PREHOOK: query: select * from default.ice01.branch_test1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_test1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.branch_test1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_test1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1      one     50
 111    one     55
@@ -88,11 +88,11 @@ POSTHOOK: Output: hdfs://### HDFS PATH ###
 PREHOOK: query: explain insert into default.ice01.branch_test1 values(22, 
'three', 44), (33, 'three', 66)
 PREHOOK: type: QUERY
 PREHOOK: Input: _dummy_database@_dummy_table
-PREHOOK: Output: default@ice01
+PREHOOK: Output: default@ice01@branch_test1
 POSTHOOK: query: explain insert into default.ice01.branch_test1 values(22, 
'three', 44), (33, 'three', 66)
 POSTHOOK: type: QUERY
 POSTHOOK: Input: _dummy_database@_dummy_table
-POSTHOOK: Output: default@ice01
+POSTHOOK: Output: default@ice01@branch_test1
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
   Stage-2 depends on stages: Stage-1
@@ -191,18 +191,18 @@ STAGE PLANS:
 PREHOOK: query: insert into default.ice01.branch_test1 values(22, 'three', 
44), (33, 'three', 66)
 PREHOOK: type: QUERY
 PREHOOK: Input: _dummy_database@_dummy_table
-PREHOOK: Output: default@ice01
+PREHOOK: Output: default@ice01@branch_test1
 POSTHOOK: query: insert into default.ice01.branch_test1 values(22, 'three', 
44), (33, 'three', 66)
 POSTHOOK: type: QUERY
 POSTHOOK: Input: _dummy_database@_dummy_table
-POSTHOOK: Output: default@ice01
+POSTHOOK: Output: default@ice01@branch_test1
 PREHOOK: query: select * from default.ice01.branch_test1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_test1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.branch_test1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_test1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1      one     50
 111    one     55
@@ -211,12 +211,12 @@ POSTHOOK: Output: hdfs://### HDFS PATH ###
 33     three   66
 PREHOOK: query: explain delete from default.ice01.branch_test1 where a=22
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
-PREHOOK: Output: default@ice01
+PREHOOK: Input: default@ice01@branch_test1
+PREHOOK: Output: default@ice01@branch_test1
 POSTHOOK: query: explain delete from default.ice01.branch_test1 where a=22
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
-POSTHOOK: Output: default@ice01
+POSTHOOK: Input: default@ice01@branch_test1
+POSTHOOK: Output: default@ice01@branch_test1
 STAGE DEPENDENCIES:
   Stage-2 is a root stage
   Stage-3 depends on stages: Stage-2
@@ -271,19 +271,19 @@ STAGE PLANS:
 
 PREHOOK: query: delete from default.ice01.branch_test1 where a=22
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
-PREHOOK: Output: default@ice01
+PREHOOK: Input: default@ice01@branch_test1
+PREHOOK: Output: default@ice01@branch_test1
 POSTHOOK: query: delete from default.ice01.branch_test1 where a=22
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
-POSTHOOK: Output: default@ice01
+POSTHOOK: Input: default@ice01@branch_test1
+POSTHOOK: Output: default@ice01@branch_test1
 PREHOOK: query: select * from default.ice01.branch_test1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_test1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.branch_test1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_test1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1      one     50
 111    one     55
@@ -291,14 +291,14 @@ POSTHOOK: Output: hdfs://### HDFS PATH ###
 33     three   66
 PREHOOK: query: explain update default.ice01.branch_test1 set a=33 where c=66
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
-PREHOOK: Output: default@ice01
-PREHOOK: Output: default@ice01
+PREHOOK: Input: default@ice01@branch_test1
+PREHOOK: Output: default@ice01@branch_test1
+PREHOOK: Output: default@ice01@branch_test1
 POSTHOOK: query: explain update default.ice01.branch_test1 set a=33 where c=66
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
-POSTHOOK: Output: default@ice01
-POSTHOOK: Output: default@ice01
+POSTHOOK: Input: default@ice01@branch_test1
+POSTHOOK: Output: default@ice01@branch_test1
+POSTHOOK: Output: default@ice01@branch_test1
 STAGE DEPENDENCIES:
   Stage-2 is a root stage
   Stage-3 depends on stages: Stage-2
@@ -369,21 +369,21 @@ STAGE PLANS:
 
 PREHOOK: query: update default.ice01.branch_test1 set a=33 where c=66
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
-PREHOOK: Output: default@ice01
-PREHOOK: Output: default@ice01
+PREHOOK: Input: default@ice01@branch_test1
+PREHOOK: Output: default@ice01@branch_test1
+PREHOOK: Output: default@ice01@branch_test1
 POSTHOOK: query: update default.ice01.branch_test1 set a=33 where c=66
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
-POSTHOOK: Output: default@ice01
-POSTHOOK: Output: default@ice01
+POSTHOOK: Input: default@ice01@branch_test1
+POSTHOOK: Output: default@ice01@branch_test1
+POSTHOOK: Output: default@ice01@branch_test1
 PREHOOK: query: select * from default.ice01.branch_test1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_test1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.branch_test1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_test1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1      one     50
 111    one     55
@@ -395,10 +395,10 @@ when matched and t.a > 100 THEN DELETE
 when matched then update set b = 'Merged', c = t.c + 10
 when not matched then insert values (src.a, src.b, src.c)
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_test1
 PREHOOK: Input: default@source01
-PREHOOK: Output: default@ice01
-PREHOOK: Output: default@ice01
+PREHOOK: Output: default@ice01@branch_test1
+PREHOOK: Output: default@ice01@branch_test1
 PREHOOK: Output: default@merge_tmp_table
 POSTHOOK: query: explain
 merge into default.ice01.branch_test1 as t using source01 src ON t.a = src.a
@@ -406,10 +406,10 @@ when matched and t.a > 100 THEN DELETE
 when matched then update set b = 'Merged', c = t.c + 10
 when not matched then insert values (src.a, src.b, src.c)
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_test1
 POSTHOOK: Input: default@source01
-POSTHOOK: Output: default@ice01
-POSTHOOK: Output: default@ice01
+POSTHOOK: Output: default@ice01@branch_test1
+POSTHOOK: Output: default@ice01@branch_test1
 POSTHOOK: Output: default@merge_tmp_table
 STAGE DEPENDENCIES:
   Stage-5 is a root stage
@@ -623,29 +623,29 @@ when matched and t.a > 100 THEN DELETE
 when matched then update set b = 'Merged', c = t.c + 10
 when not matched then insert values (src.a, src.b, src.c)
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_test1
 PREHOOK: Input: default@source01
-PREHOOK: Output: default@ice01
-PREHOOK: Output: default@ice01
+PREHOOK: Output: default@ice01@branch_test1
+PREHOOK: Output: default@ice01@branch_test1
 PREHOOK: Output: default@merge_tmp_table
 POSTHOOK: query: merge into default.ice01.branch_test1 as t using source01 src 
ON t.a = src.a
 when matched and t.a > 100 THEN DELETE
 when matched then update set b = 'Merged', c = t.c + 10
 when not matched then insert values (src.a, src.b, src.c)
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_test1
 POSTHOOK: Input: default@source01
-POSTHOOK: Output: default@ice01
-POSTHOOK: Output: default@ice01
+POSTHOOK: Output: default@ice01@branch_test1
+POSTHOOK: Output: default@ice01@branch_test1
 POSTHOOK: Output: default@merge_tmp_table
 POSTHOOK: Lineage: merge_tmp_table.val EXPRESSION [(ice01)ice01.null, ]
 PREHOOK: query: select * from default.ice01.branch_test1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_test1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.branch_test1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_test1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 1      Merged  60
 2      Merged  61
@@ -656,11 +656,11 @@ POSTHOOK: Output: hdfs://### HDFS PATH ###
 PREHOOK: query: explain insert overwrite table default.ice01.branch_test1 
values (77, 'one', 88)
 PREHOOK: type: QUERY
 PREHOOK: Input: _dummy_database@_dummy_table
-PREHOOK: Output: default@ice01
+PREHOOK: Output: default@ice01@branch_test1
 POSTHOOK: query: explain insert overwrite table default.ice01.branch_test1 
values (77, 'one', 88)
 POSTHOOK: type: QUERY
 POSTHOOK: Input: _dummy_database@_dummy_table
-POSTHOOK: Output: default@ice01
+POSTHOOK: Output: default@ice01@branch_test1
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
   Stage-2 depends on stages: Stage-1
@@ -759,27 +759,27 @@ STAGE PLANS:
 PREHOOK: query: insert overwrite table default.ice01.branch_test1 values (77, 
'one', 88)
 PREHOOK: type: QUERY
 PREHOOK: Input: _dummy_database@_dummy_table
-PREHOOK: Output: default@ice01
+PREHOOK: Output: default@ice01@branch_test1
 POSTHOOK: query: insert overwrite table default.ice01.branch_test1 values (77, 
'one', 88)
 POSTHOOK: type: QUERY
 POSTHOOK: Input: _dummy_database@_dummy_table
-POSTHOOK: Output: default@ice01
+POSTHOOK: Output: default@ice01@branch_test1
 PREHOOK: query: select * from default.ice01.branch_test1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_test1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.branch_test1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_test1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 77     one     88
 PREHOOK: query: explain select * from default.ice01.branch_test1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_test1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: explain select * from default.ice01.branch_test1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_test1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 STAGE DEPENDENCIES:
   Stage-1 is a root stage
@@ -817,11 +817,11 @@ STAGE PLANS:
 
 PREHOOK: query: select * from default.ice01.branch_test1
 PREHOOK: type: QUERY
-PREHOOK: Input: default@ice01
+PREHOOK: Input: default@ice01@branch_test1
 PREHOOK: Output: hdfs://### HDFS PATH ###
 POSTHOOK: query: select * from default.ice01.branch_test1
 POSTHOOK: type: QUERY
-POSTHOOK: Input: default@ice01
+POSTHOOK: Input: default@ice01@branch_test1
 POSTHOOK: Output: hdfs://### HDFS PATH ###
 77     one     88
 PREHOOK: query: drop table ice01
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/hooks/Entity.java 
b/ql/src/java/org/apache/hadoop/hive/ql/hooks/Entity.java
index b85988e55a8..ed76adeeeea 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/hooks/Entity.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/hooks/Entity.java
@@ -450,7 +450,7 @@ private String doComputeName() {
     case DATABASE:
       return "database:" + database.getName();
     case TABLE:
-      return t.getDbName() + "@" + t.getTableName();
+      return t.getDbName() + "@" + t.getTableName() + (t.getSnapshotRef() != 
null ? "@" + t.getSnapshotRef() : "");
     case PARTITION:
       return t.getDbName() + "@" + t.getTableName() + "@" + p.getName();
     case DUMMYPARTITION:
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Table.java 
b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Table.java
index 13840f723ab..f857e7d505f 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Table.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Table.java
@@ -569,10 +569,7 @@ public String toString() {
    */
   @Override
   public int hashCode() {
-    final int prime = 31;
-    int result = 1;
-    result = prime * result + ((tTable == null) ? 0 : tTable.hashCode());
-    return result;
+    return Objects.hash(tTable, asOfTimestamp, asOfVersion, 
versionIntervalFrom, snapshotRef);
   }
 
   /* (non-Javadoc)
@@ -590,23 +587,11 @@ public boolean equals(Object obj) {
       return false;
     }
     Table other = (Table) obj;
-    if (tTable == null) {
-      if (other.tTable != null) {
-        return false;
-      }
-    } else if (!tTable.equals(other.tTable)) {
-      return false;
-    }
-    if (!Objects.equals(asOfTimestamp, other.asOfTimestamp)) {
-      return false;
-    }
-    if (!Objects.equals(asOfVersion, other.asOfVersion)) {
-      return false;
-    }
-    if (!Objects.equals(versionIntervalFrom, other.versionIntervalFrom)) {
-      return false;
-    }
-    return true;
+    return Objects.equals(tTable, other.tTable)
+        && Objects.equals(asOfTimestamp, other.asOfTimestamp)
+        && Objects.equals(asOfVersion, other.asOfVersion)
+        && Objects.equals(versionIntervalFrom, other.versionIntervalFrom)
+        && Objects.equals(snapshotRef, other.snapshotRef);
   }
 
   public List<FieldSchema> getPartCols() {
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/SharedWorkOptimizer.java 
b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/SharedWorkOptimizer.java
index d264528387d..5a038b4e718 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/SharedWorkOptimizer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/SharedWorkOptimizer.java
@@ -645,6 +645,12 @@ protected boolean areMergeable(ParseContext pctx, 
TableScanOperator tsOp1, Table
       LOG.debug("opProps differ {} ~ {}", tsOp1.getConf().getOpProps(), 
tsOp2.getConf().getOpProps());
       return false;
     }
+
+    // HIVE-29509: Include snapshotRef to ensure different Iceberg 
branches/tags are treated as distinct tables
+    if (!Objects.equals(tsOp1.getConf().getSnapshotRef(), 
tsOp2.getConf().getSnapshotRef())) {
+      LOG.debug("Snapshot Ref differ {} ~ {}", 
tsOp1.getConf().getSnapshotRef(), tsOp2.getConf().getSnapshotRef());
+      return false;
+    }
     // If partitions do not match, we currently do not merge
     PrunedPartitionList prevTsOpPPList = pctx.getPrunedPartitions(tsOp1);
     PrunedPartitionList tsOpPPList = pctx.getPrunedPartitions(tsOp2);
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java 
b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java
index 6d7821ddb6f..d5c683daa30 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java
@@ -3220,6 +3220,9 @@ private RelNode genTableLogicalPlan(String tableAlias, QB 
qb) throws SemanticExc
             fullyQualifiedTabName.add(tabMetaData.getDbName());
           }
           fullyQualifiedTabName.add(tabMetaData.getTableName());
+          if (tabMetaData.getSnapshotRef() != null) {
+            fullyQualifiedTabName.add(tabMetaData.getSnapshotRef());
+          }
           optTable = new RelOptHiveTable(relOptSchema, 
relOptSchema.getTypeFactory(), fullyQualifiedTabName,
               rowType, tabMetaData, nonPartitionColumns, partitionColumns, 
virtualCols, conf,
               tabNameToTabObject, partitionCache, colStatsCache, 
noColsMissingStats);
diff --git a/storage-api/src/java/org/apache/hadoop/hive/common/TableName.java 
b/storage-api/src/java/org/apache/hadoop/hive/common/TableName.java
index 1c9cee6d160..9e593cd69dc 100644
--- a/storage-api/src/java/org/apache/hadoop/hive/common/TableName.java
+++ b/storage-api/src/java/org/apache/hadoop/hive/common/TableName.java
@@ -169,11 +169,11 @@ public static String getQualified(String catName, String 
dbName, String tableNam
     }
     TableName tableName = (TableName) o;
     return Objects.equals(cat, tableName.cat) && Objects.equals(db, 
tableName.db) && Objects
-        .equals(table, tableName.table);
+        .equals(table, tableName.table) && Objects.equals(tableMetaRef, 
tableName.tableMetaRef);
   }
 
   @Override public int hashCode() {
-    return Objects.hash(cat, db, table);
+    return Objects.hash(cat, db, table, tableMetaRef);
   }
 
   @Override

Reply via email to