2016-07-01 3 views
0

다음과 같이 데이터를 분할하고 싶습니다. 그러나 link에 주어진대로 1에서 랭킹을 다시 초기화하는 기능은 없습니다. ROW_NUMBER(), RANK(), DENSE_RANK()을 시도했습니다. 그럼, 이걸 어떻게 달성 할 수 있겠습니까?하이브의 순위 재설정

Col1  Col2 Rank 
cookie1 ABC  1 
cookie1 ABC  1 
cookie1 EFG  2 
cookie1 EFG  2 
cookie1 IJK  3 
cookie1 IJK  3 

cookie2 XYZ  1 
cookie2 XYZ  1 
cookie2 LMN  2 
+0

순위가 귀하의 예에 따라 세션 번호와 같아 보입니다. 그런 다음 substr (col2,8)을 사용하여 세션 번호 – leftjoin

+0

을 추출하십시오. 둘 중 어떤 열 또는 조합에 따라 데이터를 분할 하시겠습니까? – syadav

답변

4

PARTITION BY 절과 함께 DENSE_RANK()을 사용하십시오. (

select Col1  ,Col2 , DENSE_RANK() OVER 

    (PARTITION BY Col1  ORDER BY Col2 ) AS Rank 

    from rnktest 
) 
select * from temp ; 
가고있다

enter image description here

+0

당신의 질문은 정확하지 않습니다 – Naresh

+0

안녕 출력은 무엇입니까 –

+0

'FAILED : SemanticException Windowing 호출을 그룹으로 나누지 못했습니다. 적어도 하나의 그룹은 입력 열에 의존해야합니다. 또한 순환 종속성을 확인하십시오. 기본 오류 : org.apache.hadoop.hive.ql.exec.UDFArgumentTypeException : 하나 이상의 인수가 필요합니다. ' – Naresh

1

같은 온도와

, 당신은 두 번째로 첫 번째 열 순서에 의해 dense_rank 파티션이 필요

select *,dense_rank() over (partition by Col1 order by Col2) as rn from test_rank; 

출력 : -.

cookie1 ABC  1 
cookie1 ABC  1 
cookie1 EFG  2 
cookie1 EFG  2 
cookie1 IJK  3 
cookie1 IJK  3 

cookie2 LMN  1 
cookie2 XYZ  2 
cookie2 XYZ  2 
+0

아니요, 예상되는 결과를 제공하지 않습니다. 동일한 세션에서도 순위 1, 2, 3 등을 제공합니다. 나는 싫어. 나는 동일한 세션 값을 일정하게하고 세션 값이 변경되면 그 값을 1 씩 증가시켜야한다. – Naresh

+0

이 경우 이미 질문에이 필수 출력이 있습니다. 그렇지 않다면 그것은 무엇입니까? 그런 다음 질문에 세부 정보를 추가 할 수 있습니까? – syadav

+0

나는 sessionids의 값을 편집했다. 나는 지금 내가 말하는 것을 얻을 수있을 것이라고 생각한다. 당신은 질문을 언급 한 것처럼 내가 원하는대로 출력을 이런 식으로 제공합니다. '쿠키 1 ABC 1 쿠키 1 ABC 2' – Naresh