在HIVE中获取具有意外值的重复行加入查询

时间:2015-01-10 20:18:04

标签: mysql sql-server hadoop hive

当我在hive中运行以下查询时,我得到的重复行的值不正确,这两个表中都没有显示,

SELECT year_1992.id, year_1992.total, year_1993.total

FROM year_1992 INNER JOIN year_1993 ON (year_1992.id = year_1993.id)

order by year_1992.id;

这里我有两个表,都包含ID值相同的id和总列,我想显示id,table_1992的总和以及table_1993的总和。

以下是上述查询的结果,

451211  8327    9108

452111  87384   88720

452111  85153   88720(here 85153-wrong value)

452111  87384   86325(here 86325-wrong value)

452111  85153   86325(here 85153, 86325-wrong valuee)

452112  93871   103405

452112  91936   103405

452112  93871   101360

452112  91936   101360

我甚至尝试过不同但仍然相同的结果。

1 个答案:

答案 0 :(得分:0)

您在Id字段中有重复的值。这就是行重复的原因。您需要添加聚合函数和group by子句,或者更改连接两个表的方式 这将删除所有重复项,但将总结所有总计。或者你可以显示MAX,MIN,AVG等......

SELECT year_1992.id, 
SUM(year_1992.total) AS 'year_1992.sum', 
SUM(year_1993.total) AS 'year_1993.sum',

MAX(year_1992.total) AS 'year_1992.MAX', 
MAX(year_1993.total) AS 'year_1993.MAX'

MAX(year_1992.total) AS 'year_1992.MIN', 
MAX(year_1993.total) AS 'year_1993.MIN',

MAX(year_1992.total) AS 'year_1992.AVG', 
MAX(year_1993.total) AS 'year_1993.AVG'

FROM year_1992 
    INNER JOIN year_1993 ON (year_1992.id = year_1993.id)
GROUP BY year_1992.id
ORDER BY year_1992.id;

此外,由于内部联接,可能不会返回所有行,而只返回两个表中匹配id的行。

希望有所帮助