1. 파티션 테이블이란?
테이블의 데이터를 일정한 기준에 따라 분할하여 저장하는 방법
아래 사진 처럼 기존 테이블을 일정한 기준으로 나누어 분할하여 저장하는 것이다. (아래의 경우 월 단위로 Partition 한 경우)
2. 파티션을 사용하는 이유**
제일 쉽게 이해할 수 있도록 동일한 쿼리를 실제 파티션 여부에 따라서 성능 비교했던 사진을 들고왔다.
1) 파티션 나누기 전
읽은 레코드가 19만개로, 전체 데이터를 긁어온 것을 확인할 수 있다.
2) 파티션을 나눈 후
읽은 레코드 자체가 1/3로 줄어든 것을 확인할 수 있다.
즉, 파티션이 없으면 Where 절을 걸어도 풀스캐닝이 들어간 후 SELECT해오지만, Partition 테이블에서는 Partition이 된 부분에서만 스캐닝이 들어가기 때문에 성능적으로 월등히 좋다.
특히 게임 같이 방대한 로그를 다룰 때, 전체 로그에서 최근 데이터를 긁어오는 것보다 최근 데이터에서 최근 데이터를 긁어오는 것이 훨씬 가성비가 넘치기 때문에 꼭 알아두어야한다.
그렇다고 파티션 설정 방법이 어려울까? 전혀 어렵지 않다. 오히려 진짜 너무 쉽다.
3. 파티션 설정 방법
1) 테이블 생성 시 파티션 설정 (SQL ver)
CREATE TABLE dataset_name.table_name
(
column1 data_type,
column2 data_type,
...
partition_column data_type
)
PARTITION BY partition_column --파티션의 기준이 되는 컬럼 이름
OPTIONS (
partition_expiration_days = expiration_days, -- 파티션의 만료 일수 숫자로 적어주면 된다. ex.60 (해당 파티션의 데이터가 자동으로 삭제)
description = 'table_description'
);
예를 들어 만약 내가 월 단위로 파티션을 설정하고 싶다면, PARTITION BY 쪽에 아래와 같이 변경해주면 된다.
PARTITION BY DATE_TRUNC(date_column, MONTH)
2) 기존 테이블을 파티션 테이블로 변환 (SQL ver)
CREATE OR REPLACE TABLE dataset_name.table_name
PARTITION BY partition_column
OPTIONS (
partition_expiration_days = expiration_days,
description = 'table_description'
)
AS
SELECT *
FROM dataset_name.existing_table;
3) GCP GUI로 변경
1.테이블을 만들고 싶은 데이터셋에서 테이블 만들기 누르기
2.그럼 아래와 같이 파티션 나누기 없음으로 설정되어 있음을 확인할 수 있는데,
3.스키마를 입력해주지 않으면 날짜별로만 설정할 수 있고, 스키마를 입력해주면 스키마에서 파티션 설정이 가능하다.
파티션 나누기 필터에 설정을 해주면 where절이 무조건 필요함! 따라서 이부분은 선택에 맡기면된다.
4. 테이블 파티션 확인 방법
- 테이블을 클릭해서 세부정보에 들어가면, 아래와 같이 파티션 정보가 뜬다.
5. 파티션 테이블 확인
- 위에서 보면, part_ccu_log라는 테이블을 ccu_Time, MONTH 기준으로 파티션 나눔이 되어있다.
따라서 where 절에서 DATE(ccu_time) ='2023-08-18' 이런식으로 사용해주면, ccu_time이 8월인 파티션 테이블에서만 스캐닝해오는 것이다.
이론과 실전 모두 너무쉽지만 복덩이 같은 Bigquery의 Table Partition 기능은 꼭 알아두도록 하자!
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/006.gif)
'데이터베이스 > 데이터베이스' 카테고리의 다른 글
[SSMS] SQL Server Management Studio 에서 CSV로 테이블 만들기 (0) | 2024.07.01 |
---|---|
[Lock] MSSQL의 Lock과 트랜잭션 격리 개념 (1) | 2023.12.28 |
[ SQL Server] SQL Server Agent를 이용해 Daily Job을 생성해보자 (0) | 2023.12.12 |
[Bigquery] GCS를 활용한 대용량 쿼리 데이터 다운로드 (0) | 2023.11.28 |
[Bigquery] 퇴근시간을 땡겨주는 빅쿼리 단축키 모음 (0) | 2023.08.24 |
댓글