You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hive.apache.org by "Panagiotis Garefalakis (Jira)" <ji...@apache.org> on 2020/05/11 13:38:00 UTC
[jira] [Updated] (HIVE-23435) Full outer join result is missing
rows
[ https://issues.apache.org/jira/browse/HIVE-23435?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Panagiotis Garefalakis updated HIVE-23435:
------------------------------------------
Description:
Full Outer join result has missing rows. Appears to be a bug with the full outer join logic. Expected output is receiving when we do a left and right outer join.
Reproducible steps are mentioned below.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SUPPORT ANALYSIS
Steps to Reproduce:
1. Create a table and insert data:
create table x (z char(5), x int, y int);
insert into x values ('one', 1, 50),
('two', 2, 30),
('three', 3, 30),
('four', 4, 60),
('five', 5, 70),
('six', 6, 80);
2. Try full outer with the below command. The result is incomplete, it is missing the row:
NULL NULL NULL three 3 30.0
Full Outer Join:
select x1.`z`, x1.`x`, x1.`y`, x2.`z`,
x2.`x`, x2.`y`
from `x` x1 full outer join
`x` x2 on (x1.`x` > 3) and (x2.`x` < 4) and (x1.`x` =
x2.`x`);
Result:
----------------------------------+
x1.z x1.x x1.y x2.z x2.x x2.y
----------------------------------+
one 1 50 NULL NULL NULL
NULL NULL NULL one 1 50
two 2 30 NULL NULL NULL
NULL NULL NULL two 2 30
three 3 30 NULL NULL NULL
four 4 60 NULL NULL NULL
NULL NULL NULL four 4 60
five 5 70 NULL NULL NULL
NULL NULL NULL five 5 70
six 6 80 NULL NULL NULL
NULL NULL NULL six 6 80
----------------------------------+
3. Expected output is coming when we use left/right join + union:
select x1.`z`, x1.`x`, x1.`y`, x2.`z`,
x2.`x`, x2.`y`
from `x` x1 left outer join
`x` x2 on (x1.`x` > 3) and (x2.`x` < 4) and (x1.`x` =
x2.`x`)
union
select x1.`z`, x1.`x`, x1.`y`, x2.`z`,
x2.`x`, x2.`y`
from `x` x1 right outer join
`x` x2 on (x1.`x` > 3) and (x2.`x` < 4) and (x1.`x` =
x2.`x`);
Result:
------------------------------------+
z x y _col3 _col4 _col5
------------------------------------+
NULL NULL NULL five 5 70
NULL NULL NULL four 4 60
NULL NULL NULL one 1 50
four 4 60 NULL NULL NULL
one 1 50 NULL NULL NULL
six 6 80 NULL NULL NULL
three 3 30 NULL NULL NULL
two 2 30 NULL NULL NULL
NULL NULL NULL six 6 80
NULL NULL NULL three 3 30
NULL NULL NULL two 2 30
five 5 70 NULL NULL NULL
------------------------------------+
was:
Full Outer join result has missing rows. Appears to be a bug with the full outer join logic. Expected output is receiving when we do a left and right outer join.
Reproducible steps are mentioned below.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SUPPORT ANALYSIS
Steps to Reproduce:
1. Create a table and insert data:
create table x (z char(5), x int, y int);
insert into x values ('one', 1, 50),
('two', 2, 30),
('three', 3, 30),
('four', 4, 60),
('five', 5, 70),
('six', 6, 80);
2. Try full outer with the below command. The result is incomplete, it is missing the row:
NULL NULL NULL three 3 30.0
Full Outer Join:
select x1.`z`, x1.`x`, x1.`y`, x2.`z`,
x2.`x`, x2.`y`
from `x` x1 full outer join
`x` x2 on (x1.`x` > 3) and (x2.`x` < 4) and (x1.`x` =
x2.`x`);
Result:
----------------------------------+
x1.z x1.x x1.y x2.z x2.x x2.y
----------------------------------+
one 1 50 NULL NULL NULL
NULL NULL NULL one 1 50
two 2 30 NULL NULL NULL
NULL NULL NULL two 2 30
three 3 30 NULL NULL NULL
four 4 60 NULL NULL NULL
NULL NULL NULL four 4 60
five 5 70 NULL NULL NULL
NULL NULL NULL five 5 70
six 6 80 NULL NULL NULL
NULL NULL NULL six 6 80
----------------------------------+
3. Expected output is coming when we use left/right join + union:
select x1.`z`, x1.`x`, x1.`y`, x2.`z`,
x2.`x`, x2.`y`
from `x` x1 left outer join
`x` x2 on (x1.`x` > 3) and (x2.`x` < 4) and (x1.`x` =
x2.`x`)
union
select x1.`z`, x1.`x`, x1.`y`, x2.`z`,
x2.`x`, x2.`y`
from `x` x1 right outer join
`x` x2 on (x1.`x` > 3) and (x2.`x` < 4) and (x1.`x` =
x2.`x`);
Result:
------------------------------------+
z x y _col3 _col4 _col5
------------------------------------+
NULL NULL NULL five 5 70
NULL NULL NULL four 4 60
NULL NULL NULL one 1 50
four 4 60 NULL NULL NULL
one 1 50 NULL NULL NULL
six 6 80 NULL NULL NULL
three 3 30 NULL NULL NULL
two 2 30 NULL NULL NULL
NULL NULL NULL six 6 80
NULL NULL NULL three 3 30
NULL NULL NULL two 2 30
five 5 70 NULL NULL NULL
------------------------------------+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
EXPECTED ENGINEERING ACTION
Confirm this is a bug. If so, any work around or just use left+right outer join.
> Full outer join result is missing rows
> ---------------------------------------
>
> Key: HIVE-23435
> URL: https://issues.apache.org/jira/browse/HIVE-23435
> Project: Hive
> Issue Type: Bug
> Components: HiveServer2
> Affects Versions: 3.1.0
> Reporter: Naveen Gangam
> Assignee: Jesus Camacho Rodriguez
> Priority: Major
>
> Full Outer join result has missing rows. Appears to be a bug with the full outer join logic. Expected output is receiving when we do a left and right outer join.
> Reproducible steps are mentioned below.
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> SUPPORT ANALYSIS
> Steps to Reproduce:
> 1. Create a table and insert data:
> create table x (z char(5), x int, y int);
> insert into x values ('one', 1, 50),
> ('two', 2, 30),
> ('three', 3, 30),
> ('four', 4, 60),
> ('five', 5, 70),
> ('six', 6, 80);
> 2. Try full outer with the below command. The result is incomplete, it is missing the row:
> NULL NULL NULL three 3 30.0
> Full Outer Join:
> select x1.`z`, x1.`x`, x1.`y`, x2.`z`,
> x2.`x`, x2.`y`
> from `x` x1 full outer join
> `x` x2 on (x1.`x` > 3) and (x2.`x` < 4) and (x1.`x` =
> x2.`x`);
> Result:
> ----------------------------------+
> x1.z x1.x x1.y x2.z x2.x x2.y
> ----------------------------------+
> one 1 50 NULL NULL NULL
> NULL NULL NULL one 1 50
> two 2 30 NULL NULL NULL
> NULL NULL NULL two 2 30
> three 3 30 NULL NULL NULL
> four 4 60 NULL NULL NULL
> NULL NULL NULL four 4 60
> five 5 70 NULL NULL NULL
> NULL NULL NULL five 5 70
> six 6 80 NULL NULL NULL
> NULL NULL NULL six 6 80
> ----------------------------------+
> 3. Expected output is coming when we use left/right join + union:
> select x1.`z`, x1.`x`, x1.`y`, x2.`z`,
> x2.`x`, x2.`y`
> from `x` x1 left outer join
> `x` x2 on (x1.`x` > 3) and (x2.`x` < 4) and (x1.`x` =
> x2.`x`)
> union
> select x1.`z`, x1.`x`, x1.`y`, x2.`z`,
> x2.`x`, x2.`y`
> from `x` x1 right outer join
> `x` x2 on (x1.`x` > 3) and (x2.`x` < 4) and (x1.`x` =
> x2.`x`);
> Result:
> ------------------------------------+
> z x y _col3 _col4 _col5
> ------------------------------------+
> NULL NULL NULL five 5 70
> NULL NULL NULL four 4 60
> NULL NULL NULL one 1 50
> four 4 60 NULL NULL NULL
> one 1 50 NULL NULL NULL
> six 6 80 NULL NULL NULL
> three 3 30 NULL NULL NULL
> two 2 30 NULL NULL NULL
> NULL NULL NULL six 6 80
> NULL NULL NULL three 3 30
> NULL NULL NULL two 2 30
> five 5 70 NULL NULL NULL
> ------------------------------------+
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)