본문 바로가기

[Google]/[BQ] BigQuery

[BQ] BigQuery partition

728x90
반응형

partition? cluster?

파티셔닝(partitioning)과 클러스터링(clustering)은 성능을 높여 쿼리 비용을 최소화하는 기술이다.

더 적은 리소스를 사용하여 속도를 향상시키는 방법이다.

기본적으로 이 두 가지 방법은 쿼리를 실행할 때 스캔(scan)하는 데이터의 양을 제한하는 방법을 이용한다.

 

partition

테이블 파티셔닝은 큰 테이블을 작은 테이블로 분할하는 것이다.

데이터를 개별 chunk 사이즈로 분할

BigQuery의 경우, 서로 다른 파티션을 물리적으로 다른 곳에 저장한다.

테이블을 분할하여 쿼리를 실행할 때 액세스할 파티션을 결정하고, 스캔할 데이터를 최소화한다.

  • Time-unit column(시간 단위 열)
    • timestamp 또는 날짜와 같은 시간 값을 기준으로 테이블 분할
  • Ingestion time(수집 시간)
    • BigQuery가 데이터를 수집할 때 timestamp를 기준으로 분할
  • Integer range(정수 범위)
    • 숫자를 기준으로 테이블 분할

참고) BigQuery는 테이블 당 4,000개의 파티션으로 제한된다.

 

 

  • partition_expiration_days : BigQuery는 파티션이 만료되면 파티션의 데이터를 삭제한다. 이때 지정된 일 수보다 오래된 파티션의 데이터가 삭제됨을 의미한다.
  • require_partition_filter : 사용자가 파티션 키에 대한 필터링(WHERE 절) 없이 쿼리할 수 없음을 의미한다.

 

cluster

클러스터를 사용하면 BigQuery가 유사한 데이터를 더 가까운 곳에 유지하여 쿼리가 더 적은 수의 데이터를 스캔할 수 있도록 할 수 있다.

클러스터링에 포함한 열의 값에 따라 BigQuery는 자동으로 정렬하고, 최적의 저장 블록에 저장도록 한다.

클러스터는 카디널리티(cardinarlity)가 높을 수록 잘 동작한다. 즉 다양한 데이터 종류에 적합하다.

참고) BigQuery는 테이블 당 4개의 클러스터 열로 제한된다.

 

 

파티셔닝과 클러스터링을 잘 활용하기 위해서는 테이블에 들어올 데이터의 특성을 잘 파악해두는 것이 매우 중요하다.

 


Reference

 

반응형

'[Google] > [BQ] BigQuery' 카테고리의 다른 글

[BQ] schema 생성  (0) 2023.07.05
[BQ] BigQuery partition limit  (0) 2023.07.05
[BQ] 쿼리 비용 Tip  (0) 2023.06.21
[BQ] Python에서 BigQuery 실행하기  (0) 2023.04.23
[BigQeury] IFNULL vs. NULLIF  (0) 2023.04.23