[
https://issues.apache.org/jira/browse/HIVE-29783?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
ASF GitHub Bot updated HIVE-29783:
----------------------------------
Labels: pull-request-available (was: )
> Iceberg CoW MERGE INTO missing column ambiguity check
> -----------------------------------------------------
>
> Key: HIVE-29783
> URL: https://issues.apache.org/jira/browse/HIVE-29783
> Project: Hive
> Issue Type: Bug
> Environment: hadoop:3.3.6
> hive:4.2.0
> Reporter: zhaodong
> Priority: Major
> Labels: pull-request-available
> Attachments: 111.png, 222.png, 333.png
>
>
> Description:
> When executing a MERGE INTO statement on an Iceberg Copy-on-Write (CoW)
> table, if the ON condition contains an unqualified column name that exists in
> both the target and source tables, Hive fails to throw a semantic ambiguity
> exception. Instead, it executes the statement without any errors but returns
> incorrect query results.
> In contrast, the same statement executed on an Iceberg Merge-on-Read (MoR)
> table correctly throws a SemanticException: Column a Found in more than One
> Tables/Subqueries.
> Steps to Reproduce:
> 1.Create an ORC source table and insert test data:
> CREATE TABLE testorc (a INT, b INT) STORED AS ORC;
> INSERT INTO testorc VALUES (9, 10);
> 2.Create Iceberg MoR and CoW target tables and insert identical test data:
> CREATE TABLE testmor (a INT, b INT)
> STORED BY iceberg
> STORED AS ORC
> TBLPROPERTIES (
> 'format-version' = '1',
> 'write.delete.mode' = 'merge-on-read',
> 'write.update.mode' = 'merge-on-read',
> 'write.merge.mode' = 'merge-on-read'
> );
> CREATE TABLE testcow (a INT, b INT)
> STORED BY iceberg
> STORED AS ORC
> TBLPROPERTIES (
> 'format-version' = '1',
> 'write.delete.mode' = 'copy-on-write',
> 'write.update.mode' = 'copy-on-write',
> 'write.merge.mode' = 'copy-on-write'
> );
> INSERT INTO testmor VALUES (9, 3), (2, 3);
> INSERT INTO testcow VALUES (9, 3), (2, 3);
> 3.Execute MERGE INTO with an unqualified column a in the ON condition:
> -- Test 1: MoR table (Correct behavior)
> MERGE INTO testmor
> USING testorc
> ON a = testorc.a
> WHEN MATCHED THEN UPDATE SET b = testorc.b;
> -- Expected: SemanticException: Column a Found in more than One
> Tables/Subqueries
> -- Test 2: CoW table (Buggy behavior)
> MERGE INTO testcow
> USING testorc
> ON a = testorc.a
> WHEN MATCHED THEN UPDATE SET b = testorc.b;
> -- Actual: Executes successfully without throwing an exception.
> 4.Verify the data in the CoW table:
> SELECT * FROM testcow;
> Expected Behavior:
> The CoW table should behave consistently with the MoR table and throw a
> SemanticException indicating that column a is ambiguous.
> Actual Behavior:
> The CoW table execution succeeds silently, but the data is corrupted. The
> query SELECT * FROM testcow; returns:
> (9, 10), (2, 10)
> The row (2, 3) was incorrectly updated to (2, 10) .
--
This message was sent by Atlassian Jira
(v8.20.10#820010)