반응형
BigQuery에서 데이터 관리를 최적화하기 위해 사용하는 두 가지 중요한 개념은 샤딩(Sharding)과 파티셔닝(Partitioning)입니다. 이 두 개념은 데이터베이스 성능을 향상시키고, 쿼리 비용을 절감하며, 데이터 관리를 용이하게 합니다. 아래에서 각각의 개념에 대해 자세히 설명하겠습니다.
파티셔닝(Partitioning)
파티셔닝은 큰 테이블을 더 작은 부분으로 나누는 방법으로, 쿼리 성능을 최적화하고 비용을 절감할 수 있습니다. BigQuery에서는 주로 타임 파티셔닝과 인테저 범위 파티셔닝을 사용합니다.
타임 파티셔닝(Time Partitioning):
- 타임스탬프 열 기반: 테이블을 타임스탬프나 날짜 열을 기준으로 일(day), 월(month), 연도(year) 단위로 분할합니다.
- 자동 파티셔닝: BigQuery가 데이터를 날짜나 타임스탬프 기준으로 자동으로 파티셔닝합니다.
CREATE TABLE my_dataset.my_table ( event_date DATE, event_name STRING ) PARTITION BY event_date;
인테저 범위 파티셔닝(Integer Range Partitioning):
- 특정 정수 열을 기준으로 테이블을 분할합니다. 예를 들어, ID 범위에 따라 데이터를 파티셔닝할 수 있습니다.
CREATE TABLE my_dataset.my_table ( user_id INT64, event_name STRING ) PARTITION BY RANGE_BUCKET(user_id, GENERATE_ARRAY(1, 100, 10));
샤딩(Sharding)
샤딩은 데이터가 너무 커서 단일 테이블로 관리하기 어려울 때 여러 테이블로 데이터를 분할하는 방법입니다. 흔히 테이블 이름에 날짜나 특정 식별자를 포함시켜 여러 테이블로 나누는 방식으로 이루어집니다.
수동 샤딩(Manual Sharding):
- 테이블 이름에 날짜나 식별자를 포함하여 데이터 분할. 예를 들어,
sales_20230101
,sales_20230102
와 같은 테이블을 생성합니다. - 각 샤드(shard)는 논리적으로 동일한 구조를 가지며, 샤드 집합을 쿼리할 때는 와일드카드 테이블을 사용합니다.
SELECT * FROM `my_project.my_dataset.sales_*` WHERE _TABLE_SUFFIX BETWEEN '20230101' AND '20230131';
- 테이블 이름에 날짜나 식별자를 포함하여 데이터 분할. 예를 들어,
비교와 선택
파티셔닝:
- 데이터를 하나의 테이블로 유지하면서 성능 최적화를 위한 내부 분할을 제공합니다.
- 쿼리 시 특정 파티션만 읽기 때문에 성능 향상 및 비용 절감 효과가 있습니다.
- 관리가 용이하며, 데이터 삽입 및 삭제 작업이 상대적으로 간단합니다.
샤딩:
- 데이터를 여러 테이블로 나누어 관리합니다.
- 매우 큰 데이터 세트에 대해 수평적 확장이 필요할 때 유용합니다.
- 관리가 복잡해질 수 있으며, 여러 테이블을 동시에 쿼리할 때는 추가적인 작업이 필요합니다.
요약
- 파티셔닝은 큰 테이블을 내부적으로 분할하여 성능을 최적화하는 방법입니다. 주로 타임스탬프나 정수 열을 기준으로 합니다.
- 샤딩은 데이터를 여러 테이블로 분할하는 방법입니다. 주로 매우 큰 데이터 세트를 관리할 때 사용됩니다.
두 방법을 적절히 사용하면 BigQuery의 성능을 극대화하고, 비용을 절감하며, 데이터 관리를 용이하게 할 수 있습니다. 특정 상황에 맞는 최적의 방법을 선택하는 것이 중요합니다.
반응형
'🖥️ IT, 컴퓨터 > 🏁 SQL・빅쿼리' 카테고리의 다른 글
[BigQuery] 빅쿼리의 Geography 데이터 타입 (0) | 2024.06.20 |
---|---|
[BigQuery] 빅쿼리 별표 와일드카드 역할 (0) | 2024.06.20 |
[BigQuery] 빅쿼리 지리함수 documentation (0) | 2024.06.20 |
[BigQuery] 빅쿼리 파티션 테이블이란? 생성법, 장점, 활용법 (1) | 2024.05.26 |
[BigQueary] 빅쿼리에서 DATE_TRUNC로 날짜 반올림하기 (0) | 2024.05.26 |
댓글