# 파티션
BigQuery는 컬럼 기반 데이터 웨어하우스로, 쿼리에서 탐색하는 용량에 비례해 비용이 부과됩니다.
비용을 줄일고, 데이터를 잘 관리하기 위해 파티션으로 나뉜 테이블을 사용하게 됩니다.
파티션을 추가하는 경우 장점
- Query 탐색 범위를 줄입니다(=쿼리 탐색 비용 감소)
- BigQuery는 쿼리가 데이터를 탐색하는 양만큼 비용을 부과합니다
- 파티션이 걸린 경우 해당 파티션 범위만 탐색하기 때문에 비용이 덜 부과될 수 있습니다
- 쿼리 속도가 빨라짐(=쿼리 성능 증가)
- BigQuery에서 데이터의 양에 따라 쿼리 소요 시간이 달라집니다
- 데이터의 양이 적으면 더 빠르게 결과가 나타납니다
Partition 나누는 기준
- Ingestion time(수집 시간) : 데이터 수집(로드) 날짜를 기준으로 파티션 나눔
- DATE/TIMESTAMP : Date나 Timestamp로 파티션을 나눔
- Integer(정수 범위) : 정수 값을 기준으로 파티션을 나눔
# 파티션으로 분할된 테이블
웹 콘솔에서 파티션으로 분할된 테이블을 만들려면 데이터셋을 클릭한 후, 테이블 만들기
를 눌러주세요.
![](https://www.dropbox.com/s/qbdhjnpr6ycry58/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202021-07-11%20%EC%98%A4%ED%9B%84%2010.33.49.png?raw=1)
date_kr, user_id, sign_up_at 3가지 컬럼 모두 파티션을 설정할 수 있습니다
- date_kr : DATE 타입으로 일자별, 월별, 연도별
- user_id : INT 타입으로 정수 파티션 설정
- sign_up_at : TIMESTAMP 타입으로 일자별, 시간대별, 월별, 연도별
파티션 필터 필요
를 체크하면 WHERE 조건에 파티션 조건이 없다면 에러 메세지를 발생합니다. 반드시 파티션이 필요할 경우 설정해줍니다(주로 용량이 매우 큰 테이블인 경우)
이제 파티션으로 나뉜 테이블을 클릭 후, 세부정보를 확인하면 다음과 같습니다
![](https://www.dropbox.com/s/0jr0emlu0o60tj4/%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%202021-07-11%20%EC%98%A4%ED%9B%84%2010.39.01.png?raw=1)
파티션으로 분할된 테이블은 분할된 테이블이라는 설명도 나타나고, 아이콘도 미묘하게 다릅니다. 세부정보 하단에 파티션으로 나뉜 테이블인지, 어떤 파티션을 사용했는지가 나타납니다.
# 쿼리문을 사용해 파티션으로 분할된 빈 테이블 생성하기
CREATE TABLE
mydataset.newtable (transaction_id INT64, transaction_date DATE)
PARTITION BY
transaction_date
OPTIONS(
require_partition_filter=true
)
# 쿼리 결과를 바로 파티션으로 분할된 테이블 생성하기
AS로 쿼리문을 나열하면 해당 쿼리를 실행하며 파티션으로 나뉜 테이블을 생성합니다.
CREATE TABLE
mydataset.newtable (transaction_id INT64, transaction_date DATE)
PARTITION BY
transaction_date
AS SELECT transaction_id, transaction_date FROM mydataset.mytable
# 샤딩된 테이블
날짜/타임스탬프로 파티션을 분할한 테이블이 아닌 Table 이름에 suffix를 붙여서 테이블을 샤딩할 수 있습니다
- 예: firebase 데이터가 저장되는 analytics_XXX 데이터셋의 Table들(
analytics_XXX.events_20200211
등)
참고로 날짜/타임스탬프로 파티션을 나눈 테이블이 샤딩된 테이블보다 성능이 뛰어납니다.
샤딩 테이블을 만들 땐 BigQuery가 각 테이블의 스키마 및 메타데이터 복사본을 유지해야 하고, 각 쿼리 대상 테이블의 권한을 확인해야 합니다
따라서 샤딩보다 날짜/타임스탬프로 파티션을 나눈 테이블 사용하는 것이 좋습니다. 샤딩된 테이블은 쿼리시 최대 1,000개의 테이블만 참조할 수 있고, 날짜/타임스탬프로 파티션을 나눈 테이블은 최대 4,000개의 파티션을 가질 수 있습니다.
더 자세한 내용이 궁금한 경우 BigQuery non-partition Table을 partition Table로 옮기기 (opens new window)을 참고해주세요
← 사용자 정의 함수(UDF) 데이터 추출 →