HIVE:GROUP BY 的行为与 MySQL 中不同

2024-04-18

我对 MySQL 有一些经验,最近我必须在 HIVE 上做一些工作。

两者之间的查询基本结构非常相似,但是 HIVE 中的 GROUP BY 的工作方式似乎有点不同......因此我无法实现以前在 MySQL 中使用 GROUP BY 可以实现的目标。

以下是我的问题,假设我有一个包含 A、B、C 列的表,并且我想选择具有 max 的行。 B 列值按 A 列分组。我会这样做:

SELECT A, max(B) FROM myTable GROUP BY A

上面的代码在 HIVE 中运行没有问题。但是,如果我还想查看 C 列中的值,该值与 max 所在的行位于同一行,该怎么办? B值?在 MySQL 中我可以这样做:

SELECT A, max(B), C FROM myTable GROUP BY A

但在 HIVE 中我不能这样做。它抱怨 C 不在 GROUP BY 键中,但如果我将 C 添加到 GROUP BY 中,结果完全不是我想要的。

那么在HIVE中如何选择这样想要的结果呢?有人说在 C 列上使用collect_set可以解决问题,但我不知道collect_set是如何排序的,因此不知道要返回哪个元素......


好吧,我想通了......下面的方法可以解决这个问题:

SELECT A, maxB, C FROM myTable JOIN
(SELECT A, max(B) as maxB FROM myTable GROUP BY A) temp
ON myTable.A = temp.A AND myTable.B = temp.maxB

事实证明,我必须在 HIVE 中编写更多代码才能获得与在 MySQL 中仅用一行代码获得的结果相同的结果...:(

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HIVE:GROUP BY 的行为与 MySQL 中不同 的相关文章

随机推荐