deniskuzZ commented on code in PR #6685:
URL: https://github.com/apache/hive/pull/6685#discussion_r4468418279
##########
ql/src/java/org/apache/hadoop/hive/ql/parse/MergeSemanticAnalyzer.java:
##########
@@ -131,7 +133,21 @@ WHEN NOT MATCHED THEN INSERT VALUES (source.a2, source.b2)
.sourceName(sourceName)
.sourceAlias(getSourceAlias(source, sourceName))
.onClauseAsText(onClauseAsText);
-
+
+ OnClauseAnalyzer oca = new OnClauseAnalyzer(onClause, targetTable,
targetAlias,
+ conf, onClauseAsText);
+ oca.analyze();
+
+ boolean copyOnWriteMode = false;
+ HiveStorageHandler storageHandler = targetTable.getStorageHandler();
+ if (storageHandler != null) {
+ copyOnWriteMode = storageHandler.shouldOverwrite(targetTable,
Context.Operation.MERGE);
Review Comment:
+1 to @kasakrisz’s option 1.
The wrong result comes from the COW rewrite:
CopyOnWriteMergeRewriter.handleSource projects target columns as `t__<col>`,
and replaceColumnRefsWithTargetPrefix prefixes only qualified tgt. refs. So an
unqualified a silently binds to src.a, `ON a = src.a` becomes `src.a = src.a`,
and every target row matches.
**Could we move the guard into CopyOnWriteMergeRewriter**? For example, pass
the unqualified refs that resolve to target columns from OnClauseAnalyzer
(handleUnresolvedColumns already computes them) via MergeStatement, and throw
the standard ambiguous-column error only for those. That gives parity with MOR,
which is what HIVE-29783 expects, and it keeps ACID/MOR paths untouched.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]