DB/PostgreSQL

수동으로 데이터 재분배

박쿠리 2024. 8. 6. 23:07

수동으로 데이터를 재분배하는 방법

 

1. 가상의 분할 키 생성

임시적으로 데이터를 고르게 분배하기 위해 가상의 분할 키를 생성한다. 이 키는 실제로 사용되지 않으며, 데이터가 고르게 분포되도록 하는 역할만 한다.

데이터베이스 시스템에서는 해시 함수나 row number를 사용하여 임시 분할 키를 생성할 수 있다.

 

2. 새로운 테이블 생성

기존 테이블 구조를 복사하고 임시 분할 키를 추가하여 새로운 테이블을 생성한다. 여기서 ROW_NUMBER() 함수를 사용하여 각 행에 고유한 번호를 부여하고, 이를 세그먼트 개수로 나눈 나머지를 임시 분할 키로 설정한다.

 

-- 기존 테이블 구조를 복사하고 임시 분할 키 추가
CREATE TABLE my_table_temp AS 
SELECT *, 
       (ROW_NUMBER() OVER ()) % <총_세그먼트_수> AS distribute_key
FROM my_table
DISTRIBUTED BY (distribute_key);

 

여기서 <총_세그먼트_수>는 클러스터의 세그먼트 개수로 대체한다. 예를 들어, 세그먼트가 8개라면 8로 대체한다.

 

3. 데이터 이동

기존 테이블의 데이터를 새로운 테이블로 이동한다. 이 과정에서 임시 분할 키를 사용하여 데이터를 고르게 분배한다.

 

-- 데이터 이동
INSERT INTO my_table_temp 
SELECT *, 
       (ROW_NUMBER() OVER ()) % <총_세그먼트_수> AS distribute_key
FROM my_table;

 

4. 기존 테이블 대체

기존 테이블을 삭제하거나 이름을 변경한 후, 새로운 테이블의 이름을 기존 테이블 이름으로 변경한다.

 

-- 기존 테이블 이름 변경
ALTER TABLE my_table RENAME TO my_table_old;

-- 새로운 테이블 이름 변경
ALTER TABLE my_table_temp RENAME TO my_table;

-- 필요시 기존 테이블 삭제
DROP TABLE my_table_old;

 

데이터 분포 확인

데이터가 고르게 분포되었는지 확인한다.

 

-- 데이터 분포 확인
SELECT gp_segment_id, COUNT(*) AS row_count
FROM my_table
GROUP BY gp_segment_id
ORDER BY row_count DESC;
반응형

'DB > PostgreSQL' 카테고리의 다른 글

PostgreSQL 로그인 권한 - 연결 실패  (0) 2024.08.31
쿼리 튜닝용 파라미터  (0) 2024.08.24
CPU Skew  (1) 2024.08.06
GPDB -> HDFS -> GPDB 로드  (0) 2024.08.05
Greenplum PXF  (0) 2024.08.05