[HADOOP] 하이브 : 어떻게 출력 HiveQL을 사용하여 고유 한 기본 키를 SELECT 쿼리를 할까?
HADOOP하이브 : 어떻게 출력 HiveQL을 사용하여 고유 한 기본 키를 SELECT 쿼리를 할까?
난 내가 SQL에 수출 할 수있는 테이블로 변환하려면 다음 스키마의 데이터 집합을 가지고있다. 나는 하이브를 사용하고 있습니다. 입력 다음과 같이
call_id,stat1,stat2,stat3
1,a,b,c,
2,x,y,z,
3,d,e,f,
1,j,k,l,
출력 테이블은 고유해야하므로 기본 키로 call_id 있어야합니다. 출력 스키마는해야한다
call_id,stat2,stat3,
1,b,c, or (1,k,l)
2,y,z,
3,e,f,
문제는 내가 HIVE 쿼리에 키워드 DISTINCT를 사용할 때 DISTINCT가 결합 된 모든 colums에 적용한다는 것입니다. 난 단지 call_id에 DISTINCT 작업을 적용 할. 의 라인에 뭔가
SELECT DISTINCT(call_id), stat2,stat3 from intable;
그러나이 (나도 SQL에서 잘 정통하고 있지 않다) HIVE에 유효하지 않습니다.
유일한 합법적 인 쿼리는 것 같다
SELECT DISTINCT call_id, stat2,stat3 from intable;
다른 열이 다른 전체에 행이 구별된다 그러나이 같은 call_id 여러 행을 반환합니다.
참고 등 A, B, C, X, Y, Z, 사이 산술 관계가없는 것은 그래서 평균 또는 합산 어떤 트릭 실용적이 아니다.
모든 아이디어를 어떻게하면 할 수 있습니까?
해결법
-
==============================
1.한 빠른 생각하지 최고의 하나,하지만 워크를 할 것입니다
한 빠른 생각하지 최고의 하나,하지만 워크를 할 것입니다
하이브> TEMP1 테이블 (a INT, B 열)을 생성;
하이브> 덮어 쓰기 테이블 TEMP1를 삽입
call_id, 최대 ( '|', stat2, '|'CONCAT (STAT1, STAT3))을 선택 call_id에 의해 intable 그룹을;
테이블의 하이브> 삽입 덮어 쓰기 테이블
( '|', b) [1], 분할 (b를 '|') | ( ', B)을 [0], 분할 A, 분할을 선택 [2] TEMP1에서;
-
==============================
2.하지만 어떻게 다음 하이브는 제거 할 행 알 수 있습니까?
하지만 어떻게 다음 하이브는 제거 할 행 알 수 있습니까?
당신이 가지고있는 합계 필드의 데이터 / 크기의 양을 모른 채, 다음 쿼리 수있는 작업 :
select distinct i1.call_id, i1.stat2, i1.stat3 from ( select call_id, MIN(concat(stat1, stat2, stat3)) as smin from intable group by call_id ) i2 join intable i1 on i1.call_id = i2.call_id AND concat(i1.stat1, i1.stat2, i1.stat3) = i2.smin;
from https://stackoverflow.com/questions/15023661/hive-how-to-do-a-select-query-to-output-a-unique-primary-key-using-hiveql by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 스파크 자바 DataFrame에 JavaRDD 변환 (0) | 2019.10.12 |
---|---|
[HADOOP] HBase를 맵리 듀스는 : 감속기에서 HBase를로 쓰기 (0) | 2019.10.12 |
[HADOOP] 폭풍 HDFS 커넥터를 사용하여 HDFS에 데이터를 쓰기 (0) | 2019.10.12 |
[HADOOP] 선택적으로 IIS가 하이브로 로그 파일을로드 (0) | 2019.10.12 |
[HADOOP] 없는 열을 추가 할 수 하둡에 행 데이터를 조작 (0) | 2019.10.12 |