Hive 누적 보고서 조회 실현

2658 단어 Hive빅 데이터
1. 수요
다음 방문객 방문 횟수 의 통계표 taccess
  	  	    
A	2015-01	5
A	2015-01	15
B	2015-01	5
A	2015-01	8
B	2015-01	25
A	2015-01	5
A	2015-02	4
A	2015-02	6
B	2015-02	10
B	2015-02	5
……	……	……

모든 고객 이 매달 총 방문 횟수 와 현재 월 까지 모든 월 의 누적 방문 횟수 를 출력 하도록 요구 합 니 다.
출력 표
  	  	     	      
A	2015-01	33	33
A	2015-02	10	43
…….	…….	…….	…….
B	2015-01	30	30
B	2015-02	15	45
…….	…….	…….	…….

2. 사고방식
1) 첫 번 째, 각 사용자 의 월 총 방문 횟수 를 구 합 니 다.
select username,month,sum(count) as salary from t_access_times group by username,month
+-----------+----------+---------+--+
| username  |  month   | count   |
+-----------+----------+---------+--+
| A         | 2015-01  | 33      |
| A         | 2015-02  | 10      |
| B         | 2015-01  | 30      |
| B         | 2015-02  | 15      |
+-----------+----------+---------+--+

2) 두 번 째 단계, 월 총 방문 횟수 표를 스스로 연결 (내부 연결)
(select username,month,sum(count) as salary from t_access_times group by username,month) A 
join 
(select username,month,sum(count) as salary from t_access_times group by username,month) B
on 
A.username=B.username
+-------------+----------+-----------+-------------+----------+-----------+--+
| a.username  | a.month  | a.salary  | b.username  | b.month  | b.salary  |
+-------------+----------+-----------+-------------+----------+-----------+--+
| A           | 2015-01  | 33        | A           | 2015-01  | 33        |
| A           | 2015-01  | 33        | A           | 2015-02  | 10        |
| A           | 2015-02  | 10        | A           | 2015-01  | 33        |
| A           | 2015-02  | 10        | A           | 2015-02  | 10        |
| B           | 2015-01  | 30        | B           | 2015-01  | 30        |
| B           | 2015-01  | 30        | B           | 2015-02  | 15        |
| B           | 2015-02  | 15        | B           | 2015-01  | 30        |
| B           | 2015-02  | 15        | B           | 2015-02  | 15        |
+-------------+----------+-----------+-------------+----------+-----------+--+

3) 세 번 째 단 계 는 이전 결과 에서 그룹 을 나 누 어 조회 합 니 다. 그룹의 필드 는 a. username a. month 입 니 다. 월 누적 값 을 구 합 니 다. b. month < = a. month 의 모든 b. salary 를 합 하면 됩 니 다.
3.HQL
select A.username,A.month,max(A.count) ,sum(B.count) 
from 
(select username,month,sum(count) as count from t_accessgroup by username,month) A 
inner join 
(select username,month,sum(count) as count from t_access group by username,month) B
on
A.username=B.username
where B.month <= A.month
group by A.username,A.month
order by A.username,A.month;

좋은 웹페이지 즐겨찾기