Hive 중 order by, sort by, distribute by, cluster by 작용 및 용법

1. order by
    Hive 의 orderby 는 전통 적 인 sql 언어 중의 orderby 역할 과 같 습 니 다. 조회 결과 에 대해 전체 순 서 를 매 길 수 있 습 니 다. 그래서 hive 의 sql 에서 orderby 를 제정 한 모든 데 이 터 는 같은 reducer 로 처 리 됩 니 다 (맵 이 아무리 많 더 라 도 문 제 는 블록 이 아무리 많 더 라 도 하나의 reducer 만 시작 합 니 다).하지만 대량의 데이터 에 대해 서 는 오 랜 시간 이 걸 릴 것 이다.
    여 기 는 전통 적 인 sql 과 약간의 차이 가 있 습 니 다. 만약 에 hive. mapred. mode = strict (기본 값 은 nonstrict) 를 지정 하면 반드시 limit 를 지정 하여 출력 항목 의 수 를 제한 해 야 합 니 다. 이 유 는 모든 데이터 가 같은 reducer 에서 진행 되 고 데이터 양 이 많은 상황 에서 결 과 를 낼 수 없 기 때 문 입 니 다. 그러면 이러한 엄격 한 모드 에서 출력 항목 의 수 를 지정 해 야 합 니 다.
2. sort by
    Hive 에서 sort by 를 지정 하면 모든 reducer 단 에서 정렬 을 합 니 다. 즉, 부분 적 인 질 서 를 확보 한 것 입 니 다. (모든 reducer 에서 나 온 데 이 터 는 질서 가 있 지만 모든 데이터 가 질서 가 있다 는 것 을 보장 할 수 없습니다. 하나의 reducer 만 있 는 경 우 를 제외 하고) 장점 은 부분 적 인 순 서 를 실행 한 후에 다음 의 전체 순 서 를 위해 많은 효율 을 높 일 수 있 습 니 다.(사실은 한 번 의 병합 정렬 을 하면 전체 정렬 을 할 수 있다).
3. distribute by 와 sort by 를 함께 사용
    ditribute by 는 map 의 출력 이 reducer 에서 어떻게 구분 되 는 지 제어 하 는 것 입 니 다. 예 를 들 어 우 리 는 표 가 있 습 니 다. mid 는 이 store 가 속 한 업 체 를 말 합 니 다. money 는 이 업 체 의 이윤 입 니 다. name 은 이 store 의 이름 입 니 다.
store:
mid
money
name
AA
15.0
상점
AA
20.0
상점
BB
22.0
상점
CC
44.0
상점
    Hive 문장 실행:
select mid, money, name from store distribute by mid sort by mid asc, money asc

우리 의 모든 mid 같은 데 이 터 는 같은 reducer 로 보 내 집 니 다. 이것 은 distribute by mid 를 지 정 했 기 때 문 입 니 다. 그러면 모든 상점 에서 이윤 의 순 위 를 통계 할 수 있 습 니 다. (이것 은 전체 적 으로 질서 가 있 을 것 입 니 다. 같은 업 체 가 같은 reducer 에 놓 아서 처리 하기 때 문 입 니 다)... 여기 서 주의해 야 할 것 은 distribute by 가 sort by 이전에 써 야 한 다 는 것 입 니 다.
4. cluster by
    cluster by 의 기능 은 distribute by 와 sort by 를 결합 시 키 는 것 입 니 다. 다음 두 문 구 는 등가 입 니 다.
    
select mid, money, name from store cluster by mid
select mid, money, name from store distribute by mid sort by mid
    3 의 문장 과 같은 효 과 를 얻 으 려 면:
select mid, money, name from store cluster by mid sort by money
    cluster by 가 지정 한 열 은 내림차 순 일 뿐 asc 와 desc 를 지정 할 수 없습니다.

좋은 웹페이지 즐겨찾기