DATE, DATETIME, TIMESTAMP 데이터타입의 컬럼으로 파티션을 생성, 추가, 삭제 하는 예제입니다.

 

 

파티션테이블 생성

1) DATE, DATETIME 컬럼으로 파티션

아래는 월별 파티션 예제입니다.

1-1) TO_DAYS 함수 사용

CREATE TABLE sales (
    sale_id INT NOT NULL,
    sale_date DATE NOT NULL,
    customer_id INT NOT NULL,
    amount DECIMAL(10,2),
    PRIMARY KEY (sale_id, sale_date)
)
PARTITION BY RANGE (TO_DAYS(sale_date)) (
    PARTITION p_2024_01 VALUES LESS THAN (TO_DAYS('2024-02-01')),
    PARTITION p_2024_02 VALUES LESS THAN (TO_DAYS('2024-03-01')),
    PARTITION p_2024_03 VALUES LESS THAN (TO_DAYS('2024-04-01')),
    PARTITION p_2024_04 VALUES LESS THAN (TO_DAYS('2024-05-01')),
    PARTITION p_maxvalue VALUES LESS THAN MAXVALUE
);

Range 파티션은 값으로 int 형 데이터가 와야 하기 때문에 TO_DAYS 함수를 사용.

 

설명:

  • TO_DAYS(sale_date) 함수는 분할을 위해 날짜를 숫자 값으로 변환
  • 각 파티션은 특정 월(예: 2024년 1월, 2024년 2월 등)을 기준으로 정의
  • p_maxvalue 파티션은 2024년 4월보다 큰 모든 데이터를 적재

 

✔ TO_DAYS 함수를 사용하는 이유 : Range 파티션은 값으로 int 형 데이터가 와야 하기 때문

 

1-2) 날짜형식의 String으로 사용

DATE 또는 DATETIME 열을 분할 열로 사용하여 RANGE COLUMNS로 테이블을 분할합니다. 

CREATE TABLE sales_1 (
    sale_id INT NOT NULL,
    sale_date DATE NOT NULL,
    customer_id INT NOT NULL,
    amount DECIMAL(10,2),
    PRIMARY KEY (sale_id, sale_date)
)
PARTITION BY RANGE COLUMNS(sale_date) (
    PARTITION p_2024_01 VALUES LESS THAN ('2024-02-01'),
    PARTITION p_2024_02 VALUES LESS THAN ('2024-03-01'),
    PARTITION p_2024_03 VALUES LESS THAN ('2024-04-01'),
    PARTITION p_2024_04 VALUES LESS THAN ('2024-05-01'),
    PARTITION p_maxvalue VALUES LESS THAN MAXVALUE
);

 

2) TIMESTAMP 컬럼으로 파티션

UNIX_TIMESTAMP() 함수를 사용해서 파티셔닝 한다.

MySQL 8.4에서는 UNIX_TIMESTAMP() 함수를 사용하여 TIMESTAMP 열의 값을 기준으로 RANGE로 테이블을 분할할 수 있다.

CREATE TABLE quarterly_report_status (
    report_id INT NOT NULL,
    report_status VARCHAR(20) NOT NULL,
    report_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)
PARTITION BY RANGE ( UNIX_TIMESTAMP(report_updated) ) (
    PARTITION p5 VALUES LESS THAN ( UNIX_TIMESTAMP('2009-04-01 00:00:00') ),
    PARTITION p6 VALUES LESS THAN ( UNIX_TIMESTAMP('2009-07-01 00:00:00') ),
    PARTITION p7 VALUES LESS THAN ( UNIX_TIMESTAMP('2009-10-01 00:00:00') ),
    PARTITION p8 VALUES LESS THAN ( UNIX_TIMESTAMP('2010-01-01 00:00:00') ),
    PARTITION p9 VALUES LESS THAN (MAXVALUE)
);

 

 

파티션 추가

1) 파티션 테이블이 MAXVALUE로 구성되어 있는 경우에는 REORGANIXE PRTITION 명령어로 기존 MAXVALUE 파티션을 나눈다.

ALTER TABLE sales REORGANIZE PARTITION p_maxvalue INTO(
    PARTITION p_2024_05 VALUES LESS THAN (TO_DAYS('2024-06-01')),
    PARTITION p_maxvalue VALUES LESS THAN MAXVALUE);

 

2) 파티션 테이블이 MAXVALUE로 구성되어 있지 않은 경우에는 ADD PRTITION 명령어로 파티션을 추가한다.

ALTER TABLE sales ADD PARTITION (
    PARTITION p_2024_05 VALUES LESS THAN (TO_DAYS('2024-06-01'))
);

 

파티션 삭제

삭제하고자 하는 파티션을 DROP PARTITION 명령어로 삭제한다. 아래는 p_2024_01 파티션을 삭제하는 예제이다.

ALTER TABLE sales DROP PARTITION p_2024_01;

 

+ Recent posts