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