pyspark - DPP(Dynamic Partition Pruning)

박성현·2024년 6월 29일

pySpark

목록 보기
17/17

뭐 아래와 같이 ... 기술적으로 뭔가 좋아 보이긴 하지만
기본 RDB 쿼리 튜닝할때 처럼 조인 되는 subQuery로 기간 및 조건 으로 줄여서 조인하는하는거랑 비슷해 보이는듯 ?
마스터 테이블에 파티션닝도 미리 되어 있어야 하고 ..

Spark DPP(Dynamic Partition Pruning)

Apache Spark 3.0에서 도입된 쿼리 최적화 기능으로, 특히 스타 스키마 쿼리(Star Schema Query)에서 불필요한 데이터 스캔을 줄여 성능을 향상시키는 데 효과적입니다.

핵심 원리:

브로드캐스트 해싱:

작은 크기의 디멘션 테이블을 모든 익스큐터(Executor)에 브로드캐스트(Broadcast)합니다.

동적 필터 생성:

브로드캐스트된 디멘션 테이블 데이터를 기반으로 팩트 테이블 스캔에 적용할 동적 필터를 생성합니다.

파티션 프루닝:

동적 필터를 사용하여 팩트 테이블의 관련 없는 파티션을 스캔하지 않고 건너뜁니다.

장점:

성능 향상:

불필요한 데이터 스캔을 줄여 쿼리 실행 시간을 단축합니다.

리소스 절약:

스캔해야 할 데이터 양이 줄어들어 CPU, 메모리, I/O 등 리소스 사용량을 줄입니다.

적용 조건:

스타 스키마:

팩트 테이블과 여러 개의 디멘션 테이블로 구성된 스타 스키마 형태의 데이터 모델에 효과적입니다.

조인 조건:

  • 팩트 테이블과 디멘션 테이블 간의 조인 조건이 파티션 필터링에 적합해야 합니다.
  • 디멘션 테이블이 브로드캐스트 해시 조인(Broadcast Hash Join) 방식으로 조인되어야 합니다.

Spark 버전:

Spark 3.0 이상에서 사용 가능합니다.

예시

SELECT *
FROM orders
JOIN customers ON orders.customer_id = customers.customer_id
WHERE customers.country = 'USA'

위 쿼리에서 customers 테이블이 작고 country 열로 파티셔닝되어 있다면,
DPP를 통해 customers.country = 'USA' 조건을 만족하는 파티션만 스캔하여 orders 테이블의 불필요한 스캔을 방지할 수 있습니다.

브로드캐스트 해시 조인 힌트:

쿼리 힌트(Query Hint)를 사용하여 특정 테이블을 브로드캐스트 해시 조인으로 조인하도록 Spark 쿼리 플래너에게 지시할 수 있습니다. 예를 들어, 다음과 같이 /+ BROADCAST(products) / 힌트를 사용하여 products 테이블을 브로드캐스트 해시 조인으로 조인하도록 지정할 수 있습니다.

profile
다소Good한 데이터 엔지니어

0개의 댓글