amoro icon indicating copy to clipboard operation
amoro copied to clipboard

[Bug]: In the MergeInto statement, if a subquery is used for the source table, it cannot correctly identify whether the condition contains the primary key.

Open 200947912 opened this issue 10 months ago • 0 comments

What happened?

When using the MergeInto statement, if you execute the filter method after obtaining the references attribute from the Expression object, the Attribute attribute you get will be the column names in the on clause, and you won't be able to correctly obtain the specific columns in the alias table.

Here is an example:

merge into target t using (select id,col from source) source s on t.id=s.id when matched then update set a.col = b.col when not matched then insert *;

In this way, I will get an UnsupportedOperationException. Exception message is "The condition {'a.id, 'b.id} is not allowed because it is not a primary key."

In org.apache.amoro.spark.sql.catalyst.analysis.ResolveMergeIntoMixedFormatTableReferences#checkConditionIsPrimaryKey if using cond.references then i'll get 'a.id with 'b.id,not id#1 or id#2.

Affects Versions

0.7.1

What table formats are you seeing the problem on?

No response

What engines are you seeing the problem on?

No response

How to reproduce

No response

Relevant log output


Anything else

No response

Are you willing to submit a PR?

  • [x] Yes I am willing to submit a PR!

Code of Conduct

  • [x] I agree to follow this project's Code of Conduct

200947912 avatar Feb 12 '25 10:02 200947912