Hive 쿼리: 정렬 기준, 그룹 기준, 배포 기준, Cluster 예를 들어
Hive는 ETL 목적에 맞는 SQL 유형의 쿼리 언어를 제공합니다. 하둡 파일 시스템.
Hive 쿼리 언어(HiveQL)는 Hive에서 테이블, 데이터베이스, 쿼리 작업을 위한 SQL 유형 환경을 제공합니다.
다양한 유형의 데이터 조작 및 쿼리를 수행하기 위해 Hive와 관련된 다양한 유형의 조항을 가질 수 있습니다. 환경 외부의 다른 노드와의 더 나은 연결을 위해. HIVE는 JDBC 연결도 제공합니다.
Hive 쿼리는 다음과 같은 기능을 제공합니다.
- 데이터베이스, 테이블 생성 등 데이터 모델링
- 추출, 변환, 테이블에 데이터 로드 등의 ETL 기능
- 조인 서로 다른 데이터 테이블을 병합하려면
- 간편한 코드를 위한 사용자별 맞춤 스크립트
- Hadoop 기반의 더 빠른 쿼리 도구
Hive에서 테이블 생성
이 튜토리얼의 주요 주제를 다루기에 앞서, 먼저 다음 튜토리얼의 참고 자료로 사용할 표를 만들어 보겠습니다.
이 튜토리얼에서는 6개의 열이 있는 "employees_guru" 테이블을 생성하겠습니다.
위의 스크린샷에서,
- “guru” 조직에 속한 직원에 속하는 Id, Name, Age, Address, Salary, Department 등 6개의 열 값을 갖는 “employees_guru” 테이블을 생성합니다.
- 이 단계에서는 Employees_guru 테이블에 데이터를 로드합니다. 로드할 데이터는 Employees.txt 파일 아래에 배치됩니다.
쿼리순으로 정렬
HiveQL의 ORDER BY 구문은 HiveQL의 ORDER BY 구문과 유사합니다. SQL 언어.
Order by는 "SELECT" 문과 함께 사용하는 절입니다. 하이브 쿼리, 데이터 정렬에 도움이 됩니다. Order by 절은 Order by에 언급된 특정 열 값을 정렬하기 위해 Hive 테이블의 열을 사용합니다. order by 절을 정의하는 열 이름이 무엇이든 쿼리는 특정 열 값을 오름차순 또는 내림차순으로 결과를 선택하고 표시합니다.
언급된 order by 필드가 문자열인 경우 사전순으로 결과가 표시됩니다. 백엔드에서는 단일 감속기로 전달되어야 합니다.
위의 화면 샷에서 다음을 관찰할 수 있습니다.
- ORDER BY 열 이름으로 정의된 부서와 함께 ORDER BY 절을 사용하여 “employees_guru” 테이블에 대해 수행하는 쿼리입니다. “Department”는 문자열이므로 사전순으로 결과를 표시합니다.
- 이것은 쿼리에 대한 실제 출력입니다. 제대로 관찰하면 ADMIN, Finance 등과 같은 Department 열에 따라 표시되는 결과를 쿼리가 수행되도록 하는 것을 볼 수 있습니다.
쿼리 :
SELECT * FROM employees_guru ORDER BY Department;
쿼리별로 그룹화
Group by 절은 그룹 기준으로 언급된 특정 열 값을 그룹화하기 위해 Hive 테이블의 열을 사용합니다. "groupby" 절을 정의하는 열 이름이 무엇이든 쿼리는 특정 열 값을 그룹화하여 결과를 선택하고 표시합니다.
예를 들어, 아래 스크린샷에서는 각 부서에 있는 총 직원 수를 표시합니다. 여기에는 값별 그룹으로 "부서"가 있습니다.
위의 스크린샷에서 우리는 다음을 관찰할 것입니다.
- GROUP BY 열 이름이 정의된 부서와 GROUP BY 절이 있는 "employees_guru" 테이블에 대해 수행되는 쿼리입니다.
- 여기에 표시된 출력은 부서 이름이며, 직원 수는 다른 부서에 있습니다. 여기서 모든 직원은 특정 부서에 속하며 그룹화되어 결과에 표시됩니다. 따라서 결과는 부서 이름과 각 부서에 있는 총 직원 수입니다.
검색어 :
SELECT Department, count(*) FROM employees_guru GROUP BY Department;
정렬 기준
Sort by 절은 Hive 테이블의 열 이름에 대해 수행되어 출력을 정렬합니다. 내림차순으로 정렬하려면 DESC를 언급하고, 정렬의 오름차순으로 정렬하려면 ASC를 언급할 수 있습니다.
이 정렬에서는 감속기에 공급하기 전에 행을 정렬합니다. 항상 정렬 기준은 열 유형에 따라 다릅니다.
예를 들어, 열 유형이 숫자인 경우 열 유형이 문자열인 경우 사전순으로 정렬됩니다.
위의 화면 샷에서 다음 사항을 확인할 수 있습니다.
- SORT BY 컬럼 이름을 정의하여 "id"를 갖는 SORT BY 절을 사용하여 "employees_guru" 테이블에 대해 수행하는 쿼리입니다. DESC라는 키워드를 사용했습니다.
- 따라서 출력은 "id"의 내림차순으로 표시됩니다.
검색어 :
SELECT * from employees_guru SORT BY Id DESC;
Cluster By
Cluster Hive-QL의 Distribute BY 및 Sort BY 절에 대한 대안으로 사용됩니다.
Cluster Hive에 있는 테이블에 사용되는 BY 절입니다. Hive는 다음의 열을 사용합니다. Cluster 리듀서들 사이에 행을 분배합니다. Cluster BY 열은 여러 감속기로 이동합니다.
- 여러 감속기에 있는 값의 정렬 순서를 보장합니다.
예를 들어, Cluster Employees_guru 테이블의 Id 열 이름에 언급된 By 절입니다. 이 쿼리를 실행할 때의 출력은 백엔드에 있는 여러 감속기에 결과를 제공합니다. 그러나 프런트 엔드에서는 Sort By와 Distribute By 모두에 대한 대체 조항입니다.
이것은 실제로 Map reduce 프레임워크의 관점에서 정렬 기준, 그룹 기준 및 클러스터 기준으로 쿼리를 수행할 때의 백엔드 프로세스입니다. 따라서 결과를 여러 개의 리듀서에 저장하려면 다음을 사용합니다. Cluster 으로.
위의 스크린샷에서 우리는 다음과 같은 관찰 결과를 얻을 수 있습니다.
- ID 필드 값에 CLUSTER BY 절을 수행하는 쿼리입니다. 여기서는 ID 값에 대한 정렬을 수행합니다.
- guru_employees 정렬에 있는 ID와 이름을 다음과 같이 표시합니다.
검색어 :
SELECT Id, Name from employees_guru CLUSTER BY Id;
배포 기준
Hive에 있는 테이블에 사용되는 BY 절을 배포합니다. Hive는 배포 기준의 열을 사용하여 리듀서 간에 행을 배포합니다. 모든 Distribute BY 열은 동일한 감속기로 이동합니다.
- N개의 감속기 각각이 겹치지 않는 열 범위를 얻도록 보장합니다.
- 각 감속기의 출력을 정렬하지 않습니다.
위의 스크린샷에서 우리는 다음을 관찰할 수 있습니다.
- "empoloyees_guru" 테이블의 ID에 대해 수행되는 DISTRIBUTE BY 절
- ID, 이름을 보여주는 출력. 백엔드에서는 동일한 리듀서로 이동합니다.
검색어 :
SELECT Id, Name from employees_guru DISTRIBUTE BY Id;