我在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的新手,你知道它的查询吗?
答案 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;