2

私は MySQL の経験があり、最近では代わりに HIVE でいくつかの作業を行う必要があります。

クエリの基本構造は 2 つの間で非常に似ていますが、HIVE の GROUP BY の動作は少し異なるようです... したがって、以前に GROUP BY を使用して MySQL で達成できたものを達成できません。

以下は私の質問です。たとえば、列 A、B、C を持つテーブルがあり、最大の行を選択したいとします。列 A でグループ化された B 列の値。次のようにします。

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がどのように順序付けられているかがわからないため、どの要素を返すかわかりません...

4

2 に答える 2

3

さて、私はこれを理解しました...以下はトリックをするでしょう:

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

MySQLで1行だけで得られるのと同じ結果を得るには、HIVEでさらに多くのコードを記述する必要があることがわかりました... :(

于 2012-05-25T23:11:13.577 に答える
0

MySQL では、ランダムな C を取得するだけで、期待しているようには見えません。

MySQL の SQL_MODE を参照して、MySQL がそのようなあいまいなコードを適切に拒否できるようにします。

(または MIN(C) を使用して、特定のものを取得します)

于 2013-02-11T13:02:40.683 に答える