Hadoop EcoSystem

[Hive] 테이블 - 스큐 (SKEW)

비번변경 2024. 2. 7. 17:09

개요

2024.01.19 - [Hive] 테이블 - 파티션, 2024.02.02 - [Hive] 테이블 - 버켓팅 (bucketing)에 이어서 이번 글에서는 Hive 테이블의 스큐 (SKEW)에 대한 부분을 알아보려고 한다.

 

 

스큐 (SKEW)

스큐란 컬럼에 특정 데이터가 빈번하게 저장되는 경우 분리해서 저장하는 기능이다.

데이터를 디렉터리에 나눠서 저장하는 파티션과 비슷하지만, 파티션이 데이터를 크게 구분하는 용도로 사용한다면 스큐는 컬럼의 데이터를 구분할 때 사용한다.

스큐는 하나의 컬럼의 값이 특정 값에 몰려있을 때 유용하다. 예로 들어 num 컬럼에는 1부터 1000까지의 데이터가 저장되는데 주로 1, 2가 저장된다고 하자. 이 테이블을 파티셔닝하면 num=1, num=2, … , num=1000이라는 경로로 총 1000개의 디렉터리에 데이터가 나뉘어 저장된다. 반면 스큐를 사용하면 num=1, num=2, 외 기본 디렉터리까지 해서 총 3개의 디렉터리나 파일에 데이터가 나뉘어 저장된다.

 

 

테이블 스큐 설정 

테이블에 스큐 설정을 할 때는 SKEWED BY ~ ON 절을 사용한다. 기준이 되는 컬럼과 그 값을 지정하면 된다.

기본적으로 디렉터리 구분 없이 파일을 구분하여 저장한다. 만약 디렉터리를 나눠서 저장하고 싶다면 STORED AS DIRECTORIES라는 절을 포함하면 된다.

CREATE TABLE skewed_table (
  col1 STRING,
  col2 STRING
) SKEWED BY (col2) ON ('1')
STORED AS DIRECTORIES
LOCATION '/user/skewed_table/';

위의 DDL은 col2이라는 컬럼의 값이 1, 그리고 그 외 값일 때를 디렉터리 기준으로 나눠서 저장하는 예제이다.

 

 

 

참고 문서

https://wikidocs.net/23469#_5

https://wikidocs.net/23559

https://spidyweb.tistory.com/290