hiveでタイトルのようなことを実現するクエリを紹介する。これにはrank関数という関数を利用することで実現できる。rankを利用しない場合は以下のように複数のクエリを発行する必要があり、データ量によってはかなりの時間がかかってしまう。 カテゴリのリストを準備 各カテゴリごとに上位数件を抽出するSELECT文(SELECT ~ FROM ~ ORDER BY ~ LIMIT n)を発行 (必要であれば)結果をまとめる しかし、rank関数を利用することで1つのクエリで上記の事が達成できる。クエリのイメージは以下のようになる。 SELECT * FROM ( SELECT *, rank() over (PARTITION BY category_id ORDER BY quantity DESC) as rank FROM sample_table ) a WHERE rank &