예시가 포함된 Hive 파티션 및 버킷

테이블, 파티션 및 버킷은 Hive 데이터 모델링의 일부입니다.

파티션이란 무엇입니까?

Hive 파티션은 파티션 키를 기준으로 테이블을 여러 부분으로 나누어 테이블을 파티션으로 구성하는 방법입니다.

파티션은 테이블에 하나 이상의 파티션 키가 있는 경우 유용합니다. 파티션 키는 데이터가 테이블에 저장되는 방식을 결정하는 기본 요소입니다.

예를 들면: -

"인도 운영에 속하는 일부 전자상거래 데이터를 보유한 클라이언트는 각 주(38개 주)의 운영이 전체적으로 언급됩니다. 주 열을 파티션 키로 사용하여 해당 인도 데이터에 대한 파티션을 전체적으로 수행하면 인도에 있는 주 수(38)와 동일한 파티션 수(38개 파티션)를 얻을 수 있습니다. 각 주 데이터는 파티션 테이블에서 별도로 볼 수 있습니다.

파티션용 샘플 코드 조각

  1. 모든 상태 테이블 생성
create table all states(state string, District string,Enrolments string)

row format delimited

fields terminated by ',';
  1. 생성된 테이블의 모든 상태에 데이터 로드
Load data local inpath '/home/hduser/Desktop/AllStates.csv' into table allstates;
  1. 파티션 테이블 생성
create table state_part(District string,Enrolments string) PARTITIONED BY(state string);
  1. 파티션의 경우 이 속성을 설정해야 합니다.
    set hive.exec.dynamic.partition.mode=nonstrict
  2. 파티션 테이블에 데이터 로드
INSERT OVERWRITE TABLE state_part PARTITION(state)
SELECT district,enrolments,state from  allstates;
  1. 상태를 파티션 키로 하여 실제 처리 및 파티션 테이블 형성
  2. HDFS 저장소에는 파일 이름이 상태 이름인 38개의 파티션 출력이 있습니다. 이 단계에서 이를 확인하겠습니다.

다음 화면 샷은 위에 언급된 코드의 실행을 보여줍니다.

하이브 파티션

하이브 파티션

하이브 파티션

하이브 파티션

위의 코드에서 우리는 다음과 같은 일을 합니다.

  1. 주, 지역, 등록 등 3개의 열 이름을 갖는 모든 주 테이블 생성
  2. 모든 상태 테이블에 데이터 로드
  3. 상태를 파티션 키로 사용하여 파티션 테이블 생성
  4. 이 단계에서는 파티션 모드를 비엄격으로 설정합니다(이 모드는 동적 파티션 모드를 활성화합니다).
  5. tablestate_part 파티션에 데이터 로드
  6. 상태를 파티션 키로 하여 실제 처리 및 파티션 테이블 형성
  7. HDFS 스토리지에는 파일 이름을 상태 이름으로 사용하여 38개의 파티션 출력이 있습니다. 이번 단계에서는 이를 확인해 보겠습니다. 이 단계에서는 HDFS의 38개 파티션 출력을 확인합니다.

버킷이란 무엇입니까?

하이브의 버킷은 하이브 테이블 데이터를 여러 파일이나 디렉터리로 분리하는 데 사용됩니다. 효율적인 쿼리에 사용됩니다.

  • 즉, 파티션에 존재하는 데이터는 버킷으로 더 나눌 수 있습니다.
  • 분할은 테이블에서 선택한 특정 열의 해시를 기반으로 수행됩니다.
  • 버킷은 백엔드에서 특정 형태의 해싱 알고리즘을 사용하여 각 레코드를 읽고 버킷에 배치합니다.
  • Hive에서는 다음을 사용하여 버킷을 활성화해야 합니다. set.hive.enforce.bucketing=true;

단계 1) 아래와 같이 Bucket을 생성합니다.

하이브 버킷

위 스크린샷에서

  • first_name, job_id, 부서, 급여 및 국가와 같은 열 이름으로 Sample_bucket을 생성합니다.
  • 여기에 4개의 버킷을 생성하고 있습니다.
  • 데이터가 자동으로 로드되면 데이터를 4개의 버킷에 저장합니다.

단계 2) 테이블 샘플 버킷에 데이터 로드

"Employees 테이블"이 이미 Hive 시스템에 생성되었다고 가정합니다. 이 단계에서는 직원 테이블의 데이터를 테이블 샘플 버킷으로 로드하는 것을 살펴보겠습니다.

직원 데이터를 버킷으로 이동하기 전에 first_name, job_id, 부서, 급여, 국가와 같은 열 이름으로 구성되어 있는지 확인하세요.

여기서는 직원 테이블의 샘플 버킷에 데이터를 로드합니다.

하이브 버킷

단계 3)4단계에서 생성된 버킷 1개 표시

하이브 버킷

위 스크린샷에서 직원 테이블의 데이터가 4단계에서 생성된 1개의 버킷으로 전송되는 것을 볼 수 있습니다.