десятка лучших клиентов по сумме, которую они тратят в Hiveql

у меня 95904 строки (транзакции) в таблице transaction_records в улье

Есть 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, знаете ли вы, как это сделать?


person user3555128    schedule 21.04.2014    source источник


Ответы (2)


Попробуй это:

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

Попробуйте UDF "collect_max" в Brickhouse (http://github.com/klout/brickhouse). Это позволяет избежать всех ваших пользователей. (В вашем случае это может быть не так уж плохо, поскольку клиентов всего 10000, но для больших наборов данных это может быть проблемой)

SELECT collect_max( custno, amount, 10 )
FROM (
   SELECT custno, sum(amount) as amount
   FROM 
   transaction_records 
   GROUP BY custno ) tr;
person Jerome Banks    schedule 21.04.2014