Johannes Mayer created HIVE-17499:
-------------------------------------
Summary: Hive Cube Operator returns duplicate rows
Key: HIVE-17499
URL: https://issues.apache.org/jira/browse/HIVE-17499
Project: Hive
Issue Type: Bug
Affects Versions: 2.1.0
Environment: Hortonworks HDP 2.6.0.1
Reporter: Johannes Mayer
Priority: Critical
The cube Operator returns duplicate rows, when it shouldnt. I ran the same
query in Pig and got the correct result. (see the example below)
{code:sql}
insert overwrite table thesis.clickstream_export PARTITION (ds_year = '2016' ,
ds_month = '04' , ds_day = '01')
select year(ds), month(ds), day(ds), c8, c11, count(*)
from thesis.clickstream_landing
where ds = '2016-04-01'
group by year(ds), month(ds), day(ds), c8, c11
With Cube;
{code}
Then I check for duplicates:
{code:sql}
select year, month, day, country, city, count (*) from thesis.clickstream_export
where ds_year = '2016' and ds_month = '04' and ds_day = '01'
group by year, month, day, country, city
having count(*) > 1;
{code}
The result is:
year month day country city _c5
null null null null null 4
null null 1 null null 4
null 4 null null null 4
null 4 1 null null 4
2016 null null null null 4
2016 null 1 null null 4
2016 4 null null null 4
2016 4 1 null null 4
When i do the same thing in Pig, everything is fine:
{code:pig}
DATA = LOAD 'thesis.clickstream_landing' USING
org.apache.hive.hcatalog.pig.HCatLoader();
FILTERED = FOREACH DATA GENERATE GetYear(ToDate(ds, 'yyyy-MM-dd')) AS year,
GetMonth(ToDate(ds, 'yyyy-MM-dd')) AS month, GetDay(ToDate(ds, 'yyyy-MM-dd'))
AS day, c8 AS country, c11 AS city;
CUBED = CUBE FILTERED BY CUBE(year, month, day, country, city);
D = FOREACH CUBED GENERATE FLATTEN(group) AS (year, month, day, country, city),
COUNT_STAR(cube) As click_count;
STORE D INTO 'thesis.clickstream_export' USING
org.apache.hive.hcatalog.pig.HCatStorer('ds_year=2016, ds_month=04, ds_day=02');
{code}
Then again I check for duplicates:
{code:sql}
select year, month, day, country, city, count (*) from thesis.clickstream_export
where ds_year = '2016' and ds_month = '04' and ds_day = '02'
group by year, month, day, country, city
having count(*) > 1;
{code}
And the result is empty as it should be.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)