8

where句に複数のアイテムがリストされている場合、リスト内の各アイテムの結果をNに制限するにはどうすればよいですか?

元:

select a_id,b,c, count(*), as sumrequests
from table_name
where
a_id in (1,2,3)
group by a_id,b,c
limit 10000
4

1 に答える 1

6

あなたの質問は、a_id ごとに上位 N を取得することです。これは、Hive 11 で導入されたウィンドウ関数で実行できます。次のようなものです。

SELECT a_id, b, c, count(*) as sumrequests
FROM (
    SELECT a_id, b, c, row_number() over (Partition BY a_id) as row
    FROM table_name
    ) rs
WHERE row <= 10000
AND a_id in (1, 2, 3)
GROUP BY a_id, b, c;

これにより、a_id ごとにランダムに選択された最大 10,000 行が出力されます。a_id 以外でグループ化する場合は、さらに分割できます。ウィンドウ関数で order by を使用することもできます。追加のオプションを示す例がたくさんあります。

于 2014-02-06T05:05:05.070 に答える