我对 MySQL 有一些经验,最近我不得不在 HIVE 上做一些工作。
查询的基本结构在两者之间非常相似,但是 HIVE 中的 GROUP BY 的工作方式似乎有点不同......因此我无法实现以前在 MySQL 中使用 GROUP BY 可以实现的功能。
以下是我的问题,假设我有一个包含 A、B、C 列的表,并且我想选择最大的行。B 列值按 A 列分组。我会这样做:
SELECT A, max(B) FROM myTable GROUP BY A
上面的代码可以在 HIVE 中正常工作。但是,如果我还想查看 C 列中的值,该值与最大值所在的行位于同一行中,该怎么办?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 是如何排序的,因此不知道要返回哪个元素......