他们在Hiveql上花费的前十名客户

时间:2014-04-21 01:10:38

标签: count group-by hive hiveql

我在hive

中的表transaction_records中有95904行(事务)

有9999个不同的客户 我想通过他们花费的金额了解前十名客户 我有以下字段:

txnno INT
txndate STRING
custno INT
amount DOUBLE
category STRING
product STRING

我尝试使用:

select custno, sum(amount) from (select txno, custno, amount, category, product from transaction_records group by custno);
FAILED: ParseException line 1:112 mismatched input '<EOF>' expecting Identifier near ')' in subquery source

这不起作用,我是hiveql的新手,你知道它的查询吗?

2 个答案:

答案 0 :(得分:0)

试试这个:

select custno, sum(amount) s from transaction_records group by custno order by s desc limit 10;

答案 1 :(得分:0)

试试&#39; collect_max&#39; Brickhouse中的UDF(http://github.com/klout/brickhouse)。这可以避免最终的所有用户。 (在你的情况下,它可能不是那么糟糕,因为只有10,000个客户,但对于较大的数据集,这可能是一个问题)

SELECT collect_max( custno, amount, 10 )
FROM (
   SELECT custno, sum(amount) as amount
   FROM 
   transaction_records 
   GROUP BY custno ) tr;