在 HIVE 连接查询中获取具有意外值的重复行
Getting repeated rows with unexpected values in HIVE joins query
当我 运行 在 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 和 total 列,其中 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
我什至尝试过不同的结果,但结果仍然相同。
您的 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 的行。
希望对您有所帮助
当我 运行 在 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 和 total 列,其中 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
我什至尝试过不同的结果,但结果仍然相同。
您的 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 的行。
希望对您有所帮助