🖥️ IT, 컴퓨터/🏁 SQL・빅쿼리

[BigQuery] 빅쿼리 파티셔닝(Partitioning) vs. 샤딩(Sharding)

김 홍시 2024. 6. 20.
반응형

BigQuery에서 데이터 관리를 최적화하기 위해 사용하는 두 가지 중요한 개념은 샤딩(Sharding)파티셔닝(Partitioning)입니다. 이 두 개념은 데이터베이스 성능을 향상시키고, 쿼리 비용을 절감하며, 데이터 관리를 용이하게 합니다. 아래에서 각각의 개념에 대해 자세히 설명하겠습니다.

파티셔닝(Partitioning)

파티셔닝은 큰 테이블을 더 작은 부분으로 나누는 방법으로, 쿼리 성능을 최적화하고 비용을 절감할 수 있습니다. BigQuery에서는 주로 타임 파티셔닝인테저 범위 파티셔닝을 사용합니다.

  1. 타임 파티셔닝(Time Partitioning):

    • 타임스탬프 열 기반: 테이블을 타임스탬프나 날짜 열을 기준으로 일(day), 월(month), 연도(year) 단위로 분할합니다.
    • 자동 파티셔닝: BigQuery가 데이터를 날짜나 타임스탬프 기준으로 자동으로 파티셔닝합니다.
    CREATE TABLE my_dataset.my_table
    (
      event_date DATE,
      event_name STRING
    )
    PARTITION BY event_date;
  2. 인테저 범위 파티셔닝(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)

샤딩은 데이터가 너무 커서 단일 테이블로 관리하기 어려울 때 여러 테이블로 데이터를 분할하는 방법입니다. 흔히 테이블 이름에 날짜나 특정 식별자를 포함시켜 여러 테이블로 나누는 방식으로 이루어집니다.

  1. 수동 샤딩(Manual Sharding):

    • 테이블 이름에 날짜나 식별자를 포함하여 데이터 분할. 예를 들어, sales_20230101, sales_20230102와 같은 테이블을 생성합니다.
    • 각 샤드(shard)는 논리적으로 동일한 구조를 가지며, 샤드 집합을 쿼리할 때는 와일드카드 테이블을 사용합니다.
    SELECT *
    FROM `my_project.my_dataset.sales_*`
    WHERE _TABLE_SUFFIX BETWEEN '20230101' AND '20230131';

비교와 선택

  • 파티셔닝:

    • 데이터를 하나의 테이블로 유지하면서 성능 최적화를 위한 내부 분할을 제공합니다.
    • 쿼리 시 특정 파티션만 읽기 때문에 성능 향상 및 비용 절감 효과가 있습니다.
    • 관리가 용이하며, 데이터 삽입 및 삭제 작업이 상대적으로 간단합니다.
  • 샤딩:

    • 데이터를 여러 테이블로 나누어 관리합니다.
    • 매우 큰 데이터 세트에 대해 수평적 확장이 필요할 때 유용합니다.
    • 관리가 복잡해질 수 있으며, 여러 테이블을 동시에 쿼리할 때는 추가적인 작업이 필요합니다.

요약

  • 파티셔닝은 큰 테이블을 내부적으로 분할하여 성능을 최적화하는 방법입니다. 주로 타임스탬프나 정수 열을 기준으로 합니다.
  • 샤딩은 데이터를 여러 테이블로 분할하는 방법입니다. 주로 매우 큰 데이터 세트를 관리할 때 사용됩니다.

두 방법을 적절히 사용하면 BigQuery의 성능을 극대화하고, 비용을 절감하며, 데이터 관리를 용이하게 할 수 있습니다. 특정 상황에 맞는 최적의 방법을 선택하는 것이 중요합니다.

반응형

댓글