You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hive.apache.org by "Krisztian Kasa (Jira)" <ji...@apache.org> on 2025/05/15 08:45:00 UTC

[jira] [Resolved] (HIVE-28917) NPE in merge statement when checking nullability of joining column in matched clause

     [ https://issues.apache.org/jira/browse/HIVE-28917?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Krisztian Kasa resolved HIVE-28917.
-----------------------------------
    Fix Version/s: 4.1.0
       Resolution: Fixed

Merged to master. Thanks [~soumyakanti.das] for the patch and [~zabetak] for the review.

> NPE in merge statement when checking nullability of joining column in matched clause
> ------------------------------------------------------------------------------------
>
>                 Key: HIVE-28917
>                 URL: https://issues.apache.org/jira/browse/HIVE-28917
>             Project: Hive
>          Issue Type: Improvement
>          Components: Hive
>    Affects Versions: 4.0.1
>            Reporter: Soumyakanti Das
>            Assignee: Soumyakanti Das
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 4.1.0
>
>
> To reproduce, create a qtest file with:
> {noformat}
> create table target(a int, b int) stored by iceberg tblproperties('format-version'='2', 'write.merge.mode'='copy-on-write');
> create table source(a int, b int) stored by iceberg tblproperties('format-version'='2', 'write.merge.mode'='copy-on-write');
> merge into target as t using source as s on t.a = s.a
> when matched and t.a is null then delete;{noformat}
> and run:
> {noformat}
> mvn test -pl itests/qtest-iceberg -Piceberg -Pitests -Dtest=TestIcebergCliDriver -Dtest.output.overwrite=true -Dqfile=<test-file.q>{noformat}
> Error:
> {noformat}
>  java.lang.NullPointerException
>     at org.apache.hadoop.hive.ql.Context.getMergeDestClausePrefix(Context.java:365)
>     at org.apache.hadoop.hive.ql.Context.getDestNamePrefix(Context.java:345)
>     at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.doPhase1(SemanticAnalyzer.java:1831)
>     at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.doPhase1(SemanticAnalyzer.java:2128)
>     at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.doPhase1(SemanticAnalyzer.java:2128)
>     at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.doPhase1(SemanticAnalyzer.java:1763)
>     at org.apache.hadoop.hive.ql.parse.CalcitePlanner.genOPTree(CalcitePlanner.java:643)
>     at org.apache.hadoop.hive.ql.parse.SemanticAnalyzer.analyzeInternal(SemanticAnalyzer.java:13180)
>     at org.apache.hadoop.hive.ql.parse.CalcitePlanner.analyzeInternal(CalcitePlanner.java:479)
>     at org.apache.hadoop.hive.ql.parse.RewriteSemanticAnalyzer.analyzeInternal(RewriteSemanticAnalyzer.java:71)
>     at org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer.analyze(BaseSemanticAnalyzer.java:336)
>     at org.apache.hadoop.hive.ql.parse.RewriteSemanticAnalyzer.analyzeRewrittenTree(RewriteSemanticAnalyzer.java:108)
>     at org.apache.hadoop.hive.ql.parse.RewriteSemanticAnalyzer.rewriteAndAnalyze(RewriteSemanticAnalyzer.java:99)
>     at org.apache.hadoop.hive.ql.parse.MergeSemanticAnalyzer.analyze(MergeSemanticAnalyzer.java:207)
>     at org.apache.hadoop.hive.ql.parse.RewriteSemanticAnalyzer.analyze(RewriteSemanticAnalyzer.java:85)
>     at org.apache.hadoop.hive.ql.parse.RewriteSemanticAnalyzer.analyzeInternal(RewriteSemanticAnalyzer.java:73)
>     at org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer.analyze(BaseSemanticAnalyzer.java:336){noformat}
> Since we are checking if the joining column is null in the matched clause, which is not possible as it is a joining column, we should throw an exception and exit gracefully instead of throwing an NPE



--
This message was sent by Atlassian Jira
(v8.20.10#820010)