Skip to content

Commit

Permalink
HIVE-28119: Iceberg: Allow insert clause with a column list in Merge …
Browse files Browse the repository at this point in the history
…query not_matched condition (Denys Kuzmenko, reviewed by Butao Zhang, Simhadri Govindappa)

Closes #5127
  • Loading branch information
deniskuzZ committed Mar 20, 2024
1 parent df45194 commit 884981d
Show file tree
Hide file tree
Showing 5 changed files with 366 additions and 314 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,15 @@ merge into target_ice as t using source src ON t.a = src.a
when not matched then insert values (src.a, src.b, src.c);

merge into target_ice as t using source src ON t.a = src.a
when not matched then insert values (src.a, src.b, src.c);
when not matched and src.a <= 5 then insert values (src.a, src.b, src.c);

select * from target_ice;

-- insert clause with a column list
merge into target_ice as t using source src ON t.a = src.a
when not matched then insert (a, c) values (src.a, src.c);

select * from target_ice;



Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,14 @@ insert into source values (1, 'one', 50), (2, 'two', 51), (3, 'three', 52), (4,
explain
merge into target_ice as t using source 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);

-- insert clause with a column list
explain
merge into target_ice as t using source 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);
when not matched then insert (a, b) values (src.a, src.b);

merge into target_ice as t using source src ON t.a = src.a
when matched and t.a > 100 THEN DELETE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -551,13 +551,39 @@ STAGE PLANS:
Basic Stats Work:

PREHOOK: query: merge into target_ice as t using source src ON t.a = src.a
when not matched then insert values (src.a, src.b, src.c)
when not matched and src.a <= 5 then insert values (src.a, src.b, src.c)
PREHOOK: type: QUERY
PREHOOK: Input: default@source
PREHOOK: Input: default@target_ice
PREHOOK: Output: default@target_ice
POSTHOOK: query: merge into target_ice as t using source src ON t.a = src.a
when not matched then insert values (src.a, src.b, src.c)
when not matched and src.a <= 5 then insert values (src.a, src.b, src.c)
POSTHOOK: type: QUERY
POSTHOOK: Input: default@source
POSTHOOK: Input: default@target_ice
POSTHOOK: Output: default@target_ice
PREHOOK: query: select * from target_ice
PREHOOK: type: QUERY
PREHOOK: Input: default@target_ice
PREHOOK: Output: hdfs://### HDFS PATH ###
POSTHOOK: query: select * from target_ice
POSTHOOK: type: QUERY
POSTHOOK: Input: default@target_ice
POSTHOOK: Output: hdfs://### HDFS PATH ###
1 Merged 60
2 Merged 61
3 three 52
333 two 56
4 four 53
5 five 54
PREHOOK: query: merge into target_ice as t using source src ON t.a = src.a
when not matched then insert (a, c) values (src.a, src.c)
PREHOOK: type: QUERY
PREHOOK: Input: default@source
PREHOOK: Input: default@target_ice
PREHOOK: Output: default@target_ice
POSTHOOK: query: merge into target_ice as t using source src ON t.a = src.a
when not matched then insert (a, c) values (src.a, src.c)
POSTHOOK: type: QUERY
POSTHOOK: Input: default@source
POSTHOOK: Input: default@target_ice
Expand All @@ -571,7 +597,7 @@ POSTHOOK: type: QUERY
POSTHOOK: Input: default@target_ice
POSTHOOK: Output: hdfs://### HDFS PATH ###
1 Merged 60
111 one 55
111 NULL 55
2 Merged 61
3 three 52
333 two 56
Expand Down
Loading

0 comments on commit 884981d

Please sign in to comment.